diff options
author | Dmitry Kozlov <xeb@mail.ru> | 2010-11-26 00:13:17 +0300 |
---|---|---|
committer | Dmitry Kozlov <xeb@mail.ru> | 2010-11-26 00:13:17 +0300 |
commit | e9e90c526a733048a3f7bf7a0138894774cb3b1a (patch) | |
tree | 680617965849e2a34a7e99e8946a56a4a72c0219 /accel-pptpd | |
parent | 1cf19a1c76a8e13ee60a111fc6d64df3683cd3bc (diff) | |
download | accel-ppp-e9e90c526a733048a3f7bf7a0138894774cb3b1a.tar.gz accel-ppp-e9e90c526a733048a3f7bf7a0138894774cb3b1a.zip |
pppoe: optionaly add interface name to Calling-Station-Id/Called-Station-Id attributes
Diffstat (limited to 'accel-pptpd')
-rw-r--r-- | accel-pptpd/accel-pptp.conf | 1 | ||||
-rw-r--r-- | accel-pptpd/accel-pptp.conf.5 | 3 | ||||
-rw-r--r-- | accel-pptpd/ctrl/pppoe/pppoe.c | 35 |
3 files changed, 33 insertions, 6 deletions
diff --git a/accel-pptpd/accel-pptp.conf b/accel-pptpd/accel-pptp.conf index 83b1b979..7ce85a56 100644 --- a/accel-pptpd/accel-pptp.conf +++ b/accel-pptpd/accel-pptp.conf @@ -39,6 +39,7 @@ interface=eth0 #ac-name=xxx #service-name=yyy #pado-delay=0 +#ifname-in-sid=called-sid verbose=1 [l2tp] diff --git a/accel-pptpd/accel-pptp.conf.5 b/accel-pptpd/accel-pptp.conf.5 index 687ab599..669d5038 100644 --- a/accel-pptpd/accel-pptp.conf.5 +++ b/accel-pptpd/accel-pptp.conf.5 @@ -170,6 +170,9 @@ Specifies mac-filter filename and type, type maybe or .B deny .TP +.BI "ifname-in-sid=" called-sid|calling-sid|both +Specifies that interface name should be present in Called-Station-ID or in Calling-Station-ID or in both attributes. +.TP .BI "verbose=" n If this option is given and .B n diff --git a/accel-pptpd/ctrl/pppoe/pppoe.c b/accel-pptpd/ctrl/pppoe/pppoe.c index 0ff166c3..b369084d 100644 --- a/accel-pptpd/ctrl/pppoe/pppoe.c +++ b/accel-pptpd/ctrl/pppoe/pppoe.c @@ -11,6 +11,7 @@ #include <net/ethernet.h> #include <netpacket/packet.h> #include <arpa/inet.h> +#include <printf.h> #include <openssl/md5.h> @@ -58,6 +59,7 @@ int conf_verbose; char *conf_service_name; char *conf_ac_name; int conf_pado_delay; +int conf_ifname_in_sid; static mempool_t conn_pool; static mempool_t pado_pool; @@ -204,12 +206,22 @@ static struct pppoe_conn_t *allocate_channel(struct pppoe_serv_t *serv, const ui conn->ctrl.max_mtu = MAX_PPPOE_MTU; conn->ctrl.name = "pppoe"; - conn->ctrl.calling_station_id = _malloc(19); - conn->ctrl.called_station_id = _malloc(19); - sprintf(conn->ctrl.calling_station_id, "%02x:%02x:%02x:%02x:%02x:%02x", - addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); - sprintf(conn->ctrl.called_station_id, "%02x:%02x:%02x:%02x:%02x:%02x", - serv->hwaddr[0], serv->hwaddr[1], serv->hwaddr[2], serv->hwaddr[3], serv->hwaddr[4], serv->hwaddr[5]); + conn->ctrl.calling_station_id = _malloc(IFNAMSIZ + 19); + conn->ctrl.called_station_id = _malloc(IFNAMSIZ + 19); + + if (conf_ifname_in_sid == 1 || conf_ifname_in_sid == 3) + sprintf(conn->ctrl.calling_station_id, "%s:%02x:%02x:%02x:%02x:%02x:%02x", serv->ifname, + addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); + else + sprintf(conn->ctrl.calling_station_id, "%02x:%02x:%02x:%02x:%02x:%02x", + addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); + + if (conf_ifname_in_sid == 2 || conf_ifname_in_sid == 3) + sprintf(conn->ctrl.called_station_id, "%s:%02x:%02x:%02x:%02x:%02x:%02x", serv->ifname, + serv->hwaddr[0], serv->hwaddr[1], serv->hwaddr[2], serv->hwaddr[3], serv->hwaddr[4], serv->hwaddr[5]); + else + sprintf(conn->ctrl.called_station_id, "%02x:%02x:%02x:%02x:%02x:%02x", + serv->hwaddr[0], serv->hwaddr[1], serv->hwaddr[2], serv->hwaddr[3], serv->hwaddr[4], serv->hwaddr[5]); ppp_init(&conn->ppp); @@ -1093,6 +1105,17 @@ static void __init pppoe_init(void) } else if (!strcmp(opt->name, "pado-delay") || !strcmp(opt->name, "PADO-delay")) { if (opt->val && atoi(opt->val) > 0) conf_pado_delay = atoi(opt->val); + } else if (!strcmp(opt->name, "ifname-in-sid")) { + if (!opt->val) + continue; + if (!strcmp(opt->val, "called-sid")) + conf_ifname_in_sid = 1; + else if (!strcmp(opt->val, "calling-sid")) + conf_ifname_in_sid = 2; + else if (!strcmp(opt->val, "both")) + conf_ifname_in_sid = 3; + else if (atoi(opt->val) >= 0) + conf_ifname_in_sid = atoi(opt->val); } } |