+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; base<len; base += 16) {
+ for (i=base; i<base+16; i++) {
+ if (i < len) {
+ printer(arg, "%02x ", (unsigned) buf[i]);
+ } else {
+ printer(arg, " ");
+ }
+ }
+ printer(arg, " ");
+ for (i=base; i<base+16; i++) {
+ if (i < len) {
+ if (isprint(buf[i])) {
+ printer(arg, "%c", buf[i]);
+ } else {
+ printer(arg, ".");
+ }
+ } else {
+ break;
+ }
+ }
+ printer(arg, "\n");
+ }
+}
+