aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/vxlan.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 0d862a5077ab..c55e316373a1 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -871,6 +871,9 @@ static int vxlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
871 if (err) 871 if (err)
872 return err; 872 return err;
873 873
874 if (vxlan->default_dst.remote_ip.sa.sa_family != ip.sa.sa_family)
875 return -EAFNOSUPPORT;
876
874 spin_lock_bh(&vxlan->hash_lock); 877 spin_lock_bh(&vxlan->hash_lock);
875 err = vxlan_fdb_create(vxlan, addr, &ip, ndm->ndm_state, flags, 878 err = vxlan_fdb_create(vxlan, addr, &ip, ndm->ndm_state, flags,
876 port, vni, ifindex, ndm->ndm_flags); 879 port, vni, ifindex, ndm->ndm_flags);
@@ -2601,9 +2604,10 @@ static int vxlan_newlink(struct net *net, struct net_device *dev,
2601 vni = nla_get_u32(data[IFLA_VXLAN_ID]); 2604 vni = nla_get_u32(data[IFLA_VXLAN_ID]);
2602 dst->remote_vni = vni; 2605 dst->remote_vni = vni;
2603 2606
2607 /* Unless IPv6 is explicitly requested, assume IPv4 */
2608 dst->remote_ip.sa.sa_family = AF_INET;
2604 if (data[IFLA_VXLAN_GROUP]) { 2609 if (data[IFLA_VXLAN_GROUP]) {
2605 dst->remote_ip.sin.sin_addr.s_addr = nla_get_be32(data[IFLA_VXLAN_GROUP]); 2610 dst->remote_ip.sin.sin_addr.s_addr = nla_get_be32(data[IFLA_VXLAN_GROUP]);
2606 dst->remote_ip.sa.sa_family = AF_INET;
2607 } else if (data[IFLA_VXLAN_GROUP6]) { 2611 } else if (data[IFLA_VXLAN_GROUP6]) {
2608 if (!IS_ENABLED(CONFIG_IPV6)) 2612 if (!IS_ENABLED(CONFIG_IPV6))
2609 return -EPFNOSUPPORT; 2613 return -EPFNOSUPPORT;