From cdee6f9740fc4f57d1b7bbcaa110ab96720e5da4 Mon Sep 17 00:00:00 2001 From: Waldemar Kornewald Date: Thu, 15 Apr 2004 16:08:39 +0000 Subject: [PATCH] The DEBUG version dumps all packets to /boot/home/ipcpdebug. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7208 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/network/ppp/ipcp/Protocol.cpp | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/network/ppp/ipcp/Protocol.cpp b/src/add-ons/kernel/network/ppp/ipcp/Protocol.cpp index fe3a7ac5ea..b8b0073be5 100644 --- a/src/add-ons/kernel/network/ppp/ipcp/Protocol.cpp +++ b/src/add-ons/kernel/network/ppp/ipcp/Protocol.cpp @@ -5,6 +5,10 @@ // Copyright (c) 2003-2004 Waldemar Kornewald, Waldemar.Kornewald@web.de //----------------------------------------------------------------------- +#if DEBUG +#include +#endif + #include "Protocol.h" #include "IPCP.h" #include @@ -19,6 +23,40 @@ #include +#if DEBUG +#include + +static int sFD; + // the file descriptor for debug output +static char sDigits[] = "0123456789ABCDEF"; +void +dump_packet(struct mbuf *packet, const char *direction) +{ + if(!packet) + return; + + uint8 *data = mtod(packet, uint8*); + uint8 buffer[128]; + uint8 bufferIndex = 0; + + sprintf((char*) buffer, "Dumping %s packet;len=%ld;pkthdr.len=%d\n", direction, + packet->m_len, packet->m_flags & M_PKTHDR ? packet->m_pkthdr.len : -1); + write(sFD, buffer, strlen((char*) buffer)); + + for(uint32 index = 0; index < packet->m_len; index++) { + buffer[bufferIndex++] = sDigits[data[index] >> 4]; + buffer[bufferIndex++] = sDigits[data[index] & 0x0F]; + if(bufferIndex == 32 || index == packet->m_len - 1) { + buffer[bufferIndex++] = '\n'; + buffer[bufferIndex] = 0; + write(sFD, buffer, strlen((char*) buffer)); + bufferIndex = 0; + } + } +} +#endif + + static const bigtime_t kIPCPStateMachineTimeout = 3000000; // 3 seconds @@ -39,11 +77,18 @@ IPCP::IPCP(KPPPInterface& interface, driver_parameter *settings) fNextTimeout(0) { ProfileChanged(); + +#if DEBUG + sFD = open("/boot/home/ipcpdebug", O_WRONLY | O_CREAT | O_TRUNC); +#endif } IPCP::~IPCP() { +#if DEBUG + close(sFD); +#endif } @@ -193,8 +238,13 @@ IPCP::Send(struct mbuf *packet, uint16 protocolNumber = IPCP_PROTOCOL) #endif if((protocolNumber == IP_PROTOCOL && State() == PPP_OPENED_STATE) - || protocolNumber == IPCP_PROTOCOL) + || protocolNumber == IPCP_PROTOCOL) { +#if DEBUG + dump_packet(packet, "outgoing"); +#endif + Interface().UpdateIdleSince(); return SendToNext(packet, protocolNumber); + } dprintf("IPCP: Send() failed because of wrong state or protocol number!\n"); @@ -278,6 +328,10 @@ IPCP::ReceiveIPPacket(struct mbuf *packet, uint16 protocolNumber) // TODO: add VJC support (the packet would be decoded here) if (gProto[IPPROTO_IP] && gProto[IPPROTO_IP]->pr_input) { +#if DEBUG + dump_packet(packet, "incoming"); +#endif + Interface().UpdateIdleSince(); gProto[IPPROTO_IP]->pr_input(packet, 0); return B_OK; } else {