summaryrefslogtreecommitdiff
path: root/accel-pppd
diff options
context:
space:
mode:
authorDmitry Kozlov <xeb@mail.ru>2017-03-27 15:57:08 +0300
committerDmitry Kozlov <xeb@mail.ru>2017-03-27 18:27:40 +0300
commit0f696bdb32bdac3fb69afe608222b05132eb7576 (patch)
tree18a6a5bebdda8a4edbdd6d2c2c8e93ed207330ca /accel-pppd
parent837f73242956814bf98350d732d8aea0b7b830fa (diff)
downloadaccel-ppp-0f696bdb32bdac3fb69afe608222b05132eb7576.tar.gz
accel-ppp-0f696bdb32bdac3fb69afe608222b05132eb7576.zip
ipoe: fixed bug (unexpected session start in UP mode)
Diffstat (limited to 'accel-pppd')
-rw-r--r--accel-pppd/ctrl/ipoe/ipoe.c9
-rw-r--r--accel-pppd/ctrl/ipoe/ipoe.h1
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 {