diff options
-rw-r--r-- | drivers/net/bonding/bond_main.c | 1 | ||||
-rw-r--r-- | drivers/net/bonding/bond_netlink.c | 21 | ||||
-rw-r--r-- | drivers/net/bonding/bonding.h | 1 | ||||
-rw-r--r-- | net/core/rtnetlink.c | 51 |
4 files changed, 19 insertions, 55 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 2ca949f6e995..4a8ccce3315a 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -3824,7 +3824,6 @@ static const struct net_device_ops bond_netdev_ops = { | |||
3824 | #endif | 3824 | #endif |
3825 | .ndo_add_slave = bond_enslave, | 3825 | .ndo_add_slave = bond_enslave, |
3826 | .ndo_del_slave = bond_release, | 3826 | .ndo_del_slave = bond_release, |
3827 | .ndo_get_slave = bond_get_slave, | ||
3828 | .ndo_fix_features = bond_fix_features, | 3827 | .ndo_fix_features = bond_fix_features, |
3829 | }; | 3828 | }; |
3830 | 3829 | ||
diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c index 549eb8702ebb..70651f8e8e3b 100644 --- a/drivers/net/bonding/bond_netlink.c +++ b/drivers/net/bonding/bond_netlink.c | |||
@@ -21,10 +21,23 @@ | |||
21 | #include <net/rtnetlink.h> | 21 | #include <net/rtnetlink.h> |
22 | #include "bonding.h" | 22 | #include "bonding.h" |
23 | 23 | ||
24 | int bond_get_slave(struct net_device *slave_dev, struct sk_buff *skb) | 24 | static size_t bond_get_slave_size(const struct net_device *bond_dev, |
25 | const struct net_device *slave_dev) | ||
26 | { | ||
27 | return nla_total_size(sizeof(u8)) + /* IFLA_BOND_SLAVE_STATE */ | ||
28 | nla_total_size(sizeof(u8)) + /* IFLA_BOND_SLAVE_MII_STATUS */ | ||
29 | nla_total_size(sizeof(u32)) + /* IFLA_BOND_SLAVE_LINK_FAILURE_COUNT */ | ||
30 | nla_total_size(MAX_ADDR_LEN) + /* IFLA_BOND_SLAVE_PERM_HWADDR */ | ||
31 | nla_total_size(sizeof(u16)) + /* IFLA_BOND_SLAVE_QUEUE_ID */ | ||
32 | nla_total_size(sizeof(u16)) + /* IFLA_BOND_SLAVE_AD_AGGREGATOR_ID */ | ||
33 | 0; | ||
34 | } | ||
35 | |||
36 | static int bond_fill_slave_info(struct sk_buff *skb, | ||
37 | const struct net_device *bond_dev, | ||
38 | const struct net_device *slave_dev) | ||
25 | { | 39 | { |
26 | struct slave *slave = bond_slave_get_rtnl(slave_dev); | 40 | struct slave *slave = bond_slave_get_rtnl(slave_dev); |
27 | const struct aggregator *agg; | ||
28 | 41 | ||
29 | if (nla_put_u8(skb, IFLA_BOND_SLAVE_STATE, bond_slave_state(slave))) | 42 | if (nla_put_u8(skb, IFLA_BOND_SLAVE_STATE, bond_slave_state(slave))) |
30 | goto nla_put_failure; | 43 | goto nla_put_failure; |
@@ -44,6 +57,8 @@ int bond_get_slave(struct net_device *slave_dev, struct sk_buff *skb) | |||
44 | goto nla_put_failure; | 57 | goto nla_put_failure; |
45 | 58 | ||
46 | if (slave->bond->params.mode == BOND_MODE_8023AD) { | 59 | if (slave->bond->params.mode == BOND_MODE_8023AD) { |
60 | const struct aggregator *agg; | ||
61 | |||
47 | agg = SLAVE_AD_INFO(slave).port.aggregator; | 62 | agg = SLAVE_AD_INFO(slave).port.aggregator; |
48 | if (agg) | 63 | if (agg) |
49 | if (nla_put_u16(skb, IFLA_BOND_SLAVE_AD_AGGREGATOR_ID, | 64 | if (nla_put_u16(skb, IFLA_BOND_SLAVE_AD_AGGREGATOR_ID, |
@@ -541,6 +556,8 @@ struct rtnl_link_ops bond_link_ops __read_mostly = { | |||
541 | .get_num_tx_queues = bond_get_num_tx_queues, | 556 | .get_num_tx_queues = bond_get_num_tx_queues, |
542 | .get_num_rx_queues = bond_get_num_tx_queues, /* Use the same number | 557 | .get_num_rx_queues = bond_get_num_tx_queues, /* Use the same number |
543 | as for TX queues */ | 558 | as for TX queues */ |
559 | .get_slave_size = bond_get_slave_size, | ||
560 | .fill_slave_info = bond_fill_slave_info, | ||
544 | }; | 561 | }; |
545 | 562 | ||
546 | int __init bond_netlink_init(void) | 563 | int __init bond_netlink_init(void) |
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h index 8032e07fec0e..1a9062f4e0d6 100644 --- a/drivers/net/bonding/bonding.h +++ b/drivers/net/bonding/bonding.h | |||
@@ -436,7 +436,6 @@ int bond_sysfs_slave_add(struct slave *slave); | |||
436 | void bond_sysfs_slave_del(struct slave *slave); | 436 | void bond_sysfs_slave_del(struct slave *slave); |
437 | int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev); | 437 | int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev); |
438 | int bond_release(struct net_device *bond_dev, struct net_device *slave_dev); | 438 | int bond_release(struct net_device *bond_dev, struct net_device *slave_dev); |
439 | int bond_get_slave(struct net_device *slave_dev, struct sk_buff *skb); | ||
440 | int bond_xmit_hash(struct bonding *bond, struct sk_buff *skb, int count); | 439 | int bond_xmit_hash(struct bonding *bond, struct sk_buff *skb, int count); |
441 | int bond_parse_parm(const char *mode_arg, const struct bond_parm_tbl *tbl); | 440 | int bond_parse_parm(const char *mode_arg, const struct bond_parm_tbl *tbl); |
442 | int bond_parm_tbl_lookup(int mode, const struct bond_parm_tbl *tbl); | 441 | int bond_parm_tbl_lookup(int mode, const struct bond_parm_tbl *tbl); |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index a56bccf6629e..db6a239e0bcc 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -800,28 +800,6 @@ static size_t rtnl_port_size(const struct net_device *dev) | |||
800 | return port_self_size; | 800 | return port_self_size; |
801 | } | 801 | } |
802 | 802 | ||
803 | static size_t rtnl_bond_slave_size(const struct net_device *dev) | ||
804 | { | ||
805 | struct net_device *bond; | ||
806 | size_t slave_size = | ||
807 | nla_total_size(sizeof(struct nlattr)) + /* IFLA_BOND_SLAVE */ | ||
808 | nla_total_size(1) + /* IFLA_BOND_SLAVE_STATE */ | ||
809 | nla_total_size(1) + /* IFLA_BOND_SLAVE_MII_STATUS */ | ||
810 | nla_total_size(4) + /* IFLA_BOND_SLAVE_LINK_FAILURE_COUNT */ | ||
811 | nla_total_size(MAX_ADDR_LEN) + /* IFLA_BOND_SLAVE_PERM_HWADDR */ | ||
812 | nla_total_size(2) + /* IFLA_BOND_SLAVE_QUEUE_ID */ | ||
813 | nla_total_size(2) + /* IFLA_BOND_SLAVE_AD_AGGREGATOR_ID */ | ||
814 | 0; | ||
815 | |||
816 | if (netif_is_bond_slave((struct net_device *)dev)) { | ||
817 | bond = netdev_master_upper_dev_get((struct net_device *)dev); | ||
818 | if (bond && bond->netdev_ops->ndo_get_slave) | ||
819 | return slave_size; | ||
820 | } | ||
821 | |||
822 | return 0; | ||
823 | } | ||
824 | |||
825 | static noinline size_t if_nlmsg_size(const struct net_device *dev, | 803 | static noinline size_t if_nlmsg_size(const struct net_device *dev, |
826 | u32 ext_filter_mask) | 804 | u32 ext_filter_mask) |
827 | { | 805 | { |
@@ -851,7 +829,6 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev, | |||
851 | + rtnl_port_size(dev) /* IFLA_VF_PORTS + IFLA_PORT_SELF */ | 829 | + rtnl_port_size(dev) /* IFLA_VF_PORTS + IFLA_PORT_SELF */ |
852 | + rtnl_link_get_size(dev) /* IFLA_LINKINFO */ | 830 | + rtnl_link_get_size(dev) /* IFLA_LINKINFO */ |
853 | + rtnl_link_get_af_size(dev) /* IFLA_AF_SPEC */ | 831 | + rtnl_link_get_af_size(dev) /* IFLA_AF_SPEC */ |
854 | + rtnl_bond_slave_size(dev) /* IFLA_SLAVE */ | ||
855 | + nla_total_size(MAX_PHYS_PORT_ID_LEN); /* IFLA_PHYS_PORT_ID */ | 832 | + nla_total_size(MAX_PHYS_PORT_ID_LEN); /* IFLA_PHYS_PORT_ID */ |
856 | } | 833 | } |
857 | 834 | ||
@@ -949,34 +926,6 @@ static int rtnl_phys_port_id_fill(struct sk_buff *skb, struct net_device *dev) | |||
949 | return 0; | 926 | return 0; |
950 | } | 927 | } |
951 | 928 | ||
952 | static size_t rtnl_bond_slave_fill(struct sk_buff *skb, struct net_device *dev) | ||
953 | { | ||
954 | struct net_device *bond; | ||
955 | struct nlattr *nest; | ||
956 | int err; | ||
957 | |||
958 | if (!netif_is_bond_slave(dev)) | ||
959 | return 0; | ||
960 | |||
961 | bond = netdev_master_upper_dev_get(dev); | ||
962 | if (!bond || !bond->netdev_ops->ndo_get_slave) | ||
963 | return 0; | ||
964 | |||
965 | nest = nla_nest_start(skb, IFLA_BOND_SLAVE); | ||
966 | if (!nest) | ||
967 | return -EMSGSIZE; | ||
968 | |||
969 | err = bond->netdev_ops->ndo_get_slave(dev, skb); | ||
970 | if (err) { | ||
971 | nla_nest_cancel(skb, nest); | ||
972 | return (err == -EMSGSIZE) ? err : 0; | ||
973 | } | ||
974 | |||
975 | nla_nest_end(skb, nest); | ||
976 | |||
977 | return 0; | ||
978 | } | ||
979 | |||
980 | static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev, | 929 | static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev, |
981 | int type, u32 pid, u32 seq, u32 change, | 930 | int type, u32 pid, u32 seq, u32 change, |
982 | unsigned int flags, u32 ext_filter_mask) | 931 | unsigned int flags, u32 ext_filter_mask) |