mirror of
https://github.com/the-tcpdump-group/tcpdump.git
synced 2025-01-22 23:58:16 +08:00
VXLAN: Modernize packet parsing style.
Enable ND_LONGJMP_FROM_TCHECK, print the protocol name early, report an undersized packet as invalid instead of truncated, fetch/test and advance the pointer one field at a time and print values as soon as they become available.
This commit is contained in:
parent
63ffe2f1e3
commit
f70bb5a021
@ -23,6 +23,7 @@
|
||||
|
||||
#include "netdissect-stdinc.h"
|
||||
|
||||
#define ND_LONGJMP_FROM_TCHECK
|
||||
#include "netdissect.h"
|
||||
#include "extract.h"
|
||||
|
||||
@ -53,26 +54,30 @@ vxlan_print(netdissect_options *ndo, const u_char *bp, u_int len)
|
||||
uint32_t vni;
|
||||
|
||||
ndo->ndo_protocol = "vxlan";
|
||||
nd_print_protocol_caps(ndo);
|
||||
if (len < VXLAN_HDR_LEN)
|
||||
goto trunc;
|
||||
|
||||
ND_TCHECK_LEN(bp, VXLAN_HDR_LEN);
|
||||
goto invalid;
|
||||
|
||||
flags = GET_U_1(bp);
|
||||
bp += 4;
|
||||
|
||||
vni = GET_BE_U_3(bp);
|
||||
bp += 4;
|
||||
|
||||
nd_print_protocol_caps(ndo);
|
||||
bp += 1;
|
||||
ND_PRINT(", flags [%s] (0x%02x), ",
|
||||
bittok2str_nosep(vxlan_flags, "invalid", flags), flags);
|
||||
|
||||
/* 1st Reserved */
|
||||
bp += 3;
|
||||
|
||||
vni = GET_BE_U_3(bp);
|
||||
bp += 3;
|
||||
ND_PRINT("vni %u\n", vni);
|
||||
|
||||
/* 2nd Reserved */
|
||||
ND_TCHECK_1(bp);
|
||||
bp += 1;
|
||||
|
||||
ether_print(ndo, bp, len - VXLAN_HDR_LEN, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL);
|
||||
|
||||
return;
|
||||
|
||||
trunc:
|
||||
nd_print_trunc(ndo);
|
||||
invalid:
|
||||
nd_print_invalid(ndo);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user