diff options
| author | Justin Pettit <jpettit@nicira.com> | 2011-02-01 22:54:11 -0800 |
|---|---|---|
| committer | Justin Pettit <jpettit@nicira.com> | 2011-02-02 13:22:34 -0800 |
| commit | 685a51a5b89750cead1b2934c2079d2bb9c52a4a (patch) | |
| tree | 8f111094c5cdce669521ac673a1f52456db71c1c /include | |
| parent | d31f1109f10e5ffb9bf266306b913ebf23781666 (diff) | |
| download | openvswitch-685a51a5b89750cead1b2934c2079d2bb9c52a4a.tar.gz | |
nicira-ext: Support matching IPv6 Neighbor Discovery messages.
IPv6 uses Neighbor Discovery messages in a similar manner to how IPv4
uses ARP. This commit adds support for matching deeper into the
payloads of Neighbor Solicitation (NS) and Neighbor Advertisement (NA)
messages. Currently, the matching fields include:
- NS and NA Target (nd_target)
- NS Source Link Layer Address (nd_sll)
- NA Target Link Layer Address (nd_tll)
When defining IPv6 Neighbor Discovery rules, the Nicira Extensible Match
(NXM) extension to OVS must be used.
Signed-off-by: Justin Pettit <jpettit@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/openflow/nicira-ext.h | 40 | ||||
| -rw-r--r-- | include/openvswitch/datapath-protocol.h | 7 |
2 files changed, 47 insertions, 0 deletions
diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h index f67862639..88efdf653 100644 --- a/include/openflow/nicira-ext.h +++ b/include/openflow/nicira-ext.h @@ -390,6 +390,8 @@ OFP_ASSERT(sizeof(struct nx_action_pop_queue) == 16); * - 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': @@ -1078,6 +1080,44 @@ enum nx_mp_algorithm { #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. ## */ diff --git a/include/openvswitch/datapath-protocol.h b/include/openvswitch/datapath-protocol.h index 13b7d9d1a..8645096ab 100644 --- a/include/openvswitch/datapath-protocol.h +++ b/include/openvswitch/datapath-protocol.h @@ -317,6 +317,7 @@ enum odp_key_type { 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_ND, /* struct odp_key_nd */ __ODP_KEY_ATTR_MAX }; @@ -374,6 +375,12 @@ struct odp_key_arp { uint8_t arp_tha[6]; }; +struct odp_key_nd { + uint32_t nd_target[4]; + uint8_t nd_sll[6]; + uint8_t nd_tll[6]; +}; + /** * enum odp_flow_attr - attributes for %ODP_FLOW_* commands. * @ODP_FLOW_ATTR_KEY: Nested %ODP_KEY_ATTR_* attributes specifying the flow |
