/* \summary: Generic Network Virtualization Encapsulation (Geneve) printer */
/* specification: RFC 8926 */
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
#include "netdissect-stdinc.h"
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";
{
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 = ", ";
ND_PRINT(" %08x", GET_BE_U_4(data));
data++;
}
- }
+ } else
+ ND_TCHECK_LEN(bp, opt_len);
bp += opt_len;
len -= opt_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;
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);
}