2 #define __NET_VXLAN_H 1
4 #include <linux/skbuff.h>
5 #include <linux/netdevice.h>
8 #define VNI_HASH_BITS 10
9 #define VNI_HASH_SIZE (1<<VNI_HASH_BITS)
11 /* VXLAN protocol header */
18 typedef void (vxlan_rcv_t
)(struct vxlan_sock
*vh
, struct sk_buff
*skb
, __be32 key
);
20 /* per UDP socket information */
22 struct hlist_node hlist
;
25 struct work_struct del_work
;
28 struct hlist_head vni_list
[VNI_HASH_SIZE
];
30 struct udp_offload udp_offloads
;
33 #define VXLAN_F_LEARN 0x01
34 #define VXLAN_F_PROXY 0x02
35 #define VXLAN_F_RSC 0x04
36 #define VXLAN_F_L2MISS 0x08
37 #define VXLAN_F_L3MISS 0x10
38 #define VXLAN_F_IPV6 0x20
39 #define VXLAN_F_UDP_CSUM 0x40
40 #define VXLAN_F_UDP_ZERO_CSUM6_TX 0x80
41 #define VXLAN_F_UDP_ZERO_CSUM6_RX 0x100
43 struct vxlan_sock
*vxlan_sock_add(struct net
*net
, __be16 port
,
44 vxlan_rcv_t
*rcv
, void *data
,
45 bool no_share
, u32 flags
);
47 void vxlan_sock_release(struct vxlan_sock
*vs
);
49 int vxlan_xmit_skb(struct vxlan_sock
*vs
,
50 struct rtable
*rt
, struct sk_buff
*skb
,
51 __be32 src
, __be32 dst
, __u8 tos
, __u8 ttl
, __be16 df
,
52 __be16 src_port
, __be16 dst_port
, __be32 vni
, bool xnet
);
54 static inline bool vxlan_gso_check(struct sk_buff
*skb
)
56 if ((skb_shinfo(skb
)->gso_type
& SKB_GSO_UDP_TUNNEL
) &&
57 (skb
->inner_protocol_type
!= ENCAP_TYPE_ETHER
||
58 skb
->inner_protocol
!= htons(ETH_P_TEB
) ||
59 (skb_inner_mac_header(skb
) - skb_transport_header(skb
) !=
60 sizeof(struct udphdr
) + sizeof(struct vxlanhdr
))))
66 /* IP header + UDP + VXLAN + Ethernet header */
67 #define VXLAN_HEADROOM (20 + 8 + 8 + 14)
68 /* IPv6 header + UDP + VXLAN + Ethernet header */
69 #define VXLAN6_HEADROOM (40 + 8 + 8 + 14)
71 #if IS_ENABLED(CONFIG_VXLAN)
72 void vxlan_get_rx_port(struct net_device
*netdev
);
74 static inline void vxlan_get_rx_port(struct net_device
*netdev
)