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
This commit is contained in:
Waldemar Kornewald
2004-04-15 16:08:39 +00:00
parent 310eb63195
commit cdee6f9740
@@ -5,6 +5,10 @@
// Copyright (c) 2003-2004 Waldemar Kornewald, [email protected]
//-----------------------------------------------------------------------
#if DEBUG
#include <cstdio>
#endif
#include "Protocol.h"
#include "IPCP.h"
#include <KPPPConfigurePacket.h>
@@ -19,6 +23,40 @@
#include <sys/sockio.h>
#if DEBUG
#include <unistd.h>
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 {