-static const struct tok ofpt_str[] = {
- { OFPT_HELLO, "HELLO" },
- { OFPT_ERROR, "ERROR" },
- { OFPT_ECHO_REQUEST, "ECHO_REQUEST" },
- { OFPT_ECHO_REPLY, "ECHO_REPLY" },
- { OFPT_EXPERIMENTER, "EXPERIMENTER" },
- { OFPT_FEATURES_REQUEST, "FEATURES_REQUEST" },
- { OFPT_FEATURES_REPLY, "FEATURES_REPLY" },
- { OFPT_GET_CONFIG_REQUEST, "GET_CONFIG_REQUEST" },
- { OFPT_GET_CONFIG_REPLY, "GET_CONFIG_REPLY" },
- { OFPT_SET_CONFIG, "SET_CONFIG" },
- { OFPT_PACKET_IN, "PACKET_IN" },
- { OFPT_FLOW_REMOVED, "FLOW_REMOVED" },
- { OFPT_PORT_STATUS, "PORT_STATUS" },
- { OFPT_PACKET_OUT, "PACKET_OUT" },
- { OFPT_FLOW_MOD, "FLOW_MOD" },
- { OFPT_GROUP_MOD, "GROUP_MOD" },
- { OFPT_PORT_MOD, "PORT_MOD" },
- { OFPT_TABLE_MOD, "TABLE_MOD" },
- { OFPT_MULTIPART_REQUEST, "MULTIPART_REQUEST" },
- { OFPT_MULTIPART_REPLY, "MULTIPART_REPLY" },
- { OFPT_BARRIER_REQUEST, "BARRIER_REQUEST" },
- { OFPT_BARRIER_REPLY, "BARRIER_REPLY" },
- { OFPT_QUEUE_GET_CONFIG_REQUEST, "QUEUE_GET_CONFIG_REQUEST" },
- { OFPT_QUEUE_GET_CONFIG_REPLY, "QUEUE_GET_CONFIG_REPLY" },
- { OFPT_ROLE_REQUEST, "ROLE_REQUEST" },
- { OFPT_ROLE_REPLY, "ROLE_REPLY" },
- { OFPT_GET_ASYNC_REQUEST, "GET_ASYNC_REQUEST" },
- { OFPT_GET_ASYNC_REPLY, "GET_ASYNC_REPLY" },
- { OFPT_SET_ASYNC, "SET_ASYNC" },
- { OFPT_METER_MOD, "METER_MOD" },
+#define OFPT_MAX OFPT_METER_MOD
+
+#define OFPC_FLOW_STATS (1U <<0)
+#define OFPC_TABLE_STATS (1U <<1)
+#define OFPC_PORT_STATS (1U <<2)
+#define OFPC_GROUP_STATS (1U <<3)
+#define OFPC_IP_REASM (1U <<5)
+#define OFPC_QUEUE_STATS (1U <<6)
+#define OFPC_PORT_BLOCKED (1U <<8)
+static const struct tok ofp_capabilities_bm[] = {
+ { OFPC_FLOW_STATS, "FLOW_STATS" },
+ { OFPC_TABLE_STATS, "TABLE_STATS" },
+ { OFPC_PORT_STATS, "PORT_STATS" },
+ { OFPC_GROUP_STATS, "GROUP_STATS" },
+ { OFPC_IP_REASM, "IP_REASM" },
+ { OFPC_QUEUE_STATS, "QUEUE_STATS" },
+ { OFPC_PORT_BLOCKED, "PORT_BLOCKED" },
+ { 0, NULL }
+};
+#define OFPCAP_U (~(OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
+ OFPC_GROUP_STATS | OFPC_IP_REASM | OFPC_QUEUE_STATS | \
+ OFPC_PORT_BLOCKED))
+
+#define OFPC_FRAG_NORMAL 0U
+#define OFPC_FRAG_DROP 1U
+#define OFPC_FRAG_REASM 2U
+static const struct tok ofp_config_str[] = {
+ { OFPC_FRAG_NORMAL, "FRAG_NORMAL" },
+ { OFPC_FRAG_DROP, "FRAG_DROP" },
+ { OFPC_FRAG_REASM, "FRAG_REASM" },
+ { 0, NULL }
+};
+
+#define OFPTT_MAX 0xfeU
+#define OFPTT_ALL 0xffU
+static const struct tok ofptt_str[] = {
+ { OFPTT_MAX, "MAX" },
+ { OFPTT_ALL, "ALL" },
+ { 0, NULL },
+};
+
+#define OFPCML_MAX 0xffe5U
+#define OFPCML_NO_BUFFER 0xffffU
+static const struct tok ofpcml_str[] = {
+ { OFPCML_MAX, "MAX" },
+ { OFPCML_NO_BUFFER, "NO_BUFFER" },
+ { 0, NULL }
+};
+
+#define OFPPC_PORT_DOWN (1U <<0)
+#define OFPPC_NO_RECV (1U <<2)
+#define OFPPC_NO_FWD (1U <<5)
+#define OFPPC_NO_PACKET_IN (1U <<6)
+static const struct tok ofppc_bm[] = {
+ { OFPPC_PORT_DOWN, "PORT_DOWN" },
+ { OFPPC_NO_RECV, "NO_RECV" },
+ { OFPPC_NO_FWD, "NO_FWD" },
+ { OFPPC_NO_PACKET_IN, "NO_PACKET_IN" },
+ { 0, NULL }
+};
+#define OFPPC_U (~(OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | \
+ OFPPC_NO_PACKET_IN))
+
+#define OFPPS_LINK_DOWN (1U << 0)
+#define OFPPS_BLOCKED (1U << 1)
+#define OFPPS_LIVE (1U << 2)
+static const struct tok ofpps_bm[] = {
+ { OFPPS_LINK_DOWN, "LINK_DOWN" },
+ { OFPPS_BLOCKED, "BLOCKED" },
+ { OFPPS_LIVE, "LIVE" },
+ { 0, NULL }
+};
+#define OFPPS_U (~(OFPPS_LINK_DOWN | OFPPS_BLOCKED | OFPPS_LIVE))
+
+#define OFPPF_10MB_HD (1U << 0)
+#define OFPPF_10MB_FD (1U << 1)
+#define OFPPF_100MB_HD (1U << 2)
+#define OFPPF_100MB_FD (1U << 3)
+#define OFPPF_1GB_HD (1U << 4)
+#define OFPPF_1GB_FD (1U << 5)
+#define OFPPF_10GB_FD (1U << 6)
+#define OFPPF_40GB_FD (1U << 7)
+#define OFPPF_100GB_FD (1U << 8)
+#define OFPPF_1TB_FD (1U << 9)
+#define OFPPF_OTHER (1U << 10)
+#define OFPPF_COPPER (1U << 11)
+#define OFPPF_FIBER (1U << 12)
+#define OFPPF_AUTONEG (1U << 13)
+#define OFPPF_PAUSE (1U << 14)
+#define OFPPF_PAUSE_ASYM (1U << 15)
+static const struct tok ofppf_bm[] = {
+ { OFPPF_10MB_HD, "10MB_HD" },
+ { OFPPF_10MB_FD, "10MB_FD" },
+ { OFPPF_100MB_HD, "100MB_HD" },
+ { OFPPF_100MB_FD, "100MB_FD" },
+ { OFPPF_1GB_HD, "1GB_HD" },
+ { OFPPF_1GB_FD, "1GB_FD" },
+ { OFPPF_10GB_FD, "10GB_FD" },
+ { OFPPF_40GB_FD, "40GB_FD" },
+ { OFPPF_100GB_FD, "100GB_FD" },
+ { OFPPF_1TB_FD, "1TB_FD" },
+ { OFPPF_OTHER, "OTHER" },
+ { OFPPF_COPPER, "COPPER" },
+ { OFPPF_FIBER, "FIBER" },
+ { OFPPF_AUTONEG, "AUTONEG" },
+ { OFPPF_PAUSE, "PAUSE" },
+ { OFPPF_PAUSE_ASYM, "PAUSE_ASYM" },
+ { 0, NULL }
+};
+#define OFPPF_U (~(OFPPF_10MB_HD | OFPPF_10MB_FD | OFPPF_100MB_HD | \
+ OFPPF_100MB_FD | OFPPF_1GB_HD | OFPPF_1GB_FD | \
+ OFPPF_10GB_FD | OFPPF_40GB_FD | OFPPF_100GB_FD | \
+ OFPPF_1TB_FD | OFPPF_OTHER | OFPPF_COPPER | OFPPF_FIBER | \
+ OFPPF_AUTONEG | OFPPF_PAUSE | OFPPF_PAUSE_ASYM))
+
+#define OFPHET_VERSIONBITMAP 1U
+static const struct tok ofphet_str[] = {
+ { OFPHET_VERSIONBITMAP, "VERSIONBITMAP" },