From 0f696bdb32bdac3fb69afe608222b05132eb7576 Mon Sep 17 00:00:00 2001 From: Dmitry Kozlov Date: Mon, 27 Mar 2017 15:57:08 +0300 Subject: ipoe: fixed bug (unexpected session start in UP mode) --- accel-pppd/ctrl/ipoe/ipoe.c | 9 ++++----- accel-pppd/ctrl/ipoe/ipoe.h | 1 + 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'accel-pppd/ctrl') 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 { -- cgit v1.2.3