fix session MRU, tunnel MTU
authorBrendan O'Dea <bod@optus.net>
Mon, 19 Dec 2005 06:08:42 +0000 (06:08 +0000)
committerBrendan O'Dea <bod@optus.net>
Mon, 19 Dec 2005 06:08:42 +0000 (06:08 +0000)
Changes
l2tpns.c
l2tpns.h
l2tpns.spec

diff --git a/Changes b/Changes
index 21c1d75..9bdeb70 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,7 +1,9 @@
-* Fri Dec 16 2005 Brendan O'Dea <bod@optus.net> 2.1.15
+* Mon Dec 19 2005 Brendan O'Dea <bod@optus.net> 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 <bod@optus.net> 2.1.14
 - Run PLUGIN_RADIUS_ACCOUNT for Start records.
index 3c90f6a..5d96204 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
 
-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 <arpa/inet.h>
 #include <assert.h>
@@ -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
index c7af44b..b3202b1 100644 (file)
--- 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
index 60889c6..95cd90f 100644 (file)
@@ -43,5 +43,5 @@ rm -rf %{buildroot}
 %attr(644,root,root) /usr/share/man/man[58]/*
 
 %changelog
-* Fri Dec 16 2005 Brendan O'Dea <bod@optus.net> 2.1.15-1
+* Mon Dec 19 2005 Brendan O'Dea <bod@optus.net> 2.1.15-1
 - 2.1.15 release, see /usr/share/doc/l2tpns-2.1.15/Changes