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 8b75f80da56c4d06aa03b88fe2da8b3f81a77e98..3e44087935ae75390dabc9cb485eb7310e1e7b88 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 f817fb8005ef0f3dd9bc20ca12f0407ee32ca26f..cb803c026f1f8122f983ae84777edb1426c20f93 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 ed4723a9031f528727d0446ca87015d340a2e9d2..438966bf51c21ce83f900b1a7e0df866910f7df8 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 7f99e8a5dd09be41c2916122c01111b7d605a94f..6d8191f2ad325cf6ed135a74395d4e66face9133 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 7bda5f630ac971bfb0c8de2ec4dc622615b1e013..e7d54072d7b330d67217a37db9eb95e665c3b85d 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 60f3e3089ec38391846a81dc953bd85b08ed75ae..38ba3d73ac1502323b0a9b4caef80d465288485a 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 526d23db3b715bf041991f7d201f36bf1543c383..3064416578a9ab5bd07ed1cefc499ca25032d350 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 50a2087471794ed9d893f1993c96412e94502d3b..60c40349e73e53faa8f9881b16236109d2afd9af 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 33332a104ac5e0486b209fc493efe1d91ef48972..f7d0320f75b09478860d7b381863a0a61361bc45 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 11b74e2b103628d27b7f84047b4f6d549e060072..f08b5e192e45f9251fae8855e629723340d9d1f6 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 39c1fa104c8dbbd0f5d662d889a236551c6a64be..37e4ec2953b2dd75c54d6caa62a3ad21f4b4439d 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 3ad833cd042f216497e826c253b93fd9fbdfe8ab..922ac1d605b341017ef1ec370d2449f6b56df2be 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 8b3faa00905fd5ba19e7f6e610c3786d852f0dd2..bac81d1bb24d125a367b9f41c0f9fef4986d19d1 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 989f29f2f0d54f61bd7c0f79b4093404df80e502..a63985c4bec71ed0dfa34407c2009314a73cf02a 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 d748c5017d3b9fb4ad35e3c6d2fb6be3d016e7c9..24acff67a4f240d6a8a8424df7c8763337e7e143 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 51132060397d6308262fe14e6ba39ca4b22751f2..eb7fe7b0046f8fd45d5f709d96f46b1531c6992f 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 f7c949d41fdab144f57333917c51f35b96bd8c5b..7232b28425f3171afe54af316c169e99fd9be2dc 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 ca12b2e33ae32acb477e0f15479163cfccc3da84..d9f60a173107c76361ed21ae93cd7e2964b5703f 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 736a4f3f731d8e0fb7fe33761e0336afde41eeb6..2afdddb48e69562c3b39154c6ab48e0660906e32 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 f7445fdb5e645b6b2388d4700d69c9f07b6abaf1..b8000429f78dbc916e929192d5f93333c342f9d5 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;