drop level of "Unexpected CHAP message" log
[l2tpns.git] / ppp.c
diff --git a/ppp.c b/ppp.c
index c28a1d6..dead47f 100644 (file)
--- a/ppp.c
+++ b/ppp.c
@@ -1,6 +1,6 @@
 // L2TPNS PPP Stuff
 
-char const *cvs_id_ppp = "$Id: ppp.c,v 1.69 2005/08/11 05:50:49 bodea Exp $";
+char const *cvs_id_ppp = "$Id: ppp.c,v 1.75 2005/08/24 23:44:08 bodea Exp $";
 
 #include <stdio.h>
 #include <string.h>
@@ -85,8 +85,7 @@ void processpap(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                LOG(3, s, t, "PAP login %s/%s\n", user, pass);
        }
 
-       r = radiusnew(s);
-       if (session[s].ip || !r)
+       if (session[s].ip || !(r = radiusnew(s)))
        {
                // respond now, either no RADIUS available or already authenticated
                uint8_t b[MAXCONTROL];
@@ -148,13 +147,6 @@ void processchap(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
        CSTAT(processchap);
 
        LOG_HEX(5, "CHAP", p, l);
-       r = sess_local[s].radius;
-       if (!r)
-       {
-               LOG(1, s, t, "Unexpected CHAP message\n");
-               STAT(tunnel_rx_errors);
-               return;
-       }
 
        if (l < 4)
        {
@@ -181,6 +173,13 @@ void processchap(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                return;
        }
 
+       r = sess_local[s].radius;
+       if (!r)
+       {
+               LOG(3, s, t, "Unexpected CHAP message\n");
+               return;
+       }
+
        if (session[s].ppp.phase != Authenticate)
        {
                LOG(2, s, t, "CHAP ignored in %s phase\n", ppp_phase(session[s].ppp.phase));
@@ -341,6 +340,8 @@ void lcp_open(sessionidt s, tunnelidt t)
        // transition to Authentication or Network phase: 
        session[s].ppp.phase = sess_local[s].lcp_authtype ? Authenticate : Network;
 
+       LOG(3, s, t, "LCP: Opened, phase %s\n", ppp_phase(session[s].ppp.phase));
+
        // LCP now Opened
        change_state(s, lcp, Opened);
 
@@ -426,7 +427,7 @@ static uint8_t *ppp_nak(sessionidt s, uint8_t *buf, size_t blen, uint16_t mtype,
                if (!queued)
                        return 0;
 
-               *nak_sent++;
+               (*nak_sent)++;
                *queued = ConfigNak;
                queued += 4;
        }
@@ -765,6 +766,10 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                                if (!response) return;
                                *response = TerminateAck;
                                *((uint16_t *) (response + 2)) = htons(l = 4);
+
+                               LOG(3, s, t, "LCP: send %s\n", ppp_code(*response));
+                               if (config->debug > 3) dumplcp(response, l);
+
                                tunnelsend(b, l + (response - b), t);
                        }
                        break;
@@ -795,6 +800,10 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                *p = TerminateAck;      // close
                q = makeppp(b, sizeof(b),  p, l, s, t, PPPLCP);
                if (!q) return;
+
+               LOG(3, s, t, "LCP: send %s\n", ppp_code(*q));
+               if (config->debug > 3) dumplcp(q, l);
+
                tunnelsend(b, l + (q - b), t); // send it
                sessionshutdown(s, "Remote end closed connection.", 3, 0);
        }
@@ -822,6 +831,10 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                *(uint32_t *) (p + 4) = htonl(session[s].magic); // our magic number
                q = makeppp(b, sizeof(b), p, l, s, t, PPPLCP);
                if (!q) return;
+
+               LOG(4, s, t, "LCP: send %s\n", ppp_code(*q));
+               if (config->debug > 3) dumplcp(q, l);
+
                tunnelsend(b, l + (q - b), t); // send it
        }
        else if (*p == EchoReply)
@@ -841,7 +854,10 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                q = makeppp(b, sizeof(b), p, l, s, t, PPPLCP);
                if (!q) return;
 
-               LOG(3, s, t, "Unexpected LCP code %s\n", ppp_code(code));
+               LOG(2, s, t, "Unexpected LCP code %s\n", ppp_code(code));
+               LOG(3, s, t, "LCP: send %s\n", ppp_code(*q));
+               if (config->debug > 3) dumplcp(q, l);
+
                tunnelsend(b, l + (q - b), t);
        }
 }
@@ -898,6 +914,8 @@ void processipcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                return;
        }
 
