*** empty log message ***
[l2tpns.git] / ppp.c
diff --git a/ppp.c b/ppp.c
index d9aab36..55edf58 100644 (file)
--- a/ppp.c
+++ b/ppp.c
@@ -1,6 +1,6 @@
 // L2TPNS PPP Stuff
 
 // L2TPNS PPP Stuff
 
-char const *cvs_id_ppp = "$Id: ppp.c,v 1.68 2005-08-10 11:25:56 bodea Exp $";
+char const *cvs_id_ppp = "$Id: ppp.c,v 1.71 2005-08-11 06:22:11 bodea Exp $";
 
 #include <stdio.h>
 #include <string.h>
 
 #include <stdio.h>
 #include <string.h>
@@ -341,6 +341,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;
 
        // 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);
 
        // LCP now Opened
        change_state(s, lcp, Opened);
 
@@ -472,15 +474,15 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
        if (session[s].die) // going down...
                return;
 
        if (session[s].die) // going down...
                return;
 
+       LOG(*p == EchoReq ? 4 : 3, s, t, "LCP: recv %s\n", ppp_code(*p));
+       if (config->debug > 3) dumplcp(p, l);
+
        if (*p == ConfigAck)
        {
                int x = l - 4;
                uint8_t *o = (p + 4);
                int authtype = 0;
 
        if (*p == ConfigAck)
        {
                int x = l - 4;
                uint8_t *o = (p + 4);
                int authtype = 0;
 
-               LOG(3, s, t, "LCP: ConfigAck (%d bytes)...\n", l);
-               if (config->debug > 3) dumplcp(p, l);
-
                while (x > 2)
                {
                        int type = o[0];
                while (x > 2)
                {
                        int type = o[0];
@@ -540,9 +542,6 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                static uint8_t asyncmap[4] = { 0, 0, 0, 0 }; // all zero
                static uint8_t authproto[5];
 
                static uint8_t asyncmap[4] = { 0, 0, 0, 0 }; // all zero
                static uint8_t authproto[5];
 
-               LOG(3, s, t, "LCP: ConfigReq (%d bytes)...\n", l);
-               if (config->debug > 3) dumplcp(p, l);
-
                while (x > 2)
                {
                        int type = o[0];
                while (x > 2)
                {
                        int type = o[0];
@@ -559,7 +558,7 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                                        if (!ntohl(*(uint32_t *)(o + 2))) // all bits zero is OK
                                                break;
 
                                        if (!ntohl(*(uint32_t *)(o + 2))) // all bits zero is OK
                                                break;
 
-                                       LOG(2, s, t, "    Remote requesting asyncmap.  Rejecting.\n");
+                                       LOG(3, s, t, "    Remote requesting asyncmap.  Rejecting.\n");
                                        q = ppp_nak(s, b, sizeof(b), PPPLCP, &response, q, p, o, asyncmap, sizeof(asyncmap));
                                        break;
 
                                        q = ppp_nak(s, b, sizeof(b), PPPLCP, &response, q, p, o, asyncmap, sizeof(asyncmap));
                                        break;
 
@@ -593,7 +592,7 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                                                else
                                                        sprintf(proto_name, "%#4.4x", proto);
 
                                                else
                                                        sprintf(proto_name, "%#4.4x", proto);
 
-                                               LOG(2, s, t, "    Remote requesting %s authentication.  Rejecting.\n", proto_name);
+                                               LOG(3, s, t, "    Remote requesting %s authentication.  Rejecting.\n", proto_name);
 
                                                alen = add_lcp_auth(authproto, sizeof(authproto), config->radius_authprefer);
                                                if (alen < 2) break; // paranoia
 
                                                alen = add_lcp_auth(authproto, sizeof(authproto), config->radius_authprefer);
                                                if (alen < 2) break; // paranoia
@@ -622,7 +621,7 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                                        break;
 
                                default: // Reject any unknown options
                                        break;
 
                                default: // Reject any unknown options
-                                       LOG(2, s, t, "    Rejecting PPP LCP Option type %d\n", type);
+                                       LOG(3, s, t, "    Rejecting unknown PPP LCP option %d\n", type);
                                        q = ppp_rej(s, b, sizeof(b), PPPLCP, &response, q, p, o);
                        }
                        x -= length;
                                        q = ppp_rej(s, b, sizeof(b), PPPLCP, &response, q, p, o);
                        }
                        x -= length;
@@ -691,7 +690,9 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                        return;
                }
 
                        return;
                }
 
-               LOG(3, s, t, "LCP: Sending %s\n", ppp_code(*response));
+               LOG(3, s, t, "LCP: send %s\n", ppp_code(*response));
+               if (config->debug > 3) dumplcp(response, l);
+
                tunnelsend(b, l + (response - b), t);
        }
        else if (*p == ConfigNak)
                tunnelsend(b, l + (response - b), t);
        }
        else if (*p == ConfigNak)
