summaryrefslogtreecommitdiff
path: root/accel-pppd/ctrl/pppoe/pppoe.c
diff options
context:
space:
mode:
authorGavrilenkov A <sasha-dag@yandex.ru>2019-12-24 21:00:09 +0300
committerDmitry Kozlov <xeb@mail.ru>2019-12-24 21:00:09 +0300
commit61862862a9fa24db4f16c24db1aed1f1a5f0be19 (patch)
treef8bd94d62f9d08c5ec973484118d07b76ee862e3 /accel-pppd/ctrl/pppoe/pppoe.c
parent4d837cc3bd92493732f2c598560e9e83c82f9b9e (diff)
downloadaccel-ppp-61862862a9fa24db4f16c24db1aed1f1a5f0be19.tar.gz
accel-ppp-61862862a9fa24db4f16c24db1aed1f1a5f0be19.zip
pppoe: introduced max-starting option (limit number of starting sessions)
Diffstat (limited to 'accel-pppd/ctrl/pppoe/pppoe.c')
-rw-r--r--accel-pppd/ctrl/pppoe/pppoe.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/accel-pppd/ctrl/pppoe/pppoe.c b/accel-pppd/ctrl/pppoe/pppoe.c
index 12b54004..a1f54e71 100644
--- a/accel-pppd/ctrl/pppoe/pppoe.c
+++ b/accel-pppd/ctrl/pppoe/pppoe.c
@@ -87,6 +87,7 @@ struct iplink_arg {
long *arg1;
};
+static int conf_max_starting;
int conf_verbose;
char *conf_service_name[255];
int conf_accept_any_service;
@@ -962,6 +963,13 @@ static void pppoe_recv_PADI(struct pppoe_serv_t *serv, uint8_t *pack, int size)
if (conf_max_sessions && ap_session_stat.active + ap_session_stat.starting >= conf_max_sessions)
return;
+ if (conf_max_starting > 0 && stat_starting >= conf_max_starting) {
+ log_warn("pppoe: Count of starting sessions > conf_max_starting, droping connection...\n");
+ return;
+
+ }
+
+
if (check_padi_limit(serv, ethhdr->h_source)) {
__sync_add_and_fetch(&stat_PADI_drop, 1);
@@ -1922,6 +1930,12 @@ static void load_config(void)
char *opt;
struct conf_sect_t *s = conf_get_section("pppoe");
+ opt = conf_get_opt("pppoe", "max-starting");
+ if (opt)
+ conf_max_starting = atoi(opt);
+ else
+ conf_max_starting = 0;
+
opt = conf_get_opt("pppoe", "verbose");
if (opt)
conf_verbose = atoi(opt);