diff options
Diffstat (limited to 'Documentation/networking')
-rw-r--r-- | Documentation/networking/README.ipw2200 | 2 | ||||
-rw-r--r-- | Documentation/networking/bonding.txt | 84 | ||||
-rw-r--r-- | Documentation/networking/caif/spi_porting.txt | 208 | ||||
-rw-r--r-- | Documentation/networking/ip-sysctl.txt | 2 | ||||
-rw-r--r-- | Documentation/networking/packet_mmap.txt | 26 | ||||
-rw-r--r-- | Documentation/networking/pktgen.txt | 5 |
6 files changed, 323 insertions, 4 deletions
diff --git a/Documentation/networking/README.ipw2200 b/Documentation/networking/README.ipw2200 index 80c728522c4c..e4d3267071e4 100644 --- a/Documentation/networking/README.ipw2200 +++ b/Documentation/networking/README.ipw2200 | |||
@@ -171,7 +171,7 @@ Where the supported parameter are: | |||
171 | 171 | ||
172 | led | 172 | led |
173 | Can be used to turn on experimental LED code. | 173 | Can be used to turn on experimental LED code. |
174 | 0 = Off, 1 = On. Default is 0. | 174 | 0 = Off, 1 = On. Default is 1. |
175 | 175 | ||
176 | mode | 176 | mode |
177 | Can be used to set the default mode of the adapter. | 177 | Can be used to set the default mode of the adapter. |
diff --git a/Documentation/networking/bonding.txt b/Documentation/networking/bonding.txt index 61f516b135b4..d0914781830e 100644 --- a/Documentation/networking/bonding.txt +++ b/Documentation/networking/bonding.txt | |||
@@ -49,6 +49,7 @@ Table of Contents | |||
49 | 3.3 Configuring Bonding Manually with Ifenslave | 49 | 3.3 Configuring Bonding Manually with Ifenslave |
50 | 3.3.1 Configuring Multiple Bonds Manually | 50 | 3.3.1 Configuring Multiple Bonds Manually |
51 | 3.4 Configuring Bonding Manually via Sysfs | 51 | 3.4 Configuring Bonding Manually via Sysfs |
52 | 3.5 Overriding Configuration for Special Cases | ||
52 | 53 | ||
53 | 4. Querying Bonding Configuration | 54 | 4. Querying Bonding Configuration |
54 | 4.1 Bonding Configuration | 55 | 4.1 Bonding Configuration |
@@ -1318,8 +1319,87 @@ echo 2000 > /sys/class/net/bond1/bonding/arp_interval | |||
1318 | echo +eth2 > /sys/class/net/bond1/bonding/slaves | 1319 | echo +eth2 > /sys/class/net/bond1/bonding/slaves |
1319 | echo +eth3 > /sys/class/net/bond1/bonding/slaves | 1320 | echo +eth3 > /sys/class/net/bond1/bonding/slaves |
1320 | 1321 | ||
1321 | 1322 | 3.5 Overriding Configuration for Special Cases | |
1322 | 4. Querying Bonding Configuration | 1323 | ---------------------------------------------- |
1324 | When using the bonding driver, the physical port which transmits a frame is | ||
1325 | typically selected by the bonding driver, and is not relevant to the user or | ||
1326 | system administrator. The output port is simply selected using the policies of | ||
1327 | the selected bonding mode. On occasion however, it is helpful to direct certain | ||
1328 | classes of traffic to certain physical interfaces on output to implement | ||
1329 | slightly more complex policies. For example, to reach a web server over a | ||
1330 | bonded interface in which eth0 connects to a private network, while eth1 | ||
1331 | connects via a public network, it may be desirous to bias the bond to send said | ||
1332 | traffic over eth0 first, using eth1 only as a fall back, while all other traffic | ||
1333 | can safely be sent over either interface. Such configurations may be achieved | ||
1334 | using the traffic control utilities inherent in linux. | ||
1335 | |||
1336 | By default the bonding driver is multiqueue aware and 16 queues are created | ||
1337 | when the driver initializes (see Documentation/networking/multiqueue.txt | ||
1338 | for details). If more or less queues are desired the module parameter | ||
1339 | tx_queues can be used to change this value. There is no sysfs parameter | ||
1340 | available as the allocation is done at module init time. | ||
1341 | |||
1342 | The output of the file /proc/net/bonding/bondX has changed so the output Queue | ||
1343 | ID is now printed for each slave: | ||
1344 | |||
1345 | Bonding Mode: fault-tolerance (active-backup) | ||
1346 | Primary Slave: None | ||
1347 | Currently Active Slave: eth0 | ||
1348 | MII Status: up | ||
1349 | MII Polling Interval (ms): 0 | ||
1350 | Up Delay (ms): 0 | ||
1351 | Down Delay (ms): 0 | ||
1352 | |||
1353 | Slave Interface: eth0 | ||
1354 | MII Status: up | ||
1355 | Link Failure Count: 0 | ||
1356 | Permanent HW addr: 00:1a:a0:12:8f:cb | ||
1357 | Slave queue ID: 0 | ||
1358 | |||
1359 | Slave Interface: eth1 | ||
1360 | MII Status: up | ||
1361 | Link Failure Count: 0 | ||
1362 | Permanent HW addr: 00:1a:a0:12:8f:cc | ||
1363 | Slave queue ID: 2 | ||
1364 | |||
1365 | The queue_id for a slave can be set using the command: | ||
1366 | |||
1367 | # echo "eth1:2" > /sys/class/net/bond0/bonding/queue_id | ||
1368 | |||
1369 | Any interface that needs a queue_id set should set it with multiple calls | ||
1370 | like the one above until proper priorities are set for all interfaces. On | ||
1371 | distributions that allow configuration via initscripts, multiple 'queue_id' | ||
1372 | arguments can be added to BONDING_OPTS to set all needed slave queues. | ||
1373 | |||
1374 | These queue id's can be used in conjunction with the tc utility to configure | ||
1375 | a multiqueue qdisc and filters to bias certain traffic to transmit on certain | ||
1376 | slave devices. For instance, say we wanted, in the above configuration to | ||
1377 | force all traffic bound to 192.168.1.100 to use eth1 in the bond as its output | ||
1378 | device. The following commands would accomplish this: | ||
1379 | |||
1380 | # tc qdisc add dev bond0 handle 1 root multiq | ||
1381 | |||
1382 | # tc filter add dev bond0 protocol ip parent 1: prio 1 u32 match ip dst \ | ||
1383 | 192.168.1.100 action skbedit queue_mapping 2 | ||
1384 | |||
1385 | These commands tell the kernel to attach a multiqueue queue discipline to the | ||
1386 | bond0 interface and filter traffic enqueued to it, such that packets with a dst | ||
1387 | ip of 192.168.1.100 have their output queue mapping value overwritten to 2. | ||
1388 | This value is then passed into the driver, causing the normal output path | ||
1389 | selection policy to be overridden, selecting instead qid 2, which maps to eth1. | ||
1390 | |||
1391 | Note that qid values begin at 1. Qid 0 is reserved to initiate to the driver | ||
1392 | that normal output policy selection should take place. One benefit to simply | ||
1393 | leaving the qid for a slave to 0 is the multiqueue awareness in the bonding | ||
1394 | driver that is now present. This awareness allows tc filters to be placed on | ||
1395 | slave devices as well as bond devices and the bonding driver will simply act as | ||
1396 | a pass-through for selecting output queues on the slave device rather than | ||
1397 | output port selection. | ||
1398 | |||
1399 | This feature first appeared in bonding driver version 3.7.0 and support for | ||
1400 | output slave selection was limited to round-robin and active-backup modes. | ||
1401 | |||
1402 | 4 Querying Bonding Configuration | ||
1323 | ================================= | 1403 | ================================= |
1324 | 1404 | ||
1325 | 4.1 Bonding Configuration | 1405 | 4.1 Bonding Configuration |
diff --git a/Documentation/networking/caif/spi_porting.txt b/Documentation/networking/caif/spi_porting.txt new file mode 100644 index 000000000000..61d7c9247453 --- /dev/null +++ b/Documentation/networking/caif/spi_porting.txt | |||
@@ -0,0 +1,208 @@ | |||
1 | - CAIF SPI porting - | ||
2 | |||
3 | - CAIF SPI basics: | ||
4 | |||
5 | Running CAIF over SPI needs some extra setup, owing to the nature of SPI. | ||
6 | Two extra GPIOs have been added in order to negotiate the transfers | ||
7 | between the master and the slave. The minimum requirement for running | ||
8 | CAIF over SPI is a SPI slave chip and two GPIOs (more details below). | ||
9 | Please note that running as a slave implies that you need to keep up | ||
10 | with the master clock. An overrun or underrun event is fatal. | ||
11 | |||
12 | - CAIF SPI framework: | ||
13 | |||
14 | To make porting as easy as possible, the CAIF SPI has been divided in | ||
15 | two parts. The first part (called the interface part) deals with all | ||
16 | generic functionality such as length framing, SPI frame negotiation | ||
17 | and SPI frame delivery and transmission. The other part is the CAIF | ||
18 | SPI slave device part, which is the module that you have to write if | ||
19 | you want to run SPI CAIF on a new hardware. This part takes care of | ||
20 | the physical hardware, both with regard to SPI and to GPIOs. | ||
21 | |||
22 | - Implementing a CAIF SPI device: | ||
23 | |||
24 | - Functionality provided by the CAIF SPI slave device: | ||
25 | |||
26 | In order to implement a SPI device you will, as a minimum, | ||
27 | need to implement the following | ||
28 | functions: | ||
29 | |||
30 | int (*init_xfer) (struct cfspi_xfer * xfer, struct cfspi_dev *dev): | ||
31 | |||
32 | This function is called by the CAIF SPI interface to give | ||
33 | you a chance to set up your hardware to be ready to receive | ||
34 | a stream of data from the master. The xfer structure contains | ||
35 | both physical and logical adresses, as well as the total length | ||
36 | of the transfer in both directions.The dev parameter can be used | ||
37 | to map to different CAIF SPI slave devices. | ||
38 | |||
39 | void (*sig_xfer) (bool xfer, struct cfspi_dev *dev): | ||
40 | |||
41 | This function is called by the CAIF SPI interface when the output | ||
42 | (SPI_INT) GPIO needs to change state. The boolean value of the xfer | ||
43 | variable indicates whether the GPIO should be asserted (HIGH) or | ||
44 | deasserted (LOW). The dev parameter can be used to map to different CAIF | ||
45 | SPI slave devices. | ||
46 | |||
47 | - Functionality provided by the CAIF SPI interface: | ||
48 | |||
49 | void (*ss_cb) (bool assert, struct cfspi_ifc *ifc); | ||
50 | |||
51 | This function is called by the CAIF SPI slave device in order to | ||
52 | signal a change of state of the input GPIO (SS) to the interface. | ||
53 | Only active edges are mandatory to be reported. | ||
54 | This function can be called from IRQ context (recommended in order | ||
55 | not to introduce latency). The ifc parameter should be the pointer | ||
56 | returned from the platform probe function in the SPI device structure. | ||
57 | |||
58 | void (*xfer_done_cb) (struct cfspi_ifc *ifc); | ||
59 | |||
60 | This function is called by the CAIF SPI slave device in order to | ||
61 | report that a transfer is completed. This function should only be | ||
62 | called once both the transmission and the reception are completed. | ||
63 | This function can be called from IRQ context (recommended in order | ||
64 | not to introduce latency). The ifc parameter should be the pointer | ||
65 | returned from the platform probe function in the SPI device structure. | ||
66 | |||
67 | - Connecting the bits and pieces: | ||
68 | |||
69 | - Filling in the SPI slave device structure: | ||
70 | |||
71 | Connect the necessary callback functions. | ||
72 | Indicate clock speed (used to calculate toggle delays). | ||
73 | Chose a suitable name (helps debugging if you use several CAIF | ||
74 | SPI slave devices). | ||
75 | Assign your private data (can be used to map to your structure). | ||
76 | |||
77 | - Filling in the SPI slave platform device structure: | ||
78 | Add name of driver to connect to ("cfspi_sspi"). | ||
79 | Assign the SPI slave device structure as platform data. | ||
80 | |||
81 | - Padding: | ||
82 | |||
83 | In order to optimize throughput, a number of SPI padding options are provided. | ||
84 | Padding can be enabled independently for uplink and downlink transfers. | ||
85 | Padding can be enabled for the head, the tail and for the total frame size. | ||
86 | The padding needs to be correctly configured on both sides of the link. | ||
87 | The padding can be changed via module parameters in cfspi_sspi.c or via | ||
88 | the sysfs directory of the cfspi_sspi driver (before device registration). | ||
89 | |||
90 | - CAIF SPI device template: | ||
91 | |||
92 | /* | ||
93 | * Copyright (C) ST-Ericsson AB 2010 | ||
94 | * Author: Daniel Martensson / Daniel.Martensson@stericsson.com | ||
95 | * License terms: GNU General Public License (GPL), version 2. | ||
96 | * | ||
97 | */ | ||
98 | |||
99 | #include <linux/init.h> | ||
100 | #include <linux/module.h> | ||
101 | #include <linux/device.h> | ||
102 | #include <linux/wait.h> | ||
103 | #include <linux/interrupt.h> | ||
104 | #include <linux/dma-mapping.h> | ||
105 | #include <net/caif/caif_spi.h> | ||
106 | |||
107 | MODULE_LICENSE("GPL"); | ||
108 | |||
109 | struct sspi_struct { | ||
110 | struct cfspi_dev sdev; | ||
111 | struct cfspi_xfer *xfer; | ||
112 | }; | ||
113 | |||
114 | static struct sspi_struct slave; | ||
115 | static struct platform_device slave_device; | ||
116 | |||
117 | static irqreturn_t sspi_irq(int irq, void *arg) | ||
118 | { | ||
119 | /* You only need to trigger on an edge to the active state of the | ||
120 | * SS signal. Once a edge is detected, the ss_cb() function should be | ||
121 | * called with the parameter assert set to true. It is OK | ||
122 | * (and even advised) to call the ss_cb() function in IRQ context in | ||
123 | * order not to add any delay. */ | ||
124 | |||
125 | return IRQ_HANDLED; | ||
126 | } | ||
127 | |||
128 | static void sspi_complete(void *context) | ||
129 | { | ||
130 | /* Normally the DMA or the SPI framework will call you back | ||
131 | * in something similar to this. The only thing you need to | ||
132 | * do is to call the xfer_done_cb() function, providing the pointer | ||
133 | * to the CAIF SPI interface. It is OK to call this function | ||
134 | * from IRQ context. */ | ||
135 | } | ||
136 | |||
137 | static int sspi_init_xfer(struct cfspi_xfer *xfer, struct cfspi_dev *dev) | ||
138 | { | ||
139 | /* Store transfer info. For a normal implementation you should | ||
140 | * set up your DMA here and make sure that you are ready to | ||
141 | * receive the data from the master SPI. */ | ||
142 | |||
143 | struct sspi_struct *sspi = (struct sspi_struct *)dev->priv; | ||
144 | |||
145 | sspi->xfer = xfer; | ||
146 | |||
147 | return 0; | ||
148 | } | ||
149 | |||
150 | void sspi_sig_xfer(bool xfer, struct cfspi_dev *dev) | ||
151 | { | ||
152 | /* If xfer is true then you should assert the SPI_INT to indicate to | ||
153 | * the master that you are ready to recieve the data from the master | ||
154 | * SPI. If xfer is false then you should de-assert SPI_INT to indicate | ||
155 | * that the transfer is done. | ||
156 | */ | ||
157 | |||
158 | struct sspi_struct *sspi = (struct sspi_struct *)dev->priv; | ||
159 | } | ||
160 | |||
161 | static void sspi_release(struct device *dev) | ||
162 | { | ||
163 | /* | ||
164 | * Here you should release your SPI device resources. | ||
165 | */ | ||
166 | } | ||
167 | |||
168 | static int __init sspi_init(void) | ||
169 | { | ||
170 | /* Here you should initialize your SPI device by providing the | ||
171 | * necessary functions, clock speed, name and private data. Once | ||
172 | * done, you can register your device with the | ||
173 | * platform_device_register() function. This function will return | ||
174 | * with the CAIF SPI interface initialized. This is probably also | ||
175 | * the place where you should set up your GPIOs, interrupts and SPI | ||
176 | * resources. */ | ||
177 | |||
178 | int res = 0; | ||
179 | |||
180 | /* Initialize slave device. */ | ||
181 | slave.sdev.init_xfer = sspi_init_xfer; | ||
182 | slave.sdev.sig_xfer = sspi_sig_xfer; | ||
183 | slave.sdev.clk_mhz = 13; | ||
184 | slave.sdev.priv = &slave; | ||
185 | slave.sdev.name = "spi_sspi"; | ||
186 | slave_device.dev.release = sspi_release; | ||
187 | |||
188 | /* Initialize platform device. */ | ||
189 | slave_device.name = "cfspi_sspi"; | ||
190 | slave_device.dev.platform_data = &slave.sdev; | ||
191 | |||
192 | /* Register platform device. */ | ||
193 | res = platform_device_register(&slave_device); | ||
194 | if (res) { | ||
195 | printk(KERN_WARNING "sspi_init: failed to register dev.\n"); | ||
196 | return -ENODEV; | ||
197 | } | ||
198 | |||
199 | return res; | ||
200 | } | ||
201 | |||
202 | static void __exit sspi_exit(void) | ||
203 | { | ||
204 | platform_device_del(&slave_device); | ||
205 | } | ||
206 | |||
207 | module_init(sspi_init); | ||
208 | module_exit(sspi_exit); | ||
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt index d0536b5a4e01..f350c69b2bb4 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt | |||
@@ -903,7 +903,7 @@ arp_ignore - INTEGER | |||
903 | arp_notify - BOOLEAN | 903 | arp_notify - BOOLEAN |
904 | Define mode for notification of address and device changes. | 904 | Define mode for notification of address and device changes. |
905 | 0 - (default): do nothing | 905 | 0 - (default): do nothing |
906 | 1 - Generate gratuitous arp replies when device is brought up | 906 | 1 - Generate gratuitous arp requests when device is brought up |
907 | or hardware address changes. | 907 | or hardware address changes. |
908 | 908 | ||
909 | arp_accept - BOOLEAN | 909 | arp_accept - BOOLEAN |
diff --git a/Documentation/networking/packet_mmap.txt b/Documentation/networking/packet_mmap.txt index 98f71a5cef00..2546aa4dc232 100644 --- a/Documentation/networking/packet_mmap.txt +++ b/Documentation/networking/packet_mmap.txt | |||
@@ -493,6 +493,32 @@ The user can also use poll() to check if a buffer is available: | |||
493 | pfd.events = POLLOUT; | 493 | pfd.events = POLLOUT; |
494 | retval = poll(&pfd, 1, timeout); | 494 | retval = poll(&pfd, 1, timeout); |
495 | 495 | ||
496 | ------------------------------------------------------------------------------- | ||
497 | + PACKET_TIMESTAMP | ||
498 | ------------------------------------------------------------------------------- | ||
499 | |||
500 | The PACKET_TIMESTAMP setting determines the source of the timestamp in | ||
501 | the packet meta information. If your NIC is capable of timestamping | ||
502 | packets in hardware, you can request those hardware timestamps to used. | ||
503 | Note: you may need to enable the generation of hardware timestamps with | ||
504 | SIOCSHWTSTAMP. | ||
505 | |||
506 | PACKET_TIMESTAMP accepts the same integer bit field as | ||
507 | SO_TIMESTAMPING. However, only the SOF_TIMESTAMPING_SYS_HARDWARE | ||
508 | and SOF_TIMESTAMPING_RAW_HARDWARE values are recognized by | ||
509 | PACKET_TIMESTAMP. SOF_TIMESTAMPING_SYS_HARDWARE takes precedence over | ||
510 | SOF_TIMESTAMPING_RAW_HARDWARE if both bits are set. | ||
511 | |||
512 | int req = 0; | ||
513 | req |= SOF_TIMESTAMPING_SYS_HARDWARE; | ||
514 | setsockopt(fd, SOL_PACKET, PACKET_TIMESTAMP, (void *) &req, sizeof(req)) | ||
515 | |||
516 | If PACKET_TIMESTAMP is not set, a software timestamp generated inside | ||
517 | the networking stack is used (the behavior before this setting was added). | ||
518 | |||
519 | See include/linux/net_tstamp.h and Documentation/networking/timestamping | ||
520 | for more information on hardware timestamps. | ||
521 | |||
496 | -------------------------------------------------------------------------------- | 522 | -------------------------------------------------------------------------------- |
497 | + THANKS | 523 | + THANKS |
498 | -------------------------------------------------------------------------------- | 524 | -------------------------------------------------------------------------------- |
diff --git a/Documentation/networking/pktgen.txt b/Documentation/networking/pktgen.txt index 61bb645d50e0..75e4fd708ccb 100644 --- a/Documentation/networking/pktgen.txt +++ b/Documentation/networking/pktgen.txt | |||
@@ -151,6 +151,8 @@ Examples: | |||
151 | 151 | ||
152 | pgset stop aborts injection. Also, ^C aborts generator. | 152 | pgset stop aborts injection. Also, ^C aborts generator. |
153 | 153 | ||
154 | pgset "rate 300M" set rate to 300 Mb/s | ||
155 | pgset "ratep 1000000" set rate to 1Mpps | ||
154 | 156 | ||
155 | Example scripts | 157 | Example scripts |
156 | =============== | 158 | =============== |
@@ -241,6 +243,9 @@ src6 | |||
241 | flows | 243 | flows |
242 | flowlen | 244 | flowlen |
243 | 245 | ||
246 | rate | ||
247 | ratep | ||
248 | |||
244 | References: | 249 | References: |
245 | ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/ | 250 | ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/ |
246 | ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/examples/ | 251 | ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/examples/ |