From 03d3752c9f2412dbd05c51b45520fcdd37749a4b Mon Sep 17 00:00:00 2001 From: Brendan O'Dea Date: Mon, 19 Dec 2005 06:08:42 +0000 Subject: [PATCH 1/1] fix session MRU, tunnel MTU --- Changes | 4 +++- l2tpns.c | 13 ++++++++----- l2tpns.h | 4 ++-- l2tpns.spec | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Changes b/Changes index 21c1d75..9bdeb70 100644 --- a/Changes +++ b/Changes @@ -1,7 +1,9 @@ -* Fri Dec 16 2005 Brendan O'Dea 2.1.15 +* Mon Dec 19 2005 Brendan O'Dea 2.1.15 - Drop backtrace. - Reduce logging of LCP EchoReply packets. - Break LCP configure loop with shutdown. +- Limit value of MRU of 1492 (rfc2516). +- Tun MTU should be MRU (not MRU+4). * Fri Dec 9 2005 Brendan O'Dea 2.1.14 - Run PLUGIN_RADIUS_ACCOUNT for Start records. diff --git a/l2tpns.c b/l2tpns.c index 3c90f6a..5d96204 100644 --- 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 -char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.152 2005-12-14 02:19:15 bodea Exp $"; +char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.153 2005-12-19 06:08:42 bodea Exp $"; #include #include @@ -554,8 +554,8 @@ static void inittun(void) 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; + /* set MTU to modem MRU */ + ifr.ifr_mtu = MRU; if (ioctl(ifrfd, SIOCSIFMTU, (void *) &ifr) < 0) { LOG(0, 0, 0, "Error setting tun MTU: %s\n", strerror(errno)); @@ -2463,7 +2463,7 @@ void processudp(uint8_t *buf, int len, struct sockaddr_in *addr) if (amagic == 0) amagic = time_now; session[s].magic = amagic; // set magic number session[s].flags = aflags; // set flags received - session[s].mru = PPPMTU; // default + session[s].mru = PPPoE_MRU; // default controlnull(t); // ack // start LCP @@ -4295,12 +4295,15 @@ static void update_config() #define L2TP_HDRS (20+8+6+4) // L2TP data encaptulation: ip + udp + l2tp (data) + ppp (inc hdlc) #define TCP_HDRS (20+20) // TCP encapsulation: ip + tcp - if (config->l2tp_mtu <= 0) config->l2tp_mtu = PPPMTU; + if (config->l2tp_mtu <= 0) config->l2tp_mtu = 1500; // ethernet default else if (config->l2tp_mtu < MINMTU) config->l2tp_mtu = MINMTU; else if (config->l2tp_mtu > MAXMTU) config->l2tp_mtu = MAXMTU; // reset MRU/MSS globals MRU = config->l2tp_mtu - L2TP_HDRS; + if (MRU > PPPoE_MRU) + MRU = PPPoE_MRU; + MSS = MRU - TCP_HDRS; // Update radius diff --git a/l2tpns.h b/l2tpns.h index c7af44b..b3202b1 100644 --- a/l2tpns.h +++ b/l2tpns.h @@ -1,5 +1,5 @@ // L2TPNS Global Stuff -// $Id: l2tpns.h,v 1.107 2005-12-14 02:19:15 bodea Exp $ +// $Id: l2tpns.h,v 1.108 2005-12-19 06:08:43 bodea Exp $ #ifndef __L2TPNS_H__ #define __L2TPNS_H__ @@ -31,8 +31,8 @@ #define MAXCONTROL 1000 // max length control message we ever send... #define MINMTU 576 // minimum recommended MTU (rfc1063) -#define PPPMTU 1500 // default PPP MTU #define MAXMTU 2600 // arbitrary maximum MTU +#define PPPoE_MRU 1492 // maximum PPPoE MRU (rfc2516: 1500 less PPPoE header (6) and PPP protocol ID (2)) #define MAXETHER (MAXMTU+18) // max packet we try sending to tun #define MAXTEL 96 // telephone number #define MAXUSER 128 // username diff --git a/l2tpns.spec b/l2tpns.spec index 60889c6..95cd90f 100644 --- a/l2tpns.spec +++ b/l2tpns.spec @@ -43,5 +43,5 @@ rm -rf %{buildroot} %attr(644,root,root) /usr/share/man/man[58]/* %changelog -* Fri Dec 16 2005 Brendan O'Dea 2.1.15-1 +* Mon Dec 19 2005 Brendan O'Dea 2.1.15-1 - 2.1.15 release, see /usr/share/doc/l2tpns-2.1.15/Changes -- 2.20.1