X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/d547c00f76be21289a5ba403b3d94818d8696360..bd1ea89ed17f63b4725825f93e2ced687cca45b5:/l2tpns.c diff --git a/l2tpns.c b/l2tpns.c index 0da9a24..a1819f2 100644 --- a/l2tpns.c +++ b/l2tpns.c @@ -2026,7 +2026,6 @@ void sessionshutdown(sessionidt s, char const *reason, int cdn_result, int cdn_e struct param_kill_session data = { &tunnel[session[s].tunnel], &session[s] }; LOG(2, s, session[s].tunnel, "Shutting down session %u: %s\n", s, reason); run_plugins(PLUGIN_KILL_SESSION, &data); - session[s].die = TIME + 150; // Clean up in 15 seconds } if (session[s].ip && !walled_garden && !session[s].die) @@ -2051,6 +2050,9 @@ void sessionshutdown(sessionidt s, char const *reason, int cdn_result, int cdn_e memcpy(&shut_acct[shut_acct_n++], &session[s], sizeof(session[s])); } + if (!session[s].die) + session[s].die = TIME + 150; // Clean up in 15 seconds + if (session[s].ip) { // IP allocated, clear and unroute int r; @@ -5548,8 +5550,7 @@ int sessionsetup(sessionidt s, tunnelidt t) if (ip == session[i].ip) { - sessionkill(i, "Duplicate IP address"); - cluster_listinvert_session(s, i); + sessionshutdown(i, "Duplicate IP address", CDN_ADMIN_DISC, TERM_ADMIN_RESET); // close radius/routes, etc. continue; } @@ -5570,7 +5571,7 @@ int sessionsetup(sessionidt s, tunnelidt t) // Drop the new session in case of duplicate sessionss, not the old one. if (!strcasecmp(user, session[i].user)) - sessionkill(i, "Duplicate session for users"); + sessionshutdown(i, "Duplicate session for users", CDN_ADMIN_DISC, TERM_ADMIN_RESET); // close radius/routes, etc. } }