forked from luck/tmp_suning_uos_patched
macvtap add missing ioctls - fix wrapping
The macvtap driver tries to emulate all the ioctls supported by a normal tun/tap driver, however it was missing the generic SIOCGIFHWADDR and SIOCSIFHWADDR ioctls to get and set the mac address that are supported by tun/tap. This patch adds these. Signed-off-by: Justin Cormack <justin@netbsd.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a62b70ddd1
commit
b508208339
@ -1101,6 +1101,35 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd,
|
||||
rtnl_unlock();
|
||||
return ret;
|
||||
|
||||
case SIOCGIFHWADDR:
|
||||
rtnl_lock();
|
||||
vlan = macvtap_get_vlan(q);
|
||||
if (!vlan) {
|
||||
rtnl_unlock();
|
||||
return -ENOLINK;
|
||||
}
|
||||
ret = 0;
|
||||
u = vlan->dev->type;
|
||||
if (copy_to_user(&ifr->ifr_name, vlan->dev->name, IFNAMSIZ) ||
|
||||
copy_to_user(&ifr->ifr_hwaddr.sa_data, vlan->dev->dev_addr, ETH_ALEN) ||
|
||||
put_user(u, &ifr->ifr_hwaddr.sa_family))
|
||||
ret = -EFAULT;
|
||||
macvtap_put_vlan(vlan);
|
||||
rtnl_unlock();
|
||||
return ret;
|
||||
|
||||
case SIOCSIFHWADDR:
|
||||
rtnl_lock();
|
||||
vlan = macvtap_get_vlan(q);
|
||||
if (!vlan) {
|
||||
rtnl_unlock();
|
||||
return -ENOLINK;
|
||||
}
|
||||
ret = dev_set_mac_address(vlan->dev, &ifr->ifr_hwaddr);
|
||||
macvtap_put_vlan(vlan);
|
||||
rtnl_unlock();
|
||||
return ret;
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user