aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/esp4.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2007-10-10 18:44:44 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:55:54 -0400
commit37fedd3aab6517daec628764c5d66dd8761fbe5f (patch)
tree12227aec3944168bff04173dccd580240f4496aa /net/ipv4/esp4.c
parent7b277b1a5fb147cb828e5d8b9780cee60f31a9bf (diff)
[IPSEC]: Use IPv6 calling convention as the convention for x->mode->output
The IPv6 calling convention for x->mode->output is more general and could help an eventual protocol-generic x->type->output implementation. This patch adopts it for IPv4 as well and modifies the IPv4 type output functions accordingly. It also rewrites the IPv6 mac/transport header calculation to be based off the network header where practical. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/esp4.c')
-rw-r--r--net/ipv4/esp4.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c
index 0f5e8387ccb4..93153d105619 100644
--- a/net/ipv4/esp4.c
+++ b/net/ipv4/esp4.c
@@ -60,10 +60,10 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)
60 60
61 skb_push(skb, -skb_network_offset(skb)); 61 skb_push(skb, -skb_network_offset(skb));
62 top_iph = ip_hdr(skb); 62 top_iph = ip_hdr(skb);
63 esph = (struct ip_esp_hdr *)(skb_network_header(skb) + 63 esph = (struct ip_esp_hdr *)skb_transport_header(skb);
64 top_iph->ihl * 4);
65 top_iph->tot_len = htons(skb->len + alen); 64 top_iph->tot_len = htons(skb->len + alen);
66 *(skb_tail_pointer(trailer) - 1) = top_iph->protocol; 65 *(skb_tail_pointer(trailer) - 1) = *skb_mac_header(skb);
66 *skb_mac_header(skb) = IPPROTO_ESP;
67 67
68 spin_lock_bh(&x->lock); 68 spin_lock_bh(&x->lock);
69 69
@@ -91,9 +91,8 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)
91 break; 91 break;
92 } 92 }
93 93
94 top_iph->protocol = IPPROTO_UDP; 94 *skb_mac_header(skb) = IPPROTO_UDP;
95 } else 95 }
96 top_iph->protocol = IPPROTO_ESP;
97 96
98 esph->spi = x->id.spi; 97 esph->spi = x->id.spi;
99 esph->seq_no = htonl(XFRM_SKB_CB(skb)->seq); 98 esph->seq_no = htonl(XFRM_SKB_CB(skb)->seq);