2005-04-17 02:20:36 +04:00
# ifndef __NET_IPIP_H
# define __NET_IPIP_H 1
# include <linux/if_tunnel.h>
2008-01-12 06:14:00 +03:00
# include <net/ip.h>
2005-04-17 02:20:36 +04:00
/* Keep error state on tunnel for 30 sec */
# define IPTUNNEL_ERR_TIMEO (30*HZ)
struct ip_tunnel
{
struct ip_tunnel * next ;
struct net_device * dev ;
int recursion ; /* Depth of hard_start_xmit recursion */
int err_count ; /* Number of arrived ICMP errors */
unsigned long err_time ; /* Time when the last ICMP error arrived */
/* These four fields used only by GRE */
__u32 i_seqno ; /* The last seen seqno */
__u32 o_seqno ; /* The last output seqno */
int hlen ; /* Precalculated GRE header length */
int mlink ;
struct ip_tunnel_parm parms ;
2008-03-24 12:28:39 +03:00
2008-03-12 01:35:59 +03:00
struct ip_tunnel_prl_entry * prl ; /* potential router list */
2008-03-24 12:28:39 +03:00
unsigned int prl_count ; /* # of entries in PRL */
2008-03-12 01:35:59 +03:00
} ;
struct ip_tunnel_prl_entry
{
struct ip_tunnel_prl_entry * next ;
2008-03-24 12:28:39 +03:00
__be32 addr ;
u16 flags ;
2005-04-17 02:20:36 +04:00
} ;
# define IPTUNNEL_XMIT() do { \
int err ; \
2008-10-09 23:03:17 +04:00
int pkt_len = skb - > len - skb_transport_offset ( skb ) ; \
2005-04-17 02:20:36 +04:00
\
skb - > ip_summed = CHECKSUM_NONE ; \
ip_select_ident ( iph , & rt - > u . dst , NULL ) ; \
\
2008-01-12 06:14:00 +03:00
err = ip_local_out ( skb ) ; \
2006-11-14 16:21:36 +03:00
if ( net_xmit_eval ( err ) = = 0 ) { \
2005-04-17 02:20:36 +04:00
stats - > tx_bytes + = pkt_len ; \
stats - > tx_packets + + ; \
} else { \
stats - > tx_errors + + ; \
stats - > tx_aborted_errors + + ; \
} \
} while ( 0 )
# endif