diff options
author | Dmitry Kozlov <xeb@mail.ru> | 2016-11-29 15:57:49 +0300 |
---|---|---|
committer | Dmitry Kozlov <xeb@mail.ru> | 2016-11-29 15:57:49 +0300 |
commit | 32696e656df7a2bd313799ee31f6ac032708da56 (patch) | |
tree | e6bc1d56a712a4d6f05bf63b332bf96b777cd910 /accel-pppd/ctrl | |
parent | 0a910ec3a70bff46aa5db9ef32f1a69f21e9f999 (diff) | |
download | accel-ppp-32696e656df7a2bd313799ee31f6ac032708da56.tar.gz accel-ppp-32696e656df7a2bd313799ee31f6ac032708da56.zip |
ipoe: add support for peer-to-peer client interfaces
Diffstat (limited to 'accel-pppd/ctrl')
-rw-r--r-- | accel-pppd/ctrl/ipoe/ipoe.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/accel-pppd/ctrl/ipoe/ipoe.c b/accel-pppd/ctrl/ipoe/ipoe.c index d237df8b..821221c3 100644 --- a/accel-pppd/ctrl/ipoe/ipoe.c +++ b/accel-pppd/ctrl/ipoe/ipoe.c @@ -156,6 +156,7 @@ static int conf_proto; static LIST_HEAD(conf_offer_delay); static const char *conf_vlan_name; static int conf_ip_unnumbered; +static int conf_ip_unnumbered_peer_mode; static int conf_check_mac_change; static int conf_soft_terminate; static int conf_calling_sid = SID_MAC; @@ -883,11 +884,15 @@ static void __ipoe_session_activate(struct ipoe_session *ses) if (ses->ifindex == -1) { if (serv->opt_ifcfg) - ipaddr_add(serv->ifindex, ses->router, conf_ip_unnumbered ? 32 : ses->mask); + if(conf_ip_unnumbered && conf_ip_unnumbered_peer_mode) { + ipaddr_add_peer(serv->ifindex, ses->router, 32, ses->yiaddr); + } else { + ipaddr_add(serv->ifindex, ses->router, conf_ip_unnumbered ? 32 : ses->mask); + } else if (!conf_ip_unnumbered) iproute_add(serv->ifindex, ses->router, ses->yiaddr, 0, conf_proto, ses->mask); - if (conf_ip_unnumbered) + if (conf_ip_unnumbered && !conf_ip_unnumbered_peer_mode) iproute_add(serv->ifindex, serv->opt_src ?: ses->router, ses->yiaddr, 0, conf_proto, 32); } else ses->ctrl.dont_ifcfg = 0; @@ -3474,6 +3479,12 @@ static void load_config(void) else conf_ip_unnumbered = 1; + opt = conf_get_opt("ipoe", "ip-unnumbered-peer-mode"); + if (opt) + conf_ip_unnumbered_peer_mode = atoi(opt); + else + conf_ip_unnumbered_peer_mode = 0; + opt = conf_get_opt("ipoe", "idle-timeout"); if (opt) conf_idle_timeout = atoi(opt); |