| Preface |
|
xxi | |
| Acknowledgments |
|
xxvii | |
|
|
|
1 | (48) |
|
|
|
2 | (3) |
|
|
|
3 | (2) |
|
|
|
5 | (1) |
|
Source Code Organization for Linux 2.4.20 |
|
|
5 | (2) |
|
Source Code Organization for Networking Code |
|
|
7 | (1) |
|
TCP/IP Stack and Kernel Control Paths |
|
|
7 | (4) |
|
Linux Kernel Until Version 2.4 Is Non-preemptible |
|
|
11 | (6) |
|
|
|
14 | (2) |
|
|
|
16 | (1) |
|
|
|
17 | (5) |
|
|
|
17 | (1) |
|
|
|
18 | (1) |
|
|
|
19 | (3) |
|
Kernel Synchronization Mechanism |
|
|
22 | (2) |
|
|
|
22 | (1) |
|
|
|
23 | (1) |
|
|
|
23 | (1) |
|
Application Interfaces for TCP/IP Programming |
|
|
24 | (11) |
|
|
|
25 | (2) |
|
|
|
27 | (2) |
|
|
|
29 | (1) |
|
|
|
29 | (6) |
|
|
|
35 | (3) |
|
Kernel Shutdown Implementation |
|
|
36 | (1) |
|
|
|
36 | (1) |
|
|
|
36 | (2) |
|
|
|
38 | (1) |
|
|
|
38 | (1) |
|
|
|
38 | (1) |
|
|
|
38 | (1) |
|
|
|
39 | (1) |
|
|
|
39 | (1) |
|
|
|
39 | (9) |
|
|
|
45 | (2) |
|
Tcpdump Output for Partial Close |
|
|
47 | (1) |
|
|
|
48 | (1) |
|
|
|
49 | (52) |
|
|
|
50 | (4) |
|
|
|
50 | (4) |
|
|
|
54 | (4) |
|
|
|
55 | (1) |
|
|
|
55 | (1) |
|
|
|
56 | (1) |
|
Selective Acknowledgment Option |
|
|
57 | (1) |
|
|
|
58 | (9) |
|
|
|
58 | (9) |
|
|
|
67 | (2) |
|
Nagle's Algorithm (RFC 896) |
|
|
69 | (3) |
|
TCP Sliding Window Protocol |
|
|
72 | (7) |
|
Maximizing TCP Throughput |
|
|
79 | (3) |
|
|
|
82 | (3) |
|
|
|
82 | (1) |
|
|
|
83 | (1) |
|
|
|
84 | (1) |
|
|
|
85 | (1) |
|
|
|
85 | (1) |
|
TCP Performance and Reliability |
|
|
86 | (1) |
|
|
|
86 | (1) |
|
|
|
86 | (1) |
|
|
|
87 | (1) |
|
|
|
87 | (3) |
|
|
|
88 | (2) |
|
|
|
90 | (1) |
|
|
|
90 | (2) |
|
|
|
92 | (1) |
|
|
|
93 | (1) |
|
|
|
93 | (2) |
|
|
|
95 | (2) |
|
|
|
97 | (2) |
|
|
|
99 | (2) |
|
Kernel Implementation of Sockets |
|
|
101 | (20) |
|
|
|
102 | (1) |
|
|
|
103 | (2) |
|
Protocol Socket Registration |
|
|
105 | (2) |
|
|
|
107 | (1) |
|
Socket Organization in the Kernel |
|
|
107 | (1) |
|
|
|
108 | (2) |
|
|
|
110 | (8) |
|
|
|
112 | (6) |
|
Flow Diagram for Socket Call |
|
|
118 | (1) |
|
|
|
118 | (3) |
|
Kernel Implementation of TCP Connection Setup |
|
|
121 | (60) |
|
|
|
122 | (2) |
|
|
|
122 | (2) |
|
|
|
124 | (1) |
|
|
|
124 | (13) |
|
Data Structures Related to Socket BIND |
|
|
125 | (1) |
|
Hash Buckets for tcp Bind |
|
|
125 | (1) |
|
|
|
125 | (1) |
|
|
|
125 | (1) |
|
|
|
125 | (1) |
|
|
|
126 | (3) |
|
|
|
129 | (1) |
|
|
|
129 | (1) |
|
|
|
130 | (1) |
|
|
|
130 | (1) |
|
|
|
130 | (1) |
|
|
|
131 | (1) |
|
|
|
131 | (2) |
|
|
|
133 | (2) |
|
|
|
135 | (2) |
|
|
|
137 | (14) |
|
|
|
138 | (1) |
|
|
|
139 | (1) |
|
|
|
139 | (3) |
|
|
|
142 | (1) |
|
|
|
142 | (5) |
|
|
|
147 | (3) |
|
Established Sockets Linked in tcp_ehash Hash Table |
|
|
150 | (1) |
|
State of the Connection Request when the Three-Way Handshake Is Still Pending |
|
|
150 | (1) |
|
State of the Connection Request when the Three-Way Handshake Is Completed |
|
|
151 | (1) |
|
Connection Request Handling by Kernel |
|
|
151 | (5) |
|
|
|
155 | (1) |
|
|
|
155 | (1) |
|
Flow Control for Handling a New Connection Request |
|
|
156 | (1) |
|
|
|
156 | (7) |
|
|
|
159 | (2) |
|
Linking of Inode and Socket Data Structures when the Three-Way Handshake Has Completed and Is Accepted by Application |
|
|
161 | (1) |
|
Linking of VFS and Socket Data Structures in the Kernel when a New Connection Is Established |
|
|
162 | (1) |
|
File Table Entry of a New Accepted Connected Socket |
|
|
162 | (1) |
|
Flow Control for Accepting New Established Connections |
|
|
162 | (1) |
|
|
|
163 | (15) |
|
|
|
164 | (1) |
|
|
|
164 | (3) |
|
|
|
167 | (1) |
|
|
|
167 | (1) |
|
Flow Control for Generating a Connection Request |
|
|
167 | (3) |
|
|
|
170 | (1) |
|
___tcp_v4_check_established() |
|
|
171 | (3) |
|
|
|
174 | (2) |
|
|
|
176 | (2) |
|
|
|
178 | (3) |
|
sk_buff and Protocol Headers |
|
|
181 | (24) |
|
|
|
182 | (4) |
|
|
|
186 | (1) |
|
sk_buff and DMA---SKB_FRAG_Struct |
|
|
187 | (3) |
|
DMA and Fragmented sk_buff Containing Paged Data |
|
|
188 | (1) |
|
sk_buff and IP Fragmentation |
|
|
188 | (2) |
|
sk_buff and Fragmentation |
|
|
190 | (1) |
|
Routines Operating on sk_buff |
|
|
190 | (6) |
|
|
|
190 | (1) |
|
|
|
191 | (1) |
|
|
|
192 | (2) |
|
|
|
194 | (1) |
|
|
|
195 | (1) |
|
sk_buff Builds Protocol Headers as It Traverses Down the Protocol Layers |
|
|
196 | (3) |
|
Tcp Header Is Added to sk_buff |
|
|
196 | (1) |
|
Ip Header Is Added to sk_buff |
|
|
197 | (1) |
|
Link Layer Header Is Added to sk_buff |
|
|
198 | (1) |
|
sk_buff Extracts Protocol Headers as It Traverses Up the Protocol Layers When a Packet Arrives |
|
|
199 | (3) |
|
sk_buff Is Made to Point to a Datalink Layer Header Which Will Be Processed by a Dalalink Driver |
|
|
199 | (1) |
|
sk_buff Is Made to Point to an ip Layer Header Which Will Be Processed by an IP Layer |
|
|
200 | (1) |
|
sk_buff Is Made to Point to a tcp Layer Header Which Will Be Processed by a tcp Layer |
|
|
200 | (2) |
|
|
|
202 | (3) |
|
Movement of sk_buff Across Protocol Layers |
|
|
205 | (26) |
|
Packet Traversing Down the TCP/IP Stack |
|
|
206 | (8) |
|
Path of Packet Traversal from Socket Layer to Device for Transmission |
|
|
207 | (1) |
|
Kernel Path for TCP Packet Traversing Down the Stack |
|
|
208 | (6) |
|
Routed Packet Ready for Transmission |
|
|
214 | (1) |
|
Kernel Flow for a Packet Moving Down the Stack |
|
|
214 | (1) |
|
Packet Traversing Up the TCP/IP Stack |
|
|
214 | (11) |
|
Path of Packet Traversal from Device (Reception) to Socket Layer |
|
|
219 | (1) |
|
Kernel Path for TCP Packet Traversing Up the Stack |
|
|
219 | (6) |
|
Kernel Flow for a Packet Moving Up the Stack |
|
|
225 | (1) |
|
|
|
225 | (6) |
|
|
|
231 | (24) |
|
TCP Segmentation Unit for Sending Data |
|
|
232 | (3) |
|
Functioning of Segmentation Unit without Scatter-Gather Support |
|
|
232 | (2) |
|
Segmentation without Scatter-Gather Support |
|
|
234 | (1) |
|
1 mss of Data Written over the Socket |
|
|
235 | (1) |
|
Segmentation with Scatter-Gather Technique |
|
|
235 | (14) |
|
Segmentation with Scatter-Gather Support |
|
|
239 | (1) |
|
Application Writes Y Bytes over the Socket |
|
|
239 | (1) |
|
|
|
239 | (1) |
|
|
|
240 | (1) |
|
|
|
241 | (1) |
|
|
|
241 | (1) |
|
|
|
242 | (1) |
|
___tcp_push_pending_frames() |
|
|
243 | (1) |
|
|
|
243 | (1) |
|
|
|
244 | (1) |
|
|
|
245 | (1) |
|
|
|
245 | (2) |
|
|
|
247 | (1) |
|
|
|
247 | (1) |
|
|
|
248 | (1) |
|
|
|
249 | (1) |
|
Flow for TCP Segmentation Unit and Send Process |
|
|
250 | (1) |
|
Functional Level Flow for Segmentation and Send Mechanism |
|
|
250 | (1) |
|
|
|
251 | (4) |
|
|
|
255 | (36) |
|
|
|
256 | (11) |
|
Processing in tcp_rcv_established() |
|
|
256 | (2) |
|
|
|
258 | (1) |
|
|
|
259 | (4) |
|
|
|
263 | (1) |
|
|
|
264 | (1) |
|
|
|
265 | (1) |
|
|
|
265 | (1) |
|
|
|
266 | (1) |
|
|
|
266 | (1) |
|
Processing of TCP Data from the Receive Queue |
|
|
267 | (9) |
|
|
|
268 | (3) |
|
skb_copy_datagram_iovec() |
|
|
271 | (2) |
|
Reading Data from Receive Buffer without Paged Data Area |
|
|
273 | (1) |
|
X Bytes Requested from the Application |
|
|
273 | (2) |
|
1 mss = n Bytes Requested from the Application |
|
|
275 | (1) |
|
n - X Bytes Requested from the Application |
|
|
275 | (1) |
|
Consumption of Data from a Paged Buffer |
|
|
275 | (1) |
|
N Bytes Requested by the Application |
|
|
276 | (1) |
|
One Page of Data Requested by the Application |
|
|
276 | (1) |
|
TCP Urgent Byte Processing |
|
|
276 | (8) |
|
Urgent Byte Read as OOB Data |
|
|
277 | (1) |
|
|
|
278 | (2) |
|
Urgent Mode Processing and Reading an Urgent Byte as Inline Data |
|
|
280 | (4) |
|
Data Flow Diagram for Receiving Data over the TCP Socket |
|
|
284 | (6) |
|
|
|
290 | (1) |
|
|
|
291 | (32) |
|
Transmit Side TCP Memory Management |
|
|
291 | (14) |
|
|
|
294 | (1) |
|
|
|
295 | (1) |
|
|
|
296 | (1) |
|
|
|
297 | (1) |
|
|
|
298 | (1) |
|
|
|
298 | (2) |
|
|
|
300 | (1) |
|
|
|
300 | (1) |
|
|
|
301 | (1) |
|
|
|
302 | (1) |
|
|
|
302 | (1) |
|
|
|
303 | (2) |
|
Receive Side TCP Memory Management |
|
|
305 | (14) |
|
|
|
308 | (1) |
|
|
|
309 | (2) |
|
|
|
311 | (1) |
|
|
|
312 | (5) |
|
|
|
317 | (2) |
|
Freeing of Memory Allocated to a Receive Buffer |
|
|
319 | (1) |
|
System-Wide Control Parameters Are Worth Noticing When It Comes to TCP Memory Management |
|
|
319 | (2) |
|
|
|
321 | (2) |
|
|
|
323 | (54) |
|
|
|
324 | (2) |
|
|
|
324 | (1) |
|
|
|
325 | (1) |
|
|
|
325 | (1) |
|
When Are Timer Routines Executed? |
|
|
326 | (1) |
|
|
|
326 | (10) |
|
When Do We Set Retransmit Timer? |
|
|
327 | (1) |
|
When Do We Reset or Cancel Retransmit Timers? |
|
|
327 | (3) |
|
|
|
330 | (3) |
|
|
|
333 | (1) |
|
tcp_retrans_try_collapse() |
|
|
334 | (2) |
|
|
|
336 | (1) |
|
|
|
336 | (6) |
|
When Is the First Time Probe Timer Installed? |
|
|
337 | (1) |
|
When Is the Probe Timer Canceled for the Connection? |
|
|
337 | (1) |
|
|
|
338 | (1) |
|
How Does the Window Probe Timer Work? |
|
|
338 | (1) |
|
|
|
339 | (1) |
|
|
|
339 | (1) |
|
|
|
339 | (3) |
|
|
|
342 | (11) |
|
When Is the ACK Scheduled? |
|
|
344 | (1) |
|
How and When Is the ACK Segment Sent? |
|
|
344 | (1) |
|
|
|
345 | (1) |
|
|
|
345 | (1) |
|
|
|
346 | (1) |
|
|
|
347 | (1) |
|
|
|
348 | (1) |
|
|
|
349 | (2) |
|
|
|
351 | (1) |
|
|
|
352 | (1) |
|
|
|
353 | (3) |
|
When Is the Keepalive Timer Activated? |
|
|
353 | (1) |
|
|
|
354 | (1) |
|
|
|
354 | (2) |
|
|
|
356 | (5) |
|
When Is the SYN-ACK Timer Activated? |
|
|
356 | (1) |
|
When Is the SYN-ACK Timer Stopped? |
|
|
357 | (1) |
|
|
|
357 | (4) |
|
|
|
361 | (14) |
|
When Do We Trigger Time_Wait Timer? |
|
|
361 | (1) |
|
|
|
362 | (1) |
|
|
|
362 | (1) |
|
|
|
363 | (2) |
|
|
|
365 | (2) |
|
|
|
367 | (3) |
|
|
|
370 | (4) |
|
|
|
374 | (1) |
|
|
|
375 | (2) |
|
|
|
377 | (68) |
|
TCP Incoming Segment Processing |
|
|
378 | (6) |
|
|
|
378 | (1) |
|
Building Prediction Flags |
|
|
379 | (1) |
|
Condition to Enable the Fast Path |
|
|
380 | (2) |
|
When to Enable the Slow Path |
|
|
382 | (1) |
|
When to Enable the Fast Path |
|
|
382 | (1) |
|
Points to Remember about Prediction Flags |
|
|
383 | (1) |
|
|
|
384 | (2) |
|
|
|
386 | (14) |
|
|
|
387 | (1) |
|
|
|
387 | (3) |
|
|
|
390 | (1) |
|
|
|
391 | (1) |
|
|
|
392 | (1) |
|
|
|
393 | (1) |
|
How Do We Calculate Window to Be Advertised? |
|
|
394 | (1) |
|
|
|
395 | (1) |
|
|
|
395 | (2) |
|
|
|
397 | (1) |
|
|
|
397 | (1) |
|
|
|
398 | (1) |
|
|
|
398 | (2) |
|
Processing of Incoming ACK |
|
|
400 | (10) |
|
|
|
403 | (1) |
|
|
|
404 | (1) |
|
|
|
405 | (1) |
|
|
|
406 | (1) |
|
|
|
407 | (1) |
|
|
|
408 | (2) |
|
Processing of SACK blocks |
|
|
410 | (7) |
|
tcp_sacktag_write_queue() |
|
|
410 | (7) |
|
|
|
417 | (4) |
|
Processing TCP Urgent Pointer |
|
|
421 | (3) |
|
|
|
422 | (2) |
|
Processing Data Segments in Slow Path |
|
|
424 | (18) |
|
|
|
433 | (1) |
|
tcp_sack_maybe_coalesce() |
|
|
434 | (1) |
|
|
|
435 | (1) |
|
|
|
436 | (5) |
|
|
|
441 | (1) |
|
Overview of Core TCP Processing |
|
|
442 | (1) |
|
|
|
442 | (3) |
|
|
|
445 | (34) |
|
Overview of State Processing |
|
|
446 | (2) |
|
|
|
448 | (1) |
|
|
|
449 | (1) |
|
|
|
449 | (1) |
|
Processing of Duplicate/Partial ACKs in Recovery State |
|
|
449 | (3) |
|
|
|
450 | (1) |
|
|
|
451 | (1) |
|
Processing of Duplicate/Partial ACKs in Loss State |
|
|
452 | (4) |
|
|
|
453 | (2) |
|
tcp_check_sack_reneging() |
|
|
455 | (1) |
|
Default Processing of TCP States |
|
|
456 | (11) |
|
|
|
459 | (1) |
|
|
|
460 | (1) |
|
|
|
461 | (1) |
|
|
|
462 | (2) |
|
tcp_xmit_retransmit_queue() |
|
|
464 | (2) |
|
|
|
466 | (1) |
|
Processing of TCP Non-open States when ACKed Beyond tp → high_seq |
|
|
467 | (10) |
|
|
|
467 | (1) |
|
|
|
468 | (2) |
|
|
|
470 | (1) |
|
|
|
471 | (1) |
|
|
|
471 | (1) |
|
|
|
472 | (1) |
|
tcp_check_reno_reordering() |
|
|
473 | (1) |
|
|
|
473 | (1) |
|
|
|
474 | (1) |
|
|
|
475 | (1) |
|
|
|
475 | (2) |
|
|
|
477 | (1) |
|
|
|
477 | (2) |
|
|
|
479 | (20) |
|
Introduction to Netlink Sockets |
|
|
479 | (1) |
|
Netlink Socket Registration and Initialization at Boot Time |
|
|
480 | (1) |
|
How Is the Kernel Netlink Socket Created? |
|
|
481 | (1) |
|
How Is the User Netlink Socket Created? |
|
|
482 | (3) |
|
|
|
485 | (3) |
|
|
|
485 | (1) |
|
|
|
486 | (2) |
|
Other Important Data Strutures |
|
|
488 | (2) |
|
|
|
488 | (1) |
|
|
|
489 | (1) |
|
|
|
490 | (1) |
|
Netlink Socket Example---tc Command for Adding a qdisc |
|
|
490 | (6) |
|
Tc Command Flow in User Space for Adding a qdisc |
|
|
490 | (1) |
|
Tc Command in Kernel Space |
|
|
491 | (1) |
|
|
|
491 | (1) |
|
|
|
492 | (1) |
|
|
|
492 | (1) |
|
|
|
493 | (1) |
|
|
|
494 | (1) |
|
|
|
494 | (1) |
|
|
|
494 | (1) |
|
|
|
495 | (1) |
|
Flow Diagram for tc Command in Kernel Space |
|
|
496 | (1) |
|
|
|
496 | (3) |
|
|
|
499 | (92) |
|
|
|
501 | (2) |
|
|
|
503 | (2) |
|
|
|
505 | (4) |
|
Record Route Options (RFC 791) and Processing by Linux Stack |
|
|
509 | (1) |
|
|
|
510 | (1) |
|
|
|
510 | (7) |
|
|
|
510 | (1) |
|
|
|
511 | (1) |
|
SRR Processing Implementation |
|
|
511 | (6) |
|
Linux Kernel Implementation of Routing Table and Caches |
|
|
517 | (1) |
|
Routing Cache Implementation Overview |
|
|
517 | (6) |
|
Routing Cache Data Structures |
|
|
519 | (4) |
|
|
|
523 | (17) |
|
Routing Cache for Local Connections |
|
|
525 | (1) |
|
|
|
526 | (1) |
|
Link Failure and Reporting to Routing Subsystem |
|
|
527 | (1) |
|
|
|
527 | (1) |
|
|
|
527 | (1) |
|
|
|
528 | (1) |
|
Routing Cache for the Incoming Packets |
|
|
529 | (1) |
|
|
|
530 | (1) |
|
|
|
530 | (3) |
|
|
|
533 | (1) |
|
|
|
534 | (1) |
|
|
|
535 | (1) |
|
|
|
535 | (1) |
|
|
|
536 | (1) |
|
Interface down and rt_flush_timer |
|
|
537 | (1) |
|
|
|
538 | (2) |
|
Implementation Overview of Forwarding Information Base (FIB) |
|
|
540 | (9) |
|
|
|
540 | (3) |
|
|
|
543 | (1) |
|
|
|
543 | (1) |
|
|
|
544 | (2) |
|
|
|
546 | (1) |
|
|
|
547 | (1) |
|
|
|
548 | (1) |
|
Adding New Entry in Routing Table Using ip Command (RT Netlink Interface) |
|
|
549 | (9) |
|
What Happens When the ip Command Is Run with a Route Option for Adding an Entry in Routing Table? |
|
|
550 | (1) |
|
|
|
550 | (1) |
|
|
|
551 | (1) |
|
|
|
552 | (1) |
|
|
|
553 | (1) |
|
|
|
554 | (3) |
|
|
|
557 | (1) |
|
|
|
558 | (1) |
|
What Happens When the ip Command Is Run with a Rule Option for Adding an Entry in the Routing Table? |
|
|
558 | (5) |
|
|
|
559 | (2) |
|
|
|
561 | (2) |
|
FIB Traversal Flow Diagram |
|
|
563 | (26) |
|
|
|
563 | (1) |
|
|
|
564 | (2) |
|
|
|
566 | (10) |
|
|
|
576 | (1) |
|
|
|
577 | (1) |
|
|
|
578 | (2) |
|
|
|
580 | (1) |
|
|
|
581 | (8) |
|
|
|
589 | (2) |
|
IP Quality of Service in Linux (IP QoS) |
|
|
591 | (44) |
|
|
|
591 | (1) |
|
Basic Components of Linux Traffic Control |
|
|
592 | (1) |
|
Linux Implementation of pfifo_fast qdisc |
|
|
593 | (3) |
|
Queueing Discipline Data Structure |
|
|
596 | (5) |
|
|
|
596 | (1) |
|
|
|
597 | (1) |
|
|
|
598 | (1) |
|
|
|
599 | (2) |
|
Tc User Program and Kernel Implementation Details |
|
|
601 | (4) |
|
|
|
601 | (1) |
|
|
|
602 | (2) |
|
|
|
604 | (1) |
|
|
|
604 | (1) |
|
|
|
605 | (1) |
|
The tc Commands for Creating Class Hierarchy for CBQ |
|
|
605 | (5) |
|
|
|
607 | (1) |
|
|
|
607 | (3) |
|
|
|
610 | (4) |
|
|
|
611 | (3) |
|
u32 Filter Implementation |
|
|
614 | (2) |
|
|
|
615 | (1) |
|
Route Filter Implementation |
|
|
616 | (3) |
|
|
|
618 | (1) |
|
|
|
619 | (3) |
|
|
|
620 | (1) |
|
|
|
621 | (1) |
|
Overview of cbq_enqueue() |
|
|
621 | (1) |
|
Overview of Linux Implementation of CBQ |
|
|
622 | (1) |
|
|
|
622 | (11) |
|
|
|
626 | (1) |
|
|
|
626 | (1) |
|
|
|
626 | (1) |
|
|
|
627 | (2) |
|
|
|
629 | (1) |
|
|
|
630 | (3) |
|
|
|
633 | (2) |
|
|
|
635 | (36) |
|
|
|
636 | (2) |
|
Netfilter Hooks on IP Stack |
|
|
638 | (2) |
|
Hooks for Outgoing Packets |
|
|
638 | (1) |
|
Hooks for Incoming Packets |
|
|
639 | (1) |
|
Overview of Netfilter Hooks on Linux TCP-IP Stack |
|
|
640 | (1) |
|
Registration of Netfilter Hooks |
|
|
640 | (2) |
|
Processing of Netfilter Hooks |
|
|
642 | (2) |
|
|
|
642 | (1) |
|
|
|
643 | (1) |
|
|
|
644 | (1) |
|
|
|
644 | (3) |
|
|
|
645 | (2) |
|
|
|
647 | (6) |
|
|
|
648 | (1) |
|
|
|
649 | (1) |
|
|
|
649 | (1) |
|
|
|
650 | (1) |
|
|
|
651 | (1) |
|
|
|
651 | (1) |
|
Organization of Tables in Ipchains |
|
|
652 | (1) |
|
How Is the Packet Filtered with Ipchains |
|
|
653 | (2) |
|
|
|
653 | (2) |
|
|
|
655 | (1) |
|
|
|
655 | (2) |
|
Registration of Iptables Hooks |
|
|
657 | (1) |
|
Iptables Filter Rules and Target Organization |
|
|
657 | (7) |
|
|
|
658 | (1) |
|
|
|
658 | (3) |
|
|
|
661 | (1) |
|
|
|
662 | (1) |
|
|
|
663 | (1) |
|
|
|
664 | (1) |
|
struct ipt_standard_target |
|
|
664 | (1) |
|
Organization of Filter Rules and Target for Iptables |
|
|
664 | (1) |
|
Filtering Packets with Iptables |
|
|
664 | (4) |
|
|
|
664 | (4) |
|
|
|
668 | (1) |
|
|
|
668 | (3) |
|
|
|
671 | (26) |
|
Why Net SoftIRQs, and How Do We Raise Them? |
|
|
672 | (3) |
|
|
|
672 | (1) |
|
|
|
672 | (3) |
|
How Are SoftIRQs Are Processed, and When? |
|
|
675 | (3) |
|
|
|
678 | (1) |
|
Packet Reception and Delayed Processing by Rx SoftIRQ |
|
|
679 | (3) |
|
Processing of Net Rx SoftIRQ |
|
|
682 | (4) |
|
Packet Transmission and SoftIRQ |
|
|
686 | (10) |
|
|
|
696 | (1) |
|
Transmission and Reception of Packets |
|
|
697 | (26) |
|
DMA Ring Buffers for Transmission and Reception of Packets |
|
|
698 | (1) |
|
|
|
698 | (2) |
|
Flow of Packet Reception with DMA |
|
|
698 | (1) |
|
|
|
698 | (2) |
|
Packet Transmission Process |
|
|
700 | (4) |
|
Flow of Packet Transmission with DMA |
|
|
702 | (1) |
|
|
|
702 | (1) |
|
|
|
703 | (1) |
|
Implementation of Reception and Transmission of Packets |
|
|
704 | (5) |
|
|
|
705 | (1) |
|
|
|
706 | (1) |
|
|
|
707 | (1) |
|
Initialization of DMA Transmit Ring Buffers |
|
|
707 | (2) |
|
Initialization of DMA Receive Ring Buffers |
|
|
709 | (1) |
|
Rx Interrupt for Reception of Packets |
|
|
709 | (4) |
|
Rx DMA Buffer Initialized |
|
|
711 | (1) |
|
|
|
711 | (2) |
|
Rx Descriptors After Reception of Three Packets in DMA Buffer Before Rx Interrupt Being Raised |
|
|
713 | (1) |
|
Rx Descriptors After First Packet Is Pulled Out of DMA Buffer and Given to OS in Rx Interrupt Handler |
|
|
713 | (1) |
|
|
|
713 | (8) |
|
|
|
713 | (4) |
|
Tx DMA Ring Buffer Descriptor After Initialization |
|
|
717 | (1) |
|
e100_hardware_send_packet() |
|
|
717 | (1) |
|
There Are Two Packets in Device's DMA Tx Ring Buffer to Be Transmitted |
|
|
717 | (3) |
|
|
|
720 | (1) |
|
First Packet from the DMA Queue Is Transmitted and Second One Is yet to Be Transmitted; After Interrupt Is Generated, Transmitted Buffer Is Freed |
|
|
721 | (1) |
|
|
|
721 | (2) |
|
lkcd and Debugging TCP/IP Stack |
|
|
723 | (36) |
|
|
|
724 | (1) |
|
|
|
724 | (2) |
|
Looking into the Receive Socket Buffer |
|
|
726 | (1) |
|
Route Information in sk_buff |
|
|
727 | (1) |
|
Peep into Send Socket Buffer |
|
|
727 | (2) |
|
|
|
729 | (1) |
|
Send Congestion Window and ssthresh |
|
|
730 | (3) |
|
Retransmissions and Route |
|
|
733 | (1) |
|
Peeping into Connection Queues and SYN Queues |
|
|
733 | (2) |
|
Routing and IP Qos lcrash Steps |
|
|
735 | (4) |
|
Lcrash Steps for Default Queueing Discipline in Linux (pfifo_fast) |
|
|
735 | (4) |
|
CBQ (Class-Based) Queueing Discipline lcrash Steps |
|
|
739 | (1) |
|
|
|
739 | (4) |
|
|
|
743 | (2) |
|
FIB Table lcrash Output for Setting Up the Realm Using ip Command |
|
|
745 | (4) |
|
Lcrash Output for Setting Up Route Filter Using tc Command |
|
|
749 | (6) |
|
|
|
755 | (2) |
|
|
|
755 | (1) |
|
|
|
755 | (2) |
|
|
|
757 | (2) |
|
|
|
759 | (4) |
| Bibliography |
|
763 | (2) |
| Index |
|
765 | |