diff options
author | Dmitry Kozlov <xeb@mail.ru> | 2016-03-17 22:26:15 +0300 |
---|---|---|
committer | Dmitry Kozlov <xeb@mail.ru> | 2016-03-17 22:26:15 +0300 |
commit | 6322800aa555f42942a554cadd1cb6b7e9c99ff3 (patch) | |
tree | 721386288fba8ac46445d67f609131fc5bd8e396 /accel-pppd/ctrl/ipoe/ipoe.c | |
parent | cc9e2a49061b2a77a51e27ed23c8040626a2083b (diff) | |
parent | 9e996cb0055d3d652876e00c2415b31609666690 (diff) | |
download | accel-ppp-6322800aa555f42942a554cadd1cb6b7e9c99ff3.tar.gz accel-ppp-6322800aa555f42942a554cadd1cb6b7e9c99ff3.zip |
Merge branch 'master' of ssh://git.code.sf.net/p/accel-ppp/code
Diffstat (limited to 'accel-pppd/ctrl/ipoe/ipoe.c')
-rw-r--r-- | accel-pppd/ctrl/ipoe/ipoe.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/accel-pppd/ctrl/ipoe/ipoe.c b/accel-pppd/ctrl/ipoe/ipoe.c index 68841fef..c986c63b 100644 --- a/accel-pppd/ctrl/ipoe/ipoe.c +++ b/accel-pppd/ctrl/ipoe/ipoe.c @@ -1826,17 +1826,21 @@ void ipoe_recv_up(int ifindex, struct ethhdr *eth, struct iphdr *iph) struct ipoe_serv *serv; struct ipoe_session *ses; + pthread_mutex_lock(&serv_lock); list_for_each_entry(serv, &serv_list, entry) { if (serv->ifindex != ifindex) continue; - if (!serv->opt_up) + if (!serv->opt_up) { + pthread_mutex_unlock(&serv_lock); return; + } pthread_mutex_lock(&serv->lock); list_for_each_entry(ses, &serv->sessions, entry) { if (ses->yiaddr == iph->saddr) { pthread_mutex_unlock(&serv->lock); + pthread_mutex_unlock(&serv_lock); return; } } @@ -1846,6 +1850,7 @@ void ipoe_recv_up(int ifindex, struct ethhdr *eth, struct iphdr *iph) break; } + pthread_mutex_unlock(&serv_lock); } #ifdef RADIUS @@ -2299,9 +2304,14 @@ void ipoe_vlan_mon_notify(int ifindex, int vid, int vlan_ifindex) continue; add_interface(ifname, ifr.ifr_ifindex, opt->val, ifindex, vid); - } else if (ptr - opt->val == len && memcmp(opt->val, ifname, len) == 0) + return; + } else if (ptr - opt->val == len && memcmp(opt->val, ifname, len) == 0) { add_interface(ifname, ifr.ifr_ifindex, opt->val, ifindex, vid); + return; + } } + + log_warn("ipoe: vlan %s not started\n", ifname); } static void ipoe_serv_timeout(struct triton_timer_t *t) @@ -2438,11 +2448,6 @@ static void add_interface(const char *ifname, int ifindex, const char *opt, int close(sock); } - if (opt_up) - ipoe_nl_add_interface(ifindex, opt_mode); - else - ipoe_nl_add_interface(ifindex, 0); - pthread_mutex_lock(&serv_lock); list_for_each_entry(serv, &serv_list, entry) { if (strcmp(ifname, serv->ifname)) @@ -2508,6 +2513,11 @@ static void add_interface(const char *ifname, int ifindex, const char *opt, int } pthread_mutex_unlock(&serv_lock); + if (opt_up) + ipoe_nl_add_interface(ifindex, opt_mode); + else + ipoe_nl_add_interface(ifindex, 0); + opt = strchr(opt, ','); if (opt) opt++; |