X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/cfa9ab5f80dd9a1024e1a765bc0d24c57652b6bc..refs/heads/master:/print-geneve.c?ds=inline diff --git a/print-geneve.c b/print-geneve.c index 4d5dda6b..171b3154 100644 --- a/print-geneve.c +++ b/print-geneve.c @@ -18,9 +18,7 @@ /* \summary: Generic Network Virtualization Encapsulation (Geneve) printer */ /* specification: RFC 8926 */ -#ifdef HAVE_CONFIG_H #include -#endif #include "netdissect-stdinc.h" @@ -97,6 +95,58 @@ format_opt_class(const uint16_t opt_class) return "In-band Network Telemetry (INT)"; case 0x0104: return "VMware"; + case 0x0105: + case 0x0108: + case 0x0109: + case 0x010A: + case 0x010B: + case 0x010C: + case 0x010D: + case 0x010E: + case 0x010F: + case 0x0110: + return "Amazon"; + case 0x0106: + case 0x0130: + case 0x0131: + return "Cisco"; + case 0x0107: + return "Oracle"; + case 0x0111: + case 0x0112: + case 0x0113: + case 0x0114: + case 0x0115: + case 0x0116: + case 0x0117: + case 0x0118: + return "IBM"; + case 0x0119: + case 0x011A: + case 0x011B: + case 0x011C: + case 0x011D: + case 0x011E: + case 0x011F: + case 0x0120: + case 0x0121: + case 0x0122: + case 0x0123: + case 0x0124: + case 0x0125: + case 0x0126: + case 0x0127: + case 0x0128: + return "Ericsson"; + case 0x0129: + return "Oxide"; + case 0x0132: + case 0x0133: + case 0x0134: + case 0x0135: + return "Google"; + case 0x0136: + return "InfoQuick"; default: if (opt_class <= 0x00ff) return "Standard"; @@ -112,12 +162,12 @@ geneve_opts_print(netdissect_options *ndo, const u_char *bp, u_int len) { const char *sep = ""; - while (len > 0) { + while (len != 0) { uint16_t opt_class; uint8_t opt_type; uint8_t opt_len; - ND_LCHECKMSG_U(len, 4, "remaining options length"); + ND_ICHECKMSG_U("remaining options length", len, <, 4); ND_PRINT("%s", sep); sep = ", "; @@ -144,7 +194,8 @@ geneve_opts_print(netdissect_options *ndo, const u_char *bp, u_int len) ND_PRINT(" %08x", GET_BE_U_4(data)); data++; } - } + } else + ND_TCHECK_LEN(bp, opt_len); bp += opt_len; len -= opt_len; @@ -169,7 +220,7 @@ geneve_print(netdissect_options *ndo, const u_char *bp, u_int len) ndo->ndo_protocol = "geneve"; ND_PRINT("Geneve"); - ND_LCHECK_U(len, 8); + ND_ICHECK_U(len, <, 8); ver_opt = GET_U_1(bp); bp += 1; @@ -221,8 +272,7 @@ geneve_print(netdissect_options *ndo, const u_char *bp, u_int len) if (ndo->ndo_vflag) { if (! geneve_opts_print(ndo, bp, opts_len)) goto invalid; - } - else { + } else { ND_TCHECK_LEN(bp, opts_len); ND_PRINT("%u bytes", opts_len); }