mirror of https://gitee.com/openkylin/linux.git
net: rmnet: print error message when command fails
When rmnet netlink command fails, it doesn't print any error message. So, users couldn't know the exact reason. In order to tell the exact reason to the user, the extack error message is used in this patch. Signed-off-by: Taehee Yoo <ap420073@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
eed22a0685
commit
fcf8f4eb81
|
@ -122,11 +122,10 @@ static int rmnet_newlink(struct net *src_net, struct net_device *dev,
|
|||
}
|
||||
|
||||
real_dev = __dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK]));
|
||||
if (!real_dev || !dev)
|
||||
if (!real_dev) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "link does not exist");
|
||||
return -ENODEV;
|
||||
|
||||
if (!data[IFLA_RMNET_MUX_ID])
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ep = kzalloc(sizeof(*ep), GFP_ATOMIC);
|
||||
if (!ep)
|
||||
|
@ -139,7 +138,7 @@ static int rmnet_newlink(struct net *src_net, struct net_device *dev,
|
|||
goto err0;
|
||||
|
||||
port = rmnet_get_port_rtnl(real_dev);
|
||||
err = rmnet_vnd_newlink(mux_id, dev, port, real_dev, ep);
|
||||
err = rmnet_vnd_newlink(mux_id, dev, port, real_dev, ep, extack);
|
||||
if (err)
|
||||
goto err1;
|
||||
|
||||
|
@ -263,12 +262,16 @@ static int rmnet_rtnl_validate(struct nlattr *tb[], struct nlattr *data[],
|
|||
{
|
||||
u16 mux_id;
|
||||
|
||||
if (!data || !data[IFLA_RMNET_MUX_ID])
|
||||
if (!data || !data[IFLA_RMNET_MUX_ID]) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "MUX ID not specified");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mux_id = nla_get_u16(data[IFLA_RMNET_MUX_ID]);
|
||||
if (mux_id > (RMNET_MAX_LOGICAL_EP - 1))
|
||||
if (mux_id > (RMNET_MAX_LOGICAL_EP - 1)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "invalid MUX ID");
|
||||
return -ERANGE;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -406,14 +409,22 @@ int rmnet_add_bridge(struct net_device *rmnet_dev,
|
|||
/* If there is more than one rmnet dev attached, its probably being
|
||||
* used for muxing. Skip the briding in that case
|
||||
*/
|
||||
if (port->nr_rmnet_devs > 1)
|
||||
if (port->nr_rmnet_devs > 1) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "more than one rmnet dev attached");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (port->rmnet_mode != RMNET_EPMODE_VND)
|
||||
if (port->rmnet_mode != RMNET_EPMODE_VND) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "bridge device already exists");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (rmnet_is_real_dev_registered(slave_dev)) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"slave cannot be another rmnet dev");
|
||||
|
||||
if (rmnet_is_real_dev_registered(slave_dev))
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
err = rmnet_register_real_device(slave_dev);
|
||||
if (err)
|
||||
|
|
|
@ -222,16 +222,17 @@ void rmnet_vnd_setup(struct net_device *rmnet_dev)
|
|||
int rmnet_vnd_newlink(u8 id, struct net_device *rmnet_dev,
|
||||
struct rmnet_port *port,
|
||||
struct net_device *real_dev,
|
||||
struct rmnet_endpoint *ep)
|
||||
struct rmnet_endpoint *ep,
|
||||
struct netlink_ext_ack *extack)
|
||||
|
||||
{
|
||||
struct rmnet_priv *priv = netdev_priv(rmnet_dev);
|
||||
int rc;
|
||||
|
||||
if (ep->egress_dev)
|
||||
return -EINVAL;
|
||||
|
||||
if (rmnet_get_endpoint(port, id))
|
||||
if (rmnet_get_endpoint(port, id)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "MUX ID already exists");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
rmnet_dev->hw_features = NETIF_F_RXCSUM;
|
||||
rmnet_dev->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
|
||||
|
|
|
@ -11,7 +11,8 @@ int rmnet_vnd_do_flow_control(struct net_device *dev, int enable);
|
|||
int rmnet_vnd_newlink(u8 id, struct net_device *rmnet_dev,
|
||||
struct rmnet_port *port,
|
||||
struct net_device *real_dev,
|
||||
struct rmnet_endpoint *ep);
|
||||
struct rmnet_endpoint *ep,
|
||||
struct netlink_ext_ack *extack);
|
||||
int rmnet_vnd_dellink(u8 id, struct rmnet_port *port,
|
||||
struct rmnet_endpoint *ep);
|
||||
void rmnet_vnd_rx_fixup(struct sk_buff *skb, struct net_device *dev);
|
||||
|
|
Loading…
Reference in New Issue