summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Kozlov <xeb@mail.ru>2018-05-25 10:42:52 +0300
committerDmitry Kozlov <xeb@mail.ru>2018-05-25 10:42:52 +0300
commit8a6ce75bc2d12a2a0479cff5e84c8c5774bc311c (patch)
treea02ef2b25a3594f681f5f6c374f2f6314466a72d
parent969ba07f29a93180a0a8a6e94dc4205a5b6cf531 (diff)
downloadaccel-ppp-xebd-8a6ce75bc2d12a2a0479cff5e84c8c5774bc311c.tar.gz
accel-ppp-xebd-8a6ce75bc2d12a2a0479cff5e84c8c5774bc311c.zip
ipoe: do not wait packet from ipoe kernel module in "shared=0,start=up" mode
ipoe: pass mask to ifcfg in ip unnumbered mode
-rw-r--r--accel-pppd/ctrl/ipoe/ipoe.c20
1 files 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)