X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fopenflow%2Fnicira-ext.h;h=241cfe99f3581047adb1d4693b6cc4d67f70dfa9;hb=dc432c2e8159a406e0e45fae4ff49532191b9129;hp=0b01aaadfc482f155c6299b1968aab2a252bd701;hpb=dc4762edd02693770d392b8f6495deb7e52635bf;p=openvswitch diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h index 0b01aaad..241cfe99 100644 --- a/include/openflow/nicira-ext.h +++ b/include/openflow/nicira-ext.h @@ -126,16 +126,9 @@ OFP_ASSERT(sizeof(struct nicira_header) == 16); /* Values for the 'subtype' member of struct nicira_header. */ enum nicira_type { - /* Switch status request. The request body is an ASCII string that - * specifies a prefix of the key names to include in the output; if it is - * the null string, then all key-value pairs are included. */ - NXT_STATUS_REQUEST, - - /* Switch status reply. The reply body is an ASCII string of key-value - * pairs in the form "key=value\n". */ - NXT_STATUS_REPLY, - /* No longer used. */ + NXT_STATUS_REQUEST__OBSOLETE, + NXT_STATUS_REPLY__OBSOLETE, NXT_ACT_SET_CONFIG__OBSOLETE, NXT_ACT_GET_CONFIG__OBSOLETE, NXT_COMMAND_REQUEST__OBSOLETE, @@ -143,10 +136,7 @@ enum nicira_type { NXT_FLOW_END_CONFIG__OBSOLETE, NXT_FLOW_END__OBSOLETE, NXT_MGMT__OBSOLETE, - - /* Use the high 32 bits of the cookie field as the tunnel ID in the flow - * match. */ - NXT_TUN_ID_FROM_COOKIE, + NXT_TUN_ID_FROM_COOKIE__OBSOLETE, /* Controller role support. The request body is struct nx_role_request. * The reply echos the request. */ @@ -177,16 +167,6 @@ enum nicira_stats_type { NXST_AGGREGATE /* Analogous to OFPST_AGGREGATE. */ }; -/* NXT_TUN_ID_FROM_COOKIE request. */ -struct nxt_tun_id_cookie { - struct ofp_header header; - ovs_be32 vendor; /* NX_VENDOR_ID. */ - ovs_be32 subtype; /* NXT_TUN_ID_FROM_COOKIE */ - uint8_t set; /* Nonzero to enable, zero to disable. */ - uint8_t pad[7]; -}; -OFP_ASSERT(sizeof(struct nxt_tun_id_cookie) == 24); - /* Configures the "role" of the sending controller. The default role is: * * - Other (NX_ROLE_OTHER), which allows the controller access to all @@ -230,7 +210,8 @@ enum nx_action_subtype { NXAST_REG_LOAD, /* struct nx_action_reg_load */ NXAST_NOTE, /* struct nx_action_note */ NXAST_SET_TUNNEL64, /* struct nx_action_set_tunnel64 */ - NXAST_MULTIPATH /* struct nx_action_multipath */ + NXAST_MULTIPATH, /* struct nx_action_multipath */ + NXAST_AUTOPATH /* struct nx_action_autopath */ }; /* Header for Nicira-defined actions. */ @@ -312,9 +293,9 @@ OFP_ASSERT(sizeof(struct nx_action_set_tunnel64) == 24); * Ethernet+IPv4 ARP packet for which the source Ethernet address inside the * ARP packet differs from the source Ethernet address in the Ethernet header. * - * This is useful because OpenFlow does not provide a way to match on the - * Ethernet addresses inside ARP packets, so there is no other way to drop - * spoofed ARPs other than sending every ARP packet to a controller. */ + * (This action is deprecated in favor of defining flows using the + * NXM_NX_ARP_SHA flow match and will likely be removed in a future version + * of Open vSwitch.) */ struct nx_action_drop_spoofed_arp { ovs_be16 type; /* OFPAT_VENDOR. */ ovs_be16 len; /* Length is 16. */ @@ -386,6 +367,12 @@ OFP_ASSERT(sizeof(struct nx_action_pop_queue) == 16); * - NXM_OF_ARP_SPA * - NXM_OF_ARP_TPA * - NXM_NX_TUN_ID + * - NXM_NX_ARP_SHA + * - NXM_NX_ARP_THA + * - NXM_NX_ICMPV6_TYPE + * - NXM_NX_ICMPV6_CODE + * - NXM_NX_ND_SLL + * - NXM_NX_ND_TLL * - NXM_NX_REG(idx) for idx in the switch's accepted range. * * The following nxm_header values are potentially acceptable as 'dst': @@ -430,9 +417,9 @@ OFP_ASSERT(sizeof(struct nx_action_reg_move) == 24); * starts at 0 for the least-significant bit, 1 for the next most significant * bit, and so on. * - * 'dst' is an nxm_header with nxm_hasmask=0. It must be one of the following: - * - * - NXM_NX_REG(idx) for idx in the switch's accepted range. + * 'dst' is an nxm_header with nxm_hasmask=0. See the documentation for + * NXAST_REG_MOVE, above, for the permitted fields and for the side effects of + * loading them. * * The 'ofs' and 'n_bits' fields are combined into a single 'ofs_nbits' field * to avoid enlarging the structure by another 8 bytes. To allow 'n_bits' to @@ -503,8 +490,9 @@ OFP_ASSERT(sizeof(struct nx_action_note) == 16); * Some algorithms use 'arg' as an additional argument. * * 3. Stores 'link' in dst[ofs:ofs+n_bits]. The format and semantics of - * 'dst' and 'ofs_nbits' are identical to those for the NXAST_REG_LOAD - * action; refer to the description of that action for details. + * 'dst' and 'ofs_nbits' are similar to those for the NXAST_REG_LOAD + * action, except that 'dst' must be NXM_NX_REG(idx) for 'idx' in the + * switch's supported range. * * The switch will reject actions that have an unknown 'fields', or an unknown * 'algorithm', or in which ofs+n_bits is greater than the width of 'dst', or @@ -603,12 +591,51 @@ enum nx_mp_algorithm { */ NX_MP_ALG_ITER_HASH /* Iterative Hash. */ }; + +/* Action structure for NXAST_AUTOPATH. + * + * This action performs the following steps in sequence: + * + * 1. Hashes the flow using an implementation-defined hash function. + * + * The hashed fields' values are drawn from the current state of the + * flow, including all modifications that have been made by actions up to + * this point. + * + * 2. Selects an OpenFlow 'port'. + * + * 'port' is selected in an implementation-defined manner, taking into + * account 'id' and the hash value calculated in step 1. + * + * Generally a switch will have been configured with a set of ports that + * may be chosen given 'id'. The switch may take into account any number + * of factors when choosing 'port' from its configured set. Factors may + * include carrier, load, and the results of configuration protocols such + * as LACP. + * + * 3. Stores 'port' in dst[ofs:ofs+n_bits]. + * + * The format and semantics of 'dst' and 'ofs_nbits' are similar to those + * for the NXAST_REG_LOAD action, except that 'dst' must be + * NXM_NX_REG(idx) for 'idx' in the switch's supported range. + * + * The switch will reject actions in which ofs+n_bits is greater than the width + * of 'dst', with error type OFPET_BAD_ACTION, code OFPBAC_BAD_ARGUMENT. + */ +struct nx_action_autopath { + ovs_be16 type; /* OFPAT_VENDOR. */ + ovs_be16 len; /* Length is 20. */ + ovs_be32 vendor; /* NX_VENDOR_ID. */ + ovs_be16 subtype; /* NXAST_MULTIPATH. */ -/* Wildcard for tunnel ID. */ -#define NXFW_TUN_ID (1 << 25) + /* Where to store the result. */ + ovs_be16 ofs_nbits; /* (ofs << 6) | (n_bits - 1). */ + ovs_be32 dst; /* Destination register. */ -#define NXFW_ALL NXFW_TUN_ID -#define OVSFW_ALL (OFPFW_ALL | NXFW_ALL) + ovs_be32 id; /* Autopath ID. */ + ovs_be32 pad; +}; +OFP_ASSERT(sizeof(struct nx_action_autopath) == 24); /* Flexible flow specifications (aka NXM = Nicira Extended Match). * @@ -902,7 +929,7 @@ enum nx_mp_algorithm { /* The "type of service" byte of the IP header, with the ECN bits forced to 0. * - * Prereqs: NXM_OF_ETH_TYPE must match 0x0800 exactly. + * Prereqs: NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd. * * Format: 8-bit integer with 2 least-significant bits forced to 0. * @@ -911,7 +938,7 @@ enum nx_mp_algorithm { /* The "protocol" byte in the IP header. * - * Prereqs: NXM_OF_ETH_TYPE must match 0x0800 exactly. + * Prereqs: NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd. * * Format: 8-bit integer. * @@ -934,7 +961,7 @@ enum nx_mp_algorithm { /* The source or destination port in the TCP header. * * Prereqs: - * NXM_OF_ETH_TYPE must match 0x0800 exactly. + * NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd. * NXM_OF_IP_PROTO must match 6 exactly. * * Format: 16-bit integer in network byte order. @@ -946,7 +973,7 @@ enum nx_mp_algorithm { /* The source or destination port in the UDP header. * * Prereqs: - * NXM_OF_ETH_TYPE must match 0x0800 exactly. + * NXM_OF_ETH_TYPE must match either 0x0800 or 0x86dd. * NXM_OF_IP_PROTO must match 17 exactly. * * Format: 16-bit integer in network byte order. @@ -1038,14 +1065,87 @@ enum nx_mp_algorithm { #define NXM_NX_TUN_ID NXM_HEADER (0x0001, 16, 8) #define NXM_NX_TUN_ID_W NXM_HEADER_W(0x0001, 16, 8) +/* For an Ethernet+IP ARP packet, the source or target hardware address + * in the ARP header. Always 0 otherwise. + * + * Prereqs: NXM_OF_ETH_TYPE must match 0x0806 exactly. + * + * Format: 48-bit Ethernet MAC address. + * + * Masking: Not maskable. */ +#define NXM_NX_ARP_SHA NXM_HEADER (0x0001, 17, 6) +#define NXM_NX_ARP_THA NXM_HEADER (0x0001, 18, 6) + +/* The source or destination address in the IPv6 header. + * + * Prereqs: NXM_OF_ETH_TYPE must match 0x86dd exactly. + * + * Format: 128-bit IPv6 address. + * + * Masking: Only CIDR masks are allowed, that is, masks that consist of N + * high-order bits set to 1 and the other 128-N bits set to 0. */ +#define NXM_NX_IPV6_SRC NXM_HEADER (0x0001, 19, 16) +#define NXM_NX_IPV6_SRC_W NXM_HEADER_W(0x0001, 19, 16) +#define NXM_NX_IPV6_DST NXM_HEADER (0x0001, 20, 16) +#define NXM_NX_IPV6_DST_W NXM_HEADER_W(0x0001, 20, 16) + +/* The type or code in the ICMPv6 header. + * + * Prereqs: + * NXM_OF_ETH_TYPE must match 0x86dd exactly. + * NXM_OF_IP_PROTO must match 58 exactly. + * + * Format: 8-bit integer. + * + * Masking: Not maskable. */ +#define NXM_NX_ICMPV6_TYPE NXM_HEADER (0x0001, 21, 1) +#define NXM_NX_ICMPV6_CODE NXM_HEADER (0x0001, 22, 1) + +/* The target address in an IPv6 Neighbor Discovery message. + * + * Prereqs: + * NXM_OF_ETH_TYPE must match 0x86dd exactly. + * NXM_OF_IP_PROTO must match 58 exactly. + * NXM_OF_ICMPV6_TYPE must be either 135 or 136. + * + * Format: 128-bit IPv6 address. + * + * Masking: Not maskable. */ +#define NXM_NX_ND_TARGET NXM_HEADER (0x0001, 23, 16) + +/* The source link-layer address option in an IPv6 Neighbor Discovery + * message. + * + * Prereqs: + * NXM_OF_ETH_TYPE must match 0x86dd exactly. + * NXM_OF_IP_PROTO must match 58 exactly. + * NXM_OF_ICMPV6_TYPE must be exactly 135. + * + * Format: 48-bit Ethernet MAC address. + * + * Masking: Not maskable. */ +#define NXM_NX_ND_SLL NXM_HEADER (0x0001, 24, 6) + +/* The target link-layer address option in an IPv6 Neighbor Discovery + * message. + * + * Prereqs: + * NXM_OF_ETH_TYPE must match 0x86dd exactly. + * NXM_OF_IP_PROTO must match 58 exactly. + * NXM_OF_ICMPV6_TYPE must be exactly 136. + * + * Format: 48-bit Ethernet MAC address. + * + * Masking: Not maskable. */ +#define NXM_NX_ND_TLL NXM_HEADER (0x0001, 25, 6) + + /* ## --------------------- ## */ /* ## Requests and replies. ## */ /* ## --------------------- ## */ enum nx_flow_format { NXFF_OPENFLOW10 = 0, /* Standard OpenFlow 1.0 compatible. */ - NXFF_TUN_ID_FROM_COOKIE = 1, /* OpenFlow 1.0, plus obtain tunnel ID from - * cookie. */ NXFF_NXM = 2 /* Nicira extended match. */ };