40 #ifndef _OPENFLOW_OPENFLOW12_H
41 #define _OPENFLOW_OPENFLOW12_H 1
43 #include "rofl/common/openflow/openflow_common.h"
54 namespace openflow12 {
60 #define OFP12_VERSION 3
93 OFPP_MAX = 0xffffff00,
96 OFPP_IN_PORT = 0xfffffff8,
100 OFPP_TABLE = 0xfffffff9,
103 OFPP_NORMAL = 0xfffffffa,
104 OFPP_FLOOD = 0xfffffffb,
106 OFPP_ALL = 0xfffffffc,
107 OFPP_CONTROLLER = 0xfffffffd,
108 OFPP_LOCAL = 0xfffffffe,
109 OFPP_ANY = 0xffffffff
120 OFPT_ECHO_REQUEST = 2,
122 OFPT_EXPERIMENTER = 4,
125 OFPT_FEATURES_REQUEST = 5,
126 OFPT_FEATURES_REPLY = 6,
127 OFPT_GET_CONFIG_REQUEST = 7,
128 OFPT_GET_CONFIG_REPLY = 8,
133 OFPT_FLOW_REMOVED = 11,
134 OFPT_PORT_STATUS = 12,
137 OFPT_PACKET_OUT = 13,
144 OFPT_MULTIPART_REQUEST = 18,
145 OFPT_MULTIPART_REPLY = 19,
148 OFPT_STATS_REQUEST = 18,
149 OFPT_STATS_REPLY = 19,
152 OFPT_BARRIER_REQUEST = 20,
153 OFPT_BARRIER_REPLY = 21,
156 OFPT_QUEUE_GET_CONFIG_REQUEST = 22,
157 OFPT_QUEUE_GET_CONFIG_REPLY = 23,
160 OFPT_ROLE_REQUEST = 24,
161 OFPT_ROLE_REPLY = 25,
164 OFPT_GET_ASYNC_REQUEST = 26,
165 OFPT_GET_ASYNC_REPLY = 27,
179 #define OFP_DEFAULT_MISS_SEND_LEN 128
181 enum ofp_config_flags {
183 OFPC_FRAG_NORMAL = 0,
184 OFPC_FRAG_DROP = 1 << 0,
185 OFPC_FRAG_REASM = 1 << 1,
189 OFPC_INVALID_TTL_TO_CONTROLLER = 1 << 2,
197 uint16_t miss_send_len;
205 enum ofp_table_config {
206 OFPTC_TABLE_MISS_CONTROLLER = 0,
207 OFPTC_TABLE_MISS_CONTINUE = 1 << 0,
210 OFPTC_TABLE_MISS_DROP = 1 << 1,
211 OFPTC_TABLE_MISS_MASK = 3
235 enum ofp_capabilities {
236 OFPC_FLOW_STATS = 1 << 0,
237 OFPC_TABLE_STATS = 1 << 1,
238 OFPC_PORT_STATS = 1 << 2,
239 OFPC_GROUP_STATS = 1 << 3,
240 OFPC_IP_REASM = 1 << 5,
241 OFPC_QUEUE_STATS = 1 << 6,
242 OFPC_ARP_MATCH_IP = 1 << 7
249 enum ofp_port_config {
250 OFPPC_PORT_DOWN = 1 << 0,
252 OFPPC_NO_RECV = 1 << 2,
253 OFPPC_NO_FWD = 1 << 5,
254 OFPPC_NO_PACKET_IN = 1 << 6
260 enum ofp_port_state {
261 OFPPS_LINK_DOWN = 1 << 0,
262 OFPPS_BLOCKED = 1 << 1,
267 enum ofp_port_features {
268 OFPPF_10MB_HD = 1 << 0,
269 OFPPF_10MB_FD = 1 << 1,
270 OFPPF_100MB_HD = 1 << 2,
271 OFPPF_100MB_FD = 1 << 3,
272 OFPPF_1GB_HD = 1 << 4,
273 OFPPF_1GB_FD = 1 << 5,
274 OFPPF_10GB_FD = 1 << 6,
275 OFPPF_40GB_FD = 1 << 7,
276 OFPPF_100GB_FD = 1 << 8,
277 OFPPF_1TB_FD = 1 << 9,
278 OFPPF_OTHER = 1 << 10,
280 OFPPF_COPPER = 1 << 11,
281 OFPPF_FIBER = 1 << 12,
282 OFPPF_AUTONEG = 1 << 13,
283 OFPPF_PAUSE = 1 << 14,
284 OFPPF_PAUSE_ASYM = 1 << 15
291 uint8_t hw_addr[OFP_ETH_ALEN];
293 char name[OFP_MAX_PORT_NAME_LEN];
308 OFP_ASSERT(
sizeof(
struct ofp_port) == 64);
313 uint64_t datapath_id;
323 uint32_t capabilities;
334 enum ofp_port_reason {
354 uint8_t hw_addr[OFP_ETH_ALEN];
370 enum ofp_packet_in_reason {
390 uint8_t oxm_fields[4];
393 OFP_ASSERT(
sizeof(
struct ofp_match) == 8);
395 static int const OFP_MATCH_STATIC_LEN = 2 *
sizeof(uint16_t);
404 enum ofp_match_type {
490 uint8_t addr[OFP_ETH_ALEN];
491 uint8_t mask[OFP_ETH_ALEN];
511 OFPXMC_NXM_0 = 0x0000,
512 OFPXMC_NXM_1 = 0x0001,
513 OFPXMC_OPENFLOW_BASIC = 0x8000,
514 OFPXMC_EXPERIMENTER = 0xFFFF,
519 enum oxm_ofb_match_fields {
520 OFPXMT_OFB_IN_PORT = 0,
521 OFPXMT_OFB_IN_PHY_PORT = 1,
522 OFPXMT_OFB_METADATA = 2,
523 OFPXMT_OFB_ETH_DST = 3,
524 OFPXMT_OFB_ETH_SRC = 4,
525 OFPXMT_OFB_ETH_TYPE = 5,
526 OFPXMT_OFB_VLAN_VID = 6,
527 OFPXMT_OFB_VLAN_PCP = 7,
528 OFPXMT_OFB_IP_DSCP = 8,
529 OFPXMT_OFB_IP_ECN = 9,
530 OFPXMT_OFB_IP_PROTO = 10,
531 OFPXMT_OFB_IPV4_SRC = 11,
532 OFPXMT_OFB_IPV4_DST = 12,
533 OFPXMT_OFB_TCP_SRC = 13,
534 OFPXMT_OFB_TCP_DST = 14,
535 OFPXMT_OFB_UDP_SRC = 15,
536 OFPXMT_OFB_UDP_DST = 16,
537 OFPXMT_OFB_SCTP_SRC = 17,
538 OFPXMT_OFB_SCTP_DST = 18,
539 OFPXMT_OFB_ICMPV4_TYPE = 19,
540 OFPXMT_OFB_ICMPV4_CODE = 20,
541 OFPXMT_OFB_ARP_OP = 21,
542 OFPXMT_OFB_ARP_SPA = 22,
543 OFPXMT_OFB_ARP_TPA = 23,
544 OFPXMT_OFB_ARP_SHA = 24,
545 OFPXMT_OFB_ARP_THA = 25,
546 OFPXMT_OFB_IPV6_SRC = 26,
547 OFPXMT_OFB_IPV6_DST = 27,
548 OFPXMT_OFB_IPV6_FLABEL = 28,
549 OFPXMT_OFB_ICMPV6_TYPE = 29,
550 OFPXMT_OFB_ICMPV6_CODE = 30,
551 OFPXMT_OFB_IPV6_ND_TARGET = 31,
552 OFPXMT_OFB_IPV6_ND_SLL = 32,
553 OFPXMT_OFB_IPV6_ND_TLL = 33,
554 OFPXMT_OFB_MPLS_LABEL = 34,
555 OFPXMT_OFB_MPLS_TC = 35,
563 uint32_t experimenter;
576 uint32_t in_phy_port;
587 OFP_ASSERT(
sizeof(
struct ofp_packet_in) == 24);
612 OFP_NO_BUFFER = 0xffffffff,
615 enum ofp_action_type {
617 OFPAT_COPY_TTL_OUT = 11,
618 OFPAT_COPY_TTL_IN = 12,
619 OFPAT_SET_MPLS_TTL = 15,
620 OFPAT_DEC_MPLS_TTL = 16,
621 OFPAT_PUSH_VLAN = 17,
623 OFPAT_PUSH_MPLS = 19,
625 OFPAT_SET_QUEUE = 21,
627 OFPAT_SET_NW_TTL = 23,
628 OFPAT_DEC_NW_TTL = 24,
629 OFPAT_SET_FIELD = 25,
630 OFPAT_EXPERIMENTER = 0xffff
661 enum ofp_controller_max_len {
663 OFPCML_NO_BUFFER = 0xffff,
736 uint32_t experimenter;
753 uint16_t actions_len;
762 enum ofp_flow_mod_command {
772 enum flow_mod_header_len {
773 OFP_FLOW_MOD_STATIC_HDR_LEN = 48,
777 enum ofp_group_mod_command {
784 enum ofp_flow_wildcards {
785 OFPFW_IN_PORT = 1 << 0,
786 OFPFW_DL_VLAN = 1 << 1,
787 OFPFW_DL_VLAN_PCP = 1 << 2,
788 OFPFW_DL_TYPE = 1 << 3,
789 OFPFW_NW_TOS = 1 << 4,
790 OFPFW_NW_PROTO = 1 << 5,
791 OFPFW_TP_SRC = 1 << 6,
792 OFPFW_TP_DST = 1 << 7,
793 OFPFW_MPLS_LABEL = 1 << 8,
794 OFPFW_MPLS_TC = 1 << 9,
797 OFPFW_PPPOE_CODE = 1 << 10,
798 OFPFW_PPPOE_TYPE = 1 << 11,
799 OFPFW_PPPOE_SESS = 1 << 12,
800 OFPFW_PPP_CODE = 1 << 13,
805 OFPFW_ALL = ((1 << 14) - 1)
811 #define OFPFW_ICMP_TYPE OFPFW_TP_SRC
812 #define OFPFW_ICMP_CODE OFPFW_TP_DST
818 #define OFP_DL_TYPE_ETH2_CUTOFF 0x0600
823 #define OFP_DL_TYPE_NOT_ETH_TYPE 0x05ff
833 OFPVID_PRESENT = 0x1000,
834 OFPVID_NONE = 0x0000,
850 #define icmp_type tp_src
851 #define icmp_code tp_dst
855 #define OFP_FLOW_PERMANENT 0
858 #define OFP_DEFAULT_PRIORITY 0x8000
860 enum ofp_instruction_type {
861 OFPIT_GOTO_TABLE = 1,
863 OFPIT_WRITE_METADATA = 2,
865 OFPIT_WRITE_ACTIONS = 3,
867 OFPIT_APPLY_ACTIONS = 4,
868 OFPIT_CLEAR_ACTIONS = 5,
871 OFPIT_EXPERIMENTER = 0xFFFF
899 uint64_t metadata_mask;
918 uint32_t experimenter;
926 enum ofp_flow_mod_flags {
927 OFPFF_SEND_FLOW_REM = 1 << 0,
929 OFPFF_CHECK_OVERLAP = 1 << 1,
930 OFPFF_RESET_COUNTS = 1 << 2
937 uint64_t cookie_mask;
945 uint16_t idle_timeout;
946 uint16_t hard_timeout;
968 OFPG_MAX = 0xffffff00,
971 OFPG_ALL = 0xfffffffc,
973 OFPG_ANY = 0xffffffff
989 uint32_t watch_group;
1013 enum ofp_group_type {
1021 enum ofp_flow_removed_reason {
1037 uint32_t duration_sec;
1038 uint32_t duration_nsec;
1040 uint16_t idle_timeout;
1041 uint16_t hard_timeout;
1042 uint64_t packet_count;
1043 uint64_t byte_count;
1051 enum ofp_error_type {
1052 OFPET_HELLO_FAILED = 0,
1053 OFPET_BAD_REQUEST = 1,
1054 OFPET_BAD_ACTION = 2,
1055 OFPET_BAD_INSTRUCTION = 3,
1056 OFPET_BAD_MATCH = 4,
1057 OFPET_FLOW_MOD_FAILED = 5,
1058 OFPET_GROUP_MOD_FAILED = 6,
1059 OFPET_PORT_MOD_FAILED = 7,
1060 OFPET_TABLE_MOD_FAILED = 8,
1061 OFPET_QUEUE_OP_FAILED = 9,
1062 OFPET_SWITCH_CONFIG_FAILED = 10,
1063 OFPET_ROLE_REQUEST_FAILED = 11,
1064 OFPET_EXPERIMENTER = 0xffff
1069 enum ofp_hello_failed_code {
1070 OFPHFC_INCOMPATIBLE,
1076 enum ofp_bad_request_code {
1077 OFPBRC_BAD_VERSION = 0,
1078 OFPBRC_BAD_TYPE = 1,
1079 OFPBRC_BAD_STAT = 2,
1080 OFPBRC_BAD_EXPERIMENTER = 3,
1083 OFPBRC_BAD_EXP_TYPE = 4,
1086 OFPBRC_BUFFER_EMPTY = 7,
1087 OFPBRC_BUFFER_UNKNOWN = 8,
1088 OFPBRC_BAD_TABLE_ID = 9,
1090 OFPBRC_IS_SLAVE = 10,
1091 OFPBRC_BAD_PORT = 11,
1092 OFPBRC_BAD_PACKET = 12,
1098 enum ofp_bad_action_code {
1101 OFPBAC_BAD_EXPERIMENTER,
1102 OFPBAC_BAD_EXPERIMENTER_TYPE,
1103 OFPBAC_BAD_OUT_PORT,
1104 OFPBAC_BAD_ARGUMENT,
1108 OFPBAC_BAD_OUT_GROUP,
1109 OFPBAC_MATCH_INCONSISTENT,
1110 OFPBAC_UNSUPPORTED_ORDER,
1118 enum ofp_bad_instruction_code {
1119 OFPBIC_UNKNOWN_INST,
1122 OFPBIC_BAD_TABLE_ID,
1123 OFPBIC_UNSUP_METADATA,
1124 OFPBIC_UNSUP_METADATA_MASK,
1126 OFPBIC_UNSUP_EXP_INST,
1132 enum ofp_bad_match_code {
1137 OFPBMC_BAD_DL_ADDR_MASK,
1140 OFPBMC_BAD_NW_ADDR_MASK,
1143 OFPBMC_BAD_WILDCARDS,
1156 enum ofp_flow_mod_failed_code {
1159 OFPFMFC_BAD_TABLE_ID,
1163 OFPFMFC_BAD_TIMEOUT,
1165 OFPFMFC_BAD_COMMAND,
1170 enum ofp_group_mod_failed_code {
1171 OFPGMFC_GROUP_EXISTS = 0,
1174 OFPGMFC_INVALID_GROUP = 1,
1176 OFPGMFC_WEIGHT_UNSUPPORTED = 2,
1178 OFPGMFC_OUT_OF_GROUPS = 3,
1179 OFPGMFC_OUT_OF_BUCKETS = 4,
1181 OFPGMFC_CHAINING_UNSUPPORTED = 5,
1183 OFPGMFC_WATCH_UNSUPPORTED = 6,
1186 OFPGMFC_UNKNOWN_GROUP = 8,
1189 OFPGMFC_CHAINED_GROUP = 9,
1191 OFPGMFC_BAD_TYPE = 10,
1192 OFPGMFC_BAD_COMMAND = 11,
1193 OFPGMFC_BAD_BUCKET = 12,
1194 OFPGMFC_BAD_WATCH = 13,
1200 enum ofp_port_mod_failed_code {
1202 OFPPMFC_BAD_HW_ADDR,
1205 OFPPMFC_BAD_ADVERTISE
1210 enum ofp_table_mod_failed_code {
1217 enum ofp_queue_op_failed_code {
1225 enum ofp_switch_config_failed_code {
1232 enum ofp_role_request_failed_code {
1235 OFPRRFC_BAD_ROLE = 2,
1239 enum ofp_stats_types {
1253 OFPST_AGGREGATE = 2,
1278 OFPST_GROUP_DESC = 7,
1283 OFPST_GROUP_FEATURES = 8,
1289 OFPST_EXPERIMENTER = 0xffff
1301 enum ofp_stats_reply_flags {
1302 OFPSF_REPLY_MORE = 1 << 0
1314 #define DESC_STR_LEN 256
1315 #define SERIAL_NUM_LEN 32
1319 char mfr_desc[DESC_STR_LEN];
1320 char hw_desc[DESC_STR_LEN];
1321 char sw_desc[DESC_STR_LEN];
1322 char serial_num[SERIAL_NUM_LEN];
1323 char dp_desc[DESC_STR_LEN];
1341 uint64_t cookie_mask;
1353 uint32_t duration_sec;
1354 uint32_t duration_nsec;
1358 uint16_t idle_timeout;
1359 uint16_t hard_timeout;
1362 uint64_t packet_count;
1363 uint64_t byte_count;
1383 uint64_t cookie_mask;
1392 uint64_t packet_count;
1393 uint64_t byte_count;
1394 uint32_t flow_count;
1400 enum ofp_flow_match_fields {
1401 OFPFMF_IN_PORT = 1 << 0,
1402 OFPFMF_DL_VLAN = 1 << 1,
1403 OFPFMF_DL_VLAN_PCP = 1 << 2,
1404 OFPFMF_DL_TYPE = 1 << 3,
1405 OFPFMF_NW_TOS = 1 << 4,
1406 OFPFMF_NW_PROTO = 1 << 5,
1407 OFPFMF_TP_SRC = 1 << 6,
1408 OFPFMF_TP_DST = 1 << 7,
1409 OFPFMF_MPLS_LABEL = 1 << 8,
1410 OFPFMF_MPLS_TC = 1 << 9,
1411 OFPFMF_TYPE = 1 << 10,
1412 OFPFMF_DL_SRC = 1 << 11,
1413 OFPFMF_DL_DST = 1 << 12,
1414 OFPFMF_NW_SRC = 1 << 13,
1415 OFPFMF_NW_DST = 1 << 14,
1416 OFPFMF_METADATA = 1 << 15,
1418 OFPFMF_PPPOE_CODE = 1 << 16,
1419 OFPFMF_PPPOE_TYPE = 1 << 17,
1420 OFPFMF_PPPOE_SESS = 1 << 18,
1421 OFPFMF_PPP_PROT = 1 << 19,
1430 char name[OFP_MAX_TABLE_NAME_LEN];
1435 uint32_t write_actions;
1437 uint32_t apply_actions;
1439 uint64_t write_setfields;
1441 uint64_t apply_setfields;
1443 uint64_t metadata_match;
1444 uint64_t metadata_write;
1445 uint32_t instructions;
1447 uint32_t max_entries;
1448 uint32_t active_count;
1449 uint64_t lookup_count;
1450 uint64_t matched_count;
1469 uint64_t rx_packets;
1470 uint64_t tx_packets;
1473 uint64_t rx_dropped;
1474 uint64_t tx_dropped;
1483 uint64_t rx_frame_err;
1484 uint64_t rx_over_err;
1485 uint64_t rx_crc_err;
1486 uint64_t collisions;
1499 uint64_t packet_count;
1500 uint64_t byte_count;
1512 uint64_t packet_count;
1513 uint64_t byte_count;
1531 uint32_t capabilities;
1532 uint32_t max_groups[4];
1533 uint32_t actions[4];
1538 enum ofp_group_capabilities {
1539 OFPGFC_SELECT_WEIGHT = 1 << 0,
1540 OFPGFC_SELECT_LIVENESS = 1 << 1,
1541 OFPGFC_CHAINING = 1 << 2,
1542 OFPGFC_CHAINING_CHECKS = 1 << 3,
1548 uint32_t experimenter;
1561 uint32_t experimenter;
1572 #define OFPQ_ALL 0xffffffff
1575 #define OFPQ_MIN_RATE_UNCFG 0xffff
1577 enum ofp_queue_properties {
1583 OFPQT_EXPERIMENTER = 0xffff,
1604 uint32_t experimenter;
1659 uint64_t tx_packets;
1671 uint64_t generation_id;
1676 enum ofp_controller_role {
1677 OFPCR_ROLE_NOCHANGE = 0,
1678 OFPCR_ROLE_EQUAL = 1,
1679 OFPCR_ROLE_MASTER = 2,
1680 OFPCR_ROLE_SLAVE = 3,
Definition: openflow12.h:1621
Definition: openflow12.h:693
Definition: openflow12.h:1391
Definition: openflow12.h:1667
Definition: openflow12.h:684
Definition: openflow12.h:428
Definition: openflow12.h:1466
Definition: openflow12.h:1611
Definition: openflow12.h:1491
Definition: openflow12.h:1649
Definition: openflow12.h:1426
Definition: openflow12.h:311
Definition: openflow12.h:1602
Definition: openflow12.h:475
Definition: openflow12.h:226
Definition: openflow12.h:875
Definition: openflow12.h:1029
Definition: openflow12.h:288
Definition: openflow12.h:1642
Definition: openflow12.h:904
Definition: openflow12.h:652
Definition: openflow12.h:459
Definition: openflow12.h:670
Definition: openflow12.h:76
Definition: openflow12.h:1505
Definition: openflow12.h:194
Definition: openflow12.h:468
Definition: openflow12.h:380
Definition: openflow12.h:1529
Definition: openflow12.h:498
Definition: openflow12.h:175
Definition: openflow12.h:749
Definition: openflow12.h:488
Definition: openflow12.h:1498
Definition: openflow12.h:1370
Definition: openflow12.h:1328
Definition: openflow12.h:885
Definition: openflow12.h:341
Definition: openflow12.h:1595
Definition: openflow12.h:1349
Definition: openflow12.h:702
Definition: openflow12.h:1318
Definition: openflow12.h:980
Definition: openflow12.h:1630
Definition: openflow12.h:1519
Definition: openflow12.h:591
Definition: openflow12.h:444
Definition: openflow12.h:915
Definition: openflow12.h:723
Definition: openflow12.h:410
Definition: openflow12.h:1655
Definition: openflow12.h:1292
Definition: openflow12.h:350
Definition: openflow12.h:1305
Definition: openflow12.h:934
Definition: openflow12.h:1455
Definition: openflow12.h:715
Definition: openflow12.h:1000