+       LOG(3, s, t, "IPCP: recv %s\n", ppp_code(*p));
+
        if (*p == ConfigAck)
        {
                switch (session[s].ppp.ipcp)
@@ -930,8 +948,6 @@ void processipcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                int gotip = 0;
                in_addr_t addr;
 
-               LOG(3, s, t, "IPCP: ConfigReq received\n");
-
                while (length > 2)
                {
                        switch (*o)
@@ -943,8 +959,9 @@ void processipcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                                addr = htonl(session[s].ip);
                                if (memcmp(o + 2, &addr, (sizeof addr)))
                                {
+                                       uint8_t *oq = q;
                                        q = ppp_nak(s, b, sizeof(b), PPPIPCP, &response, q, p, o, (uint8_t *) &addr, sizeof(addr));
-                                       if (!q || *response == ConfigRej)
+                                       if (!q || (q != oq && *response == ConfigRej))
                                        {
                                                sessionshutdown(s, "Can't negotiate IPCP.", 3, 0);
                                                return;
@@ -1055,15 +1072,15 @@ void processipcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                        return;
                }
 
-               LOG(3, s, t, "IPCP: Sending %s\n", ppp_code(*response));
+               LOG(3, s, t, "IPCP: send %s\n", ppp_code(*response));
                tunnelsend(b, l + (response - b), t);
        }
        else if (*p == TerminateReq)
        {
-               LOG(3, s, t, "IPCP: Received TerminateReq.  Sending TerminateAck\n");
                *p = TerminateAck;
                q = makeppp(b, sizeof(b), p, l, s, t, PPPIPCP);
                if (!q) return;
+               LOG(3, s, t, "IPCP: send %s\n", ppp_code(*q));
                tunnelsend(b, l + (q - b), t);
                change_state(s, ipcp, Stopped);
        }
@@ -1080,7 +1097,8 @@ void processipcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                q = makeppp(b, sizeof(b), p, l, s, t, PPPIPCP);
                if (!q) return;
 
-               LOG(3, s, t, "Unexpected IPCP code %s\n", ppp_code(code));
+               LOG(2, s, t, "Unexpected IPCP code %s\n", ppp_code(code));
+               LOG(3, s, t, "IPCP: send %s\n", ppp_code(*q));
                tunnelsend(b, l + (q - b), t);
        }
 }
@@ -1128,6 +1146,8 @@ void processipv6cp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                return;
        }
 
+       LOG(3, s, t, "IPV6CP: recv %s\n", ppp_code(*p));
+
        if (!config->ipv6_prefix.s6_addr[0])
        {
                LOG(2, s, t, "IPV6CP: %s rejected (not configured)\n", ppp_code(*p));
@@ -1176,8 +1196,6 @@ void processipv6cp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                int gotip = 0;
                uint8_t ident[8];
 
-               LOG(3, s, t, "IPV6CP: ConfigReq received\n");
-
                while (length > 2)
                {
                        switch (*o)
@@ -1275,15 +1293,15 @@ void processipv6cp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                        return;
                }
 
-               LOG(3, s, t, "IPV6CP: Sending %s\n", ppp_code(*response));
+               LOG(3, s, t, "IPV6CP: send %s\n", ppp_code(*response));
                tunnelsend(b, l + (response - b), t);
        }
        else if (*p == TerminateReq)
        {
-               LOG(3, s, t, "IPV6CP: Received TerminateReq.  Sending TerminateAck\n");
                *p = TerminateAck;
                q = makeppp(b, sizeof(b),  p, l, s, t, PPPIPV6CP);
                if (!q) return;
+               LOG(3, s, t, "IPV6CP: send %s\n", ppp_code(*q));
                tunnelsend(b, l + (q - b), t);
                change_state(s, ipv6cp, Stopped);
        }
@@ -1300,7 +1318,8 @@ void processipv6cp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                q = makeppp(b, sizeof(b), p, l, s, t, PPPIPV6CP);
                if (!q) return;
 
-               LOG(3, s, t, "Unexpected IPV6CP code %s\n", ppp_code(code));
+               LOG(2, s, t, "Unexpected IPV6CP code %s\n", ppp_code(code));
+               LOG(3, s, t, "IPV6CP: send %s\n", ppp_code(*q));
                tunnelsend(b, l + (q - b), t);
        }
 }
@@ -1550,6 +1569,7 @@ void processccp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                STAT(tunnel_rx_errors);
        }
 
+       LOG(3, s, t, "CCP: recv %s\n", ppp_code(*p));
        if (*p == ConfigAck)
        {
                switch (session[s].ppp.ccp)
@@ -1634,15 +1654,15 @@ void processccp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                        return;
                }
 
-               LOG(3, s, t, "CCP: Sending %s\n", ppp_code(*q));
+               LOG(3, s, t, "CCP: send %s\n", ppp_code(*q));
                tunnelsend(b, l + (q - b), t);
        }
        else if (*p == TerminateReq)
        {
-               LOG(3, s, t, "CCP: Received TerminateReq.  Sending TerminateAck\n");
                *p = TerminateAck;
                q = makeppp(b, sizeof(b),  p, l, s, t, PPPCCP);
                if (!q) return;
+               LOG(3, s, t, "CCP: send %s\n", ppp_code(*q));
                tunnelsend(b, l + (q - b), t);
                change_state(s, ccp, Stopped);
        }
@@ -1659,7 +1679,8 @@ void processccp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                q = makeppp(b, sizeof(b), p, l, s, t, PPPCCP);
                if (!q) return;
 
-               LOG(3, s, t, "Unexpected CCP code %s\n", ppp_code(code));
+               LOG(2, s, t, "Unexpected CCP code %s\n", ppp_code(code));
+               LOG(3, s, t, "CCP: send %s\n", ppp_code(*q));
                tunnelsend(b, l + (q - b), t);
        }
 }
@@ -1826,7 +1847,8 @@ void sendccp(sessionidt s, tunnelidt t)
        if (!(q = makeppp(b, sizeof(b), NULL, 0, s, t, PPPCCP)))
                return;
 
-       LOG(4, s, t, "Sending CCP ConfigReq for no compression\n");
+       LOG(3, s, t, "CCP: send ConfigReq (no compression)\n");
+
        *q = ConfigReq;
        *(uint8_t *)(q + 1) = (time_now % 255) + 1; // ID
        *(uint16_t *)(q + 2) = htons(4); // Length