diff options
-rw-r--r-- | proto_vlan.c | 7 | ||||
-rw-r--r-- | proto_vlan.h | 27 |
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 |