diff options
| author | Scott Feldman <sfeldma@gmail.com> | 2015-03-16 00:07:15 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-03-16 00:14:43 -0400 |
| commit | 98237d433b98d27fdffb09e4a1a510e9f00c6f31 (patch) | |
| tree | efc630334478604131b99cf849273082387d76d7 /net | |
| parent | 4170604feec780d00e7511c24fa0f6e5c2e4ed75 (diff) | |
switchdev: use new swdev ops
Move swdev wrappers over to new swdev ops (from previous ndo ops). No
functional changes to the implementation.
Signed-off-by: Scott Feldman <sfeldma@gmail.com>
rocker: move to new swdev ops
Signed-off-by: Scott Feldman <sfeldma@gmail.com>
dsa: move to new swdev ops
Signed-off-by: Scott Feldman <sfeldma@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
| -rw-r--r-- | net/dsa/slave.c | 9 | ||||
| -rw-r--r-- | net/switchdev/switchdev.c | 42 |
2 files changed, 28 insertions, 23 deletions
diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 6511552039d6..f0af7aa331c1 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/of_net.h> | 16 | #include <linux/of_net.h> |
| 17 | #include <linux/of_mdio.h> | 17 | #include <linux/of_mdio.h> |
| 18 | #include <net/rtnetlink.h> | 18 | #include <net/rtnetlink.h> |
| 19 | #include <net/switchdev.h> | ||
| 19 | #include <linux/if_bridge.h> | 20 | #include <linux/if_bridge.h> |
| 20 | #include "dsa_priv.h" | 21 | #include "dsa_priv.h" |
| 21 | 22 | ||
| @@ -572,8 +573,11 @@ static const struct net_device_ops dsa_slave_netdev_ops = { | |||
| 572 | .ndo_set_rx_mode = dsa_slave_set_rx_mode, | 573 | .ndo_set_rx_mode = dsa_slave_set_rx_mode, |
| 573 | .ndo_set_mac_address = dsa_slave_set_mac_address, | 574 | .ndo_set_mac_address = dsa_slave_set_mac_address, |
| 574 | .ndo_do_ioctl = dsa_slave_ioctl, | 575 | .ndo_do_ioctl = dsa_slave_ioctl, |
| 575 | .ndo_switch_parent_id_get = dsa_slave_parent_id_get, | 576 | }; |
| 576 | .ndo_switch_port_stp_update = dsa_slave_stp_update, | 577 | |
| 578 | static const struct swdev_ops dsa_slave_swdev_ops = { | ||
| 579 | .swdev_parent_id_get = dsa_slave_parent_id_get, | ||
| 580 | .swdev_port_stp_update = dsa_slave_stp_update, | ||
| 577 | }; | 581 | }; |
| 578 | 582 | ||
| 579 | static void dsa_slave_adjust_link(struct net_device *dev) | 583 | static void dsa_slave_adjust_link(struct net_device *dev) |
| @@ -755,6 +759,7 @@ int dsa_slave_create(struct dsa_switch *ds, struct device *parent, | |||
| 755 | eth_hw_addr_inherit(slave_dev, master); | 759 | eth_hw_addr_inherit(slave_dev, master); |
| 756 | slave_dev->tx_queue_len = 0; | 760 | slave_dev->tx_queue_len = 0; |
| 757 | slave_dev->netdev_ops = &dsa_slave_netdev_ops; | 761 | slave_dev->netdev_ops = &dsa_slave_netdev_ops; |
| 762 | slave_dev->swdev_ops = &dsa_slave_swdev_ops; | ||
| 758 | 763 | ||
| 759 | SET_NETDEV_DEV(slave_dev, parent); | 764 | SET_NETDEV_DEV(slave_dev, parent); |
| 760 | slave_dev->dev.of_node = ds->pd->port_dn[port]; | 765 | slave_dev->dev.of_node = ds->pd->port_dn[port]; |
diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c index b7a23132c610..c9bfa004abed 100644 --- a/net/switchdev/switchdev.c +++ b/net/switchdev/switchdev.c | |||
| @@ -28,11 +28,11 @@ | |||
| 28 | int netdev_switch_parent_id_get(struct net_device *dev, | 28 | int netdev_switch_parent_id_get(struct net_device *dev, |
| 29 | struct netdev_phys_item_id *psid) | 29 | struct netdev_phys_item_id *psid) |
| 30 | { | 30 | { |
| 31 | const struct net_device_ops *ops = dev->netdev_ops; | 31 | const struct swdev_ops *ops = dev->swdev_ops; |
| 32 | 32 | ||
| 33 | if (!ops->ndo_switch_parent_id_get) | 33 | if (!ops || !ops->swdev_parent_id_get) |
| 34 | return -EOPNOTSUPP; | 34 | return -EOPNOTSUPP; |
| 35 | return ops->ndo_switch_parent_id_get(dev, psid); | 35 | return ops->swdev_parent_id_get(dev, psid); |
| 36 | } | 36 | } |
| 37 | EXPORT_SYMBOL_GPL(netdev_switch_parent_id_get); | 37 | EXPORT_SYMBOL_GPL(netdev_switch_parent_id_get); |
| 38 | 38 | ||
| @@ -46,12 +46,12 @@ EXPORT_SYMBOL_GPL(netdev_switch_parent_id_get); | |||
| 46 | */ | 46 | */ |
| 47 | int netdev_switch_port_stp_update(struct net_device *dev, u8 state) | 47 | int netdev_switch_port_stp_update(struct net_device *dev, u8 state) |
| 48 | { | 48 | { |
| 49 | const struct net_device_ops *ops = dev->netdev_ops; | 49 | const struct swdev_ops *ops = dev->swdev_ops; |
| 50 | 50 | ||
| 51 | if (!ops->ndo_switch_port_stp_update) | 51 | if (!ops || !ops->swdev_port_stp_update) |
| 52 | return -EOPNOTSUPP; | 52 | return -EOPNOTSUPP; |
| 53 | WARN_ON(!ops->ndo_switch_parent_id_get); | 53 | WARN_ON(!ops->swdev_parent_id_get); |
| 54 | return ops->ndo_switch_port_stp_update(dev, state); | 54 | return ops->swdev_port_stp_update(dev, state); |
| 55 | } | 55 | } |
| 56 | EXPORT_SYMBOL_GPL(netdev_switch_port_stp_update); | 56 | EXPORT_SYMBOL_GPL(netdev_switch_port_stp_update); |
| 57 | 57 | ||
| @@ -230,17 +230,17 @@ EXPORT_SYMBOL_GPL(ndo_dflt_netdev_switch_port_bridge_dellink); | |||
| 230 | 230 | ||
| 231 | static struct net_device *netdev_switch_get_lowest_dev(struct net_device *dev) | 231 | static struct net_device *netdev_switch_get_lowest_dev(struct net_device *dev) |
| 232 | { | 232 | { |
| 233 | const struct net_device_ops *ops = dev->netdev_ops; | 233 | const struct swdev_ops *ops = dev->swdev_ops; |
| 234 | struct net_device *lower_dev; | 234 | struct net_device *lower_dev; |
| 235 | struct net_device *port_dev; | 235 | struct net_device *port_dev; |
| 236 | struct list_head *iter; | 236 | struct list_head *iter; |
| 237 | 237 | ||
| 238 | /* Recusively search down until we find a sw port dev. | 238 | /* Recusively search down until we find a sw port dev. |
| 239 | * (A sw port dev supports ndo_switch_parent_id_get). | 239 | * (A sw port dev supports swdev_parent_id_get). |
| 240 | */ | 240 | */ |
| 241 | 241 | ||
| 242 | if (dev->features & NETIF_F_HW_SWITCH_OFFLOAD && | 242 | if (dev->features & NETIF_F_HW_SWITCH_OFFLOAD && |
| 243 | ops->ndo_switch_parent_id_get) | 243 | ops && ops->swdev_parent_id_get) |
| 244 | return dev; | 244 | return dev; |
| 245 | 245 | ||
| 246 | netdev_for_each_lower_dev(dev, lower_dev, iter) { | 246 | netdev_for_each_lower_dev(dev, lower_dev, iter) { |
| @@ -304,7 +304,7 @@ int netdev_switch_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi, | |||
| 304 | u8 tos, u8 type, u32 nlflags, u32 tb_id) | 304 | u8 tos, u8 type, u32 nlflags, u32 tb_id) |
| 305 | { | 305 | { |
| 306 | struct net_device *dev; | 306 | struct net_device *dev; |
| 307 | const struct net_device_ops *ops; | 307 | const struct swdev_ops *ops; |
| 308 | int err = 0; | 308 | int err = 0; |
| 309 | 309 | ||
| 310 | /* Don't offload route if using custom ip rules or if | 310 | /* Don't offload route if using custom ip rules or if |
| @@ -322,12 +322,12 @@ int netdev_switch_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi, | |||
| 322 | dev = netdev_switch_get_dev_by_nhs(fi); | 322 | dev = netdev_switch_get_dev_by_nhs(fi); |
| 323 | if (!dev) | 323 | if (!dev) |
| 324 | return 0; | 324 | return 0; |
| 325 | ops = dev->netdev_ops; | 325 | ops = dev->swdev_ops; |
| 326 | 326 | ||
| 327 | if (ops->ndo_switch_fib_ipv4_add) { | 327 | if (ops->swdev_fib_ipv4_add) { |
| 328 | err = ops->ndo_switch_fib_ipv4_add(dev, htonl(dst), dst_len, | 328 | err = ops->swdev_fib_ipv4_add(dev, htonl(dst), dst_len, |
| 329 | fi, tos, type, nlflags, | 329 | fi, tos, type, nlflags, |
| 330 | tb_id); | 330 | tb_id); |
| 331 | if (!err) | 331 | if (!err) |
| 332 | fi->fib_flags |= RTNH_F_EXTERNAL; | 332 | fi->fib_flags |= RTNH_F_EXTERNAL; |
| 333 | } | 333 | } |
| @@ -352,7 +352,7 @@ int netdev_switch_fib_ipv4_del(u32 dst, int dst_len, struct fib_info *fi, | |||
| 352 | u8 tos, u8 type, u32 tb_id) | 352 | u8 tos, u8 type, u32 tb_id) |
| 353 | { | 353 | { |
| 354 | struct net_device *dev; | 354 | struct net_device *dev; |
| 355 | const struct net_device_ops *ops; | 355 | const struct swdev_ops *ops; |
| 356 | int err = 0; | 356 | int err = 0; |
| 357 | 357 | ||
| 358 | if (!(fi->fib_flags & RTNH_F_EXTERNAL)) | 358 | if (!(fi->fib_flags & RTNH_F_EXTERNAL)) |
| @@ -361,11 +361,11 @@ int netdev_switch_fib_ipv4_del(u32 dst, int dst_len, struct fib_info *fi, | |||
| 361 | dev = netdev_switch_get_dev_by_nhs(fi); | 361 | dev = netdev_switch_get_dev_by_nhs(fi); |
| 362 | if (!dev) | 362 | if (!dev) |
| 363 | return 0; | 363 | return 0; |
| 364 | ops = dev->netdev_ops; | 364 | ops = dev->swdev_ops; |
| 365 | 365 | ||
| 366 | if (ops->ndo_switch_fib_ipv4_del) { | 366 | if (ops->swdev_fib_ipv4_del) { |
| 367 | err = ops->ndo_switch_fib_ipv4_del(dev, htonl(dst), dst_len, | 367 | err = ops->swdev_fib_ipv4_del(dev, htonl(dst), dst_len, |
| 368 | fi, tos, type, tb_id); | 368 | fi, tos, type, tb_id); |
| 369 | if (!err) | 369 | if (!err) |
| 370 | fi->fib_flags &= ~RTNH_F_EXTERNAL; | 370 | fi->fib_flags &= ~RTNH_F_EXTERNAL; |
| 371 | } | 371 | } |
