net: introduce generic switch devices support
authorJiri Pirko <jiri@resnulli.us>
Fri, 28 Nov 2014 13:34:17 +0000 (14:34 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 3 Dec 2014 04:01:20 +0000 (20:01 -0800)
The goal of this is to provide a possibility to support various switch
chips. Drivers should implement relevant ndos to do so. Now there is
only one ndo defined:
- for getting physical switch id is in place.

Note that user can use random port netdevice to access the switch.

Signed-off-by: Jiri Pirko <jiri@resnulli.us>
Reviewed-by: Thomas Graf <tgraf@suug.ch>
Acked-by: Andy Gospodarek <gospo@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/networking/switchdev.txt [new file with mode: 0644]
MAINTAINERS
include/linux/netdevice.h
include/net/switchdev.h [new file with mode: 0644]
net/Kconfig
net/Makefile
net/switchdev/Kconfig [new file with mode: 0644]
net/switchdev/Makefile [new file with mode: 0644]
net/switchdev/switchdev.c [new file with mode: 0644]

diff --git a/Documentation/networking/switchdev.txt b/Documentation/networking/switchdev.txt
new file mode 100644 (file)
index 0000000..f981a92
--- /dev/null
@@ -0,0 +1,59 @@
+Switch (and switch-ish) device drivers HOWTO
+===========================
+
+Please note that the word "switch" is here used in very generic meaning.
+This include devices supporting L2/L3 but also various flow offloading chips,
+including switches embedded into SR-IOV NICs.
+
+Lets describe a topology a bit. Imagine the following example:
+
+       +----------------------------+    +---------------+
+       |     SOME switch chip       |    |      CPU      |
+       +----------------------------+    +---------------+
+       port1 port2 port3 port4 MNGMNT    |     PCI-E     |
+         |     |     |     |     |       +---------------+
+        PHY   PHY    |     |     |         |  NIC0 NIC1
+                     |     |     |         |   |    |
+                     |     |     +- PCI-E -+   |    |
+                     |     +------- MII -------+    |
+                     +------------- MII ------------+
+
+In this example, there are two independent lines between the switch silicon
+and CPU. NIC0 and NIC1 drivers are not aware of a switch presence. They are
+separate from the switch driver. SOME switch chip is by managed by a driver
+via PCI-E device MNGMNT. Note that MNGMNT device, NIC0 and NIC1 may be
+connected to some other type of bus.
+
+Now, for the previous example show the representation in kernel:
+
+       +----------------------------+    +---------------+
+       |     SOME switch chip       |    |      CPU      |
+       +----------------------------+    +---------------+
+       sw0p0 sw0p1 sw0p2 sw0p3 MNGMNT    |     PCI-E     |
+         |     |     |     |     |       +---------------+
+        PHY   PHY    |     |     |         |  eth0 eth1
+                     |     |     |         |   |    |
+                     |     |     +- PCI-E -+   |    |
+                     |     +------- MII -------+    |
+                     +------------- MII ------------+
+
+Lets call the example switch driver for SOME switch chip "SOMEswitch". This
+driver takes care of PCI-E device MNGMNT. There is a netdevice instance sw0pX
+created for each port of a switch. These netdevices are instances
+of "SOMEswitch" driver. sw0pX netdevices serve as a "representation"
+of the switch chip. eth0 and eth1 are instances of some other existing driver.
+
+The only difference of the switch-port netdevice from the ordinary netdevice
+is that is implements couple more NDOs:
+
+  ndo_switch_parent_id_get - This returns the same ID for two port netdevices
+                            of the same physical switch chip. This is
+                            mandatory to be implemented by all switch drivers
+                            and serves the caller for recognition of a port
+                            netdevice.
+  ndo_switch_parent_* - Functions that serve for a manipulation of the switch
+                       chip itself (it can be though of as a "parent" of the
+                       port, therefore the name). They are not port-specific.
+                       Caller might use arbitrary port netdevice of the same
+                       switch and it will make no difference.
+  ndo_switch_port_* - Functions that serve for a port-specific manipulation.
index 6b880de..3aba0ac 100644 (file)
@@ -9059,6 +9059,13 @@ F:       lib/swiotlb.c
 F:     arch/*/kernel/pci-swiotlb.c
 F:     include/linux/swiotlb.h
 
+SWITCHDEV
+M:     Jiri Pirko <jiri@resnulli.us>
+L:     netdev@vger.kernel.org
+S:     Supported
+F:     net/switchdev/
+F:     include/net/switchdev.h
+
 SYNOPSYS ARC ARCHITECTURE
 M:     Vineet Gupta <vgupta@synopsys.com>
 S:     Supported
Simple merge
Simple merge
diff --cc net/Kconfig
Simple merge
diff --cc net/Makefile
Simple merge
Simple merge
Simple merge
Simple merge