@@ -700,9 +701,6 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                uint8_t *o = (p + 4);
                int authtype = -1;
 
                uint8_t *o = (p + 4);
                int authtype = -1;
 
-               LOG(3, s, t, "LCP: ConfigNak (%d bytes)...\n", l);
-               if (config->debug > 3) dumplcp(p, l);
-
                while (x > 2)
                {
                        int type = o[0];
                while (x > 2)
                {
                        int type = o[0];
@@ -769,6 +767,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);
                                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;
                                tunnelsend(b, l + (response - b), t);
                        }
                        break;
@@ -796,10 +798,13 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
        }
        else if (*p == TerminateReq)
        {
        }
        else if (*p == TerminateReq)
        {
-               LOG(3, s, t, "LCP: Received TerminateReq.  Sending TerminateAck\n");
                *p = TerminateAck;      // close
                q = makeppp(b, sizeof(b),  p, l, s, t, PPPLCP);
                if (!q) return;
                *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);
        }
                tunnelsend(b, l + (q - b), t); // send it
                sessionshutdown(s, "Remote end closed connection.", 3, 0);
        }
@@ -823,11 +828,14 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
        }
        else if (*p == EchoReq)
        {
        }
        else if (*p == EchoReq)
        {
-               LOG(5, s, t, "LCP: Received EchoReq.  Sending EchoReply\n");
                *p = EchoReply;         // reply
                *(uint32_t *) (p + 4) = htonl(session[s].magic); // our magic number
                q = makeppp(b, sizeof(b), p, l, s, t, PPPLCP);
                if (!q) return;
                *p = EchoReply;         // reply
                *(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)
                tunnelsend(b, l + (q - b), t); // send it
        }
        else if (*p == EchoReply)
@@ -847,7 +855,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;
 
                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);
        }
 }
                tunnelsend(b, l + (q - b), t);
        }
 }
@@ -904,6 +915,8 @@ void processipcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                return;
        }
 
                return;
        }
 
+       LOG(3, s, t, "IPCP: recv %s\n", ppp_code(*p));
+
        if (*p == ConfigAck)
        {
                switch (session[s].ppp.ipcp)
        if (*p == ConfigAck)
        {
                switch (session[s].ppp.ipcp)
@@ -936,8 +949,6 @@ void processipcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                int gotip = 0;
                in_addr_t addr;
 
                int gotip = 0;
                in_addr_t addr;
 
-               LOG(3, s, t, "IPCP: ConfigReq received\n");
-
                while (length > 2)
                {
                        switch (*o)
                while (length > 2)
                {
                        switch (*o)
@@ -1061,15 +1072,15 @@ void processipcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                        return;
                }
 
                        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)
        {
                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;
                *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);
        }
                tunnelsend(b, l + (q - b), t);
                change_state(s, ipcp, Stopped);
        }
