summaryrefslogtreecommitdiff
path: root/accel-pppd/ifcfg.c
diff options
context:
space:
mode:
authorDmitry Kozlov <xeb@mail.ru>2014-09-09 21:19:58 +0400
committerDmitry Kozlov <xeb@mail.ru>2014-09-09 21:20:03 +0400
commitb13905663dc570fc9631d5063468f55b0a5a628d (patch)
tree33358dfcc8a224092d3d658dfa40177707a006bf /accel-pppd/ifcfg.c
parentd371f4dd5036cf94feedbcc9d568956361c8b762 (diff)
downloadaccel-ppp-xebd-b13905663dc570fc9631d5063468f55b0a5a628d.tar.gz
accel-ppp-xebd-b13905663dc570fc9631d5063468f55b0a5a628d.zip
updated procedure to check double sessions
drop existing sessions immediately and continue rather than wait full session termination
Diffstat (limited to 'accel-pppd/ifcfg.c')
-rw-r--r--accel-pppd/ifcfg.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/accel-pppd/ifcfg.c b/accel-pppd/ifcfg.c
index 3190873..d3a8006 100644
--- a/accel-pppd/ifcfg.c
+++ b/accel-pppd/ifcfg.c
@@ -55,16 +55,9 @@ static void build_addr(struct ipv6db_addr_t *a, uint64_t intf_id, struct in6_add
*(uint64_t *)(addr->s6_addr + 8) |= intf_id & ((1 << (128 - a->prefix_len)) - 1);
}
+static void ifup_continue(struct ap_session *ses);
void ap_session_ifup(struct ap_session *ses)
{
- struct ipv6db_addr_t *a;
- struct ifreq ifr;
- //struct rtentry rt;
- struct in6_ifreq ifr6;
- struct npioctl np;
- struct sockaddr_in addr;
- struct ppp_t *ppp;
-
if (ses->ifname_rename) {
if (ap_session_rename(ses, ses->ifname_rename, -1)) {
ap_session_terminate(ses, TERM_NAS_ERROR, 0);
@@ -75,6 +68,19 @@ void ap_session_ifup(struct ap_session *ses)
}
triton_event_fire(EV_SES_ACCT_START, ses);
+ triton_context_call(ses->ctrl->ctx, (triton_event_func)ifup_continue, ses);
+}
+
+static void ifup_continue(struct ap_session *ses)
+{
+ struct ipv6db_addr_t *a;
+ struct ifreq ifr;
+ //struct rtentry rt;
+ struct in6_ifreq ifr6;
+ struct npioctl np;
+ struct sockaddr_in addr;
+ struct ppp_t *ppp;
+
if (ses->stop_time)
return;