* [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting
@ 2017-08-10 21:16 Girish Moodalbail
2017-08-11 15:47 ` Jiri Benc
2017-08-11 16:19 ` Roopa Prabhu
0 siblings, 2 replies; 11+ messages in thread
From: Girish Moodalbail @ 2017-08-10 21:16 UTC (permalink / raw)
To: pshelar, davem, netdev, mschiffer, jbenc, roopa
The kernel log is not where users expect error messages for netlink
requests; as we have extended acks now, we can replace pr_debug() with
NL_SET_ERR_MSG_ATTR().
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
Signed-off-by: Girish Moodalbail <girish.moodalbail@oracle.com>
---
v1 -> v2:
- addressed, error messages rewording, comments from Jiri Benc
- started off with what Matthias had, and I covered error reporting
for all of the unsuccessful returns
---
drivers/net/vxlan.c | 98 +++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 72 insertions(+), 26 deletions(-)
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 35e84a9e..ec302cd7 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -2729,12 +2729,14 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[],
{
if (tb[IFLA_ADDRESS]) {
if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
- pr_debug("invalid link address (not ethernet)\n");
+ NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
+ "Provided link layer address is not Ethernet");
return -EINVAL;
}
if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
- pr_debug("invalid all zero ethernet address\n");
+ NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
+ "Provided Ethernet address is not unicast");
return -EADDRNOTAVAIL;
}
}
@@ -2742,18 +2744,27 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[],
if (tb[IFLA_MTU]) {
u32 mtu = nla_get_u32(tb[IFLA_MTU]);
- if (mtu < ETH_MIN_MTU || mtu > ETH_MAX_MTU)
+ if (mtu < ETH_MIN_MTU || mtu > ETH_MAX_MTU) {
+ NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_MTU],
+ "MTU must be between 68 and 65535");
return -EINVAL;
+ }
}
- if (!data)
+ if (!data) {
+ NL_SET_ERR_MSG(extack,
+ "Not enough attributes provided to perform the operation");
return -EINVAL;
+ }
if (data[IFLA_VXLAN_ID]) {
u32 id = nla_get_u32(data[IFLA_VXLAN_ID]);
- if (id >= VXLAN_N_VID)
+ if (id >= VXLAN_N_VID) {
+ NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_ID],
+ "VXLAN ID must be lower than 16777216");
return -ERANGE;
+ }
}
if (data[IFLA_VXLAN_PORT_RANGE]) {
@@ -2761,8 +2772,8 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[],
= nla_data(data[IFLA_VXLAN_PORT_RANGE]);
if (ntohs(p->high) < ntohs(p->low)) {
- pr_debug("port range %u .. %u not valid\n",
- ntohs(p->low), ntohs(p->high));
+ NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_PORT_RANGE],
+ "Provided source port range bounds is invalid");
return -EINVAL;
}
}
@@ -2919,7 +2930,8 @@ static int vxlan_sock_add(struct vxlan_dev *vxlan)
static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
struct net_device **lower,
- struct vxlan_dev *old)
+ struct vxlan_dev *old,
+ struct netlink_ext_ack *extack)
{
struct vxlan_net *vn = net_generic(src_net, vxlan_net_id);
struct vxlan_dev *tmp;
@@ -2933,6 +2945,8 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
*/
if ((conf->flags & ~VXLAN_F_ALLOWED_GPE) ||
!(conf->flags & VXLAN_F_COLLECT_METADATA)) {
+ NL_SET_ERR_MSG(extack,
+ "VXLAN GPE does not support this combination of attributes");
return -EINVAL;
}
}
@@ -2947,15 +2961,23 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
conf->saddr.sa.sa_family = conf->remote_ip.sa.sa_family;
}
- if (conf->saddr.sa.sa_family != conf->remote_ip.sa.sa_family)
+ if (conf->saddr.sa.sa_family != conf->remote_ip.sa.sa_family) {
+ NL_SET_ERR_MSG(extack,
+ "Local and remote address must be from the same family");
return -EINVAL;
+ }
- if (vxlan_addr_multicast(&conf->saddr))
+ if (vxlan_addr_multicast(&conf->saddr)) {
+ NL_SET_ERR_MSG(extack, "Local address cannot be multicast");
return -EINVAL;
+ }
if (conf->saddr.sa.sa_family == AF_INET6) {
- if (!IS_ENABLED(CONFIG_IPV6))
+ if (!IS_ENABLED(CONFIG_IPV6)) {
+ NL_SET_ERR_MSG(extack,
+ "IPv6 support not enabled in the kernel");
return -EPFNOSUPPORT;
+ }
use_ipv6 = true;
conf->flags |= VXLAN_F_IPV6;
@@ -2967,46 +2989,68 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
if (local_type & IPV6_ADDR_LINKLOCAL) {
if (!(remote_type & IPV6_ADDR_LINKLOCAL) &&
- (remote_type != IPV6_ADDR_ANY))
+ (remote_type != IPV6_ADDR_ANY)) {
+ NL_SET_ERR_MSG(extack,
+ "Invalid combination of local and remote address scopes");
return -EINVAL;
+ }
conf->flags |= VXLAN_F_IPV6_LINKLOCAL;
} else {
if (remote_type ==
- (IPV6_ADDR_UNICAST | IPV6_ADDR_LINKLOCAL))
+ (IPV6_ADDR_UNICAST | IPV6_ADDR_LINKLOCAL)) {
+ NL_SET_ERR_MSG(extack,
+ "Invalid combination of local and remote address scopes");
return -EINVAL;
+ }
conf->flags &= ~VXLAN_F_IPV6_LINKLOCAL;
}
}
}
- if (conf->label && !use_ipv6)
+ if (conf->label && !use_ipv6) {
+ NL_SET_ERR_MSG(extack,
+ "Label attribute only applies for IPv6 VXLAN devices");
return -EINVAL;
+ }
if (conf->remote_ifindex) {
struct net_device *lowerdev;
lowerdev = __dev_get_by_index(src_net, conf->remote_ifindex);
- if (!lowerdev)
+ if (!lowerdev) {
+ NL_SET_ERR_MSG(extack,
+ "Specified interface for tunnel endpoint communications not found");
return -ENODEV;
+ }
#if IS_ENABLED(CONFIG_IPV6)
if (use_ipv6) {
struct inet6_dev *idev = __in6_dev_get(lowerdev);
- if (idev && idev->cnf.disable_ipv6)
+ if (idev && idev->cnf.disable_ipv6) {
+ NL_SET_ERR_MSG(extack,
+ "IPv6 support disabled by administrator");
return -EPERM;
+ }
}
#endif
*lower = lowerdev;
} else {
- if (vxlan_addr_multicast(&conf->remote_ip))
+ if (vxlan_addr_multicast(&conf->remote_ip)) {
+ NL_SET_ERR_MSG(extack,
+ "Interface need to be specified for multicast destination");
+
return -EINVAL;
+ }
#if IS_ENABLED(CONFIG_IPV6)
- if (conf->flags & VXLAN_F_IPV6_LINKLOCAL)
+ if (conf->flags & VXLAN_F_IPV6_LINKLOCAL) {
+ NL_SET_ERR_MSG(extack,
+ "Interface need to be specified for link-local local/remote addresses");
return -EINVAL;
+ }
#endif
*lower = NULL;
@@ -3038,6 +3082,7 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
tmp->cfg.remote_ifindex != conf->remote_ifindex)
continue;
+ NL_SET_ERR_MSG(extack, "Specified VNI is duplicate");
return -EEXIST;
}
@@ -3097,14 +3142,14 @@ static void vxlan_config_apply(struct net_device *dev,
}
static int vxlan_dev_configure(struct net *src_net, struct net_device *dev,
- struct vxlan_config *conf,
- bool changelink)
+ struct vxlan_config *conf, bool changelink,
+ struct netlink_ext_ack *extack)
{
struct vxlan_dev *vxlan = netdev_priv(dev);
struct net_device *lowerdev;
int ret;
- ret = vxlan_config_validate(src_net, conf, &lowerdev, vxlan);
+ ret = vxlan_config_validate(src_net, conf, &lowerdev, vxlan, extack);
if (ret)
return ret;
@@ -3114,13 +3159,14 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev,
}
static int __vxlan_dev_create(struct net *net, struct net_device *dev,
- struct vxlan_config *conf)
+ struct vxlan_config *conf,
+ struct netlink_ext_ack *extack)
{
struct vxlan_net *vn = net_generic(net, vxlan_net_id);
struct vxlan_dev *vxlan = netdev_priv(dev);
int err;
- err = vxlan_dev_configure(net, dev, conf, false);
+ err = vxlan_dev_configure(net, dev, conf, false, extack);
if (err)
return err;
@@ -3366,7 +3412,7 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev,
if (err)
return err;
- return __vxlan_dev_create(src_net, dev, &conf);
+ return __vxlan_dev_create(src_net, dev, &conf, extack);
}
static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[],
@@ -3386,7 +3432,7 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[],
memcpy(&old_dst, dst, sizeof(struct vxlan_rdst));
- err = vxlan_dev_configure(vxlan->net, dev, &conf, true);
+ err = vxlan_dev_configure(vxlan->net, dev, &conf, true, extack);
if (err)
return err;
@@ -3592,7 +3638,7 @@ struct net_device *vxlan_dev_create(struct net *net, const char *name,
if (IS_ERR(dev))
return dev;
- err = __vxlan_dev_create(net, dev, conf);
+ err = __vxlan_dev_create(net, dev, conf, NULL);
if (err < 0) {
free_netdev(dev);
return ERR_PTR(err);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting
2017-08-10 21:16 [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting Girish Moodalbail
@ 2017-08-11 15:47 ` Jiri Benc
2017-08-11 16:19 ` Roopa Prabhu
1 sibling, 0 replies; 11+ messages in thread
From: Jiri Benc @ 2017-08-11 15:47 UTC (permalink / raw)
To: Girish Moodalbail; +Cc: pshelar, davem, netdev, mschiffer, roopa
On Thu, 10 Aug 2017 14:16:35 -0700, Girish Moodalbail wrote:
> + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_PORT_RANGE],
> + "Provided source port range bounds is invalid");
s/bounds//?
> + if (conf->label && !use_ipv6) {
> + NL_SET_ERR_MSG(extack,
> + "Label attribute only applies for IPv6 VXLAN devices");
applies to
> + if (!lowerdev) {
> + NL_SET_ERR_MSG(extack,
> + "Specified interface for tunnel endpoint communications not found");
s/communications//?
> + if (vxlan_addr_multicast(&conf->remote_ip)) {
> + NL_SET_ERR_MSG(extack,
> + "Interface need to be specified for multicast destination");
needs
> + if (conf->flags & VXLAN_F_IPV6_LINKLOCAL) {
> + NL_SET_ERR_MSG(extack,
> + "Interface need to be specified for link-local local/remote addresses");
needs
Looks good to me otherwise, thanks!
Jiri
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting
2017-08-10 21:16 [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting Girish Moodalbail
2017-08-11 15:47 ` Jiri Benc
@ 2017-08-11 16:19 ` Roopa Prabhu
2017-08-11 16:24 ` Matthias Schiffer
2017-08-11 16:39 ` Jiri Benc
1 sibling, 2 replies; 11+ messages in thread
From: Roopa Prabhu @ 2017-08-11 16:19 UTC (permalink / raw)
To: Girish Moodalbail
Cc: pravin shelar, davem@davemloft.net, netdev@vger.kernel.org,
Matthias Schiffer, Jiri Benc
On Thu, Aug 10, 2017 at 2:16 PM, Girish Moodalbail
<girish.moodalbail@oracle.com> wrote:
> The kernel log is not where users expect error messages for netlink
> requests; as we have extended acks now, we can replace pr_debug() with
> NL_SET_ERR_MSG_ATTR().
>
> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
> Signed-off-by: Girish Moodalbail <girish.moodalbail@oracle.com>
>
> ---
> v1 -> v2:
> - addressed, error messages rewording, comments from Jiri Benc
> - started off with what Matthias had, and I covered error reporting
> for all of the unsuccessful returns
I have a similar patch in my tree, so, i am tempted to suggest
alternate wordings for some of the msgs below :)
> ---
> drivers/net/vxlan.c | 98 +++++++++++++++++++++++++++++++++++++++--------------
> 1 file changed, 72 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
> index 35e84a9e..ec302cd7 100644
> --- a/drivers/net/vxlan.c
> +++ b/drivers/net/vxlan.c
> @@ -2729,12 +2729,14 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[],
> {
> if (tb[IFLA_ADDRESS]) {
> if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
> - pr_debug("invalid link address (not ethernet)\n");
> + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
> + "Provided link layer address is not Ethernet");
> return -EINVAL;
> }
keep it simple and closer to the original msg: "invalid link layer address"
>
> if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
> - pr_debug("invalid all zero ethernet address\n");
> + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
> + "Provided Ethernet address is not unicast");
> return -EADDRNOTAVAIL;
keep it simple and closer to the original msg: "invalid all zero
ethernet address"
> }
> }
> @@ -2742,18 +2744,27 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[],
> if (tb[IFLA_MTU]) {
> u32 mtu = nla_get_u32(tb[IFLA_MTU]);
>
> - if (mtu < ETH_MIN_MTU || mtu > ETH_MAX_MTU)
> + if (mtu < ETH_MIN_MTU || mtu > ETH_MAX_MTU) {
> + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_MTU],
> + "MTU must be between 68 and 65535");
> return -EINVAL;
> + }
> }
>
> - if (!data)
> + if (!data) {
> + NL_SET_ERR_MSG(extack,
> + "Not enough attributes provided to perform the operation");
> return -EINVAL;
> + }
"not enough attributes"
>
> if (data[IFLA_VXLAN_ID]) {
> u32 id = nla_get_u32(data[IFLA_VXLAN_ID]);
>
> - if (id >= VXLAN_N_VID)
> + if (id >= VXLAN_N_VID) {
> + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_ID],
> + "VXLAN ID must be lower than 16777216");
> return -ERANGE;
"invalid vxlan-id"
> + }
> }
>
> if (data[IFLA_VXLAN_PORT_RANGE]) {
> @@ -2761,8 +2772,8 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[],
> = nla_data(data[IFLA_VXLAN_PORT_RANGE]);
>
> if (ntohs(p->high) < ntohs(p->low)) {
> - pr_debug("port range %u .. %u not valid\n",
> - ntohs(p->low), ntohs(p->high));
> + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_PORT_RANGE],
> + "Provided source port range bounds is invalid");
> return -EINVAL;
> }
"invalid source port range"
> }
> @@ -2919,7 +2930,8 @@ static int vxlan_sock_add(struct vxlan_dev *vxlan)
>
> static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
> struct net_device **lower,
> - struct vxlan_dev *old)
> + struct vxlan_dev *old,
> + struct netlink_ext_ack *extack)
> {
> struct vxlan_net *vn = net_generic(src_net, vxlan_net_id);
> struct vxlan_dev *tmp;
> @@ -2933,6 +2945,8 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
> */
> if ((conf->flags & ~VXLAN_F_ALLOWED_GPE) ||
> !(conf->flags & VXLAN_F_COLLECT_METADATA)) {
> + NL_SET_ERR_MSG(extack,
> + "VXLAN GPE does not support this combination of attributes");
> return -EINVAL;
> }
"collect metadata not supported with vxlan gpe"
> }
> @@ -2947,15 +2961,23 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
> conf->saddr.sa.sa_family = conf->remote_ip.sa.sa_family;
> }
>
> - if (conf->saddr.sa.sa_family != conf->remote_ip.sa.sa_family)
> + if (conf->saddr.sa.sa_family != conf->remote_ip.sa.sa_family) {
> + NL_SET_ERR_MSG(extack,
> + "Local and remote address must be from the same family");
> return -EINVAL;
> + }
>
> - if (vxlan_addr_multicast(&conf->saddr))
> + if (vxlan_addr_multicast(&conf->saddr)) {
> + NL_SET_ERR_MSG(extack, "Local address cannot be multicast");
> return -EINVAL;
"invalid local address. multicast not supported"
> + }
>
> if (conf->saddr.sa.sa_family == AF_INET6) {
> - if (!IS_ENABLED(CONFIG_IPV6))
> + if (!IS_ENABLED(CONFIG_IPV6)) {
> + NL_SET_ERR_MSG(extack,
> + "IPv6 support not enabled in the kernel");
"invalid address family. ipv6 not enabled"
> return -EPFNOSUPPORT;
> + }
> use_ipv6 = true;
> conf->flags |= VXLAN_F_IPV6;
>
> @@ -2967,46 +2989,68 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
>
> if (local_type & IPV6_ADDR_LINKLOCAL) {
> if (!(remote_type & IPV6_ADDR_LINKLOCAL) &&
> - (remote_type != IPV6_ADDR_ANY))
> + (remote_type != IPV6_ADDR_ANY)) {
> + NL_SET_ERR_MSG(extack,
> + "Invalid combination of local and remote address scopes");
> return -EINVAL;
> + }
>
> conf->flags |= VXLAN_F_IPV6_LINKLOCAL;
> } else {
> if (remote_type ==
> - (IPV6_ADDR_UNICAST | IPV6_ADDR_LINKLOCAL))
> + (IPV6_ADDR_UNICAST | IPV6_ADDR_LINKLOCAL)) {
> + NL_SET_ERR_MSG(extack,
> + "Invalid combination of local and remote address scopes");
> return -EINVAL;
> + }
>
> conf->flags &= ~VXLAN_F_IPV6_LINKLOCAL;
> }
> }
> }
>
> - if (conf->label && !use_ipv6)
> + if (conf->label && !use_ipv6) {
> + NL_SET_ERR_MSG(extack,
> + "Label attribute only applies for IPv6 VXLAN devices");
> return -EINVAL;
> + }
>
> if (conf->remote_ifindex) {
> struct net_device *lowerdev;
>
> lowerdev = __dev_get_by_index(src_net, conf->remote_ifindex);
> - if (!lowerdev)
> + if (!lowerdev) {
> + NL_SET_ERR_MSG(extack,
> + "Specified interface for tunnel endpoint communications not found");
> return -ENODEV;
"invalid vxlan remote link interface, device not found"
> + }
>
> #if IS_ENABLED(CONFIG_IPV6)
> if (use_ipv6) {
> struct inet6_dev *idev = __in6_dev_get(lowerdev);
> - if (idev && idev->cnf.disable_ipv6)
> + if (idev && idev->cnf.disable_ipv6) {
> + NL_SET_ERR_MSG(extack,
> + "IPv6 support disabled by administrator");
> return -EPERM;
> + }
> }
> #endif
>
> *lower = lowerdev;
> } else {
> - if (vxlan_addr_multicast(&conf->remote_ip))
> + if (vxlan_addr_multicast(&conf->remote_ip)) {
> + NL_SET_ERR_MSG(extack,
> + "Interface need to be specified for multicast destination");
"vxlan remote link interface required for multicast remote destination"
> +
> return -EINVAL;
> + }
>
> #if IS_ENABLED(CONFIG_IPV6)
> - if (conf->flags & VXLAN_F_IPV6_LINKLOCAL)
> + if (conf->flags & VXLAN_F_IPV6_LINKLOCAL) {
> + NL_SET_ERR_MSG(extack,
> + "Interface need to be specified for link-local local/remote addresses");
> return -EINVAL;
"vxlan link interface required for link-local local/remote addresses"
> + }
> #endif
>
> *lower = NULL;
> @@ -3038,6 +3082,7 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
> tmp->cfg.remote_ifindex != conf->remote_ifindex)
> continue;
>
> + NL_SET_ERR_MSG(extack, "Specified VNI is duplicate");
"duplicate vni. vxlan device with vni exists."
> return -EEXIST;
> }
>
> @@ -3097,14 +3142,14 @@ static void vxlan_config_apply(struct net_device *dev,
> }
>
> static int vxlan_dev_configure(struct net *src_net, struct net_device *dev,
> - struct vxlan_config *conf,
> - bool changelink)
> + struct vxlan_config *conf, bool changelink,
> + struct netlink_ext_ack *extack)
> {
> struct vxlan_dev *vxlan = netdev_priv(dev);
> struct net_device *lowerdev;
> int ret;
>
> - ret = vxlan_config_validate(src_net, conf, &lowerdev, vxlan);
> + ret = vxlan_config_validate(src_net, conf, &lowerdev, vxlan, extack);
> if (ret)
> return ret;
>
> @@ -3114,13 +3159,14 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev,
> }
>
> static int __vxlan_dev_create(struct net *net, struct net_device *dev,
> - struct vxlan_config *conf)
> + struct vxlan_config *conf,
> + struct netlink_ext_ack *extack)
> {
> struct vxlan_net *vn = net_generic(net, vxlan_net_id);
> struct vxlan_dev *vxlan = netdev_priv(dev);
> int err;
>
> - err = vxlan_dev_configure(net, dev, conf, false);
> + err = vxlan_dev_configure(net, dev, conf, false, extack);
> if (err)
> return err;
>
> @@ -3366,7 +3412,7 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev,
> if (err)
> return err;
>
> - return __vxlan_dev_create(src_net, dev, &conf);
> + return __vxlan_dev_create(src_net, dev, &conf, extack);
> }
>
> static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[],
> @@ -3386,7 +3432,7 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[],
>
> memcpy(&old_dst, dst, sizeof(struct vxlan_rdst));
>
> - err = vxlan_dev_configure(vxlan->net, dev, &conf, true);
> + err = vxlan_dev_configure(vxlan->net, dev, &conf, true, extack);
> if (err)
> return err;
>
> @@ -3592,7 +3638,7 @@ struct net_device *vxlan_dev_create(struct net *net, const char *name,
> if (IS_ERR(dev))
> return dev;
>
> - err = __vxlan_dev_create(net, dev, conf);
> + err = __vxlan_dev_create(net, dev, conf, NULL);
> if (err < 0) {
> free_netdev(dev);
> return ERR_PTR(err);
> --
> 1.8.3.1
>
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting
2017-08-11 16:19 ` Roopa Prabhu
@ 2017-08-11 16:24 ` Matthias Schiffer
2017-08-11 16:39 ` Jiri Benc
1 sibling, 0 replies; 11+ messages in thread
From: Matthias Schiffer @ 2017-08-11 16:24 UTC (permalink / raw)
To: Roopa Prabhu
Cc: Girish Moodalbail, pravin shelar, davem@davemloft.net,
netdev@vger.kernel.org, Jiri Benc
[-- Attachment #1.1: Type: text/plain, Size: 713 bytes --]
On 08/11/2017 06:19 PM, Roopa Prabhu wrote:
> On Thu, Aug 10, 2017 at 2:16 PM, Girish Moodalbail
> <girish.moodalbail@oracle.com> wrote:
>>
>> if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
>> - pr_debug("invalid all zero ethernet address\n");
>> + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
>> + "Provided Ethernet address is not unicast");
>> return -EADDRNOTAVAIL;
>
>
> keep it simple and closer to the original msg: "invalid all zero
> ethernet address"
It is inaccurate though, is_valid_ether_addr will also reject multicast
addresses.
Matthias
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting
2017-08-11 16:19 ` Roopa Prabhu
2017-08-11 16:24 ` Matthias Schiffer
@ 2017-08-11 16:39 ` Jiri Benc
2017-08-11 16:56 ` David Ahern
` (2 more replies)
1 sibling, 3 replies; 11+ messages in thread
From: Jiri Benc @ 2017-08-11 16:39 UTC (permalink / raw)
To: Roopa Prabhu
Cc: Girish Moodalbail, pravin shelar, davem@davemloft.net,
netdev@vger.kernel.org, Matthias Schiffer
On Fri, 11 Aug 2017 09:19:34 -0700, Roopa Prabhu wrote:
> > if (tb[IFLA_ADDRESS]) {
> > if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
> > - pr_debug("invalid link address (not ethernet)\n");
> > + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
> > + "Provided link layer address is not Ethernet");
> > return -EINVAL;
> > }
>
> keep it simple and closer to the original msg: "invalid link layer address"
I prefer more explanatory wording. Girish's is better.
> >
> > if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
> > - pr_debug("invalid all zero ethernet address\n");
> > + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
> > + "Provided Ethernet address is not unicast");
> > return -EADDRNOTAVAIL;
>
> keep it simple and closer to the original msg: "invalid all zero
> ethernet address"
This would be incorrect message. The is_valid_ether_addr function does
not check only for all zeroes but also for !multicast. Girish's wording
better expresses what's going on.
> > + if (!data) {
> > + NL_SET_ERR_MSG(extack,
> > + "Not enough attributes provided to perform the operation");
> > return -EINVAL;
> > + }
>
> "not enough attributes"
You're missing part of the sentence.
> > if (data[IFLA_VXLAN_ID]) {
> > u32 id = nla_get_u32(data[IFLA_VXLAN_ID]);
> >
> > - if (id >= VXLAN_N_VID)
> > + if (id >= VXLAN_N_VID) {
> > + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_ID],
> > + "VXLAN ID must be lower than 16777216");
> > return -ERANGE;
>
> "invalid vxlan-id"
This is exactly what I objected against in Girish's v1. It would be
useless to have extended error reporting but report things that don't
help users. I like the current Girish's wording, it's clear and helpful.
> > @@ -2761,8 +2772,8 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[],
> > = nla_data(data[IFLA_VXLAN_PORT_RANGE]);
> >
> > if (ntohs(p->high) < ntohs(p->low)) {
> > - pr_debug("port range %u .. %u not valid\n",
> > - ntohs(p->low), ntohs(p->high));
> > + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_PORT_RANGE],
> > + "Provided source port range bounds is invalid");
> > return -EINVAL;
> > }
>
> "invalid source port range"
Could be. But please honor proper capitalization.
> > @@ -2933,6 +2945,8 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
> > */
> > if ((conf->flags & ~VXLAN_F_ALLOWED_GPE) ||
> > !(conf->flags & VXLAN_F_COLLECT_METADATA)) {
> > + NL_SET_ERR_MSG(extack,
> > + "VXLAN GPE does not support this combination of attributes");
> > return -EINVAL;
> > }
>
> "collect metadata not supported with vxlan gpe"
That's completely wrong message. Not saying that the capitalization is
wrong, too. Girish's wording precisely explains what went wrong.
> > - if (vxlan_addr_multicast(&conf->saddr))
> > + if (vxlan_addr_multicast(&conf->saddr)) {
> > + NL_SET_ERR_MSG(extack, "Local address cannot be multicast");
> > return -EINVAL;
>
> "invalid local address. multicast not supported"
Roopa, what happened to your shift key? And how is this better to what
Girish proposed?
> > + NL_SET_ERR_MSG(extack,
> > + "IPv6 support not enabled in the kernel");
>
> "invalid address family. ipv6 not enabled"
Ditto.
> > lowerdev = __dev_get_by_index(src_net, conf->remote_ifindex);
> > - if (!lowerdev)
> > + if (!lowerdev) {
> > + NL_SET_ERR_MSG(extack,
> > + "Specified interface for tunnel endpoint communications not found");
> > return -ENODEV;
>
> "invalid vxlan remote link interface, device not found"
Finally one that looks better :-) Modulo the missing capitalization,
though.
> > - if (vxlan_addr_multicast(&conf->remote_ip))
> > + if (vxlan_addr_multicast(&conf->remote_ip)) {
> > + NL_SET_ERR_MSG(extack,
> > + "Interface need to be specified for multicast destination");
>
> "vxlan remote link interface required for multicast remote destination"
I like this one better, too.
> > #if IS_ENABLED(CONFIG_IPV6)
> > - if (conf->flags & VXLAN_F_IPV6_LINKLOCAL)
> > + if (conf->flags & VXLAN_F_IPV6_LINKLOCAL) {
> > + NL_SET_ERR_MSG(extack,
> > + "Interface need to be specified for link-local local/remote addresses");
> > return -EINVAL;
>
> "vxlan link interface required for link-local local/remote addresses"
Okay but to be consistent (and more clear), it should be "remote link
interface".
> > @@ -3038,6 +3082,7 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
> > tmp->cfg.remote_ifindex != conf->remote_ifindex)
> > continue;
> >
> > + NL_SET_ERR_MSG(extack, "Specified VNI is duplicate");
>
> "duplicate vni. vxlan device with vni exists."
What about "A VXLAN device with the specified VNI already exists."?
Jiri
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting
2017-08-11 16:39 ` Jiri Benc
@ 2017-08-11 16:56 ` David Ahern
2017-08-11 17:11 ` Jiri Benc
2017-08-11 17:21 ` Girish Moodalbail
2017-08-12 2:24 ` Roopa Prabhu
2 siblings, 1 reply; 11+ messages in thread
From: David Ahern @ 2017-08-11 16:56 UTC (permalink / raw)
To: Jiri Benc, Roopa Prabhu
Cc: Girish Moodalbail, pravin shelar, davem@davemloft.net,
netdev@vger.kernel.org, Matthias Schiffer
On 8/11/17 10:39 AM, Jiri Benc wrote:
>>> + if (!data) {
>>> + NL_SET_ERR_MSG(extack,
>>> + "Not enough attributes provided to perform the operation");
>>> return -EINVAL;
>>> + }
>> "not enough attributes"
> You're missing part of the sentence.
>
I would argue none of those messages are sufficient. The message should
tell the user what is missing.
What is the point of the !data check anyway? Based on the rest of the
validate function neither IFLA_VXLAN_ID or IFLA_VXLAN_PORT_RANGE are
required attributes.
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting
2017-08-11 16:56 ` David Ahern
@ 2017-08-11 17:11 ` Jiri Benc
2017-08-11 17:17 ` David Ahern
0 siblings, 1 reply; 11+ messages in thread
From: Jiri Benc @ 2017-08-11 17:11 UTC (permalink / raw)
To: David Ahern
Cc: Roopa Prabhu, Girish Moodalbail, pravin shelar,
davem@davemloft.net, netdev@vger.kernel.org, Matthias Schiffer
On Fri, 11 Aug 2017 10:56:57 -0600, David Ahern wrote:
> I would argue none of those messages are sufficient. The message should
> tell the user what is missing.
Good point.
I guess "The IFLA_INFO_DATA attribute is missing" would be a better
message. It can happen only when you're implementing your own
management tool, it's not that you'll get this message out of the ip
tool, thus referring to netlink attributes should be okay.
> What is the point of the !data check anyway? Based on the rest of the
> validate function neither IFLA_VXLAN_ID or IFLA_VXLAN_PORT_RANGE are
> required attributes.
The newlink callback assumes data is not NULL, i.e. IFLA_INFO_DATA is
present. It would crash otherwise.
Jiri
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting
2017-08-11 17:11 ` Jiri Benc
@ 2017-08-11 17:17 ` David Ahern
2017-08-11 17:28 ` Jiri Benc
0 siblings, 1 reply; 11+ messages in thread
From: David Ahern @ 2017-08-11 17:17 UTC (permalink / raw)
To: Jiri Benc
Cc: Roopa Prabhu, Girish Moodalbail, pravin shelar,
davem@davemloft.net, netdev@vger.kernel.org, Matthias Schiffer
On 8/11/17 11:11 AM, Jiri Benc wrote:
> On Fri, 11 Aug 2017 10:56:57 -0600, David Ahern wrote:
>> I would argue none of those messages are sufficient. The message should
>> tell the user what is missing.
>
> Good point.
>
> I guess "The IFLA_INFO_DATA attribute is missing" would be a better
> message. It can happen only when you're implementing your own
> management tool, it's not that you'll get this message out of the ip
> tool, thus referring to netlink attributes should be okay.
>
>> What is the point of the !data check anyway? Based on the rest of the
>> validate function neither IFLA_VXLAN_ID or IFLA_VXLAN_PORT_RANGE are
>> required attributes.
>
> The newlink callback assumes data is not NULL, i.e. IFLA_INFO_DATA is
> present. It would crash otherwise.
What if a user adds IFLA_INFO_DATA but adds no vxlan attributes under
it? Still not a valid config, but it passes the !data check.
Whatever attributes are required but missing should be the message
returned.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting
2017-08-11 17:17 ` David Ahern
@ 2017-08-11 17:28 ` Jiri Benc
0 siblings, 0 replies; 11+ messages in thread
From: Jiri Benc @ 2017-08-11 17:28 UTC (permalink / raw)
To: David Ahern
Cc: Roopa Prabhu, Girish Moodalbail, pravin shelar,
davem@davemloft.net, netdev@vger.kernel.org, Matthias Schiffer
On Fri, 11 Aug 2017 11:17:54 -0600, David Ahern wrote:
> What if a user adds IFLA_INFO_DATA but adds no vxlan attributes under
> it? Still not a valid config, but it passes the !data check.
Part of the checking is done in the newlink callback (vxlan_nl2conf).
Not nice but that's how it is. It's out of scope of this patch to
change that. (It's also not easy - most of the newlink logic would have
to be repeated in validate.)
The !data check needs to be done prior to blindly dereferencing into
data. It's currently in the validate callback. A bit chaotic but it
works. This patch just adds error messages.
> Whatever attributes are required but missing should be the message
> returned.
See the message I proposed in the previous email. newlink will take
care of the rest.
Feel free to submit cleanups, the vxlan driver could use them.
Jiri
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting
2017-08-11 16:39 ` Jiri Benc
2017-08-11 16:56 ` David Ahern
@ 2017-08-11 17:21 ` Girish Moodalbail
2017-08-12 2:24 ` Roopa Prabhu
2 siblings, 0 replies; 11+ messages in thread
From: Girish Moodalbail @ 2017-08-11 17:21 UTC (permalink / raw)
To: Jiri Benc, Roopa Prabhu
Cc: pravin shelar, davem@davemloft.net, netdev@vger.kernel.org,
Matthias Schiffer
[snip]
>>> @@ -2933,6 +2945,8 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
>>> */
>>> if ((conf->flags & ~VXLAN_F_ALLOWED_GPE) ||
>>> !(conf->flags & VXLAN_F_COLLECT_METADATA)) {
>>> + NL_SET_ERR_MSG(extack,
>>> + "VXLAN GPE does not support this combination of attributes");
>>> return -EINVAL;
>>> }
>>
>> "collect metadata not supported with vxlan gpe"
Actually, VXLAN GPE is only supported together with external keyword. From
ip-link(8)...
gpe - enables the Generic Protocol extension (VXLAN-GPE). Currently, this
is only supported together with the external keyword.
> That's completely wrong message. Not saying that the capitalization is
> wrong, too. Girish's wording precisely explains what went wrong.
Furthermore, the condition not only checks for collect metadata but also it
checks to see if any attribute specified is outside of what is allowed by
VXLAN_F_ALLOWED_GPE.
>
>>> lowerdev = __dev_get_by_index(src_net, conf->remote_ifindex);
>>> - if (!lowerdev)
>>> + if (!lowerdev) {
>>> + NL_SET_ERR_MSG(extack,
>>> + "Specified interface for tunnel endpoint communications not found");
>>> return -ENODEV;
>>
>> "invalid vxlan remote link interface, device not found"
>
> Finally one that looks better :-) Modulo the missing capitalization,
> though.
It is not the remote link interface. It is the local interface itself that needs
to be specified.
>
>>> - if (vxlan_addr_multicast(&conf->remote_ip))
>>> + if (vxlan_addr_multicast(&conf->remote_ip)) {
>>> + NL_SET_ERR_MSG(extack,
>>> + "Interface need to be specified for multicast destination");
>>
>> "vxlan remote link interface required for multicast remote destination"
>
> I like this one better, too.
>
>>> #if IS_ENABLED(CONFIG_IPV6)
>>> - if (conf->flags & VXLAN_F_IPV6_LINKLOCAL)
>>> + if (conf->flags & VXLAN_F_IPV6_LINKLOCAL) {
>>> + NL_SET_ERR_MSG(extack,
>>> + "Interface need to be specified for link-local local/remote addresses");
>>> return -EINVAL;
>>
>> "vxlan link interface required for link-local local/remote addresses"
>
> Okay but to be consistent (and more clear), it should be "remote link
> interface".
There is no remote link while configuring VXLAN. It is the local interface
through which VXLAN packets will be send out.
Thanks all for the review,
~Girish
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting
2017-08-11 16:39 ` Jiri Benc
2017-08-11 16:56 ` David Ahern
2017-08-11 17:21 ` Girish Moodalbail
@ 2017-08-12 2:24 ` Roopa Prabhu
2 siblings, 0 replies; 11+ messages in thread
From: Roopa Prabhu @ 2017-08-12 2:24 UTC (permalink / raw)
To: Jiri Benc
Cc: Girish Moodalbail, pravin shelar, davem@davemloft.net,
netdev@vger.kernel.org, Matthias Schiffer
On Fri, Aug 11, 2017 at 9:39 AM, Jiri Benc <jbenc@redhat.com> wrote:
> On Fri, 11 Aug 2017 09:19:34 -0700, Roopa Prabhu wrote:
>> > if (tb[IFLA_ADDRESS]) {
>> > if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
>> > - pr_debug("invalid link address (not ethernet)\n");
>> > + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
>> > + "Provided link layer address is not Ethernet");
>> > return -EINVAL;
>> > }
>>
>> keep it simple and closer to the original msg: "invalid link layer address"
>
> I prefer more explanatory wording. Girish's is better.
>
>> >
>> > if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
>> > - pr_debug("invalid all zero ethernet address\n");
>> > + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
>> > + "Provided Ethernet address is not unicast");
>> > return -EADDRNOTAVAIL;
>>
>> keep it simple and closer to the original msg: "invalid all zero
>> ethernet address"
>
> This would be incorrect message. The is_valid_ether_addr function does
> not check only for all zeroes but also for !multicast. Girish's wording
> better expresses what's going on.
>
sure, I was merely trying to comment on the -EINVAL error msg format...
Other subsystems use "Invalid <attr>" and this one seems to follow
"Provided <attr> is not valid".
Consistency would only help these msgs
The missing capitalization in my comments was not intentional. Looked
at other msgs in
other subsystems and yes using capitalization goes with other msgs. so
no complaints there.
>> > + if (!data) {
>> > + NL_SET_ERR_MSG(extack,
>> > + "Not enough attributes provided to perform the operation");
>> > return -EINVAL;
>> > + }
>>
>> "not enough attributes"
>
> You're missing part of the sentence.
>
>> > if (data[IFLA_VXLAN_ID]) {
>> > u32 id = nla_get_u32(data[IFLA_VXLAN_ID]);
>> >
>> > - if (id >= VXLAN_N_VID)
>> > + if (id >= VXLAN_N_VID) {
>> > + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_ID],
>> > + "VXLAN ID must be lower than 16777216");
>> > return -ERANGE;
>>
>> "invalid vxlan-id"
>
> This is exactly what I objected against in Girish's v1. It would be
> useless to have extended error reporting but report things that don't
> help users. I like the current Girish's wording, it's clear and helpful.
>
>> > @@ -2761,8 +2772,8 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[],
>> > = nla_data(data[IFLA_VXLAN_PORT_RANGE]);
>> >
>> > if (ntohs(p->high) < ntohs(p->low)) {
>> > - pr_debug("port range %u .. %u not valid\n",
>> > - ntohs(p->low), ntohs(p->high));
>> > + NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_PORT_RANGE],
>> > + "Provided source port range bounds is invalid");
>> > return -EINVAL;
>> > }
>>
>> "invalid source port range"
>
> Could be. But please honor proper capitalization.
>
>> > @@ -2933,6 +2945,8 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
>> > */
>> > if ((conf->flags & ~VXLAN_F_ALLOWED_GPE) ||
>> > !(conf->flags & VXLAN_F_COLLECT_METADATA)) {
>> > + NL_SET_ERR_MSG(extack,
>> > + "VXLAN GPE does not support this combination of attributes");
>> > return -EINVAL;
>> > }
>>
>> "collect metadata not supported with vxlan gpe"
>
> That's completely wrong message. Not saying that the capitalization is
> wrong, too. Girish's wording precisely explains what went wrong.
>
>> > - if (vxlan_addr_multicast(&conf->saddr))
>> > + if (vxlan_addr_multicast(&conf->saddr)) {
>> > + NL_SET_ERR_MSG(extack, "Local address cannot be multicast");
>> > return -EINVAL;
>>
>> "invalid local address. multicast not supported"
>
> Roopa, what happened to your shift key? And how is this better to what
> Girish proposed?
>
>> > + NL_SET_ERR_MSG(extack,
>> > + "IPv6 support not enabled in the kernel");
>>
>> "invalid address family. ipv6 not enabled"
>
> Ditto.
>
>> > lowerdev = __dev_get_by_index(src_net, conf->remote_ifindex);
>> > - if (!lowerdev)
>> > + if (!lowerdev) {
>> > + NL_SET_ERR_MSG(extack,
>> > + "Specified interface for tunnel endpoint communications not found");
>> > return -ENODEV;
>>
>> "invalid vxlan remote link interface, device not found"
>
> Finally one that looks better :-) Modulo the missing capitalization,
> though.
>
>> > - if (vxlan_addr_multicast(&conf->remote_ip))
>> > + if (vxlan_addr_multicast(&conf->remote_ip)) {
>> > + NL_SET_ERR_MSG(extack,
>> > + "Interface need to be specified for multicast destination");
>>
>> "vxlan remote link interface required for multicast remote destination"
>
> I like this one better, too.
>
>> > #if IS_ENABLED(CONFIG_IPV6)
>> > - if (conf->flags & VXLAN_F_IPV6_LINKLOCAL)
>> > + if (conf->flags & VXLAN_F_IPV6_LINKLOCAL) {
>> > + NL_SET_ERR_MSG(extack,
>> > + "Interface need to be specified for link-local local/remote addresses");
>> > return -EINVAL;
>>
>> "vxlan link interface required for link-local local/remote addresses"
>
> Okay but to be consistent (and more clear), it should be "remote link
> interface".
>
>> > @@ -3038,6 +3082,7 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
>> > tmp->cfg.remote_ifindex != conf->remote_ifindex)
>> > continue;
>> >
>> > + NL_SET_ERR_MSG(extack, "Specified VNI is duplicate");
>>
>> "duplicate vni. vxlan device with vni exists."
>
> What about "A VXLAN device with the specified VNI already exists."?
>
I like this one. But looks like the v1 patch is already in.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2017-08-12 2:24 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-10 21:16 [PATCH net-next v2] vxlan: change vxlan_[config_]validate() to use netlink_ext_ack for error reporting Girish Moodalbail
2017-08-11 15:47 ` Jiri Benc
2017-08-11 16:19 ` Roopa Prabhu
2017-08-11 16:24 ` Matthias Schiffer
2017-08-11 16:39 ` Jiri Benc
2017-08-11 16:56 ` David Ahern
2017-08-11 17:11 ` Jiri Benc
2017-08-11 17:17 ` David Ahern
2017-08-11 17:28 ` Jiri Benc
2017-08-11 17:21 ` Girish Moodalbail
2017-08-12 2:24 ` Roopa Prabhu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).