diff options
Diffstat (limited to 'net/ipv4/xfrm4_state.c')
-rw-r--r-- | net/ipv4/xfrm4_state.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/net/ipv4/xfrm4_state.c b/net/ipv4/xfrm4_state.c index 13d54a1c3337..e6030e74ff65 100644 --- a/net/ipv4/xfrm4_state.c +++ b/net/ipv4/xfrm4_state.c | |||
@@ -47,12 +47,29 @@ __xfrm4_init_tempsel(struct xfrm_state *x, struct flowi *fl, | |||
47 | x->props.family = AF_INET; | 47 | x->props.family = AF_INET; |
48 | } | 48 | } |
49 | 49 | ||
50 | int xfrm4_extract_header(struct sk_buff *skb) | ||
51 | { | ||
52 | struct iphdr *iph = ip_hdr(skb); | ||
53 | |||
54 | XFRM_MODE_SKB_CB(skb)->id = iph->id; | ||
55 | XFRM_MODE_SKB_CB(skb)->frag_off = iph->frag_off; | ||
56 | XFRM_MODE_SKB_CB(skb)->tos = iph->tos; | ||
57 | XFRM_MODE_SKB_CB(skb)->ttl = iph->ttl; | ||
58 | XFRM_MODE_SKB_CB(skb)->protocol = iph->protocol; | ||
59 | memset(XFRM_MODE_SKB_CB(skb)->flow_lbl, 0, | ||
60 | sizeof(XFRM_MODE_SKB_CB(skb)->flow_lbl)); | ||
61 | |||
62 | return 0; | ||
63 | } | ||
64 | |||
50 | static struct xfrm_state_afinfo xfrm4_state_afinfo = { | 65 | static struct xfrm_state_afinfo xfrm4_state_afinfo = { |
51 | .family = AF_INET, | 66 | .family = AF_INET, |
67 | .proto = IPPROTO_IPIP, | ||
52 | .owner = THIS_MODULE, | 68 | .owner = THIS_MODULE, |
53 | .init_flags = xfrm4_init_flags, | 69 | .init_flags = xfrm4_init_flags, |
54 | .init_tempsel = __xfrm4_init_tempsel, | 70 | .init_tempsel = __xfrm4_init_tempsel, |
55 | .output = xfrm4_output, | 71 | .output = xfrm4_output, |
72 | .extract_output = xfrm4_extract_output, | ||
56 | }; | 73 | }; |
57 | 74 | ||
58 | void __init xfrm4_state_init(void) | 75 | void __init xfrm4_state_init(void) |