vxlan: support both IPv4 and IPv6 sockets in a single vxlan device
For metadata based vxlan interface, open both IPv4 and IPv6 socket. This is much more user friendly: it's not necessary to create two vxlan interfaces and pay attention to using the right one in routing rules. Signed-off-by: Jiri Benc <jbenc@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
205f356d16
commit
b1be00a6c3
@@ -152,7 +152,10 @@ struct vxlan_config {
|
||||
struct vxlan_dev {
|
||||
struct hlist_node hlist; /* vni hash table */
|
||||
struct list_head next; /* vxlan's per namespace list */
|
||||
struct vxlan_sock *vn_sock; /* listening socket */
|
||||
struct vxlan_sock *vn4_sock; /* listening socket for IPv4 */
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
struct vxlan_sock *vn6_sock; /* listening socket for IPv6 */
|
||||
#endif
|
||||
struct net_device *dev;
|
||||
struct net *net; /* netns for packet i/o */
|
||||
struct vxlan_rdst default_dst; /* default destination */
|
||||
@@ -195,9 +198,14 @@ struct vxlan_dev {
|
||||
struct net_device *vxlan_dev_create(struct net *net, const char *name,
|
||||
u8 name_assign_type, struct vxlan_config *conf);
|
||||
|
||||
static inline __be16 vxlan_dev_dst_port(struct vxlan_dev *vxlan)
|
||||
static inline __be16 vxlan_dev_dst_port(struct vxlan_dev *vxlan,
|
||||
unsigned short family)
|
||||
{
|
||||
return inet_sk(vxlan->vn_sock->sock->sk)->inet_sport;
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
if (family == AF_INET6)
|
||||
return inet_sk(vxlan->vn6_sock->sock->sk)->inet_sport;
|
||||
#endif
|
||||
return inet_sk(vxlan->vn4_sock->sock->sk)->inet_sport;
|
||||
}
|
||||
|
||||
static inline netdev_features_t vxlan_features_check(struct sk_buff *skb,
|
||||
|
Reference in New Issue
Block a user