diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2008-01-11 22:14:00 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 17:53:47 -0500 |
commit | c439cb2e4b13cf1cb2abcd006b906315a3381323 (patch) | |
tree | 7bb9d27214e010d37d6a715d0533a7148a8f429a /include/net/ipip.h | |
parent | 227620e295090629fcb2c46ad3828222ab65438d (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 'include/net/ipip.h')
-rw-r--r-- | include/net/ipip.h | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/include/net/ipip.h b/include/net/ipip.h index 7cdc914322f0..549e132bca9c 100644 --- a/include/net/ipip.h +++ b/include/net/ipip.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define __NET_IPIP_H 1 | 2 | #define __NET_IPIP_H 1 |
3 | 3 | ||
4 | #include <linux/if_tunnel.h> | 4 | #include <linux/if_tunnel.h> |
5 | #include <net/ip.h> | ||
5 | 6 | ||
6 | /* Keep error state on tunnel for 30 sec */ | 7 | /* Keep error state on tunnel for 30 sec */ |
7 | #define IPTUNNEL_ERR_TIMEO (30*HZ) | 8 | #define IPTUNNEL_ERR_TIMEO (30*HZ) |
@@ -30,11 +31,9 @@ struct ip_tunnel | |||
30 | int pkt_len = skb->len; \ | 31 | int pkt_len = skb->len; \ |
31 | \ | 32 | \ |
32 | skb->ip_summed = CHECKSUM_NONE; \ | 33 | skb->ip_summed = CHECKSUM_NONE; \ |
33 | iph->tot_len = htons(skb->len); \ | ||
34 | ip_select_ident(iph, &rt->u.dst, NULL); \ | 34 | ip_select_ident(iph, &rt->u.dst, NULL); \ |
35 | ip_send_check(iph); \ | ||
36 | \ | 35 | \ |
37 | err = NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev, dst_output);\ | 36 | err = ip_local_out(skb); \ |
38 | if (net_xmit_eval(err) == 0) { \ | 37 | if (net_xmit_eval(err) == 0) { \ |
39 | stats->tx_bytes += pkt_len; \ | 38 | stats->tx_bytes += pkt_len; \ |
40 | stats->tx_packets++; \ | 39 | stats->tx_packets++; \ |