summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--proto_vlan.c7
-rw-r--r--proto_vlan.h27
2 files changed, 31 insertions, 3 deletions
diff --git a/proto_vlan.c b/proto_vlan.c
index a175dde..c1b3e65 100644
--- a/proto_vlan.c
+++ b/proto_vlan.c
@@ -10,6 +10,7 @@
#include <netinet/in.h> /* for ntohs() */
#include "proto.h"
+#include "proto_vlan.h"
#include "dissector_eth.h"
#include "pkt_buff.h"
@@ -29,9 +30,9 @@ static void vlan(struct pkt_buff *pkt)
tci = ntohs(vlan->h_vlan_TCI);
tprintf(" [ VLAN ");
- tprintf("Prio (%d), ", (tci & 0xE000) >> 13);
- tprintf("CFI (%d), ", (tci & 0x1000) >> 12);
- tprintf("ID (%d), ", (tci & 0x0FFF));
+ tprintf("Prio (%d), ", vlan_tci2prio(tci));
+ tprintf("CFI (%d), ", vlan_tci2cfi(tci));
+ tprintf("ID (%d), ", vlan_tci2vid(tci));
tprintf("Proto (0x%.4x)", ntohs(vlan->h_vlan_encapsulated_proto));
tprintf(" ]\n");
diff --git a/proto_vlan.h b/proto_vlan.h
new file mode 100644
index 0000000..dc31cfa
--- /dev/null
+++ b/proto_vlan.h
@@ -0,0 +1,27 @@
+/*
+ * proto_vlan.h - VLAN proto helpers & declarations
+ * Subject to the GPL, version 2.
+ */
+
+#ifndef PROTO_VLAN_H
+#define PROTO_VLAN_H
+
+#include <stdbool.h>
+#include <inttypes.h>
+
+static inline uint16_t vlan_tci2prio(uint16_t tci)
+{
+ return (tci & 0xe000) >> 13;
+}
+
+static inline uint16_t vlan_tci2cfi(uint16_t tci)
+{
+ return (tci & 0x1000) >> 12;
+}
+
+static inline uint16_t vlan_tci2vid(uint16_t tci)
+{
+ return tci & 0x0fff;
+}
+
+#endif