[ovs-dev] [PATCH] IPv6: Add support for match and set nd_options_type and reserved fields.

Ben Pfaff blp at ovn.org
Tue Sep 18 08:06:12 UTC 2018


On Tue, Sep 18, 2018 at 08:29:12PM +0530, Vishal Deep Ajmera wrote:
> Currently OVS supports all ARP protocol fields as OXM match fields
> to implement the relevant ARP procedures for IPv4. This includes support
> for matching copying and setting ARP fields. In IPv6 ARP has been
> replaced by ICMPv6 neighbor discovery (ND) procedures, neighbor
> advertisement and neighbor solicitation.
> 
> The support for ICMPv6 fields in OVS is not complete for the use cases
> equivalent to ARP in IPv4. OVS lacks support for matching, copying and
> setting the “ND option type” and “ND reserved” fields. Without these user
> cannot implement all ICMPv6 ND procedures for IPv6 support.
> 
> This commit adds additional OXM fields to OVS for ICMPv6 “ND option type“
> and ICMPv6 “ND reserved” using the OXM extension mechanism.
> 
> This allows support for parsing these fields from an ICMPv6 packet header
> and extending the OpenFlow protocol with specifications for these new OXM
> fields for matching, copying and setting.
> 
> Signed-off-by: Ashvin Lakshmikantha <ashvin.lakshmikantha at ericsson.com>
> Signed-off-by: Vishal Deep Ajmera <vishal.deep.ajmera at ericsson.com>
> Co-authored-by: Vishal Deep Ajmera <vishal.deep.ajmera at ericsson.com>

Thanks for working on making OVS better support IPv6.

The following change stood out to me.  It appears to break ABI
compatibility in the kernel datapath.  Is there some reason it's OK?  I
especially don't understand why it adds a nested inner struct.

> --- a/datapath/linux/compat/include/linux/openvswitch.h
> +++ b/datapath/linux/compat/include/linux/openvswitch.h
> @@ -484,9 +484,13 @@ struct ovs_key_arp {
>  };
>  
>  struct ovs_key_nd {
> -	__be32	nd_target[4];
> -	__u8	nd_sll[ETH_ALEN];
> -	__u8	nd_tll[ETH_ALEN];
> +        __be32  nd_reserved;
> +        __be32  nd_target[4];
> +        __u8    nd_options_type;
> +        struct {
> +           __u8        nd_sll[ETH_ALEN];
> +           __u8        nd_tll[ETH_ALEN];
> +        };
>  };

I have not otherwise reviewed this patch.

Thanks,

Ben.


More information about the dev mailing list