diff --git a/accel-pppd/ctrl/ipoe/ipoe.c b/accel-pppd/ctrl/ipoe/ipoe.c index 774e39803772b7db80a64119a2a8d770619cc070..61e040eb70dd33345c7c10df63f8f8d444c0d18b 100644 --- a/accel-pppd/ctrl/ipoe/ipoe.c +++ b/accel-pppd/ctrl/ipoe/ipoe.c @@ -1156,7 +1156,7 @@ static int ipoe_session_terminate(struct ap_session *s, int hard) { struct ipoe_session *ses = container_of(s, typeof(*ses), ses); - if (hard || !conf_soft_terminate) + if (hard || !conf_soft_terminate || ses->UP) ipoe_session_terminated(ses); else ses->terminate = 1; @@ -1798,6 +1798,7 @@ static struct ipoe_session *ipoe_session_create_up(struct ipoe_serv *serv, struc ses->serv = serv; memcpy(ses->hwaddr, eth->h_source, 6); ses->yiaddr = iph->saddr; + ses->UP = 1; ses->ctrl.called_station_id = _strdup(serv->ifname); diff --git a/accel-pppd/ctrl/ipoe/ipoe.h b/accel-pppd/ctrl/ipoe/ipoe.h index 6f5907585a8ab7017847aeea85340d37f85a6c63..f2331039591653e2274d961a95e190ce38cb1917 100644 --- a/accel-pppd/ctrl/ipoe/ipoe.h +++ b/accel-pppd/ctrl/ipoe/ipoe.h @@ -95,6 +95,7 @@ struct ipoe_session { int l4_redirect:1; int l4_redirect_set:1; int terminate:1; + int UP:1; }; struct ipoe_session_info {