|
@@ -871,6 +871,9 @@ static int vxlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
|
|
if (err)
|
|
if (err)
|
|
return err;
|
|
return err;
|
|
|
|
|
|
|
|
+ if (vxlan->default_dst.remote_ip.sa.sa_family != ip.sa.sa_family)
|
|
|
|
+ return -EAFNOSUPPORT;
|
|
|
|
+
|
|
spin_lock_bh(&vxlan->hash_lock);
|
|
spin_lock_bh(&vxlan->hash_lock);
|
|
err = vxlan_fdb_create(vxlan, addr, &ip, ndm->ndm_state, flags,
|
|
err = vxlan_fdb_create(vxlan, addr, &ip, ndm->ndm_state, flags,
|
|
port, vni, ifindex, ndm->ndm_flags);
|
|
port, vni, ifindex, ndm->ndm_flags);
|
|
@@ -2601,9 +2604,10 @@ static int vxlan_newlink(struct net *net, struct net_device *dev,
|
|
vni = nla_get_u32(data[IFLA_VXLAN_ID]);
|
|
vni = nla_get_u32(data[IFLA_VXLAN_ID]);
|
|
dst->remote_vni = vni;
|
|
dst->remote_vni = vni;
|
|
|
|
|
|
|
|
+ /* Unless IPv6 is explicitly requested, assume IPv4 */
|
|
|
|
+ dst->remote_ip.sa.sa_family = AF_INET;
|
|
if (data[IFLA_VXLAN_GROUP]) {
|
|
if (data[IFLA_VXLAN_GROUP]) {
|
|
dst->remote_ip.sin.sin_addr.s_addr = nla_get_be32(data[IFLA_VXLAN_GROUP]);
|
|
dst->remote_ip.sin.sin_addr.s_addr = nla_get_be32(data[IFLA_VXLAN_GROUP]);
|
|
- dst->remote_ip.sa.sa_family = AF_INET;
|
|
|
|
} else if (data[IFLA_VXLAN_GROUP6]) {
|
|
} else if (data[IFLA_VXLAN_GROUP6]) {
|
|
if (!IS_ENABLED(CONFIG_IPV6))
|
|
if (!IS_ENABLED(CONFIG_IPV6))
|
|
return -EPFNOSUPPORT;
|
|
return -EPFNOSUPPORT;
|