 c544193214
			
		
	
	
	c544193214
	
	
	
		
			
			Following patch refactors GRE code into ip tunneling code and GRE specific code. Common tunneling code is moved to ip_tunnel module. ip_tunnel module is written as generic library which can be used by different tunneling implementations. ip_tunnel module contains following components: - packet xmit and rcv generic code. xmit flow looks like (gre_xmit/ipip_xmit)->ip_tunnel_xmit->ip_local_out. - hash table of all devices. - lookup for tunnel devices. - control plane operations like device create, destroy, ioctl, netlink operations code. - registration for tunneling modules, like gre, ipip etc. - define single pcpu_tstats dev->tstats. - struct tnl_ptk_info added to pass parsed tunnel packet parameters. ipip.h header is renamed to ip_tunnel.h Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Signed-off-by: David S. Miller <davem@davemloft.net>
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef __LINUX_GRE_H
 | |
| #define __LINUX_GRE_H
 | |
| 
 | |
| #include <linux/skbuff.h>
 | |
| #include <net/ip_tunnels.h>
 | |
| 
 | |
| #define GREPROTO_CISCO		0
 | |
| #define GREPROTO_PPTP		1
 | |
| #define GREPROTO_MAX		2
 | |
| 
 | |
| struct gre_protocol {
 | |
| 	int  (*handler)(struct sk_buff *skb);
 | |
| 	void (*err_handler)(struct sk_buff *skb, u32 info);
 | |
| };
 | |
| 
 | |
| struct gre_base_hdr {
 | |
| 	__be16 flags;
 | |
| 	__be16 protocol;
 | |
| };
 | |
| #define GRE_HEADER_SECTION 4
 | |
| 
 | |
| int gre_add_protocol(const struct gre_protocol *proto, u8 version);
 | |
| int gre_del_protocol(const struct gre_protocol *proto, u8 version);
 | |
| 
 | |
| static inline __be16 gre_flags_to_tnl_flags(__be16 flags)
 | |
| {
 | |
| 	__be16 tflags = 0;
 | |
| 
 | |
| 	if (flags & GRE_CSUM)
 | |
| 		tflags |= TUNNEL_CSUM;
 | |
| 	if (flags & GRE_ROUTING)
 | |
| 		tflags |= TUNNEL_ROUTING;
 | |
| 	if (flags & GRE_KEY)
 | |
| 		tflags |= TUNNEL_KEY;
 | |
| 	if (flags & GRE_SEQ)
 | |
| 		tflags |= TUNNEL_SEQ;
 | |
| 	if (flags & GRE_STRICT)
 | |
| 		tflags |= TUNNEL_STRICT;
 | |
| 	if (flags & GRE_REC)
 | |
| 		tflags |= TUNNEL_REC;
 | |
| 	if (flags & GRE_VERSION)
 | |
| 		tflags |= TUNNEL_VERSION;
 | |
| 
 | |
| 	return tflags;
 | |
| }
 | |
| 
 | |
| static inline __be16 tnl_flags_to_gre_flags(__be16 tflags)
 | |
| {
 | |
| 	__be16 flags = 0;
 | |
| 
 | |
| 	if (tflags & TUNNEL_CSUM)
 | |
| 		flags |= GRE_CSUM;
 | |
| 	if (tflags & TUNNEL_ROUTING)
 | |
| 		flags |= GRE_ROUTING;
 | |
| 	if (tflags & TUNNEL_KEY)
 | |
| 		flags |= GRE_KEY;
 | |
| 	if (tflags & TUNNEL_SEQ)
 | |
| 		flags |= GRE_SEQ;
 | |
| 	if (tflags & TUNNEL_STRICT)
 | |
| 		flags |= GRE_STRICT;
 | |
| 	if (tflags & TUNNEL_REC)
 | |
| 		flags |= GRE_REC;
 | |
| 	if (tflags & TUNNEL_VERSION)
 | |
| 		flags |= GRE_VERSION;
 | |
| 
 | |
| 	return flags;
 | |
| }
 | |
| 
 | |
| #endif
 |