From: Jon M. <jm...@re...> - 2021-03-24 21:38:25
|
On 3/22/21 10:41 PM, Hoang Le wrote: > Add extack error messages for -EINVAL errors when enabling bearer, > getting/setting properties for a media/bearer > > Signed-off-by: Hoang Le <hoa...@de...> > --- > net/tipc/bearer.c | 50 +++++++++++++++++++++++++++++++++++++---------- > 1 file changed, 40 insertions(+), 10 deletions(-) > > diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c > index a4389ef08a98..1090f21fcfac 100644 > --- a/net/tipc/bearer.c > +++ b/net/tipc/bearer.c > @@ -243,7 +243,8 @@ void tipc_bearer_remove_dest(struct net *net, u32 bearer_id, u32 dest) > */ > static int tipc_enable_bearer(struct net *net, const char *name, > u32 disc_domain, u32 prio, > - struct nlattr *attr[]) > + struct nlattr *attr[], > + struct netlink_ext_ack *extack) > { > struct tipc_net *tn = tipc_net(net); > struct tipc_bearer_names b_names; > @@ -257,17 +258,20 @@ static int tipc_enable_bearer(struct net *net, const char *name, > > if (!bearer_name_validate(name, &b_names)) { > errstr = "illegal name"; > + NL_SET_ERR_MSG(extack, "Illegal name"); > goto rejected; > } > > if (prio > TIPC_MAX_LINK_PRI && prio != TIPC_MEDIA_LINK_PRI) { > errstr = "illegal priority"; > + NL_SET_ERR_MSG(extack, "Illegal priority"); > goto rejected; > } > > m = tipc_media_find(b_names.media_name); > if (!m) { > errstr = "media not registered"; > + NL_SET_ERR_MSG(extack, "Media not registered"); > goto rejected; > } > > @@ -281,6 +285,7 @@ static int tipc_enable_bearer(struct net *net, const char *name, > break; > if (!strcmp(name, b->name)) { > errstr = "already enabled"; > + NL_SET_ERR_MSG(extack, "Already enabled"); > goto rejected; > } > bearer_id++; > @@ -292,6 +297,7 @@ static int tipc_enable_bearer(struct net *net, const char *name, > name, prio); > if (prio == TIPC_MIN_LINK_PRI) { > errstr = "cannot adjust to lower"; > + NL_SET_ERR_MSG(extack, "Cannot adjust to lower"); > goto rejected; > } > pr_warn("Bearer <%s>: trying with adjusted priority\n", name); > @@ -302,6 +308,7 @@ static int tipc_enable_bearer(struct net *net, const char *name, > > if (bearer_id >= MAX_BEARERS) { > errstr = "max 3 bearers permitted"; > + NL_SET_ERR_MSG(extack, "Max 3 bearers permitted"); > goto rejected; > } > > @@ -315,6 +322,7 @@ static int tipc_enable_bearer(struct net *net, const char *name, > if (res) { > kfree(b); > errstr = "failed to enable media"; > + NL_SET_ERR_MSG(extack, "Failed to enable media"); > goto rejected; > } > > @@ -331,6 +339,7 @@ static int tipc_enable_bearer(struct net *net, const char *name, > if (res) { > bearer_disable(net, b); > errstr = "failed to create discoverer"; > + NL_SET_ERR_MSG(extack, "Failed to create discoverer"); > goto rejected; > } > > @@ -909,6 +918,7 @@ int tipc_nl_bearer_get(struct sk_buff *skb, struct genl_info *info) > bearer = tipc_bearer_find(net, name); > if (!bearer) { > err = -EINVAL; > + NL_SET_ERR_MSG(info->extack, "Bearer not found"); > goto err_out; > } > > @@ -948,8 +958,10 @@ int __tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info) > name = nla_data(attrs[TIPC_NLA_BEARER_NAME]); > > bearer = tipc_bearer_find(net, name); > - if (!bearer) > + if (!bearer) { > + NL_SET_ERR_MSG(info->extack, "Bearer not found"); > return -EINVAL; > + } > > bearer_disable(net, bearer); > > @@ -1007,7 +1019,8 @@ int __tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info) > prio = nla_get_u32(props[TIPC_NLA_PROP_PRIO]); > } > > - return tipc_enable_bearer(net, bearer, domain, prio, attrs); > + return tipc_enable_bearer(net, bearer, domain, prio, attrs, > + info->extack); > } > > int tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info) > @@ -1046,6 +1059,7 @@ int tipc_nl_bearer_add(struct sk_buff *skb, struct genl_info *info) > b = tipc_bearer_find(net, name); > if (!b) { > rtnl_unlock(); > + NL_SET_ERR_MSG(info->extack, "Bearer not found"); > return -EINVAL; > } > > @@ -1086,8 +1100,10 @@ int __tipc_nl_bearer_set(struct sk_buff *skb, struct genl_info *info) > name = nla_data(attrs[TIPC_NLA_BEARER_NAME]); > > b = tipc_bearer_find(net, name); > - if (!b) > + if (!b) { > + NL_SET_ERR_MSG(info->extack, "Bearer not found"); > return -EINVAL; > + } > > if (attrs[TIPC_NLA_BEARER_PROP]) { > struct nlattr *props[TIPC_NLA_PROP_MAX + 1]; > @@ -1106,12 +1122,18 @@ int __tipc_nl_bearer_set(struct sk_buff *skb, struct genl_info *info) > if (props[TIPC_NLA_PROP_WIN]) > b->max_win = nla_get_u32(props[TIPC_NLA_PROP_WIN]); > if (props[TIPC_NLA_PROP_MTU]) { > - if (b->media->type_id != TIPC_MEDIA_TYPE_UDP) > + if (b->media->type_id != TIPC_MEDIA_TYPE_UDP) { > + NL_SET_ERR_MSG(info->extack, > + "MTU property is unsupported"); > return -EINVAL; > + } > #ifdef CONFIG_TIPC_MEDIA_UDP > if (tipc_udp_mtu_bad(nla_get_u32 > - (props[TIPC_NLA_PROP_MTU]))) > + (props[TIPC_NLA_PROP_MTU]))) { > + NL_SET_ERR_MSG(info->extack, > + "MTU value is out-of-range"); > return -EINVAL; > + } > b->mtu = nla_get_u32(props[TIPC_NLA_PROP_MTU]); > tipc_node_apply_property(net, b, TIPC_NLA_PROP_MTU); > #endif > @@ -1239,6 +1261,7 @@ int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info) > rtnl_lock(); > media = tipc_media_find(name); > if (!media) { > + NL_SET_ERR_MSG(info->extack, "Media not found"); > err = -EINVAL; > goto err_out; > } > @@ -1275,9 +1298,10 @@ int __tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info) > name = nla_data(attrs[TIPC_NLA_MEDIA_NAME]); > > m = tipc_media_find(name); > - if (!m) > + if (!m) { > + NL_SET_ERR_MSG(info->extack, "Media not found"); > return -EINVAL; > - > + } > if (attrs[TIPC_NLA_MEDIA_PROP]) { > struct nlattr *props[TIPC_NLA_PROP_MAX + 1]; > > @@ -1293,12 +1317,18 @@ int __tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info) > if (props[TIPC_NLA_PROP_WIN]) > m->max_win = nla_get_u32(props[TIPC_NLA_PROP_WIN]); > if (props[TIPC_NLA_PROP_MTU]) { > - if (m->type_id != TIPC_MEDIA_TYPE_UDP) > + if (m->type_id != TIPC_MEDIA_TYPE_UDP) { > + NL_SET_ERR_MSG(info->extack, > + "MTU property is unsupported"); > return -EINVAL; > + } > #ifdef CONFIG_TIPC_MEDIA_UDP > if (tipc_udp_mtu_bad(nla_get_u32 > - (props[TIPC_NLA_PROP_MTU]))) > + (props[TIPC_NLA_PROP_MTU]))) { > + NL_SET_ERR_MSG(info->extack, > + "MTU value is out-of-range"); > return -EINVAL; > + } > m->mtu = nla_get_u32(props[TIPC_NLA_PROP_MTU]); > #endif > } Acked-by: Jon Maloy <jm...@re...> |