In order to avoid having to maintain separate mappings from enum
values to strings, wrap enumerators in mapper macros, so that
enum-to-string tables can be generated.

This will make it easier to create helpers that convert switchdev
objects to strings.

Signed-off-by: Tobias Waldekranz <[email protected]>
---
 include/net/switchdev.h | 113 ++++++++++++++++++++++++----------------
 1 file changed, 68 insertions(+), 45 deletions(-)

diff --git a/include/net/switchdev.h b/include/net/switchdev.h
index 8346b0d29542..86298a21c6c8 100644
--- a/include/net/switchdev.h
+++ b/include/net/switchdev.h
@@ -16,21 +16,28 @@
 #define SWITCHDEV_F_SKIP_EOPNOTSUPP    BIT(1)
 #define SWITCHDEV_F_DEFER              BIT(2)
 
+#define SWITCHDEV_ATTR_ID_MAPPER(_fn)  \
+       _fn(UNDEFINED),                 \
+       _fn(PORT_STP_STATE),            \
+       _fn(PORT_MST_STATE),            \
+       _fn(PORT_BRIDGE_FLAGS),         \
+       _fn(PORT_PRE_BRIDGE_FLAGS),     \
+       _fn(PORT_MROUTER),              \
+       _fn(BRIDGE_AGEING_TIME),        \
+       _fn(BRIDGE_VLAN_FILTERING),     \
+       _fn(BRIDGE_VLAN_PROTOCOL),      \
+       _fn(BRIDGE_MC_DISABLED),        \
+       _fn(BRIDGE_MROUTER),            \
+       _fn(BRIDGE_MST),                \
+       _fn(MRP_PORT_ROLE),             \
+       _fn(VLAN_MSTI),                 \
+       /*  */
+
+#define SWITCHDEV_ATTR_ID_ENUMERATOR(_id) \
+       SWITCHDEV_ATTR_ID_ ## _id
+
 enum switchdev_attr_id {
-       SWITCHDEV_ATTR_ID_UNDEFINED,
-       SWITCHDEV_ATTR_ID_PORT_STP_STATE,
-       SWITCHDEV_ATTR_ID_PORT_MST_STATE,
-       SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS,
-       SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS,
-       SWITCHDEV_ATTR_ID_PORT_MROUTER,
-       SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME,
-       SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING,
-       SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL,
-       SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED,
-       SWITCHDEV_ATTR_ID_BRIDGE_MROUTER,
-       SWITCHDEV_ATTR_ID_BRIDGE_MST,
-       SWITCHDEV_ATTR_ID_MRP_PORT_ROLE,
-       SWITCHDEV_ATTR_ID_VLAN_MSTI,
+       SWITCHDEV_ATTR_ID_MAPPER(SWITCHDEV_ATTR_ID_ENUMERATOR)
 };
 
 struct switchdev_mst_state {
@@ -69,18 +76,25 @@ struct switchdev_attr {
        } u;
 };
 
