2013-08-19 22:23:07 +04:00
# ifndef __NET_VXLAN_H
# define __NET_VXLAN_H 1
# include <linux/skbuff.h>
# include <linux/netdevice.h>
# include <linux/udp.h>
# define VNI_HASH_BITS 10
# define VNI_HASH_SIZE (1<<VNI_HASH_BITS)
struct vxlan_sock ;
typedef void ( vxlan_rcv_t ) ( struct vxlan_sock * vh , struct sk_buff * skb , __be32 key ) ;
/* per UDP socket information */
struct vxlan_sock {
struct hlist_node hlist ;
vxlan_rcv_t * rcv ;
void * data ;
struct work_struct del_work ;
struct socket * sock ;
struct rcu_head rcu ;
struct hlist_head vni_list [ VNI_HASH_SIZE ] ;
atomic_t refcnt ;
2014-01-20 15:59:21 +04:00
struct udp_offload udp_offloads ;
2013-08-19 22:23:07 +04:00
} ;
2014-06-05 04:20:29 +04:00
# define VXLAN_F_LEARN 0x01
# define VXLAN_F_PROXY 0x02
# define VXLAN_F_RSC 0x04
# define VXLAN_F_L2MISS 0x08
# define VXLAN_F_L3MISS 0x10
# define VXLAN_F_IPV6 0x20
# define VXLAN_F_UDP_CSUM 0x40
# define VXLAN_F_UDP_ZERO_CSUM6_TX 0x80
# define VXLAN_F_UDP_ZERO_CSUM6_RX 0x100
2013-08-19 22:23:07 +04:00
struct vxlan_sock * vxlan_sock_add ( struct net * net , __be16 port ,
vxlan_rcv_t * rcv , void * data ,
2014-06-05 04:20:29 +04:00
bool no_share , u32 flags ) ;
2013-08-19 22:23:07 +04:00
void vxlan_sock_release ( struct vxlan_sock * vs ) ;
2013-08-19 22:23:17 +04:00
2013-09-02 17:34:55 +04:00
int vxlan_xmit_skb ( struct vxlan_sock * vs ,
2013-08-19 22:23:17 +04:00
struct rtable * rt , struct sk_buff * skb ,
__be32 src , __be32 dst , __u8 tos , __u8 ttl , __be16 df ,
2014-04-24 12:02:49 +04:00
__be16 src_port , __be16 dst_port , __be32 vni , bool xnet ) ;
2013-08-19 22:23:17 +04:00
2013-10-24 10:27:10 +04:00
/* IP header + UDP + VXLAN + Ethernet header */
# define VXLAN_HEADROOM (20 + 8 + 8 + 14)
/* IPv6 header + UDP + VXLAN + Ethernet header */
# define VXLAN6_HEADROOM (40 + 8 + 8 + 14)
# if IS_ENABLED(CONFIG_VXLAN)
2013-09-04 13:13:38 +04:00
void vxlan_get_rx_port ( struct net_device * netdev ) ;
2013-10-24 10:27:10 +04:00
# else
static inline void vxlan_get_rx_port ( struct net_device * netdev )
{
}
# endif
2013-08-19 22:23:07 +04:00
# endif