summaryrefslogtreecommitdiff
path: root/accel-pppd/ctrl/ipoe/ipoe.c
diff options
context:
space:
mode:
authorDmitry Kozlov <xeb@mail.ru>2016-03-17 22:26:15 +0300
committerDmitry Kozlov <xeb@mail.ru>2016-03-17 22:26:15 +0300
commit6322800aa555f42942a554cadd1cb6b7e9c99ff3 (patch)
tree721386288fba8ac46445d67f609131fc5bd8e396 /accel-pppd/ctrl/ipoe/ipoe.c
parentcc9e2a49061b2a77a51e27ed23c8040626a2083b (diff)
parent9e996cb0055d3d652876e00c2415b31609666690 (diff)
downloadaccel-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.c24
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++;