X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fplugins%2Fpppoe%2Fcommon.c;h=8b0e636acb800ab923a6b6c6d2cb3053448189f2;hb=032020241d270c53dff479a7b0eb7fe487c56a78;hp=64bed1af6ca63df5de7344bbdc85c8ea262f22e8;hpb=7f8c1a1f8e486b232340fd9a0a19c5d34f1c5ae0;p=ppp.git diff --git a/pppd/plugins/pppoe/common.c b/pppd/plugins/pppoe/common.c index 64bed1a..8b0e636 100644 --- a/pppd/plugins/pppoe/common.c +++ b/pppd/plugins/pppoe/common.c @@ -164,6 +164,42 @@ sendPADT(PPPoEConnection *conn, char const *msg) info("Sent PADT"); } +static void +pppoe_printpkt_hex(void (*printer)(void *, char *, ...), void *arg, unsigned char const *buf, int len) +{ + int i; + int base; + + /* do NOT dump PAP packets */ + if (len >= 2 && buf[0] == 0xC0 && buf[1] == 0x23) { + printer(arg, "(PAP Authentication Frame -- Contents not dumped)\n"); + return; + } + + for (base=0; baselength); - int i, tag, tlen, text; + int i, j, tag, tlen, text; switch (ntohs(packet->ethHdr.h_proto)) { case ETH_PPPOE_DISCOVERY: @@ -211,6 +247,8 @@ void pppoe_printpkt(PPPoEPacket *packet, printer(arg, " dst %02x:%02x:%02x:%02x:%02x:%02x ", EH(packet->ethHdr.h_dest)); printer(arg, " src %02x:%02x:%02x:%02x:%02x:%02x\n", EH(packet->ethHdr.h_source)); + if (pppoe_verbose >= 2) + pppoe_printpkt_hex(printer, arg, packet->payload, ntohs(packet->length)); if (ntohs(packet->ethHdr.h_proto) != ETH_PPPOE_DISCOVERY) return; @@ -266,12 +304,13 @@ void pppoe_printpkt(PPPoEPacket *packet, } if (tlen) { if (text) - printer(arg, " %.*v", tlen, &packet->payload[i]); - else if (tlen <= 32) - printer(arg, " %.*B", tlen, &packet->payload[i]); - else - printer(arg, " %.32B... (length %d)", - &packet->payload[i], tlen); + printer(arg, " %.*s", tlen, &packet->payload[i]); + else { + for (j = 0; j < tlen && j < 32; j++) + printer(arg, " %02x", (unsigned) *(&packet->payload[i]+j)); + if (j < tlen) + printer(arg, "... (length %d)", tlen); + } } printer(arg, "]"); }