PPPoE: Modernize packet parsing style.
Enable ND_LONGJMP_FROM_TCHECK, remove a redundant custom bounds check and
a variable, report an undersized header as an invalid packet with the
reason.
diff --git a/print-pppoe.c b/print-pppoe.c
index 50ae099..65518df 100644
--- a/print-pppoe.c
+++ b/print-pppoe.c
@@ -31,6 +31,7 @@
#include "netdissect-ctype.h"
+#define ND_LONGJMP_FROM_TCHECK
#include "netdissect.h"
#include "extract.h"
@@ -97,18 +98,13 @@
pppoe_print(netdissect_options *ndo, const u_char *bp, u_int length)
{
uint16_t pppoe_ver, pppoe_type, pppoe_code, pppoe_sessionid;
- u_int pppoe_length, caplen;
+ u_int pppoe_length;
const u_char *pppoe_packet, *pppoe_payload;
ndo->ndo_protocol = "pppoe";
- caplen = ndo->ndo_snapend - bp;
- if (caplen < PPPOE_HDRLEN) {
- nd_print_trunc(ndo);
- return caplen;
- }
if (length < PPPOE_HDRLEN) {
- nd_print_trunc(ndo);
- return length;
+ ND_PRINT(" (length %u < %u)", length, PPPOE_HDRLEN);
+ goto invalid;
}
length -= PPPOE_HDRLEN;
pppoe_packet = bp;
@@ -202,8 +198,9 @@
ND_PRINT(" ");
return (PPPOE_HDRLEN + ppp_print(ndo, pppoe_payload, pppoe_length));
}
+ /* NOTREACHED */
-trunc:
- nd_print_trunc(ndo);
- return PPPOE_HDRLEN;
+invalid:
+ nd_print_invalid(ndo);
+ return 0;
}