[ovs-dev] [PATCHv2 10/20] compat: Backport IPv6 fragmentation.

Simon Horman simon.horman at netronome.com
Fri Dec 11 05:45:14 UTC 2015


Hi Joe,

On Wed, Dec 02, 2015 at 11:53:46PM -0800, Joe Stringer wrote:
> From: Joe Stringer <joestringer at nicira.com>
> 
> IPv6 fragmentation functionality is not exported by most kernels, so
> backport this code from the upstream 4.3 development tree.
> 
> Signed-off-by: Joe Stringer <joestringer at nicira.com>

[snip]

> diff --git a/datapath/linux/compat/ip6_output.c b/datapath/linux/compat/ip6_output.c
> new file mode 100644
> index 000000000000..9d2fe46ef7ef
> --- /dev/null
> +++ b/datapath/linux/compat/ip6_output.c

[snip]

> +static u32 __ipv6_select_ident(struct net *net, u32 hashrnd,
> +			       const struct in6_addr *dst,
> +			       const struct in6_addr *src)
> +{
> +	u32 hash, id;
> +
> +	hash = __ipv6_addr_jhash(dst, hashrnd);
> +	hash = __ipv6_addr_jhash(src, hash);
> +	hash ^= net_hash_mix(net);
> +
> +	/* Treat id of 0 as unset and if we get 0 back from ip_idents_reserve,
> +	 * set the hight order instead thus minimizing possible future
> +	 * collisions.
> +	 */
> +	id = rpl_ip_idents_reserve(hash, 1);
> +	if (unlikely(!id))
> +		id = 1 << 31;
> +
> +	return id;
> +}

In Linux v3.19 and v3.19.1 (but not v3.19.2+) __ipv6_select_ident was not
static and is declared in ipv6.h. I believe it is because of that that I am
seeing the following build error.

/home/horms/projects/openvswitch/openvswitch2/datapath/linux/ip6_output.c:93:12: error: conflicting types for ‘__ipv6_select_ident’
 static u32 __ipv6_select_ident(struct net *net, u32 hashrnd,

[snip]



More information about the dev mailing list