X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fopenflow%2Fnicira-ext.h;h=1dcd32b5318f58c9b841523e86531e02705911d5;hb=2bcf7df6f7a87d8940deff6fbbc359b0a310a74a;hp=ad6dd116358003cb9f4811a110eebf333a5ea7ba;hpb=439e4d8cdd9f99462cbe712082935e0c9a728e21;p=openvswitch diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h index ad6dd116..1dcd32b5 100644 --- a/include/openflow/nicira-ext.h +++ b/include/openflow/nicira-ext.h @@ -99,7 +99,20 @@ enum nx_bad_request_code { NXBRC_NXM_BAD_PREREQ = 0x104, /* A given nxm_type was specified more than once. */ - NXBRC_NXM_DUP_TYPE = 0x105 + NXBRC_NXM_DUP_TYPE = 0x105, + +/* Other errors. */ + + /* A request specified a nonexistent table ID. (But NXFMFC_BAD_TABLE_ID is + * used instead, when it is appropriate, because that is such a special + * case.) */ + NXBRC_BAD_TABLE_ID = 0x200, + + /* NXT_ROLE_REQUEST specified an invalid role. */ + NXBRC_BAD_ROLE = 0x201, + + /* The in_port in an ofp_packet_out request is invalid. */ + NXBRC_BAD_IN_PORT = 0x202 }; /* Additional "code" values for OFPET_FLOW_MOD_FAILED. */ @@ -282,7 +295,8 @@ enum nx_action_subtype { NXAST_BUNDLE_LOAD, /* struct nx_action_bundle */ NXAST_RESUBMIT_TABLE, /* struct nx_action_resubmit */ NXAST_OUTPUT_REG, /* struct nx_action_output_reg */ - NXAST_LEARN /* struct nx_action_learn */ + NXAST_LEARN, /* struct nx_action_learn */ + NXAST_EXIT /* struct nx_action_header */ }; /* Header for Nicira-defined actions. */ @@ -964,13 +978,13 @@ struct nx_action_bundle { ovs_be16 type; /* OFPAT_VENDOR. */ ovs_be16 len; /* Length including slaves. */ ovs_be32 vendor; /* NX_VENDOR_ID. */ - ovs_be16 subtype; /* NXAST_BUNDLE. */ + ovs_be16 subtype; /* NXAST_BUNDLE or NXAST_BUNDLE_LOAD. */ /* Slave choice algorithm to apply to hash value. */ ovs_be16 algorithm; /* One of NX_BD_ALG_*. */ /* What fields to hash and how. */ - ovs_be16 fields; /* One of NX_BD_FIELDS_*. */ + ovs_be16 fields; /* One of NX_HASH_FIELDS_*. */ ovs_be16 basis; /* Universal hash parameter. */ ovs_be32 slave_type; /* NXM_OF_IN_PORT. */ @@ -1034,6 +1048,18 @@ struct nx_action_output_reg { }; OFP_ASSERT(sizeof(struct nx_action_output_reg) == 24); +/* NXAST_EXIT + * + * Discontinues action processing. + * + * The NXAST_EXIT action causes the switch to immediately halt processing + * actions for the flow. Any actions which have already been processed are + * executed by the switch. However, any further actions, including those which + * may be in different tables, or different levels of the NXAST_RESUBMIT + * hierarchy, will be ignored. + * + * Uses the nx_action_header structure. */ + /* Flexible flow specifications (aka NXM = Nicira Extended Match). * * OpenFlow 1.0 has "struct ofp_match" for specifying flow matches. This @@ -1588,6 +1614,49 @@ OFP_ASSERT(sizeof(struct nx_action_output_reg) == 24); #define NX_IP_FRAG_ANY (1 << 0) /* Is this a fragment? */ #define NX_IP_FRAG_LATER (1 << 1) /* Is this a fragment with nonzero offset? */ +/* The flow label in the IPv6 header. + * + * Prereqs: NXM_OF_ETH_TYPE must match 0x86dd exactly. + * + * Format: 20-bit IPv6 flow label in least-significant bits. + * + * Masking: Not maskable. */ +#define NXM_NX_IPV6_LABEL NXM_HEADER (0x0001, 27, 4) + +/* The ECN of the IP header. + * + * Prereqs: NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd. + * + * Format: ECN in the low-order 2 bits. + * + * Masking: Not maskable. */ +#define NXM_NX_IP_ECN NXM_HEADER (0x0001, 28, 1) + +/* The time-to-live/hop limit of the IP header. + * + * Prereqs: NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd. + * + * Format: 8-bit integer. + * + * Masking: Not maskable. */ +#define NXM_NX_IP_TTL NXM_HEADER (0x0001, 29, 1) + +/* Flow cookie. + * + * This may be used to gain the OpenFlow 1.1-like ability to restrict + * certain NXM-based Flow Mod and Flow Stats Request messages to flows + * with specific cookies. See the "nx_flow_mod" and "nx_flow_stats_request" + * structure definitions for more details. This match is otherwise not + * allowed. + * + * Prereqs: None. + * + * Format: 64-bit integer in network byte order. + * + * Masking: Arbitrary masks. */ +#define NXM_NX_COOKIE NXM_HEADER (0x0001, 30, 8) +#define NXM_NX_COOKIE_W NXM_HEADER_W(0x0001, 30, 8) + /* ## --------------------- ## */ /* ## Requests and replies. ## */ /* ## --------------------- ## */ @@ -1606,7 +1675,14 @@ struct nxt_set_flow_format { }; OFP_ASSERT(sizeof(struct nxt_set_flow_format) == 20); -/* NXT_FLOW_MOD (analogous to OFPT_FLOW_MOD). */ +/* NXT_FLOW_MOD (analogous to OFPT_FLOW_MOD). + * + * It is possible to limit flow deletions and modifications to certain + * cookies by using the NXM_NX_COOKIE and NXM_NX_COOKIE_W matches. For + * these commands, the "cookie" field is always ignored. Flow additions + * make use of the "cookie" field and ignore any NXM_NX_COOKIE* + * definitions. + */ struct nx_flow_mod { struct nicira_header nxh; ovs_be64 cookie; /* Opaque controller-issued identifier. */ @@ -1655,7 +1731,11 @@ struct nx_flow_removed { OFP_ASSERT(sizeof(struct nx_flow_removed) == 56); /* Nicira vendor stats request of type NXST_FLOW (analogous to OFPST_FLOW - * request). */ + * request). + * + * It is possible to limit matches to certain cookies by using the + * NXM_NX_COOKIE and NXM_NX_COOKIE_W matches. + */ struct nx_flow_stats_request { struct nicira_stats_msg nsm; ovs_be16 out_port; /* Require matching entries to include this