diff options
author | Jiri Pirko <jiri@resnulli.us> | 2014-11-28 08:34:17 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-12-02 23:01:20 -0500 |
commit | 007f790c8276271de26416f90d55561bcc96588a (patch) | |
tree | 03a55b7897402e9daa8af64ea2c81d5236f77367 /Documentation | |
parent | 02637fce3e0103ba086b9c33b6d529e69460e4b6 (diff) |
net: introduce generic switch devices support
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>
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/networking/switchdev.txt | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Documentation/networking/switchdev.txt b/Documentation/networking/switchdev.txt new file mode 100644 index 000000000000..f981a9295a39 --- /dev/null +++ b/Documentation/networking/switchdev.txt | |||
@@ -0,0 +1,59 @@ | |||
1 | Switch (and switch-ish) device drivers HOWTO | ||
2 | =========================== | ||
3 | |||
4 | Please note that the word "switch" is here used in very generic meaning. | ||
5 | This include devices supporting L2/L3 but also various flow offloading chips, | ||
6 | including switches embedded into SR-IOV NICs. | ||
7 | |||
8 | Lets describe a topology a bit. Imagine the following example: | ||
9 | |||
10 | +----------------------------+ +---------------+ | ||
11 | | SOME switch chip | | CPU | | ||
12 | +----------------------------+ +---------------+ | ||
13 | port1 port2 port3 port4 MNGMNT | PCI-E | | ||
14 | | | | | | +---------------+ | ||
15 | PHY PHY | | | | NIC0 NIC1 | ||
16 | | | | | | | | ||
17 | | | +- PCI-E -+ | | | ||
18 | | +------- MII -------+ | | ||
19 | +------------- MII ------------+ | ||
20 | |||
21 | In this example, there are two independent lines between the switch silicon | ||
22 | and CPU. NIC0 and NIC1 drivers are not aware of a switch presence. They are | ||
23 | separate from the switch driver. SOME switch chip is by managed by a driver | ||
24 | via PCI-E device MNGMNT. Note that MNGMNT device, NIC0 and NIC1 may be | ||
25 | connected to some other type of bus. | ||
26 | |||
27 | Now, for the previous example show the representation in kernel: | ||
28 | |||
29 | +----------------------------+ +---------------+ | ||
30 | | SOME switch chip | | CPU | | ||
31 | +----------------------------+ +---------------+ | ||
32 | sw0p0 sw0p1 sw0p2 sw0p3 MNGMNT | PCI-E | | ||
33 | | | | | | +---------------+ | ||
34 | PHY PHY | | | | eth0 eth1 | ||
35 | | | | | | | | ||
36 | | | +- PCI-E -+ | | | ||
37 | | +------- MII -------+ | | ||
38 | +------------- MII ------------+ | ||
39 | |||
40 | Lets call the example switch driver for SOME switch chip "SOMEswitch". This | ||
41 | driver takes care of PCI-E device MNGMNT. There is a netdevice instance sw0pX | ||
42 | created for each port of a switch. These netdevices are instances | ||
43 | of "SOMEswitch" driver. sw0pX netdevices serve as a "representation" | ||
44 | of the switch chip. eth0 and eth1 are instances of some other existing driver. | ||
45 | |||
46 | The only difference of the switch-port netdevice from the ordinary netdevice | ||
47 | is that is implements couple more NDOs: | ||
48 | |||
49 | ndo_switch_parent_id_get - This returns the same ID for two port netdevices | ||
50 | of the same physical switch chip. This is | ||
51 | mandatory to be implemented by all switch drivers | ||
52 | and serves the caller for recognition of a port | ||
53 | netdevice. | ||
54 | ndo_switch_parent_* - Functions that serve for a manipulation of the switch | ||
55 | chip itself (it can be though of as a "parent" of the | ||
56 | port, therefore the name). They are not port-specific. | ||
57 | Caller might use arbitrary port netdevice of the same | ||
58 | switch and it will make no difference. | ||
59 | ndo_switch_port_* - Functions that serve for a port-specific manipulation. | ||