X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/bde7904f922ed78582ef6289c3896978b51ce7cf..e1f961edee203be6922ec738392e7c34bd7abab5:/ppp.c diff --git a/ppp.c b/ppp.c index fd5f460..358b90b 100644 --- a/ppp.c +++ b/ppp.c @@ -1,6 +1,6 @@ // L2TPNS PPP Stuff -char const *cvs_id_ppp = "$Id: ppp.c,v 1.82 2005-09-16 05:04:29 bodea Exp $"; +char const *cvs_id_ppp = "$Id: ppp.c,v 1.85 2005-11-04 14:41:50 bodea Exp $"; #include #include @@ -459,7 +459,7 @@ static void ppp_code_rej(sessionidt s, tunnelidt t, uint16_t proto, *q = CodeRej; *(q + 1) = ++sess_local[s].lcp_ident; - *(uint16_t *)(q + 2) = l; + *(uint16_t *)(q + 2) = htons(l); memcpy(q + 4, p, l - 4); LOG(2, s, t, "Unexpected %s code %s\n", pname, ppp_code(*p)); @@ -903,11 +903,17 @@ static void ipcp_open(sessionidt s, tunnelidt t) change_state(s, ipcp, Opened); - if (!session[s].walled_garden) + if (!(session[s].walled_garden || session[s].flags & SESSION_STARTED)) { uint16_t r = radiusnew(s); if (r) + { radiussend(r, RADIUSSTART); // send radius start + + // don't send further Start records if IPCP is restarted + session[s].flags |= SESSION_STARTED; + cluster_send_session(s); + } } // start IPv6 if configured and still in passive state @@ -1335,7 +1341,7 @@ void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l) LOG_HEX(5, "IP", p, l); - if (l < 20 || l < ntohl(*(uint32_t *)(p + 2))) + if (l < 20) { LOG(1, s, t, "IP packet too short %d\n", l); STAT(tunnel_rx_errors); @@ -1747,12 +1753,12 @@ uint8_t *makeppp(uint8_t *b, int size, uint8_t *p, int l, sessionidt s, tunnelid *(uint16_t *) (b + 2) = htons(tunnel[t].far); // tunnel *(uint16_t *) (b + 4) = htons(session[s].far); // session b += 6; - if (mtype == PPPLCP || !(session[s].l2tp_flags & SESSIONACFC)) + if (mtype == PPPLCP || !(session[s].flags & SESSION_ACFC)) { *(uint16_t *) b = htons(0xFF03); // HDLC header b += 2; } - if (mtype < 0x100 && session[s].l2tp_flags & SESSIONPFC) + if (mtype < 0x100 && session[s].flags & SESSION_PFC) *b++ = mtype; else { @@ -1839,6 +1845,7 @@ void sendlcp(sessionidt s, tunnelidt t) if (config->debug > 3) dumplcp(q, l - q); tunnelsend(b, (l - b), t); + restart_timer(s, lcp); } // Send CCP request for no compression @@ -1857,4 +1864,5 @@ void sendccp(sessionidt s, tunnelidt t) LOG_HEX(5, "PPPCCP", q, 4); tunnelsend(b, (q - b) + 4 , t); + restart_timer(s, ccp); }