diff options
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. | ||