1 #ifndef __NET_IPIP_H 2 #define __NET_IPIP_H 1 3 4 #include <linux/if_tunnel.h> 5 #include <net/ip.h> 6 7 /* Keep error state on tunnel for 30 sec */ 8 #define IPTUNNEL_ERR_TIMEO (30*HZ) 9 10 /* 6rd prefix/relay information */ 11 struct ip_tunnel_6rd_parm { 12 struct in6_addr prefix; 13 __be32 relay_prefix; 14 u16 prefixlen; 15 u16 relay_prefixlen; 16 }; 17 18 struct ip_tunnel { 19 struct ip_tunnel __rcu *next; 20 struct net_device *dev; 21 22 int err_count; /* Number of arrived ICMP errors */ 23 unsigned long err_time; /* Time when the last ICMP error arrived */ 24 25 /* These four fields used only by GRE */ 26 __u32 i_seqno; /* The last seen seqno */ 27 __u32 o_seqno; /* The last output seqno */ 28 int hlen; /* Precalculated GRE header length */ 29 int mlink; 30 31 struct ip_tunnel_parm parms; 32 33 /* for SIT */ 34 #ifdef CONFIG_IPV6_SIT_6RD 35 struct ip_tunnel_6rd_parm ip6rd; 36 #endif 37 struct ip_tunnel_prl_entry __rcu *prl; /* potential router list */ 38 unsigned int prl_count; /* # of entries in PRL */ 39 }; 40 41 struct ip_tunnel_prl_entry { 42 struct ip_tunnel_prl_entry __rcu *next; 43 __be32 addr; 44 u16 flags; 45 struct rcu_head rcu_head; 46 }; 47 48 #define __IPTUNNEL_XMIT(stats1, stats2) do { \ 49 int err; \ 50 int pkt_len = skb->len - skb_transport_offset(skb); \ 51 \ 52 skb->ip_summed = CHECKSUM_NONE; \ 53 ip_select_ident(skb, &rt->dst, NULL); \ 54 \ 55 err = ip_local_out(skb); \ 56 if (likely(net_xmit_eval(err) == 0)) { \ 57 (stats1)->tx_bytes += pkt_len; \ 58 (stats1)->tx_packets++; \ 59 } else { \ 60 (stats2)->tx_errors++; \ 61 (stats2)->tx_aborted_errors++; \ 62 } \ 63 } while (0) 64 65 #define IPTUNNEL_XMIT() __IPTUNNEL_XMIT(txq, stats) 66 67 #endif 68