|
@@ -112,7 +112,9 @@ static int add_del_if(struct net_bridge *br, int ifindex, int isadd)
|
|
static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
|
static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
|
{
|
|
{
|
|
struct net_bridge *br = netdev_priv(dev);
|
|
struct net_bridge *br = netdev_priv(dev);
|
|
|
|
+ struct net_bridge_port *p = NULL;
|
|
unsigned long args[4];
|
|
unsigned long args[4];
|
|
|
|
+ int ret = -EOPNOTSUPP;
|
|
|
|
|
|
if (copy_from_user(args, rq->ifr_data, sizeof(args)))
|
|
if (copy_from_user(args, rq->ifr_data, sizeof(args)))
|
|
return -EFAULT;
|
|
return -EFAULT;
|
|
@@ -182,25 +184,29 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
- return br_set_forward_delay(br, args[1]);
|
|
|
|
|
|
+ ret = br_set_forward_delay(br, args[1]);
|
|
|
|
+ break;
|
|
|
|
|
|
case BRCTL_SET_BRIDGE_HELLO_TIME:
|
|
case BRCTL_SET_BRIDGE_HELLO_TIME:
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
- return br_set_hello_time(br, args[1]);
|
|
|
|
|
|
+ ret = br_set_hello_time(br, args[1]);
|
|
|
|
+ break;
|
|
|
|
|
|
case BRCTL_SET_BRIDGE_MAX_AGE:
|
|
case BRCTL_SET_BRIDGE_MAX_AGE:
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
- return br_set_max_age(br, args[1]);
|
|
|
|
|
|
+ ret = br_set_max_age(br, args[1]);
|
|
|
|
+ break;
|
|
|
|
|
|
case BRCTL_SET_AGEING_TIME:
|
|
case BRCTL_SET_AGEING_TIME:
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
- return br_set_ageing_time(br, args[1]);
|
|
|
|
|
|
+ ret = br_set_ageing_time(br, args[1]);
|
|
|
|
+ break;
|
|
|
|
|
|
case BRCTL_GET_PORT_INFO:
|
|
case BRCTL_GET_PORT_INFO:
|
|
{
|
|
{
|
|
@@ -240,20 +246,19 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
br_stp_set_enabled(br, args[1]);
|
|
br_stp_set_enabled(br, args[1]);
|
|
- return 0;
|
|
|
|
|
|
+ ret = 0;
|
|
|
|
+ break;
|
|
|
|
|
|
case BRCTL_SET_BRIDGE_PRIORITY:
|
|
case BRCTL_SET_BRIDGE_PRIORITY:
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
br_stp_set_bridge_priority(br, args[1]);
|
|
br_stp_set_bridge_priority(br, args[1]);
|
|
- return 0;
|
|
|
|
|
|
+ ret = 0;
|
|
|
|
+ break;
|
|
|
|
|
|
case BRCTL_SET_PORT_PRIORITY:
|
|
case BRCTL_SET_PORT_PRIORITY:
|
|
{
|
|
{
|
|
- struct net_bridge_port *p;
|
|
|
|
- int ret;
|
|
|
|
-
|
|
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
@@ -263,14 +268,11 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
|
else
|
|
else
|
|
ret = br_stp_set_port_priority(p, args[2]);
|
|
ret = br_stp_set_port_priority(p, args[2]);
|
|
spin_unlock_bh(&br->lock);
|
|
spin_unlock_bh(&br->lock);
|
|
- return ret;
|
|
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
|
|
case BRCTL_SET_PATH_COST:
|
|
case BRCTL_SET_PATH_COST:
|
|
{
|
|
{
|
|
- struct net_bridge_port *p;
|
|
|
|
- int ret;
|
|
|
|
-
|
|
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
@@ -280,8 +282,7 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
|
else
|
|
else
|
|
ret = br_stp_set_path_cost(p, args[2]);
|
|
ret = br_stp_set_path_cost(p, args[2]);
|
|
spin_unlock_bh(&br->lock);
|
|
spin_unlock_bh(&br->lock);
|
|
-
|
|
|
|
- return ret;
|
|
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
|
|
case BRCTL_GET_FDB_ENTRIES:
|
|
case BRCTL_GET_FDB_ENTRIES:
|
|
@@ -289,7 +290,14 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
|
args[2], args[3]);
|
|
args[2], args[3]);
|
|
}
|
|
}
|
|
|
|
|
|
- return -EOPNOTSUPP;
|
|
|
|
|
|
+ if (!ret) {
|
|
|
|
+ if (p)
|
|
|
|
+ br_ifinfo_notify(RTM_NEWLINK, p);
|
|
|
|
+ else
|
|
|
|
+ netdev_state_change(br->dev);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
static int old_deviceless(struct net *net, void __user *uarg)
|
|
static int old_deviceless(struct net *net, void __user *uarg)
|