mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Add a helper function to determine if the type of a netdev is geneve based on its rtnl_link_ops. This allows drivers that may wish to offload tunnels to check the underlying type of the device. A recent patch added a similar helper to vxlan.h Signed-off-by: John Hurley <john.hurley@netronome.com> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 */
 | 
						|
#ifndef __NET_GENEVE_H
 | 
						|
#define __NET_GENEVE_H  1
 | 
						|
 | 
						|
#include <net/udp_tunnel.h>
 | 
						|
 | 
						|
/* Geneve Header:
 | 
						|
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
						|
 *  |Ver|  Opt Len  |O|C|    Rsvd.  |          Protocol Type        |
 | 
						|
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
						|
 *  |        Virtual Network Identifier (VNI)       |    Reserved   |
 | 
						|
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
						|
 *  |                    Variable Length Options                    |
 | 
						|
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
						|
 *
 | 
						|
 * Option Header:
 | 
						|
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
						|
 *  |          Option Class         |      Type     |R|R|R| Length  |
 | 
						|
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
						|
 *  |                      Variable Option Data                     |
 | 
						|
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
						|
 */
 | 
						|
 | 
						|
struct geneve_opt {
 | 
						|
	__be16	opt_class;
 | 
						|
	u8	type;
 | 
						|
#ifdef __LITTLE_ENDIAN_BITFIELD
 | 
						|
	u8	length:5;
 | 
						|
	u8	r3:1;
 | 
						|
	u8	r2:1;
 | 
						|
	u8	r1:1;
 | 
						|
#else
 | 
						|
	u8	r1:1;
 | 
						|
	u8	r2:1;
 | 
						|
	u8	r3:1;
 | 
						|
	u8	length:5;
 | 
						|
#endif
 | 
						|
	u8	opt_data[];
 | 
						|
};
 | 
						|
 | 
						|
#define GENEVE_CRIT_OPT_TYPE (1 << 7)
 | 
						|
 | 
						|
struct genevehdr {
 | 
						|
#ifdef __LITTLE_ENDIAN_BITFIELD
 | 
						|
	u8 opt_len:6;
 | 
						|
	u8 ver:2;
 | 
						|
	u8 rsvd1:6;
 | 
						|
	u8 critical:1;
 | 
						|
	u8 oam:1;
 | 
						|
#else
 | 
						|
	u8 ver:2;
 | 
						|
	u8 opt_len:6;
 | 
						|
	u8 oam:1;
 | 
						|
	u8 critical:1;
 | 
						|
	u8 rsvd1:6;
 | 
						|
#endif
 | 
						|
	__be16 proto_type;
 | 
						|
	u8 vni[3];
 | 
						|
	u8 rsvd2;
 | 
						|
	struct geneve_opt options[];
 | 
						|
};
 | 
						|
 | 
						|
static inline bool netif_is_geneve(const struct net_device *dev)
 | 
						|
{
 | 
						|
	return dev->rtnl_link_ops &&
 | 
						|
	       !strcmp(dev->rtnl_link_ops->kind, "geneve");
 | 
						|
}
 | 
						|
 | 
						|
#ifdef CONFIG_INET
 | 
						|
struct net_device *geneve_dev_create_fb(struct net *net, const char *name,
 | 
						|
					u8 name_assign_type, u16 dst_port);
 | 
						|
#endif /*ifdef CONFIG_INET */
 | 
						|
 | 
						|
#endif /*ifdef__NET_GENEVE_H */
 |