aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/ah4.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2007-10-10 18:46:21 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:55:56 -0400
commit631a6698d09e57cadc069914d613899609a0ae83 (patch)
tree7e915991e7dea60077e2f160908820c90e34fb18 /net/ipv4/ah4.c
parentceb1eec8291175686d0208e66595ff83bc0624e2 (diff)
[IPSEC]: Move IP protocol setting from transforms into xfrm4_input.c
This patch makes the IPv4 x->type->input functions return the next protocol instead of setting it directly. This is identical to how we do things in IPv6 and will help us merge common code on the input path. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ah4.c')
-rw-r--r--net/ipv4/ah4.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ipv4/ah4.c b/net/ipv4/ah4.c
index 60925fedbf16..4e8e3b079f5b 100644
--- a/net/ipv4/ah4.c
+++ b/net/ipv4/ah4.c
@@ -125,6 +125,7 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
125{ 125{
126 int ah_hlen; 126 int ah_hlen;
127 int ihl; 127 int ihl;
128 int nexthdr;
128 int err = -EINVAL; 129 int err = -EINVAL;
129 struct iphdr *iph; 130 struct iphdr *iph;
130 struct ip_auth_hdr *ah; 131 struct ip_auth_hdr *ah;
@@ -136,6 +137,7 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
136 137
137 ah = (struct ip_auth_hdr *)skb->data; 138 ah = (struct ip_auth_hdr *)skb->data;
138 ahp = x->data; 139 ahp = x->data;
140 nexthdr = ah->nexthdr;
139 ah_hlen = (ah->hdrlen + 2) << 2; 141 ah_hlen = (ah->hdrlen + 2) << 2;
140 142
141 if (ah_hlen != XFRM_ALIGN8(sizeof(*ah) + ahp->icv_full_len) && 143 if (ah_hlen != XFRM_ALIGN8(sizeof(*ah) + ahp->icv_full_len) &&
@@ -182,13 +184,12 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
182 goto out; 184 goto out;
183 } 185 }
184 } 186 }
185 ((struct iphdr*)work_buf)->protocol = ah->nexthdr;
186 skb->network_header += ah_hlen; 187 skb->network_header += ah_hlen;
187 memcpy(skb_network_header(skb), work_buf, ihl); 188 memcpy(skb_network_header(skb), work_buf, ihl);
188 skb->transport_header = skb->network_header; 189 skb->transport_header = skb->network_header;
189 __skb_pull(skb, ah_hlen + ihl); 190 __skb_pull(skb, ah_hlen + ihl);
190 191
191 return 0; 192 return nexthdr;
192 193
193out: 194out:
194 return err; 195 return err;