The basic idea is to introduce a generic infractructure to support various switch chips in kernel.
The current patchset RFC is a heavy rework of the previous ones. The goal is to be low-intrusive and to use as much as possible from the existing infrastructure. Also the idea is to benefit from currently existing Open vSwitch userspace infrastructure prividing a HW offload for it. Note that this is just one usecase. Other sw*dev_ndos can be easily added to support many more usecases, Please see Documentation/networking/switchdev.txt for more details about the model. Next step would be to introduce a flag via which OVS userspace could tell if the flow should be inserted in HW or just in the SW datapath. That would extend current 2 level cashing (kernel, userspace) to 3 level (hw, kernel, userspace). Next step would be to improve internal kernel notifiers and introduce a listener which would call sw*dev_ndos to setup the switch according to what the user wants. This would allow a usecase then a user configures bridges, bonds, etc and the switch chip underneath gets configured by that. Any suggestions, feedbacks welcome. Jiri Pirko (10): openvswitch: split flow structures into ovs specific and generic ones net: rename netdev_phys_port_id to more generic name net: introduce generic switch devices support rtnl: expose physical switch id for particular device switchdev: introduce basic support for flows net: introduce dummy switch dsa: implement ndo_swdev_get_id net: add netdev_for_each_all_lower_dev_rcu helper openvswitch: introduce vport_op get_netdev openvswitch: add support for datapath hardware offload Documentation/networking/switchdev.txt | 53 +++++++ drivers/net/Kconfig | 7 + drivers/net/Makefile | 1 + drivers/net/dummyswitch.c | 126 +++++++++++++++++ drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 2 +- drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 2 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 2 +- include/linux/netdevice.h | 74 ++++++++-- include/linux/sw_flow.h | 122 ++++++++++++++++ include/linux/switchdev.h | 55 ++++++++ include/uapi/linux/if_link.h | 10 ++ net/Kconfig | 6 + net/core/Makefile | 1 + net/core/dev.c | 28 ++-- net/core/net-sysfs.c | 2 +- net/core/rtnetlink.c | 30 +++- net/core/switchdev.c | 90 ++++++++++++ net/dsa/slave.c | 16 +++ net/openvswitch/Makefile | 3 +- net/openvswitch/datapath.c | 63 +++++---- net/openvswitch/datapath.h | 4 +- net/openvswitch/dp_notify.c | 7 +- net/openvswitch/flow.c | 14 +- net/openvswitch/flow.h | 123 ++++------------ net/openvswitch/flow_netlink.c | 24 ++-- net/openvswitch/flow_netlink.h | 4 +- net/openvswitch/flow_table.c | 100 ++++++------- net/openvswitch/flow_table.h | 18 +-- net/openvswitch/hw_offload.c | 170 +++++++++++++++++++++++ net/openvswitch/hw_offload.h | 31 +++++ net/openvswitch/vport-gre.c | 4 +- net/openvswitch/vport-internal_dev.c | 53 ++++--- net/openvswitch/vport-netdev.c | 16 +++ net/openvswitch/vport-netdev.h | 12 -- net/openvswitch/vport-vxlan.c | 2 +- net/openvswitch/vport.c | 2 +- net/openvswitch/vport.h | 4 +- 37 files changed, 1004 insertions(+), 277 deletions(-) create mode 100644 Documentation/networking/switchdev.txt create mode 100644 drivers/net/dummyswitch.c create mode 100644 include/linux/sw_flow.h create mode 100644 include/linux/switchdev.h create mode 100644 net/core/switchdev.c create mode 100644 net/openvswitch/hw_offload.c create mode 100644 net/openvswitch/hw_offload.h -- 1.9.0 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev