diff options
| author | Kazunori MIYAZAWA <kazunori@miyazawa.org> | 2008-03-24 14:51:51 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-03-24 14:51:51 -0700 | 
| commit | df9dcb4588aca9cc243cf1f3f454361a84e1cbdb (patch) | |
| tree | 53dabed7cffee752109808cbea2f812e0a6d7faf /net/xfrm/xfrm_output.c | |
| parent | fa86d322d89995fef1bfb5cc768b89d8c22ea0d9 (diff) | |
| download | olio-linux-3.10-df9dcb4588aca9cc243cf1f3f454361a84e1cbdb.tar.xz olio-linux-3.10-df9dcb4588aca9cc243cf1f3f454361a84e1cbdb.zip  | |
[IPSEC]: Fix inter address family IPsec tunnel handling.
Signed-off-by: Kazunori MIYAZAWA <kazunori@miyazawa.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/xfrm/xfrm_output.c')
| -rw-r--r-- | net/xfrm/xfrm_output.c | 18 | 
1 files changed, 17 insertions, 1 deletions
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c index 569d377932c..2519129c6d2 100644 --- a/net/xfrm/xfrm_output.c +++ b/net/xfrm/xfrm_output.c @@ -124,7 +124,7 @@ int xfrm_output_resume(struct sk_buff *skb, int err)  		if (!x)  			return dst_output(skb); -		err = nf_hook(x->inner_mode->afinfo->family, +		err = nf_hook(skb->dst->ops->family,  			      NF_INET_POST_ROUTING, skb,  			      NULL, skb->dst->dev, xfrm_output2);  		if (unlikely(err != 1)) @@ -193,4 +193,20 @@ int xfrm_output(struct sk_buff *skb)  	return xfrm_output2(skb);  } + +int xfrm_inner_extract_output(struct xfrm_state *x, struct sk_buff *skb) +{ +	struct xfrm_mode *inner_mode; +	if (x->sel.family == AF_UNSPEC) +		inner_mode = xfrm_ip2inner_mode(x, +				xfrm_af2proto(skb->dst->ops->family)); +	else +		inner_mode = x->inner_mode; + +	if (inner_mode == NULL) +		return -EAFNOSUPPORT; +	return inner_mode->afinfo->extract_output(x, skb); +} +  EXPORT_SYMBOL_GPL(xfrm_output); +EXPORT_SYMBOL_GPL(xfrm_inner_extract_output);  |