diff options
Diffstat (limited to 'net/xfrm/xfrm_policy.c')
| -rw-r--r-- | net/xfrm/xfrm_policy.c | 9 | 
1 files changed, 8 insertions, 1 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 5ce74a38552..94fdcc7f103 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -1497,7 +1497,7 @@ static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy,  		goto free_dst;  	/* Copy neighbour for reachability confirmation */ -	dst0->neighbour = neigh_clone(dst->neighbour); +	dst_set_neighbour(dst0, neigh_clone(dst_get_neighbour(dst)));  	xfrm_init_path((struct xfrm_dst *)dst0, dst, nfheader_len);  	xfrm_init_pmtu(dst_prev); @@ -2385,6 +2385,11 @@ static unsigned int xfrm_default_mtu(const struct dst_entry *dst)  	return dst_mtu(dst->path);  } +static struct neighbour *xfrm_neigh_lookup(const struct dst_entry *dst, const void *daddr) +{ +	return dst_neigh_lookup(dst->path, daddr); +} +  int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo)  {  	struct net *net; @@ -2410,6 +2415,8 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo)  			dst_ops->negative_advice = xfrm_negative_advice;  		if (likely(dst_ops->link_failure == NULL))  			dst_ops->link_failure = xfrm_link_failure; +		if (likely(dst_ops->neigh_lookup == NULL)) +			dst_ops->neigh_lookup = xfrm_neigh_lookup;  		if (likely(afinfo->garbage_collect == NULL))  			afinfo->garbage_collect = __xfrm_garbage_collect;  		xfrm_policy_afinfo[afinfo->family] = afinfo;  |