+#define SWITCHDEV_OBJ_ID_MAPPER(_fn)   \
+       _fn(UNDEFINED),                 \
+       _fn(PORT_VLAN),                 \
+       _fn(PORT_MDB),                  \
+       _fn(HOST_MDB),                  \
+       _fn(MRP),                       \
+       _fn(RING_TEST_MRP),             \
+       _fn(RING_ROLE_MRP),             \
+       _fn(RING_STATE_MRP),            \
+       _fn(IN_TEST_MRP),               \
+       _fn(IN_ROLE_MRP),               \
+       _fn(IN_STATE_MRP),              \
+       /*  */
+
+#define SWITCHDEV_OBJ_ID_ENUMERATOR(_id) \
+       SWITCHDEV_OBJ_ID_ ## _id
+
 enum switchdev_obj_id {
-       SWITCHDEV_OBJ_ID_UNDEFINED,
-       SWITCHDEV_OBJ_ID_PORT_VLAN,
-       SWITCHDEV_OBJ_ID_PORT_MDB,
-       SWITCHDEV_OBJ_ID_HOST_MDB,
-       SWITCHDEV_OBJ_ID_MRP,
-       SWITCHDEV_OBJ_ID_RING_TEST_MRP,
-       SWITCHDEV_OBJ_ID_RING_ROLE_MRP,
-       SWITCHDEV_OBJ_ID_RING_STATE_MRP,
-       SWITCHDEV_OBJ_ID_IN_TEST_MRP,
-       SWITCHDEV_OBJ_ID_IN_ROLE_MRP,
-       SWITCHDEV_OBJ_ID_IN_STATE_MRP,
+       SWITCHDEV_OBJ_ID_MAPPER(SWITCHDEV_OBJ_ID_ENUMERATOR)
 };
 
 struct switchdev_obj {
@@ -209,27 +223,36 @@ struct switchdev_brport {
        bool tx_fwd_offload;
 };
 
+#define SWITCHDEV_TYPE_MAPPER(_fn)     \
+       _fn(UNKNOWN),                   \
+                                       \
+       _fn(FDB_ADD_TO_BRIDGE),         \
+       _fn(FDB_DEL_TO_BRIDGE),         \
+       _fn(FDB_ADD_TO_DEVICE),         \
+       _fn(FDB_DEL_TO_DEVICE),         \
+       _fn(FDB_OFFLOADED),             \
+       _fn(FDB_FLUSH_TO_BRIDGE),       \
+                                       \
+       _fn(PORT_OBJ_ADD),              \
+       _fn(PORT_OBJ_DEL),              \
+       _fn(PORT_ATTR_SET),             \
+                                       \
+       _fn(VXLAN_FDB_ADD_TO_BRIDGE),   \
+       _fn(VXLAN_FDB_DEL_TO_BRIDGE),   \
+       _fn(VXLAN_FDB_ADD_TO_DEVICE),   \
+       _fn(VXLAN_FDB_DEL_TO_DEVICE),   \
+       _fn(VXLAN_FDB_OFFLOADED),       \
+                                       \
+       _fn(BRPORT_OFFLOADED),          \
+       _fn(BRPORT_UNOFFLOADED),        \
+       _fn(BRPORT_REPLAY),             \
+       /*  */
+
+#define SWITCHDEV_TYPE_ENUMERATOR(_id) \
+       SWITCHDEV_ ## _id
+
 enum switchdev_notifier_type {
-       SWITCHDEV_FDB_ADD_TO_BRIDGE = 1,
-       SWITCHDEV_FDB_DEL_TO_BRIDGE,
-       SWITCHDEV_FDB_ADD_TO_DEVICE,
-       SWITCHDEV_FDB_DEL_TO_DEVICE,
-       SWITCHDEV_FDB_OFFLOADED,
-       SWITCHDEV_FDB_FLUSH_TO_BRIDGE,
-
-       SWITCHDEV_PORT_OBJ_ADD, /* Blocking. */
-       SWITCHDEV_PORT_OBJ_DEL, /* Blocking. */
-       SWITCHDEV_PORT_ATTR_SET, /* May be blocking . */
-
-       SWITCHDEV_VXLAN_FDB_ADD_TO_BRIDGE,
-       SWITCHDEV_VXLAN_FDB_DEL_TO_BRIDGE,
-       SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE,
-       SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE,
-       SWITCHDEV_VXLAN_FDB_OFFLOADED,
-
-       SWITCHDEV_BRPORT_OFFLOADED,
-       SWITCHDEV_BRPORT_UNOFFLOADED,
-       SWITCHDEV_BRPORT_REPLAY,
+       SWITCHDEV_TYPE_MAPPER(SWITCHDEV_TYPE_ENUMERATOR)
 };
 
 struct switchdev_notifier_info {
-- 
2.34.1


Reply via email to