1 #ifndef __NET_VXLAN_WRAPPER_H
2 #define __NET_VXLAN_WRAPPER_H 1
4 #include <linux/skbuff.h>
5 #include <linux/netdevice.h>
9 #include <linux/version.h>
11 #ifdef USE_KERNEL_TUNNEL_API
12 #include_next <net/vxlan.h>
16 /* VXLAN header flags. */
17 #define VXLAN_HF_VNI 0x08000000
19 #define VXLAN_N_VID (1u << 24)
20 #define VXLAN_VID_MASK (VXLAN_N_VID - 1)
21 #define VXLAN_HLEN (sizeof(struct udphdr) + sizeof(struct vxlanhdr))
24 #ifdef USE_KERNEL_TUNNEL_API
25 static inline int rpl_vxlan_xmit_skb(struct vxlan_sock *vs,
26 struct rtable *rt, struct sk_buff *skb,
27 __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df,
28 __be16 src_port, __be16 dst_port, __be32 vni)
30 if (skb_is_gso(skb) && skb_is_encapsulated(skb)) {
35 #ifdef HAVE_VXLAN_XMIT_SKB_XNET_ARG
36 return vxlan_xmit_skb(vs, rt, skb, src, dst, tos, ttl, df,
37 src_port, dst_port, vni, false);
39 #ifndef HAVE_IPTUNNEL_XMIT_NET
40 return vxlan_xmit_skb(vs, rt, skb, src, dst, tos, ttl, df,
41 src_port, dst_port, vni);
43 return vxlan_xmit_skb(NULL, vs, rt, skb, src, dst, tos, ttl, df,
44 src_port, dst_port, vni);
50 #define vxlan_xmit_skb rpl_vxlan_xmit_skb
54 typedef void (vxlan_rcv_t)(struct vxlan_sock *vs, struct sk_buff *skb, __be32 key);
56 /* per UDP socket information */
58 struct hlist_node hlist;
61 struct work_struct del_work;
66 struct vxlan_sock *vxlan_sock_add(struct net *net, __be16 port,
67 vxlan_rcv_t *rcv, void *data,
68 bool no_share, u32 flags);
70 void vxlan_sock_release(struct vxlan_sock *vs);
72 int vxlan_xmit_skb(struct vxlan_sock *vs,
73 struct rtable *rt, struct sk_buff *skb,
74 __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df,
75 __be16 src_port, __be16 dst_port, __be32 vni);
77 __be16 vxlan_src_port(__u16 port_min, __u16 port_max, struct sk_buff *skb);