From 6e43e0680fc21c6a986289cec4406c3624d3bbe6 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Fri, 26 Oct 2018 05:17:03 -0700 Subject: [PATCH] Enumify interface flags clang will emit a warning when the wrong enum type is passed to a function whose arguments are an enum type. free bug finding... Change-Id: I62215d8ef22c7527a31272e31f5d190e4e762e53 Signed-off-by: Neale Ranns --- src/vnet/interface.c | 33 ++++++++++++++++------- src/vnet/interface.h | 67 +++++++++++++++++++++++++--------------------- src/vnet/interface_funcs.h | 4 +-- 3 files changed, 62 insertions(+), 42 deletions(-) diff --git a/src/vnet/interface.c b/src/vnet/interface.c index dba5a667b22..dff1793712a 100644 --- a/src/vnet/interface.c +++ b/src/vnet/interface.c @@ -44,18 +44,25 @@ #include #include -#define VNET_INTERFACE_SET_FLAGS_HELPER_IS_CREATE (1 << 0) -#define VNET_INTERFACE_SET_FLAGS_HELPER_WANT_REDISTRIBUTE (1 << 1) +typedef enum vnet_interface_helper_flags_t_ +{ + VNET_INTERFACE_SET_FLAGS_HELPER_IS_CREATE = (1 << 0), + VNET_INTERFACE_SET_FLAGS_HELPER_WANT_REDISTRIBUTE = (1 << 1), +} vnet_interface_helper_flags_t; static clib_error_t *vnet_hw_interface_set_flags_helper (vnet_main_t * vnm, u32 hw_if_index, - u32 flags, - u32 helper_flags); + vnet_hw_interface_flags_t + flags, + vnet_interface_helper_flags_t + helper_flags); static clib_error_t *vnet_sw_interface_set_flags_helper (vnet_main_t * vnm, u32 sw_if_index, - u32 flags, - u32 helper_flags); + vnet_sw_interface_flags_t + flags, + vnet_interface_helper_flags_t + helper_flags); static clib_error_t *vnet_hw_interface_set_class_helper (vnet_main_t * vnm, u32 hw_if_index, @@ -260,7 +267,9 @@ call_sw_interface_add_del_callbacks (vnet_main_t * vnm, u32 sw_if_index, static clib_error_t * vnet_hw_interface_set_flags_helper (vnet_main_t * vnm, u32 hw_if_index, - u32 flags, u32 helper_flags) + vnet_hw_interface_flags_t flags, + vnet_interface_helper_flags_t + helper_flags) { vnet_hw_interface_t *hi = vnet_get_hw_interface (vnm, hw_if_index); vnet_hw_interface_class_t *hw_class = @@ -308,7 +317,9 @@ done: static clib_error_t * vnet_sw_interface_set_flags_helper (vnet_main_t * vnm, u32 sw_if_index, - u32 flags, u32 helper_flags) + vnet_sw_interface_flags_t flags, + vnet_interface_helper_flags_t + helper_flags) { vnet_sw_interface_t *si = vnet_get_sw_interface (vnm, sw_if_index); u32 mask; @@ -466,7 +477,8 @@ done: } clib_error_t * -vnet_hw_interface_set_flags (vnet_main_t * vnm, u32 hw_if_index, u32 flags) +vnet_hw_interface_set_flags (vnet_main_t * vnm, u32 hw_if_index, + vnet_hw_interface_flags_t flags) { return vnet_hw_interface_set_flags_helper (vnm, hw_if_index, flags, @@ -474,7 +486,8 @@ vnet_hw_interface_set_flags (vnet_main_t * vnm, u32 hw_if_index, u32 flags) } clib_error_t * -vnet_sw_interface_set_flags (vnet_main_t * vnm, u32 sw_if_index, u32 flags) +vnet_sw_interface_set_flags (vnet_main_t * vnm, u32 sw_if_index, + vnet_sw_interface_flags_t flags) { return vnet_sw_interface_set_flags_helper (vnm, sw_if_index, flags, diff --git a/src/vnet/interface.h b/src/vnet/interface.h index 7ce6aafdf54..5c15d29f453 100644 --- a/src/vnet/interface.h +++ b/src/vnet/interface.h @@ -482,38 +482,40 @@ static void __vnet_rm_hw_interface_class_registration_##x (void) \ } \ __VA_ARGS__ vnet_hw_interface_class_t x -/* Hardware-interface. This corresponds to a physical wire - that packets flow over. */ -typedef struct vnet_hw_interface_t +typedef enum vnet_hw_interface_flags_t_ { - /* Interface name. */ - u8 *name; - - u32 flags; /* Hardware link state is up. */ -#define VNET_HW_INTERFACE_FLAG_LINK_UP (1 << 0) + VNET_HW_INTERFACE_FLAG_LINK_UP = (1 << 0), /* Hardware duplex state */ -#define VNET_HW_INTERFACE_FLAG_DUPLEX_SHIFT 1 -#define VNET_HW_INTERFACE_FLAG_HALF_DUPLEX (1 << 1) -#define VNET_HW_INTERFACE_FLAG_FULL_DUPLEX (1 << 2) + VNET_HW_INTERFACE_FLAG_HALF_DUPLEX = (1 << 1), + VNET_HW_INTERFACE_FLAG_FULL_DUPLEX = (1 << 2), + + /* Hardware link speed */ + VNET_HW_INTERFACE_FLAG_SPEED_10M = (1 << 3), + VNET_HW_INTERFACE_FLAG_SPEED_100M = (1 << 4), + VNET_HW_INTERFACE_FLAG_SPEED_1G = (1 << 5), + VNET_HW_INTERFACE_FLAG_SPEED_2_5G = (1 << 6), + VNET_HW_INTERFACE_FLAG_SPEED_5G = (1 << 7), + VNET_HW_INTERFACE_FLAG_SPEED_10G = (1 << 8), + VNET_HW_INTERFACE_FLAG_SPEED_20G = (1 << 9), + VNET_HW_INTERFACE_FLAG_SPEED_25G = (1 << 10), + VNET_HW_INTERFACE_FLAG_SPEED_40G = (1 << 11), + VNET_HW_INTERFACE_FLAG_SPEED_50G = (1 << 12), + VNET_HW_INTERFACE_FLAG_SPEED_56G = (1 << 13), + VNET_HW_INTERFACE_FLAG_SPEED_100G = (1 << 14), + + /* rx mode flags */ + VNET_HW_INTERFACE_FLAG_SUPPORTS_INT_MODE = (1 << 16), + + /* tx checksum offload */ + VNET_HW_INTERFACE_FLAG_SUPPORTS_TX_L4_CKSUM_OFFLOAD = (1 << 17), +} vnet_hw_interface_flags_t; + +#define VNET_HW_INTERFACE_FLAG_DUPLEX_SHIFT 1 +#define VNET_HW_INTERFACE_FLAG_SPEED_SHIFT 3 #define VNET_HW_INTERFACE_FLAG_DUPLEX_MASK \ (VNET_HW_INTERFACE_FLAG_HALF_DUPLEX | \ VNET_HW_INTERFACE_FLAG_FULL_DUPLEX) - - /* Hardware link speed */ -#define VNET_HW_INTERFACE_FLAG_SPEED_SHIFT 3 -#define VNET_HW_INTERFACE_FLAG_SPEED_10M (1 << 3) -#define VNET_HW_INTERFACE_FLAG_SPEED_100M (1 << 4) -#define VNET_HW_INTERFACE_FLAG_SPEED_1G (1 << 5) -#define VNET_HW_INTERFACE_FLAG_SPEED_2_5G (1 << 6) -#define VNET_HW_INTERFACE_FLAG_SPEED_5G (1 << 7) -#define VNET_HW_INTERFACE_FLAG_SPEED_10G (1 << 8) -#define VNET_HW_INTERFACE_FLAG_SPEED_20G (1 << 9) -#define VNET_HW_INTERFACE_FLAG_SPEED_25G (1 << 10) -#define VNET_HW_INTERFACE_FLAG_SPEED_40G (1 << 11) -#define VNET_HW_INTERFACE_FLAG_SPEED_50G (1 << 12) -#define VNET_HW_INTERFACE_FLAG_SPEED_56G (1 << 13) -#define VNET_HW_INTERFACE_FLAG_SPEED_100G (1 << 14) #define VNET_HW_INTERFACE_FLAG_SPEED_MASK \ (VNET_HW_INTERFACE_FLAG_SPEED_10M | \ VNET_HW_INTERFACE_FLAG_SPEED_100M | \ @@ -528,11 +530,15 @@ typedef struct vnet_hw_interface_t VNET_HW_INTERFACE_FLAG_SPEED_56G | \ VNET_HW_INTERFACE_FLAG_SPEED_100G) - /* rx mode flags */ -#define VNET_HW_INTERFACE_FLAG_SUPPORTS_INT_MODE (1 << 16) +/* Hardware-interface. This corresponds to a physical wire + that packets flow over. */ +typedef struct vnet_hw_interface_t +{ + /* Interface name. */ + u8 *name; - /* tx checksum offload */ -#define VNET_HW_INTERFACE_FLAG_SUPPORTS_TX_L4_CKSUM_OFFLOAD (1 << 17) + /* flags */ + vnet_hw_interface_flags_t flags; /* Hardware address as vector. Zero (e.g. zero-length vector) if no address for this class (e.g. PPP). */ @@ -686,6 +692,7 @@ extern vnet_mtu_t vnet_link_to_mtu (vnet_link_t link); typedef enum vnet_sw_interface_flags_t_ { + VNET_SW_INTERFACE_FLAG_ADMIN_NONE = 0, /* Interface is "up" meaning administratively up. Up in the sense of link state being up is maintained by hardware interface. */ VNET_SW_INTERFACE_FLAG_ADMIN_UP = (1 << 0), diff --git a/src/vnet/interface_funcs.h b/src/vnet/interface_funcs.h index 557ed146a3a..00fc289b46a 100644 --- a/src/vnet/interface_funcs.h +++ b/src/vnet/interface_funcs.h @@ -320,11 +320,11 @@ vnet_put_frame_to_sw_interface (vnet_main_t * vnm, u32 sw_if_index, /* Change interface flags (e.g. up, down, enable, disable). */ clib_error_t *vnet_hw_interface_set_flags (vnet_main_t * vnm, u32 hw_if_index, - u32 flags); + vnet_hw_interface_flags_t flags); /* Change interface flags (e.g. up, down, enable, disable). */ clib_error_t *vnet_sw_interface_set_flags (vnet_main_t * vnm, u32 sw_if_index, - u32 flags); + vnet_sw_interface_flags_t flags); /* Change interface class. */ clib_error_t *vnet_hw_interface_set_class (vnet_main_t * vnm, u32 hw_if_index, -- 2.16.6