@@ -1086,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;
 
                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);
        }
 }
                tunnelsend(b, l + (q - b), t);
        }
 }
@@ -1134,6 +1146,8 @@ void processipv6cp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                return;
        }
 
                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));
        if (!config->ipv6_prefix.s6_addr[0])
        {
                LOG(2, s, t, "IPV6CP: %s rejected (not configured)\n", ppp_code(*p));
@@ -1182,8 +1196,6 @@ void processipv6cp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                int gotip = 0;
                uint8_t ident[8];
 
                int gotip = 0;
                uint8_t ident[8];
 
-               LOG(3, s, t, "IPV6CP: ConfigReq received\n");
-
                while (length > 2)
                {
                        switch (*o)
                while (length > 2)
                {
                        switch (*o)
@@ -1281,15 +1293,15 @@ void processipv6cp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                        return;
                }
 
                        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)
        {
                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;
                *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);
        }
                tunnelsend(b, l + (q - b), t);
                change_state(s, ipv6cp, Stopped);
        }
@@ -1306,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;
 
                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);
        }
 }
                tunnelsend(b, l + (q - b), t);
        }
 }
@@ -1556,6 +1569,7 @@ void processccp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                STAT(tunnel_rx_errors);
        }
 
                STAT(tunnel_rx_errors);
        }
 
+       LOG(3, s, t, "CCP: recv %s\n", ppp_code(*p));
        if (*p == ConfigAck)
        {
                switch (session[s].ppp.ccp)
        if (*p == ConfigAck)
        {
                switch (session[s].ppp.ccp)
@@ -1640,15 +1654,15 @@ void processccp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                        return;
                }
 
                        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)
        {
                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;
                *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);
        }
                tunnelsend(b, l + (q - b), t);
                change_state(s, ccp, Stopped);
        }
@@ -1665,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;
 
                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);
        }
 }
                tunnelsend(b, l + (q - b), t);
        }
 }
@@ -1792,9 +1807,10 @@ void sendlcp(sessionidt s, tunnelidt t, int authtype)
        if (!(q = makeppp(b, sizeof(b), NULL, 0, s, t, PPPLCP)))
                return;
 
        if (!(q = makeppp(b, sizeof(b), NULL, 0, s, t, PPPLCP)))
                return;
 
-       LOG(4, s, t, "Sending LCP ConfigReq%s%s\n",
-           authtype ? " for " : "",
-           authtype ? (authtype == AUTHCHAP ? "CHAP" : "PAP") : "");
+       LOG(3, s, t, "LCP: send ConfigReq%s%s%s\n",
+           authtype ? " (" : "",
+           authtype ? (authtype == AUTHCHAP ? "CHAP" : "PAP") : "",
+           authtype ? ")" : "");
 
        if (!session[s].mru)
                session[s].mru = DEFAULT_MRU;
 
        if (!session[s].mru)
                session[s].mru = DEFAULT_MRU;
@@ -1818,6 +1834,8 @@ void sendlcp(sessionidt s, tunnelidt t, int authtype)
        *(uint16_t *)(q + 2) = htons(l - q); // Length
 
        LOG_HEX(5, "PPPLCP", q, l - q);
        *(uint16_t *)(q + 2) = htons(l - q); // Length
 
        LOG_HEX(5, "PPPLCP", q, l - q);
+       if (config->debug > 3) dumplcp(q, l - q);
+
        tunnelsend(b, (l - b), t);
 }
 
        tunnelsend(b, (l - b), t);
 }
 
@@ -1829,7 +1847,8 @@ void sendccp(sessionidt s, tunnelidt t)
        if (!(q = makeppp(b, sizeof(b), NULL, 0, s, t, PPPCCP)))
                return;
 
        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
        *q = ConfigReq;
        *(uint8_t *)(q + 1) = (time_now % 255) + 1; // ID
        *(uint16_t *)(q + 2) = htons(4); // Length