projects
/
l2tpns.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
remove unused MAC config type
[l2tpns.git]
/
l2tpns.c
diff --git
a/l2tpns.c
b/l2tpns.c
index
caa8bd4
..
39f72d7
100644
(file)
--- a/
l2tpns.c
+++ b/
l2tpns.c
@@
-4,7
+4,7
@@
// Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced
// vim: sw=8 ts=8
// 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.1
45 2005/10/18 07:19:28
bodea Exp $";
+char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.1
50 2005/11/17 07:35:35
bodea Exp $";
#include <arpa/inet.h>
#include <assert.h>
#include <arpa/inet.h>
#include <assert.h>
@@
-554,6
+554,13
@@
static void inittun(void)
LOG(0, 0, 0, "Error setting tun queue length: %s\n", strerror(errno));
exit(1);
}
LOG(0, 0, 0, "Error setting tun queue length: %s\n", strerror(errno));
exit(1);
}
+ /* set MTU to modem MRU + 4 (tun header) */
+ ifr.ifr_mtu = MRU + 4;
+ if (ioctl(ifrfd, SIOCSIFMTU, (void *) &ifr) < 0)
+ {
+ LOG(0, 0, 0, "Error setting tun MTU: %s\n", strerror(errno));
+ exit(1);
+ }
ifr.ifr_flags = IFF_UP;
if (ioctl(ifrfd, SIOCSIFFLAGS, (void *) &ifr) < 0)
{
ifr.ifr_flags = IFF_UP;
if (ioctl(ifrfd, SIOCSIFFLAGS, (void *) &ifr) < 0)
{
@@
-1043,7
+1050,7
@@
void adjust_tcp_mss(sessionidt s, tunnelidt t, uint8_t *buf, int len, uint8_t *t
sum = orig + (~MSS & 0xffff);
sum += ntohs(*(uint16_t *) (tcp + 16));
sum = (sum & 0xffff) + (sum >> 16);
sum = orig + (~MSS & 0xffff);
sum += ntohs(*(uint16_t *) (tcp + 16));
sum = (sum & 0xffff) + (sum >> 16);
- *(uint16_t *) (tcp + 16) = htons(sum);
+ *(uint16_t *) (tcp + 16) = htons(sum
+ (sum >> 16)
);
}
// process outgoing (to tunnel) IP
}
// process outgoing (to tunnel) IP
@@
-1170,7
+1177,8
@@
static void processipout(uint8_t *buf, int len)
master_throttle_packet(sp->tbf_out, data, size);
return;
}
master_throttle_packet(sp->tbf_out, data, size);
return;
}
- else if (sp->walled_garden && !config->cluster_iam_master)
+
+ if (sp->walled_garden && !config->cluster_iam_master)
{
// We are walled-gardening this
master_garden_packet(s, data, size);
{
// We are walled-gardening this
master_garden_packet(s, data, size);
@@
-1682,6
+1690,7
@@
void sendipcp(sessionidt s, tunnelidt t)
my_address; // send my IP
tunnelsend(buf, 10 + (q - buf), t); // send it
my_address; // send my IP
tunnelsend(buf, 10 + (q - buf), t); // send it
+ restart_timer(s, ipcp);
}
void sendipv6cp(sessionidt s, tunnelidt t)
}
void sendipv6cp(sessionidt s, tunnelidt t)
@@
-1707,6
+1716,7
@@
void sendipv6cp(sessionidt s, tunnelidt t)
q[13] = 1;
tunnelsend(buf, 14 + (q - buf), t); // send it
q[13] = 1;
tunnelsend(buf, 14 + (q - buf), t); // send it
+ restart_timer(s, ipv6cp);
}
static void sessionclear(sessionidt s)
}
static void sessionclear(sessionidt s)
@@
-2327,9
+2337,9
@@
void processudp(uint8_t *buf, int len, struct sockaddr_in *addr)
if (*p == 5 && p[1] == 6) // Magic-Number
amagic = ntohl(*(uint32_t *) (p + 2));
else if (*p == 7) // Protocol-Field-Compression
if (*p == 5 && p[1] == 6) // Magic-Number
amagic = ntohl(*(uint32_t *) (p + 2));
else if (*p == 7) // Protocol-Field-Compression
- aflags |= SESSIONPFC;
+ aflags |= SESSION
_
PFC;
else if (*p == 8) // Address-and-Control-Field-Compression
else if (*p == 8) // Address-and-Control-Field-Compression
- aflags |= SESSIONACFC;
+ aflags |= SESSION
_
ACFC;
p += p[1];
}
}
p += p[1];
}
}
@@
-2456,20
+2466,17
@@
void processudp(uint8_t *buf, int len, struct sockaddr_in *addr)
case 12: // ICCN
if (amagic == 0) amagic = time_now;
session[s].magic = amagic; // set magic number
case 12: // ICCN
if (amagic == 0) amagic = time_now;
session[s].magic = amagic; // set magic number
- session[s].
l2tp_
flags = aflags; // set flags received
+ session[s].flags = aflags; // set flags received
session[s].mru = PPPMTU; // default
controlnull(t); // ack
// start LCP
session[s].mru = PPPMTU; // default
controlnull(t); // ack
// start LCP
- sess_local[s].lcp.restart = time_now + config->ppp_restart_time;
- sess_local[s].lcp.conf_sent = 1;
- sess_local[s].lcp.nak_sent = 0;
sess_local[s].lcp_authtype = config->radius_authprefer;
sess_local[s].ppp_mru = MRU;
sess_local[s].lcp_authtype = config->radius_authprefer;
sess_local[s].ppp_mru = MRU;
- session[s].ppp.lcp = RequestSent;
sendlcp(s, t);
sendlcp(s, t);
-
+ change_state(s, lcp, RequestSent);
break;
break;
+
case 14: // CDN
controlnull(t); // ack
sessionshutdown(s, "Closed (Received CDN).", 0, 0);
case 14: // CDN
controlnull(t); // ack
sessionshutdown(s, "Closed (Received CDN).", 0, 0);
@@
-2817,8
+2824,6
@@
static void regular_cleanups(double period)
if (sess_local[s].lcp.conf_sent < config->ppp_max_configure)
{
LOG(3, s, session[s].tunnel, "No ACK for LCP ConfigReq... resending\n");
if (sess_local[s].lcp.conf_sent < config->ppp_max_configure)
{
LOG(3, s, session[s].tunnel, "No ACK for LCP ConfigReq... resending\n");
- sess_local[s].lcp.restart = time_now + config->ppp_restart_time;
- sess_local[s].lcp.conf_sent++;
sendlcp(s, session[s].tunnel);
change_state(s, lcp, next_state);
}
sendlcp(s, session[s].tunnel);
change_state(s, lcp, next_state);
}
@@
-2848,8
+2853,6
@@
static void regular_cleanups(double period)
if (sess_local[s].ipcp.conf_sent < config->ppp_max_configure)
{
LOG(3, s, session[s].tunnel, "No ACK for IPCP ConfigReq... resending\n");
if (sess_local[s].ipcp.conf_sent < config->ppp_max_configure)
{
LOG(3, s, session[s].tunnel, "No ACK for IPCP ConfigReq... resending\n");
- sess_local[s].ipcp.restart = time_now + config->ppp_restart_time;
- sess_local[s].ipcp.conf_sent++;
sendipcp(s, session[s].tunnel);
change_state(s, ipcp, next_state);
}
sendipcp(s, session[s].tunnel);
change_state(s, ipcp, next_state);
}
@@
-2879,8
+2882,6
@@
static void regular_cleanups(double period)
if (sess_local[s].ipv6cp.conf_sent < config->ppp_max_configure)
{
LOG(3, s, session[s].tunnel, "No ACK for IPV6CP ConfigReq... resending\n");
if (sess_local[s].ipv6cp.conf_sent < config->ppp_max_configure)
{
LOG(3, s, session[s].tunnel, "No ACK for IPV6CP ConfigReq... resending\n");
- sess_local[s].ipv6cp.restart = time_now + config->ppp_restart_time;
- sess_local[s].ipv6cp.conf_sent++;
sendipv6cp(s, session[s].tunnel);
change_state(s, ipv6cp, next_state);
}
sendipv6cp(s, session[s].tunnel);
change_state(s, ipv6cp, next_state);
}
@@
-2907,8
+2908,6
@@
static void regular_cleanups(double period)
if (sess_local[s].ccp.conf_sent < config->ppp_max_configure)
{
LOG(3, s, session[s].tunnel, "No ACK for CCP ConfigReq... resending\n");
if (sess_local[s].ccp.conf_sent < config->ppp_max_configure)
{
LOG(3, s, session[s].tunnel, "No ACK for CCP ConfigReq... resending\n");
- sess_local[s].ccp.restart = time_now + config->ppp_restart_time;
- sess_local[s].ccp.conf_sent++;
sendccp(s, session[s].tunnel);
change_state(s, ccp, next_state);
}
sendccp(s, session[s].tunnel);
change_state(s, ccp, next_state);
}
@@
-5359,7
+5358,9
@@
int ip_filter(uint8_t *buf, int len, uint8_t filter)
if (frag_offset)
{
if (frag_offset)
{
- if (!rule->frag || rule->action == FILTER_ACTION_DENY)
+ // layer 4 deny rules are skipped
+ if (rule->action == FILTER_ACTION_DENY &&
+ (rule->src_ports.op || rule->dst_ports.op || rule->tcp_flag_op))
continue;
}
else
continue;
}
else