* https://lwn.net/Articles/302333/
*/
struct medsa_pkthdr {
- u_char bytes[6];
- u_short ether_type;
+ nd_byte reserved[2];
+ nd_uint8_t tag_flags_dev;
+ nd_uint8_t port_trunc_codehi_cfi;
+ nd_uint8_t pri_vidhi_codelo;
+ nd_uint8_t vidlo;
+ nd_uint16_t ether_type;
};
/* Bytes 0 and 1 are reserved and should contain 0 */
-#define TAG(medsa) (medsa->bytes[2] >> 6)
+#define TAG(medsa) (EXTRACT_U_1(medsa->tag_flags_dev) >> 6)
#define TAG_TO_CPU 0
#define TAG_FROM_CPU 1
#define TAG_FORWARD 3
-#define SRC_TAG(medsa) ((medsa->bytes[2] >> 5) & 0x01)
-#define SRC_DEV(medsa) (medsa->bytes[2] & 0x1f)
-#define SRC_PORT(medsa) ((medsa->bytes[3] >> 3) & 0x01f)
-#define TRUNK(medsa) ((medsa->bytes[3] >> 2) & 0x01)
-#define CODE(medsa) ((medsa->bytes[3] & 0x06) | \
- ((medsa->bytes[4] >> 4) & 0x01))
+#define SRC_TAG(medsa) ((EXTRACT_U_1(medsa->tag_flags_dev) >> 5) & 0x01)
+#define SRC_DEV(medsa) (EXTRACT_U_1(medsa->tag_flags_dev) & 0x1f)
+#define SRC_PORT(medsa) ((EXTRACT_U_1(medsa->port_trunc_codehi_cfi) >> 3) & 0x01f)
+#define TRUNK(medsa) ((EXTRACT_U_1(medsa->port_trunc_codehi_cfi) >> 2) & 0x01)
+#define CODE(medsa) ((EXTRACT_U_1(medsa->port_trunc_codehi_cfi) & 0x06) | \
+ ((EXTRACT_U_1(medsa->pri_vidhi_codelo) >> 4) & 0x01))
#define CODE_BDPU 0
#define CODE_IGMP_MLD 2
#define CODE_ARP_MIRROR 4
-#define CFI(medsa) (medsa->bytes[3] & 0x01)
-#define PRI(medsa) (medsa->bytes[4] >> 5)
-#define VID(medsa) (((u_short)(medsa->bytes[4] & 0xf) << 8 | \
- medsa->bytes[5]))
+#define CFI(medsa) (EXTRACT_U_1(medsa->port_trunc_codehi_cfi) & 0x01)
+#define PRI(medsa) (EXTRACT_U_1(medsa->pri_vidhi_codelo) >> 5)
+#define VID(medsa) (((u_short)(EXTRACT_U_1(medsa->pri_vidhi_codelo) & 0xf) << 8 | \
+ EXTRACT_U_1(medsa->vidlo)))
static const struct tok tag_values[] = {
{ TAG_TO_CPU, "To_CPU" },