diff options
author | Dmitry Kozlov <xeb@mail.ru> | 2017-03-27 15:57:08 +0300 |
---|---|---|
committer | Dmitry Kozlov <xeb@mail.ru> | 2017-03-27 18:27:40 +0300 |
commit | 0f696bdb32bdac3fb69afe608222b05132eb7576 (patch) | |
tree | 18a6a5bebdda8a4edbdd6d2c2c8e93ed207330ca /accel-pppd/ctrl | |
parent | 837f73242956814bf98350d732d8aea0b7b830fa (diff) | |
download | accel-ppp-0f696bdb32bdac3fb69afe608222b05132eb7576.tar.gz accel-ppp-0f696bdb32bdac3fb69afe608222b05132eb7576.zip |
ipoe: fixed bug (unexpected session start in UP mode)
Diffstat (limited to 'accel-pppd/ctrl')
-rw-r--r-- | accel-pppd/ctrl/ipoe/ipoe.c | 9 | ||||
-rw-r--r-- | accel-pppd/ctrl/ipoe/ipoe.h | 1 |
2 files changed, 5 insertions, 5 deletions
diff --git a/accel-pppd/ctrl/ipoe/ipoe.c b/accel-pppd/ctrl/ipoe/ipoe.c index 917b28a5..6834071f 100644 --- a/accel-pppd/ctrl/ipoe/ipoe.c +++ b/accel-pppd/ctrl/ipoe/ipoe.c @@ -616,7 +616,6 @@ cont: if (ses->serv->opt_shared == 0 && ses->ses.ipv4 && ses->ses.ipv4->peer_addr != ses->yiaddr) { if (ipoe_create_interface(ses)) return; - } ap_session_set_ifindex(&ses->ses); @@ -858,6 +857,7 @@ static void __ipoe_session_start(struct ipoe_session *ses) ses->siaddr = ses->router; if (ses->arph) { + ses->wait_start = 1; send_arp_reply(ses->serv, ses->arph); _free(ses->arph); ses->arph = NULL; @@ -2035,11 +2035,10 @@ void ipoe_recv_up(int ifindex, struct ethhdr *eth, struct iphdr *iph, struct _ar list_for_each_entry(ses, &serv->sessions, entry) { if (ses->yiaddr == saddr) { - if (arph) { - if (!ses->arph) - send_arp_reply(serv, arph); - } else if (!ses->started) + if (ses->wait_start) { + ses->wait_start = 0; triton_context_call(&ses->ctx, (triton_event_func)__ipoe_session_activate, ses); + } pthread_mutex_unlock(&serv->lock); pthread_mutex_unlock(&serv_lock); diff --git a/accel-pppd/ctrl/ipoe/ipoe.h b/accel-pppd/ctrl/ipoe/ipoe.h index f3fc3b7c..f8bc82bf 100644 --- a/accel-pppd/ctrl/ipoe/ipoe.h +++ b/accel-pppd/ctrl/ipoe/ipoe.h @@ -112,6 +112,7 @@ struct ipoe_session { int l4_redirect_set:1; int terminate:1; int UP:1; + int wait_start:1; }; struct ipoe_session_info { |