net: add netlink_ext_ack argument to rtnl_link_ops.changelink
authorMatthias Schiffer <mschiffer@universe-factory.net>
Sun, 25 Jun 2017 21:56:00 +0000 (23:56 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 27 Jun 2017 03:13:22 +0000 (23:13 -0400)
Add support for extended error reporting.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
Acked-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
20 files changed:
drivers/infiniband/ulp/ipoib/ipoib_netlink.c
drivers/net/bonding/bond_netlink.c
drivers/net/caif/caif_hsi.c
drivers/net/can/dev.c
drivers/net/ipvlan/ipvlan_main.c
drivers/net/macsec.c
drivers/net/macvlan.c
drivers/net/vxlan.c
include/net/rtnetlink.h
net/8021q/vlan_netlink.c
net/bridge/br_netlink.c
net/caif/chnl_net.c
net/core/rtnetlink.c
net/ipv4/ip_gre.c
net/ipv4/ip_vti.c
net/ipv4/ipip.c
net/ipv6/ip6_gre.c
net/ipv6/ip6_tunnel.c
net/ipv6/ip6_vti.c
net/ipv6/sit.c

index 8b75f80..3e44087 100644 (file)
@@ -64,8 +64,9 @@ nla_put_failure:
        return -EMSGSIZE;
 }
 
-static int ipoib_changelink(struct net_device *dev,
-                           struct nlattr *tb[], struct nlattr *data[])
+static int ipoib_changelink(struct net_device *dev, struct nlattr *tb[],
+                           struct nlattr *data[],
+                           struct netlink_ext_ack *extack)
 {
        u16 mode, umcast;
        int ret = 0;
@@ -134,7 +135,7 @@ static int ipoib_new_child_link(struct net *src_net, struct net_device *dev,
                               child_pkey, IPOIB_RTNL_CHILD);
 
        if (!err && data)
-               err = ipoib_changelink(dev, tb, data);
+               err = ipoib_changelink(dev, tb, data, extack);
        return err;
 }
 
index f817fb8..cb803c0 100644 (file)
@@ -156,8 +156,9 @@ static int bond_slave_changelink(struct net_device *bond_dev,
        return 0;
 }
 
