// Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced
// vim: sw=8 ts=8
-char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.87 2005/03/10 06:16:05 bodea Exp $";
+char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.91 2005/04/27 13:53:15 bodea Exp $";
#include <arpa/inet.h>
#include <assert.h>
time_t basetime = 0; // base clock
char hostname[1000] = ""; // us.
static int tunidx; // ifr_ifindex of tun device
-static uint32_t sessionid = 0; // session id for radius accounting
static int syslog_log = 0; // are we logging to syslog
static FILE *log_stream = NULL; // file handle for direct logging (i.e. direct into file, not via syslog).
extern int cluster_sockfd; // Intra-cluster communications socket.
-uint32_t last_id = 0; // Last used PPP SID. Can I kill this?? -- mo
+uint32_t last_id = 0; // Unique ID for radius accounting
struct cli_session_actions *cli_session_actions = NULL; // Pending session changes requested by CLI
struct cli_tunnel_actions *cli_tunnel_actions = NULL; // Pending tunnel changes required by CLI
}
// start tidy shutdown of session
-void sessionshutdown(sessionidt s, char *reason, int result, int code)
+void sessionshutdown(sessionidt s, char *reason, int result, int error)
{
int walled_garden = session[s].walled_garden;
run_plugins(PLUGIN_KILL_SESSION, &data);
}
- if (!walled_garden && !session[s].die)
+ if (session[s].ip && !walled_garden && !session[s].die)
{
// RADIUS Stop message
uint16_t r = session[s].radius;
if (radius[r].try > 10)
{
radiusclear(r, s); // Clear radius session.
- sessionshutdown(s, "No reply on IPCP", 3, 0);
+ sessionshutdown(s, "No reply to IPCP.", 3, 0);
return;
}
}
c = controlnew(11); // sending ICRP
- session[s].id = sessionid++;
session[s].opened = time_now;
session[s].tunnel = t;
session[s].far = asession;
break;
case 14: // CDN
controlnull(t); // ack
- sessionshutdown(s, "Closed (Received CDN)", 0, 0);
+ sessionshutdown(s, "Closed (Received CDN).", 0, 0);
break;
case 0xFFFF:
LOG(1, s, t, "Missing message type\n");
// Drop sessions who have not responded within IDLE_TIMEOUT seconds
if (session[s].last_packet && (time_now - session[s].last_packet >= IDLE_TIMEOUT))
{
- sessionshutdown(s, "No response to LCP ECHO requests", 3, 0);
+ sessionshutdown(s, "No response to LCP ECHO requests.", 3, 0);
STAT(session_timeout);
if (++count >= MAX_ACTIONS) break;
continue;
}
- // No data in IDLE_TIMEOUT seconds, send LCP ECHO
+ // No data in ECHO_TIMEOUT seconds, send LCP ECHO
if (session[s].user[0] && (time_now - session[s].last_packet >= ECHO_TIMEOUT))
{
uint8_t b[MAXCONTROL] = {0};
if (a & CLI_SESS_KILL)
{
LOG(2, s, session[s].tunnel, "Dropping session by CLI\n");
- sessionshutdown(s, "Requested by administrator", 3, 0);
+ sessionshutdown(s, "Requested by administrator.", 3, 0);
a = 0; // dead, no need to check for other actions
}
if (!session[s].ip)
{
LOG(0, s, t, " No IP allocated. The IP address pool is FULL!\n");
- sessionshutdown(s, "No IP addresses available", 2, 7);
+ sessionshutdown(s, "No IP addresses available.", 2, 7);
return 0;
}
LOG(3, s, t, " No IP allocated. Assigned %s from pool\n",