blob: f981a9295a39a14245f884b1fbc810817f74999c [file] [log] [blame]
Jiri Pirko007f7902014-11-28 14:34:17 +01001Switch (and switch-ish) device drivers HOWTO
2===========================
3
4Please note that the word "switch" is here used in very generic meaning.
5This include devices supporting L2/L3 but also various flow offloading chips,
6including switches embedded into SR-IOV NICs.
7
8Lets 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
21In this example, there are two independent lines between the switch silicon
22and CPU. NIC0 and NIC1 drivers are not aware of a switch presence. They are
23separate from the switch driver. SOME switch chip is by managed by a driver
24via PCI-E device MNGMNT. Note that MNGMNT device, NIC0 and NIC1 may be
25connected to some other type of bus.
26
27Now, 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
40Lets call the example switch driver for SOME switch chip "SOMEswitch". This
41driver takes care of PCI-E device MNGMNT. There is a netdevice instance sw0pX
42created for each port of a switch. These netdevices are instances
43of "SOMEswitch" driver. sw0pX netdevices serve as a "representation"
44of the switch chip. eth0 and eth1 are instances of some other existing driver.
45
46The only difference of the switch-port netdevice from the ordinary netdevice
47is 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.