diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/openflow/nicira-ext.h | 36 | ||||
| -rw-r--r-- | include/openvswitch/datapath-protocol.h | 14 |
2 files changed, 46 insertions, 4 deletions
diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h index c5b0a7ca8..f67862639 100644 --- a/include/openflow/nicira-ext.h +++ b/include/openflow/nicira-ext.h @@ -388,6 +388,8 @@ OFP_ASSERT(sizeof(struct nx_action_pop_queue) == 16); * - NXM_NX_TUN_ID * - NXM_NX_ARP_SHA * - NXM_NX_ARP_THA + * - NXM_NX_ICMPV6_TYPE + * - NXM_NX_ICMPV6_CODE * - NXM_NX_REG(idx) for idx in the switch's accepted range. * * The following nxm_header values are potentially acceptable as 'dst': @@ -904,7 +906,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. * @@ -913,7 +915,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. * @@ -936,7 +938,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. @@ -948,7 +950,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. @@ -1051,6 +1053,32 @@ enum nx_mp_algorithm { #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) + + /* ## --------------------- ## */ /* ## Requests and replies. ## */ /* ## --------------------- ## */ diff --git a/include/openvswitch/datapath-protocol.h b/include/openvswitch/datapath-protocol.h index fdd225db6..13b7d9d1a 100644 --- a/include/openvswitch/datapath-protocol.h +++ b/include/openvswitch/datapath-protocol.h @@ -311,9 +311,11 @@ enum odp_key_type { ODP_KEY_ATTR_8021Q, /* struct odp_key_8021q */ ODP_KEY_ATTR_ETHERTYPE, /* 16-bit Ethernet type */ ODP_KEY_ATTR_IPV4, /* struct odp_key_ipv4 */ + ODP_KEY_ATTR_IPV6, /* struct odp_key_ipv6 */ ODP_KEY_ATTR_TCP, /* struct odp_key_tcp */ ODP_KEY_ATTR_UDP, /* struct odp_key_udp */ ODP_KEY_ATTR_ICMP, /* struct odp_key_icmp */ + ODP_KEY_ATTR_ICMPV6, /* struct odp_key_icmpv6 */ ODP_KEY_ATTR_ARP, /* struct odp_key_arp */ __ODP_KEY_ATTR_MAX }; @@ -337,6 +339,13 @@ struct odp_key_ipv4 { uint8_t ipv4_tos; }; +struct odp_key_ipv6 { + ovs_be32 ipv6_src[4]; + ovs_be32 ipv6_dst[4]; + uint8_t ipv6_proto; + uint8_t ipv6_tos; +}; + struct odp_key_tcp { ovs_be16 tcp_src; ovs_be16 tcp_dst; @@ -352,6 +361,11 @@ struct odp_key_icmp { uint8_t icmp_code; }; +struct odp_key_icmpv6 { + uint8_t icmpv6_type; + uint8_t icmpv6_code; +}; + struct odp_key_arp { ovs_be32 arp_sip; ovs_be32 arp_tip; |
