]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-geneve.c
gre: add support for MikroTik Ethernet-over-IP hack.
[tcpdump] / print-geneve.c
index 4d5dda6b5a61e5ca820a29aadac2da4f8f61279e..59dca93e047823de2ef2906decc6e7a314880a56 100644 (file)
@@ -97,6 +97,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";
@@ -117,7 +169,7 @@ geneve_opts_print(netdissect_options *ndo, const u_char *bp, u_int len)
         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 +196,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 +222,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 +274,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);
         }