aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/xfrm4_output.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2008-01-11 22:14:00 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 17:53:47 -0500
commitc439cb2e4b13cf1cb2abcd006b906315a3381323 (patch)
tree7bb9d27214e010d37d6a715d0533a7148a8f429a /net/ipv4/xfrm4_output.c
parent227620e295090629fcb2c46ad3828222ab65438d (diff)
[IPV4]: Add ip_local_out
Most callers of the LOCAL_OUT chain will set the IP packet length and header checksum before doing so. They also share the same output function dst_output. This patch creates a new function called ip_local_out which does all of that and converts the appropriate users over to it. Apart from removing duplicate code, it will also help in merging the IPsec output path once the same thing is done for IPv6. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/xfrm4_output.c')
-rw-r--r--net/ipv4/xfrm4_output.c8
1 files changed, 1 insertions, 7 deletions
diff --git a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c
index 13fd11335e28..0ffc3d078489 100644
--- a/net/ipv4/xfrm4_output.c
+++ b/net/ipv4/xfrm4_output.c
@@ -69,17 +69,12 @@ EXPORT_SYMBOL(xfrm4_prepare_output);
69 69
70static inline int xfrm4_output_one(struct sk_buff *skb) 70static inline int xfrm4_output_one(struct sk_buff *skb)
71{ 71{
72 struct iphdr *iph;
73 int err; 72 int err;
74 73
75 err = xfrm_output(skb); 74 err = xfrm_output(skb);
76 if (err) 75 if (err)
77 goto error_nolock; 76 goto error_nolock;
78 77
79 iph = ip_hdr(skb);
80 iph->tot_len = htons(skb->len);
81 ip_send_check(iph);
82
83 IPCB(skb)->flags |= IPSKB_XFRM_TRANSFORMED; 78 IPCB(skb)->flags |= IPSKB_XFRM_TRANSFORMED;
84 err = 0; 79 err = 0;
85 80
@@ -97,8 +92,7 @@ static int xfrm4_output_finish2(struct sk_buff *skb)
97 while (likely((err = xfrm4_output_one(skb)) == 0)) { 92 while (likely((err = xfrm4_output_one(skb)) == 0)) {
98 nf_reset(skb); 93 nf_reset(skb);
99 94
100 err = nf_hook(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, 95 err = __ip_local_out(skb);
101 skb->dst->dev, dst_output);
102 if (unlikely(err != 1)) 96 if (unlikely(err != 1))
103 break; 97 break;
104 98