mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	be sent periodically. The rs_delay can be speficied when adding the PRL entry and defaults to 15 minutes. The RS is sent from every link local adress that's assigned to the tunnel interface. It's directed to the (guessed) linklocal address of the router and is sent through the tunnel. Better: send to ff02::2 encapsuled in unicast directed to router-v4. Signed-off-by: Sascha Hlusiak <contact@saschahlusiak.de> Signed-off-by: David S. Miller <davem@davemloft.net>
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef __NET_IPIP_H
 | 
						|
#define __NET_IPIP_H 1
 | 
						|
 | 
						|
#include <linux/if_tunnel.h>
 | 
						|
#include <net/ip.h>
 | 
						|
 | 
						|
/* 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;
 | 
						|
 | 
						|
	struct ip_tunnel_prl_entry	*prl;		/* potential router list */
 | 
						|
	unsigned int			prl_count;	/* # of entries in PRL */
 | 
						|
};
 | 
						|
 | 
						|
/* ISATAP: default interval between RS in secondy */
 | 
						|
#define IPTUNNEL_RS_DEFAULT_DELAY	(900)
 | 
						|
 | 
						|
struct ip_tunnel_prl_entry
 | 
						|
{
 | 
						|
	struct ip_tunnel_prl_entry	*next;
 | 
						|
	__be32				addr;
 | 
						|
	u16				flags;
 | 
						|
	unsigned long			rs_delay;
 | 
						|
	struct timer_list		rs_timer;
 | 
						|
	struct ip_tunnel		*tunnel;
 | 
						|
	spinlock_t			lock;
 | 
						|
};
 | 
						|
 | 
						|
#define IPTUNNEL_XMIT() do {						\
 | 
						|
	int err;							\
 | 
						|
	int pkt_len = skb->len - skb_transport_offset(skb);		\
 | 
						|
									\
 | 
						|
	skb->ip_summed = CHECKSUM_NONE;					\
 | 
						|
	ip_select_ident(iph, &rt->u.dst, NULL);				\
 | 
						|
									\
 | 
						|
	err = ip_local_out(skb);					\
 | 
						|
	if (net_xmit_eval(err) == 0) {					\
 | 
						|
		stats->tx_bytes += pkt_len;				\
 | 
						|
		stats->tx_packets++;					\
 | 
						|
	} else {							\
 | 
						|
		stats->tx_errors++;					\
 | 
						|
		stats->tx_aborted_errors++;				\
 | 
						|
	}								\
 | 
						|
} while (0)
 | 
						|
 | 
						|
#endif
 |