diff options
Diffstat (limited to 'accel-pppd')
-rw-r--r-- | accel-pppd/accel-ppp.conf.5 | 4 | ||||
-rw-r--r-- | accel-pppd/ctrl/pppoe/pppoe.c | 11 |
2 files changed, 14 insertions, 1 deletions
diff --git a/accel-pppd/accel-ppp.conf.5 b/accel-pppd/accel-ppp.conf.5 index 880f8224..51612ca9 100644 --- a/accel-pppd/accel-ppp.conf.5 +++ b/accel-pppd/accel-ppp.conf.5 @@ -557,6 +557,10 @@ Specifies Service-Name to respond. If absent any Service-Name is acceptable and If service-name specified still will answer with service names, but accepts any service name in PADR request. Useful for scenarios, where selection of PPPoE done by client, based on service names in PADO. .TP +.BI "accept-blank-service=" n +Allow answering on blank Service-Name even if Service-Name configured. +Useful when needs to allow only Service-Names described in the config and also blank Service-Name. +.TP .BI "pado-delay=" delay[,delay1:count1[,delay2:count2[,...]]] Specifies delays (also in condition of connection count) to send PADO (ms). Last delay in list may be -1 which means don't accept new connections. diff --git a/accel-pppd/ctrl/pppoe/pppoe.c b/accel-pppd/ctrl/pppoe/pppoe.c index 18aac8bd..415dd7c0 100644 --- a/accel-pppd/ctrl/pppoe/pppoe.c +++ b/accel-pppd/ctrl/pppoe/pppoe.c @@ -90,6 +90,7 @@ struct iplink_arg { int conf_verbose; char *conf_service_name[255]; int conf_accept_any_service; +int conf_accept_blank_service; char *conf_ac_name; int conf_ifname_in_sid; char *conf_pado_delay; @@ -1003,7 +1004,11 @@ static void pppoe_recv_PADI(struct pppoe_serv_t *serv, uint8_t *pack, int size) case TAG_END_OF_LIST: break; case TAG_SERVICE_NAME: - if (conf_service_name[0]) { + if (tag->tag_len == 0 && conf_accept_blank_service) { + service_match = 1; + break; + } + else if (conf_service_name[0]) { int svc_index = 0; do { if (ntohs(tag->tag_len) == strlen(conf_service_name[svc_index]) && @@ -1949,6 +1954,10 @@ static void load_config(void) if (opt) conf_accept_any_service = atoi(opt); + opt = conf_get_opt("pppoe", "accept-blank-service"); + if (opt) + conf_accept_blank_service = atoi(opt); + opt = conf_get_opt("pppoe", "ac-name"); if (!opt) opt = conf_get_opt("pppoe", "AC-Name"); |