// L2TPNS PPP Stuff
-// $Id: ppp.c,v 1.5 2004/06/23 03:52:24 fred_nerk Exp $
+
+char const *cvs_id_ppp = "$Id: ppp.c,v 1.8 2004/07/11 07:57:35 bodea Exp $";
#include <stdio.h>
#include <string.h>
extern tunnelt *tunnel;
extern sessiont *session;
extern radiust *radius;
-extern int tapfd;
+extern int tunfd;
extern char hostname[];
extern u32 eth_tx;
extern time_t time_now;
char user[129];
char pass[129];
-#ifdef STAT_CALLS
- STAT(call_processpap);
-#endif
+
+ CSTAT(call_processpap);
+
log_hex(5, "PAP", p, l);
if (l < 4)
{
- log(1, 0, s, t, "Short PAP %u bytes", l);
+ log(1, 0, s, t, "Short PAP %u bytes\n", l);
STAT(tunnel_rx_errors);
return ;
}
u16 r;
u16 len;
-#ifdef STAT_CALLS
- STAT(call_processchap);
-#endif
+
+ CSTAT(call_processchap);
+
log_hex(5, "CHAP", p, l);
r = session[s].radius;
if (!r)
u8 b[MAXCONTROL];
u8 *q = NULL;
-#ifdef STAT_CALLS
- STAT(call_processlcp);
-#endif
+
+ CSTAT(call_processlcp);
+
log_hex(5, "LCP", p, l);
if (l < 4)
{
- log(1, session[s].ip, s, t, "Short LCP %d bytes", l);
+ log(1, session[s].ip, s, t, "Short LCP %d bytes\n", l);
STAT(tunnel_rx_errors);
return ;
}
sessionshutdown(s, "Remote end closed connection.");
tunnelsend(b, l + (q - b), t); // send it
}
- else if (*p == TerminateReq)
+ else if (*p == TerminateAck)
{
- sessionshutdown(s, "Remote end closed connection.");
+ sessionshutdown(s, "Connection closed.");
}
else if (*p == EchoReq)
{
// Process IPCP messages
void processipcp(tunnelidt t, sessionidt s, u8 * p, u16 l)
{
-#ifdef STAT_CALLS
- STAT(call_processipcp);
-#endif
+
+ CSTAT(call_processipcp);
+
log_hex(5, "IPCP", p, l);
if (l < 5)
{
- log(1, 0, s, t, "Short IPCP %d bytes", l);
+ log(1, 0, s, t, "Short IPCP %d bytes\n", l);
STAT(tunnel_rx_errors);
return ;
}
{
ipt ip;
-#ifdef STAT_CALLS
- STAT(call_processipin);
-#endif
+
+ CSTAT(call_processipin);
+
log_hex(5, "IP", p, l);
ip = ntohl(*(u32 *)(p + 12));
// Snooping this session, send it to ASIO
snoop_send_packet(p, l, session[s].snoop_ip, session[s].snoop_port);
}
- STAT(tap_tx_packets);
- INC_STAT(tap_tx_bytes, l);
+ STAT(tun_tx_packets);
+ INC_STAT(tun_tx_bytes, l);
if (session[s].tbf_in && config->cluster_iam_master) { // Are we throttled and a master?? actually handle the throttled packets.
tbf_queue_packet(session[s].tbf_in, p, l);
// send to ethernet
if (tun_write(p, l) < 0)
{
- STAT(tap_tx_errors);
- log(0, 0, s, t, "Error writing %d bytes to TAP device: %s (tapfd=%d, p=%p)\n",
- l, strerror(errno), tapfd, p);
+ STAT(tun_tx_errors);
+ log(0, 0, s, t, "Error writing %d bytes to TUN device: %s (tunfd=%d, p=%p)\n",
+ l, strerror(errno), tunfd, p);
}
}
void send_ipin(sessionidt s, u8 *buf, int len)
{
log_hex(5, "IP in throttled", buf, len);
- if (write(tapfd, buf, len) < 0)
+ if (write(tunfd, buf, len) < 0)
{
- STAT(tap_tx_errors);
- log(0, 0, 0, 0, "Error writing %d bytes to TAP device: %s (tapfd=%d, p=%p)\n",
- len, strerror(errno), tapfd, buf);
+ STAT(tun_tx_errors);
+ log(0, 0, 0, 0, "Error writing %d bytes to TUN device: %s (tunfd=%d, p=%p)\n",
+ len, strerror(errno), tunfd, buf);
}
// Increment packet counters
// Process LCP messages
void processccp(tunnelidt t, sessionidt s, u8 * p, u16 l)
{
-#ifdef STAT_CALLS
- STAT(call_processccp);
-#endif
+
+ CSTAT(call_processccp);
+
log_hex(5, "CCP", p, l);
if (l < 2 || (*p != ConfigReq && *p != TerminateReq))
{
u8 b[MAXCONTROL];
u16 r = session[s].radius;
u8 *q;
-#ifdef STAT_CALLS
- STAT(call_sendchap);
-#endif
+
+ CSTAT(call_sendchap);
+
if (!r)
{
log(1, 0, s, t, "No RADIUS to send challenge\n");