]> The Tcpdump Group git mirrors - tcpdump/commitdiff
refine 802.1Q VLAN TCI decoding
authorDenis Ovsienko <[email protected]>
Thu, 29 Jan 2015 19:48:25 +0000 (19:48 +0000)
committerDenis Ovsienko <[email protected]>
Thu, 29 Jan 2015 20:38:54 +0000 (20:38 +0000)
Factor the common code out to a new function and rename the CFI bit to
DEI to match the terminology in Clause 9.6 of IEEE 802.1Q-2011.

addrtoname.c
addrtoname.h
print-ether.c
print-sll.c

index f6e070e705b47400a219f467c6e4cebb85259124..d0437fe490a37e11f3fb399264cfd8347dec44ca 100644 (file)
@@ -1215,3 +1215,15 @@ newh6namemem(void)
        return (p);
 }
 #endif /* INET6 */
+
+/* Represent TCI part of the 802.1Q 4-octet tag as text. */
+const char *
+ieee8021q_tci_string(const uint16_t tci)
+{
+       static char buf[128];
+       snprintf(buf, sizeof(buf), "vlan %u, p %u%s",
+                tci & 0xfff,
+                tci >> 13,
+                (tci & 0x1000) ? ", DEI" : "");
+       return buf;
+}
index 252c570e401d825d2a506253052cbe46ca51f1d5..b07d8b29e4cf6ff04e83574c6b3f1bf8323bd49f 100644 (file)
@@ -51,6 +51,7 @@ extern struct hnamemem *newhnamemem(void);
 #ifdef INET6
 extern struct h6namemem *newh6namemem(void);
 #endif
+extern const char * ieee8021q_tci_string(const uint16_t);
 
 #define ipaddr_string(ndo, p) getname(ndo, (const u_char *)(p))
 #ifdef INET6
index 49e7803cfe727d1064a4b07d698d5c3113e05b5f..e57d993b965e846ffc5670d470d198a08ce8e604 100644 (file)
@@ -185,10 +185,7 @@ recurse:
                if (ndo->ndo_eflag) {
                        uint16_t tag = EXTRACT_16BITS(p);
 
-                       ND_PRINT((ndo, "vlan %u, p %u%s, ",
-                           tag & 0xfff,
-                           tag >> 13,
-                           (tag & 0x1000) ? ", CFI" : ""));
+                       ND_PRINT((ndo, "%s, ", ieee8021q_tci_string(tag)));
                }
 
                ether_type = EXTRACT_16BITS(p + 2);
index 0ca36f53e46b1badfee1c95548b32a9023a72d05..1f5f60084a20441ce34f6add5e65c2e915aa2b89 100644 (file)
@@ -280,10 +280,7 @@ recurse:
                if (ndo->ndo_eflag) {
                        uint16_t tag = EXTRACT_16BITS(p);
 
-                       ND_PRINT((ndo, "vlan %u, p %u%s, ",
-                           tag & 0xfff,
-                           tag >> 13,
-                           (tag & 0x1000) ? ", CFI" : ""));
+                       ND_PRINT((ndo, "%s, ", ieee8021q_tci_string(tag)));
                }
 
                ether_type = EXTRACT_16BITS(p + 2);