X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/e4ea4838f832e5054593b86aae57e692f7864622..7bc0c67c3a6748a89c55d98caaf844f65ffd0e1f:/l2tpns.c diff --git a/l2tpns.c b/l2tpns.c index ada7468..ecae249 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.155 2006/01/19 20:55:03 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 @@ -2918,7 +2918,7 @@ static void regular_cleanups(double period) *q = EchoReq; *(uint8_t *)(q + 1) = (time_now % 255); // ID *(uint16_t *)(q + 2) = htons(8); // Length - *(uint32_t *)(q + 4) = 0; // Magic Number (not supported) + *(uint32_t *)(q + 4) = session[s].ppp.lcp == Opened ? htonl(session[s].magic) : 0; // Magic Number LOG(4, s, session[s].tunnel, "No data in %d seconds, sending LCP ECHO\n", (int)(time_now - session[s].last_packet)); @@ -3949,7 +3949,7 @@ static void initippool() else { // It's a single ip address - add_to_ip_pool(inet_addr(pool), 0); + add_to_ip_pool(ntohl(inet_addr(pool)), 0); } } fclose(f); @@ -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