-static int bond_changelink(struct net_device *bond_dev,
-                          struct nlattr *tb[], struct nlattr *data[])
+static int bond_changelink(struct net_device *bond_dev, struct nlattr *tb[],
+                          struct nlattr *data[],
+                          struct netlink_ext_ack *extack)
 {
        struct bonding *bond = netdev_priv(bond_dev);
        struct bond_opt_value newval;
@@ -443,7 +444,7 @@ static int bond_newlink(struct net *src_net, struct net_device *bond_dev,
 {
        int err;
 
-       err = bond_changelink(bond_dev, tb, data);
+       err = bond_changelink(bond_dev, tb, data, extack);
        if (err < 0)
                return err;
 
index ed4723a..438966b 100644 (file)
@@ -1352,7 +1352,8 @@ static void cfhsi_netlink_parms(struct nlattr *data[], struct cfhsi *cfhsi)
 }
 
 static int caif_hsi_changelink(struct net_device *dev, struct nlattr *tb[],
-                               struct nlattr *data[])
+                              struct nlattr *data[],
+                              struct netlink_ext_ack *extack)
 {
        cfhsi_netlink_parms(data, netdev_priv(dev));
        netdev_state_change(dev);
index 7f99e8a..6d8191f 100644 (file)
@@ -880,8 +880,9 @@ static int can_validate(struct nlattr *tb[], struct nlattr *data[])
        return 0;
 }
 
-static int can_changelink(struct net_device *dev,
-                         struct nlattr *tb[], struct nlattr *data[])
+static int can_changelink(struct net_device *dev, struct nlattr *tb[],
+                         struct nlattr *data[],
+                         struct netlink_ext_ack *extack)
 {
        struct can_priv *priv = netdev_priv(dev);
        int err;
index 7bda5f6..e7d5407 100644 (file)
@@ -455,7 +455,8 @@ static const struct ethtool_ops ipvlan_ethtool_ops = {
 };
 
 static int ipvlan_nl_changelink(struct net_device *dev,
-                               struct nlattr *tb[], struct nlattr *data[])
+                               struct nlattr *tb[], struct nlattr *data[],
+                               struct netlink_ext_ack *extack)
 {
        struct ipvl_dev *ipvlan = netdev_priv(dev);
        struct ipvl_port *port = ipvlan_port_get_rtnl(ipvlan->phy_dev);
index 60f3e30..38ba3d7 100644 (file)
@@ -3056,7 +3056,8 @@ static void macsec_changelink_common(struct net_device *dev,
 }
 
 static int macsec_changelink(struct net_device *dev, struct nlattr *tb[],
-                            struct nlattr *data[])
+                            struct nlattr *data[],
+                            struct netlink_ext_ack *extack)
 {
        if (!data)
                return 0;
index 526d23d..3064416 100644 (file)
@@ -1409,7 +1409,8 @@ void macvlan_dellink(struct net_device *dev, struct list_head *head)
 EXPORT_SYMBOL_GPL(macvlan_dellink);
 
 static int macvlan_changelink(struct net_device *dev,
-               struct nlattr *tb[], struct nlattr *data[])
+                             struct nlattr *tb[], struct nlattr *data[],
+                             struct netlink_ext_ack *extack)
 {
        struct macvlan_dev *vlan = netdev_priv(dev);
        enum macvlan_mode mode;
index 50a2087..60c4034 100644 (file)
@@ -3347,7 +3347,8 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[],
-                           struct nlattr *data[])
+                           struct nlattr *data[],
+                           struct netlink_ext_ack *extack)
 {
        struct vxlan_dev *vxlan = netdev_priv(dev);
        struct vxlan_rdst *dst = &vxlan->default_dst;
index 33332a1..f7d0320 100644 (file)
@@ -72,7 +72,8 @@ struct rtnl_link_ops {
                                           struct netlink_ext_ack *extack);
        int                     (*changelink)(struct net_device *dev,
                                              struct nlattr *tb[],
-                                             struct nlattr *data[]);
+                                             struct nlattr *data[],
+                                             struct netlink_ext_ack *extack);
        void                    (*dellink)(struct net_device *dev,
                                           struct list_head *head);
 
index 11b74e2..f08b5e1 100644 (file)
@@ -87,8 +87,9 @@ static int vlan_validate(struct nlattr *tb[], struct nlattr *data[])
        return 0;
 }
 
