From 8a6ce75bc2d12a2a0479cff5e84c8c5774bc311c Mon Sep 17 00:00:00 2001 From: Dmitry Kozlov Date: Fri, 25 May 2018 10:42:52 +0300 Subject: ipoe: do not wait packet from ipoe kernel module in "shared=0,start=up" mode ipoe: pass mask to ifcfg in ip unnumbered mode --- accel-pppd/ctrl/ipoe/ipoe.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/accel-pppd/ctrl/ipoe/ipoe.c b/accel-pppd/ctrl/ipoe/ipoe.c index bc7f727..248af30 100644 --- a/accel-pppd/ctrl/ipoe/ipoe.c +++ b/accel-pppd/ctrl/ipoe/ipoe.c @@ -725,7 +725,8 @@ static void find_gw_addr(struct ipoe_session *ses) list_for_each_entry(a, &conf_gw_addr, entry) { if ((ntohl(ses->yiaddr) & (a->mask1)) == (ntohl(a->addr) & (a->mask1))) { ses->router = a->addr; - ses->mask = a->mask; + if (!ses->mask) + ses->mask = a->mask; return; } } @@ -878,11 +879,15 @@ static void __ipoe_session_start(struct ipoe_session *ses) ses->siaddr = ses->router; if (ses->arph) { - ses->wait_start = 1; + if (ses->serv->opt_shared) + ses->wait_start = 1; + send_arp_reply(ses->serv, ses->arph); _free(ses->arph); ses->arph = NULL; - } else { + } + + if (!ses->wait_start) { __ipoe_session_activate(ses); return; } @@ -952,10 +957,9 @@ static void __ipoe_session_activate(struct ipoe_session *ses) ses->ipv4.addr = ses->siaddr; } - if (ses->ifindex == -1) { - if (serv->opt_ifcfg) - ipaddr_add_peer(serv->ifindex, ses->router, ses->yiaddr); - } else + ses->ses.ipv4->mask = conf_ip_unnumbered ? 32 : ses->mask; + + if (ses->ifindex != -1 || serv->opt_ifcfg) ses->ctrl.dont_ifcfg = 0; if (ses->serv->opt_mode == MODE_L2 && ses->serv->opt_ipv6 && sock6_fd != -1) { @@ -975,7 +979,7 @@ static void __ipoe_session_activate(struct ipoe_session *ses) ap_session_activate(&ses->ses); - if (ses->ifindex == -1) { + if (ses->ifindex == -1 && !serv->opt_ifcfg) { if (!conf_ip_unnumbered) iproute_add(serv->ifindex, ses->router, ses->yiaddr, 0, conf_proto, ses->mask, 0); else if (!serv->opt_ifcfg) -- cgit v1.2.3