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 10struct ip_tunnel 11{ 12 struct ip_tunnel *next; 13 struct net_device *dev; 14 15 int err_count; /* Number of arrived ICMP errors */ 16 unsigned long err_time; /* Time when the last ICMP error arrived */ 17 18 /* These four fields used only by GRE */ 19 __u32 i_seqno; /* The last seen seqno */ 20 __u32 o_seqno; /* The last output seqno */ 21 int hlen; /* Precalculated GRE header length */ 22 int mlink; 23 24 struct ip_tunnel_parm parms; 25 26 struct ip_tunnel_prl_entry *prl; /* potential router list */ 27 unsigned int prl_count; /* # of entries in PRL */ 28}; 29 30struct ip_tunnel_prl_entry 31{ 32 struct ip_tunnel_prl_entry *next; 33 __be32 addr; 34 u16 flags; 35}; 36 37#define IPTUNNEL_XMIT() do { \ 38 int err; \ 39 int pkt_len = skb->len - skb_transport_offset(skb); \ 40 \ 41 skb->ip_summed = CHECKSUM_NONE; \ 42 ip_select_ident(iph, &rt->u.dst, NULL); \ 43 \ 44 err = ip_local_out(skb); \ 45 if (net_xmit_eval(err) == 0) { \ 46 stats->tx_bytes += pkt_len; \ 47 stats->tx_packets++; \ 48 } else { \ 49 stats->tx_errors++; \ 50 stats->tx_aborted_errors++; \ 51 } \ 52} while (0) 53 54#endif 55