-static int vlan_changelink(struct net_device *dev,
-                          struct nlattr *tb[], struct nlattr *data[])
+static int vlan_changelink(struct net_device *dev, struct nlattr *tb[],
+                          struct nlattr *data[],
+                          struct netlink_ext_ack *extack)
 {
        struct ifla_vlan_flags *flags;
        struct ifla_vlan_qos_mapping *m;
@@ -154,7 +155,7 @@ static int vlan_newlink(struct net *src_net, struct net_device *dev,
        else if (dev->mtu > max_mtu)
                return -EINVAL;
 
-       err = vlan_changelink(dev, tb, data);
+       err = vlan_changelink(dev, tb, data, extack);
        if (err < 0)
                return err;
 
index 39c1fa1..37e4ec2 100644 (file)
@@ -960,7 +960,8 @@ static const struct nla_policy br_policy[IFLA_BR_MAX + 1] = {
 };
 
 static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
-                        struct nlattr *data[])
+                        struct nlattr *data[],
+                        struct netlink_ext_ack *extack)
 {
        struct net_bridge *br = netdev_priv(brdev);
        int err;
@@ -1229,7 +1230,7 @@ static int br_dev_newlink(struct net *src_net, struct net_device *dev,
        if (err)
                return err;
 
-       err = br_changelink(dev, tb, data);
+       err = br_changelink(dev, tb, data, extack);
        if (err)
                unregister_netdevice(dev);
        return err;
index 3ad833c..922ac1d 100644 (file)
@@ -485,7 +485,8 @@ static int ipcaif_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int ipcaif_changelink(struct net_device *dev, struct nlattr *tb[],
-                            struct nlattr *data[])
+                            struct nlattr *data[],
+                            struct netlink_ext_ack *extack)
 {
        struct chnl_net *caifdev;
        ASSERT_RTNL();
index 8b3faa0..bac81d1 100644 (file)
@@ -2620,7 +2620,7 @@ replay:
                                    !ops->changelink)
                                        return -EOPNOTSUPP;
 
-                               err = ops->changelink(dev, tb, data);
+                               err = ops->changelink(dev, tb, data, extack);
                                if (err < 0)
                                        return err;
                                status |= DO_SETLINK_NOTIFY;
index 989f29f..a63985c 100644 (file)
@@ -980,7 +980,8 @@ static int ipgre_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int ipgre_changelink(struct net_device *dev, struct nlattr *tb[],
-                           struct nlattr *data[])
+                           struct nlattr *data[],
+                           struct netlink_ext_ack *extack)
 {
        struct ip_tunnel *t = netdev_priv(dev);
        struct ip_tunnel_parm p;
index d748c50..24acff6 100644 (file)
@@ -514,7 +514,8 @@ static int vti_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int vti_changelink(struct net_device *dev, struct nlattr *tb[],
-                         struct nlattr *data[])
+                         struct nlattr *data[],
+                         struct netlink_ext_ack *extack)
 {
        struct ip_tunnel *t = netdev_priv(dev);
        __u32 fwmark = t->fwmark;
index 5113206..eb7fe7b 100644 (file)
@@ -489,7 +489,8 @@ static int ipip_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int ipip_changelink(struct net_device *dev, struct nlattr *tb[],
-                          struct nlattr *data[])
+                          struct nlattr *data[],
+                          struct netlink_ext_ack *extack)
 {
        struct ip_tunnel *t = netdev_priv(dev);
        struct ip_tunnel_parm p;
index f7c949d..7232b28 100644 (file)
@@ -1404,7 +1404,8 @@ out:
 }
 
 static int ip6gre_changelink(struct net_device *dev, struct nlattr *tb[],
-                           struct nlattr *data[])
+                            struct nlattr *data[],
+                            struct netlink_ext_ack *extack)
 {
        struct ip6_tnl *t, *nt = netdev_priv(dev);
        struct net *net = nt->net;
index ca12b2e..d9f60a1 100644 (file)
@@ -2006,7 +2006,8 @@ static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int ip6_tnl_changelink(struct net_device *dev, struct nlattr *tb[],
-                             struct nlattr *data[])
+                             struct nlattr *data[],
+                             struct netlink_ext_ack *extack)
 {
        struct ip6_tnl *t = netdev_priv(dev);
        struct __ip6_tnl_parm p;
index 736a4f3..2afdddb 100644 (file)
@@ -967,7 +967,8 @@ static void vti6_dellink(struct net_device *dev, struct list_head *head)
 }
 
 static int vti6_changelink(struct net_device *dev, struct nlattr *tb[],
-                          struct nlattr *data[])
+                          struct nlattr *data[],
+                          struct netlink_ext_ack *extack)
 {
        struct ip6_tnl *t;
        struct __ip6_tnl_parm p;
index f7445fd..b800042 100644 (file)
@@ -1574,7 +1574,8 @@ static int ipip6_newlink(struct net *src_net, struct net_device *dev,
 }
 
 static int ipip6_changelink(struct net_device *dev, struct nlattr *tb[],
-                         struct nlattr *data[])
+                           struct nlattr *data[],
+                           struct netlink_ext_ack *extack)
 {
        struct ip_tunnel *t = netdev_priv(dev);
        struct ip_tunnel_parm p;