Muutke küpsiste eelistusi

E-raamat: TCP/IP Architecture, Design, and Implementation in Linux [Wiley Online]

  • Formaat: 800 pages
  • Sari: Practitioners
  • Ilmumisaeg: 30-Dec-2008
  • Kirjastus: John Wiley & Sons Inc
  • ISBN-10: 470377836
  • ISBN-13: 9780470377833
  • Wiley Online
  • Hind: 141,68 €*
  • * hind, mis tagab piiramatu üheaegsete kasutajate arvuga ligipääsu piiramatuks ajaks
  • Formaat: 800 pages
  • Sari: Practitioners
  • Ilmumisaeg: 30-Dec-2008
  • Kirjastus: John Wiley & Sons Inc
  • ISBN-10: 470377836
  • ISBN-13: 9780470377833
This book describes the design and implementation of TCP/IP in Linux, from simple client-sever socket applications to more complex executions. It explains the different aspects of socket programming and major TCP/IP-related algorithms, covering Linux kernel and TCP/IP application interfaces, Linux implementation of network packet, TCP socket timers and memory management, netlink sockets, the netfilter framework, softIRQ implementation for scalability, and debugging the TCP/IP stack. Important routines are explained line-by-line, and code snippets are provided. B&w diagrams aid in visualizing complex data structures and scenarios. Chapter outlines and summaries are included. The audience for the book includes embedded-network product developers, network security product developers, IT network architects, researchers, and graduate students. Seth is an engineer in the private sector. Annotation ©2009 Book News, Inc., Portland, OR (booknews.com)

This book provides thorough knowledge of Linux TCP/IP stack and kernel framework for its network stack, including complete knowledge of design and implementation. Starting with simple client-server socket programs and progressing to complex design and implementation of TCP/IP protocol in linux, this book provides different aspects of socket programming and major TCP/IP related algorithms. In addition, the text features netfilter hook framework, a complete explanation of routing sub-system, IP QOS implementation, and Network Soft IRQ. This book further contains elements on TCP state machine implementation,TCP timer implementation on Linux, TCP memory management on Linux, and debugging TCP/IP stack using lcrash
Preface xxi
Acknowledgments xxvii
Introduction
1(48)
Overview of TCP/IP Stack
2(3)
Moving Down the Stack
3(2)
Moving Up the Stack
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)
System Call on Linux
14(2)
Adding New System Call
16(1)
Linux Process and Thread
17(5)
fork()
17(1)
Thread
18(1)
Kernel Threads
19(3)
Kernel Synchronization Mechanism
22(2)
Semaphore
22(1)
Atomic Operations
23(1)
Spin Lock
23(1)
Application Interfaces for TCP/IP Programming
24(11)
Server Application
25(2)
Client Application
27(2)
Socket Options
29(1)
Option Values
29(6)
Shutdown
35(3)
Kernel Shutdown Implementation
36(1)
Send Shutdown
36(1)
Receive Shutdown
36(2)
I/O
38(1)
read()
38(1)
write()
38(1)
recv()
38(1)
send()
39(1)
select()
39(1)
TCP State
39(9)
Partial Close
45(2)
Tcpdump Output for Partial Close
47(1)
Summary
48(1)
Protocol Fundamentals
49(52)
TCP
50(4)
TCP Header
50(4)
TCP Options (RFC 1323)
54(4)
Mss Option
55(1)
Window-Scaling Option
55(1)
Timestamp Option
56(1)
Selective Acknowledgment Option
57(1)
TCP Data Flow
58(9)
ACKing of Data Segments
58(9)
Delayed Acknowledgment
67(2)
Nagle's Algorithm (RFC 896)
69(3)
TCP Sliding Window Protocol
72(7)
Maximizing TCP Throughput
79(3)
TCP Timers
82(3)
Retransmission Timer
82(1)
Persistent Timer
83(1)
Keepalive Timer
84(1)
Time-Wait Timer
85(1)
TCP Congestion Control
85(1)
TCP Performance and Reliability
86(1)
RTTD
86(1)
SACK/DSACK
86(1)
Window Scaling
87(1)
IP (Internet Protocol)
87(3)
IP Header
88(2)
Routing
90(1)
netstat
90(2)
traceroute
92(1)
Traceroute Mechanism
93(1)
ICMP
93(2)
ping
95(2)
ARP/RARP
97(2)
Summary
99(2)
Kernel Implementation of Sockets
101(20)
Socket Layer
102(1)
VFS and Socket
103(2)
Protocol Socket Registration
105(2)
struct inet_protosw
107(1)
Socket Organization in the Kernel
107(1)
Socket
108(2)
inet_create
110(8)
Sock
112(6)
Flow Diagram for Socket Call
118(1)
Summary
118(3)
Kernel Implementation of TCP Connection Setup
121(60)
Connection Setup
122(2)
Server Side Setup
122(2)
Server Side Operations
124(1)
Bind
124(13)
Data Structures Related to Socket BIND
125(1)
Hash Buckets for tcp Bind
125(1)
tcp_ehash
125(1)
tcp_listening_hash
125(1)
tcp_bhash
125(1)
tcp_hashinfo
126(3)
tcp_bind_hashbucket
129(1)
tcp_bind_bucket
129(1)
bind()
130(1)
sys_bind()
130(1)
sockfd_lookup()
130(1)
fget()
131(1)
inet_bind()
131(2)
tcp_v4_get_port()
133(2)
tcp_bind_conflict()
135(2)
Listen
137(14)
sys_listen()
138(1)
inet_listen()
139(1)
tcp_listen_start()
139(3)
Listen Flow
142(1)
struct open_request
142(5)
Accept Queue Is Full
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)
SYN Queue Processing
155(1)
Accept Queue Processing
155(1)
Flow Control for Handling a New Connection Request
156(1)
Accept
156(7)
inet_accept()
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)
Client Side Setup
163(15)
Client Side Operations
164(1)
Connect
164(3)
tcp_v4_connect()
167(1)
ip_route_connect()
167(1)
Flow Control for Generating a Connection Request
167(3)
tcp_v4_hash_connect()
170(1)
___tcp_v4_check_established()
171(3)
tcp_connect()
174(2)
tcp_transmit_skb()
176(2)
Summary
178(3)
sk_buff and Protocol Headers
181(24)
struct sk_buff
182(4)
struct skb_shared_info
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)
alloc_skb()
190(1)
skb_reserve()
191(1)
skb_put()
192(2)
skb_push()
194(1)
skb_pull()
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)
Summary
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)
Summary
225(6)
TCP Send
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)
can_coalesce()
239(1)
tcp_copy_to_page()
240(1)
tcp_mark_push()
241(1)
forced_push()
241(1)
tcp_push()
242(1)
___tcp_push_pending_frames()
243(1)
tcp_snd_test()
243(1)
tcp_nagle_check()
244(1)
tcp_minshall_ckeck()
245(1)
tcp_write_xmit()
245(2)
update_send_head()
247(1)
tcp_push_one()
247(1)
skb_entail()
248(1)
Sending OOB Data
249(1)
Flow for TCP Segmentation Unit and Send Process
250(1)
Functional Level Flow for Segmentation and Send Mechanism
250(1)
Summary
251(4)
TCP Receive
255(36)
Queuing Mechanism
256(11)
Processing in tcp_rcv_established()
256(2)
tcp_prequeue()
258(1)
Processing of Queues
259(4)
tcp_data_wait()
263(1)
tcp_prequeue_process()
264(1)
lock_sock()
265(1)
___lock_sock()
265(1)
release_sock()
266(1)
___release_sock()
266(1)
Processing of TCP Data from the Receive Queue
267(9)
cleanup_rbuf()
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)
tcp_recv_urg()
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)
Summary
290(1)
TCP Memory Management
291(32)
Transmit Side TCP Memory Management
291(14)
select_size()
294(1)
tcp_alloc_pskb()
295(1)
alloc_skb()
296(1)
tcp_alloc_page()
297(1)
skb_charge()
298(1)
tcp_mem_schedule()
298(2)
tcp_free_skb()
300(1)
sock_wfree()
300(1)
tcp_write_space()
301(1)
tcp_mem_reclaim()
302(1)
___tcp_mem_reclaim()
302(1)
wait_for_tcp_memory()
303(2)
Receive Side TCP Memory Management
305(14)
tcp_prune_queue()
308(1)
tcp_clamp_window()
309(2)
tcp_collapse_ofo_queue()
311(1)
tcp_collapse()
312(5)
___skb_queue_purge()
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)
Summary
321(2)
TCP Timers
323(54)
Timers in Linux
324(2)
mod_timer()
324(1)
detach_timer()
325(1)
del_timer()
325(1)
When Are Timer Routines Executed?
326(1)
TCP Retransmit Timer
326(10)
When Do We Set Retransmit Timer?
327(1)
When Do We Reset or Cancel Retransmit Timers?
327(3)
tcp_enter_loss()
330(3)
tcp_retransmit_skb()
333(1)
tcp_retrans_try_collapse()
334(2)
skb_cloned()
336(1)
Zero Window Probe Timer
336(6)
When Is the First Time Probe Timer Installed?
337(1)
When Is the Probe Timer Canceled for the Connection?
337(1)
tcp_ack_probe()
338(1)
How Does the Window Probe Timer Work?
338(1)
tcp_probe_timer()
339(1)
tcp_send_probe0()
339(1)
tcp_write_wakeup()
339(3)
Delay ACK Timer
342(11)
When Is the ACK Scheduled?
344(1)
How and When Is the ACK Segment Sent?
344(1)
Quick ACK Mode
345(1)
___tcp_ack_snd_check()
345(1)
tcp_ack_snd_check()
346(1)
tcp_send_delayed_ack()
347(1)
tcp_delack_timer()
348(1)
tcp_reset_xmit_timer()
349(2)
tcp_write_timer()
351(1)
tcp_clear_xmit_timer()
352(1)
Keepalive Timer
353(3)
When Is the Keepalive Timer Activated?
353(1)
How Is the Timer Reset?
354(1)
tcp_keepalive_timer()
354(2)
SYN-ACK Timer
356(5)
When Is the SYN-ACK Timer Activated?
356(1)
When Is the SYN-ACK Timer Stopped?
357(1)
tcp_synack_timer()
357(4)
Time_Wait Timer
361(14)
When Do We Trigger Time_Wait Timer?
361(1)
tcp_time_wait()
362(1)
tcp_tw_schedule()
362(1)
Non-recycle Mode
363(2)
Recycle Mode
365(2)
tcp_twkill()
367(3)
tcp_twcal_tick()
370(4)
___tcp_tw_hashdance()
374(1)
Summary
375(2)
TCP Core Processing
377(68)
TCP Incoming Segment Processing
378(6)
Prediction Flags
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)
Fast Path Processing
384(2)
Slow Path Processing
386(14)
tcp_sequence()
387(1)
tcp_replace_ts_recent()
387(3)
tcp_event_data_recv()
390(1)
tcp_incr_quickack()
391(1)
tcp_grow_window()
392(1)
___tcp_grow_window()
393(1)
How Do We Calculate Window to Be Advertised?
394(1)
tcp_receive_window()
395(1)
___tcp_select_window()
395(2)
tcp_space()
397(1)
tcp_data_snd_check()
397(1)
___tcp_data_snd_check()
398(1)
tcp_paws_discard()
398(2)
Processing of Incoming ACK
400(10)
tcp-packets_in_flight()
403(1)
tcp_ack_is_dubious()
404(1)
tcp_cong_avoid()
405(1)
tcp_ack_update_window()
406(1)
tcp_may_update_window()
407(1)
tcp_clean_rtx_queue()
408(2)
Processing of SACK blocks
410(7)
tcp_sacktag_write_queue()
410(7)
Reordering Length
417(4)
Processing TCP Urgent Pointer
421(3)
tcp_check_urg()
422(2)
Processing Data Segments in Slow Path
424(18)
tcp_sack_new_ofo_skb()
433(1)
tcp_sack_maybe_coalesce()
434(1)
tcp_sack_extend()
435(1)
tcp_ofo_queue()
436(5)
tcp_sack_remove()
441(1)
Overview of Core TCP Processing
442(1)
Summary
442(3)
TCP State Processing
445(34)
Overview of State Processing
446(2)
TCP States
448(1)
TCP_CA_CWR
449(1)
Undoing from TCP_CA_CWR
449(1)
Processing of Duplicate/Partial ACKs in Recovery State
449(3)
tcp_remove_reno_sacks()
450(1)
tcp_try_undo_partial()
451(1)
Processing of Duplicate/Partial ACKs in Loss State
452(4)
tcp_try_undo_loss()
453(2)
tcp_check_sack_reneging()
455(1)
Default Processing of TCP States
456(11)
tcp_time_to_recover()
459(1)
tcp_head_timedout()
460(1)
tcp_try_to_open()
461(1)
tcp_update_scoreboard()
462(2)
tcp_xmit_retransmit_queue()
464(2)
tcp_packet_delayed()
466(1)
Processing of TCP Non-open States when ACKed Beyond tp → high_seq
467(10)
TCP_CA_Loss
467(1)
TCP_CA_CWR
468(2)
TCP_CA_Disorder
470(1)
tcp_try_undo_dsack()
471(1)
TCP_CA_Recovery
471(1)
tcp_add_reno_sack()
472(1)
tcp_check_reno_reordering()
473(1)
tcp_may_undo()
473(1)
tcp_packet_delayed()
474(1)
tcp_undo_cwr()
475(1)
tcp_mark_head_lost()
475(2)
tcp_sync_left_out()
477(1)
Summary
477(2)
Netlink Sockets
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)
Netlink Data Structures
485(3)
nl_table
485(1)
rtnetlink_link
486(2)
Other Important Data Strutures
488(2)
struct nlmsghdr
488(1)
struct msghdr
489(1)
Netlink Packet Format
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)
sys_sendmsg()
491(1)
sock_sendmsg()
492(1)
netlink_sendmsg()
492(1)
netlink_unicast()
493(1)
netlink_data_ready()
494(1)
rtnetlink_rcv()
494(1)
rtnetlink_rcv_skb()
494(1)
rtnetlink_rcv_msg()
495(1)
Flow Diagram for tc Command in Kernel Space
496(1)
Summary
496(3)
IP Routing
499(92)
Routing
501(2)
Policy-Based Routing
503(2)
Multipathing
505(4)
Record Route Options (RFC 791) and Processing by Linux Stack
509(1)
Record Routing
510(1)
Source Routing
510(7)
Strict Record Routing
510(1)
Loose Record Routing
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)
Managing Routing Cache
523(17)
Routing Cache for Local Connections
525(1)
___sk_dst_check()
526(1)
Link Failure and Reporting to Routing Subsystem
527(1)
dst_link_failure()
527(1)
ipv4_link_failure()
527(1)
dst_set_expires()
528(1)
Routing Cache for the Incoming Packets
529(1)
Routing Cache Timer
530(1)
rt_periodic_timer
530(3)
rt_may_expire()
533(1)
dst_free()
534(1)
___dst_free()
535(1)
dst_destroy()
535(1)
dst_run_gc()
536(1)
Interface down and rt_flush_timer
537(1)
rt_cache_flush()
538(2)
Implementation Overview of Forwarding Information Base (FIB)
540(9)
struct fib_table
540(3)
struct fn_hash
543(1)
struct fn_zone
543(1)
struct fib_node
544(2)
struct fib_info
546(1)
struct fib_nh
547(1)
struct fib_rule
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)
inet_rtm_newroute()
550(1)
struct rtmsg
551(1)
struct kern_rta
552(1)
fn_hash_insert()
553(1)
fn_new_zone()
554(3)
fib_create_info()
557(1)
fn_hash_insert()
558(1)
What Happens When the ip Command Is Run with a Rule Option for Adding an Entry in the Routing Table?
558(5)
inet_rtm_newrule()
559(2)
FIB Initialization
561(2)
FIB Traversal Flow Diagram
563(26)
ip_route_output()
563(1)
ip_route_output_key()
564(2)
ip_route_output_slow()
566(10)
ip_dev_find()
576(1)
___in_dev_get()
577(1)
inet_select_addr()
578(2)
Route_Scopes
580(1)
fib_lookup()
581(8)
Summary
589(2)
IP Quality of Service in Linux (IP QoS)
591(44)
Introduction
591(1)
Basic Components of Linux Traffic Control
592(1)
Linux Implementation of pfifo_fast qdisc
593(3)
Queueing Discipline Data Structure
596(5)
Struct Qdisc
596(1)
Struct Qdisc_ops
597(1)
Struct Qdisc_class_ops
598(1)
struct cbq_class
599(2)
Tc User Program and Kernel Implementation Details
601(4)
tc_modify_qdisc()
601(1)
qdisc_create()
602(2)
cbq_init()
604(1)
qdisc_graft()
604(1)
dev_graft_qdisc()
605(1)
The tc Commands for Creating Class Hierarchy for CBQ
605(5)
tc_ctl_tclass()
607(1)
cbq_change_class()
607(3)
Filters
610(4)
tc_ctl_tfilter()
611(3)
u32 Filter Implementation
614(2)
u32_change()
615(1)
Route Filter Implementation
616(3)
route4_change()
618(1)
Enqueue
619(3)
cbq_enqueue()
620(1)
cbq_classify()
621(1)
Overview of cbq_enqueue()
621(1)
Overview of Linux Implementation of CBQ
622(1)
cbq_dequeue()
622(11)
From net/dev/core.c
626(1)
qdisc_run()
626(1)
qdisc_restart()
626(1)
cbq_dequeue()
627(2)
cbq_dequeue_1()
629(1)
cbq_dequeue_prio()
630(3)
Summary
633(2)
IP Filter and Firewall
635(36)
Netfilter Hook Framework
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)
nf_hook_slow()
642(1)
nf_iterate()
643(1)
struct nf_hook_ops
644(1)
Compatibility Framework
644(3)
fw_in()
645(2)
Ip Chains
647(6)
Filtering with Ipchains
648(1)
Ipchain Chain of Rules
649(1)
struct ip_chain
649(1)
struct ip_fwkernel
650(1)
struct ip_reent
651(1)
struct ip_fw
651(1)
Organization of Tables in Ipchains
652(1)
How Is the Packet Filtered with Ipchains
653(2)
ip_fw_check()
653(2)
ip_rule_match()
655(1)
Iptables
655(2)
Registration of Iptables Hooks
657(1)
Iptables Filter Rules and Target Organization
657(7)
struct ipt_table
658(1)
struct ipt_table_info
658(3)
struct ipt_entry
661(1)
struct ipt_entry_match
662(1)
struct ipt_tcp
663(1)
struct ipt_entry_target
664(1)
struct ipt_standard_target
664(1)
Organization of Filter Rules and Target for Iptables
664(1)
Filtering Packets with Iptables
664(4)
ipt_do_table()
664(4)
IPT_Match_Iterate
668(1)
Summary
668(3)
Net SoftIRQ
671(26)
Why Net SoftIRQs, and How Do We Raise Them?
672(3)
Transmission
672(1)
Reception
672(3)
How Are SoftIRQs Are Processed, and When?
675(3)
Registration of SoftIRQs
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)
Summary
696(1)
Transmission and Reception of Packets
697(26)
DMA Ring Buffers for Transmission and Reception of Packets
698(1)
Packet Reception Process
698(2)
Flow of Packet Reception with DMA
698(1)
Reception Ring Buffer
698(2)
Packet Transmission Process
700(4)
Flow of Packet Transmission with DMA
702(1)
Transmission Ring Buffer
702(1)
Transmission Ring Buffer
703(1)
Implementation of Reception and Transmission of Packets
704(5)
struct etrax_eth_descr
705(1)
struct etrax_dma_descr
706(1)
Initialization of Device
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)
e100_rx()
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)
Transmission of Packets
713(8)
e100_send_packet()
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)
e100tx_interrupt()
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)
Summary
721(2)
lkcd and Debugging TCP/IP Stack
723(36)
Lkcd Source and Patches
724(1)
Touching the Socket
724(2)
Looking into the Receive Socket Buffer
726(1)
Route Information in sk_buff
727(1)
Peep into Send Socket Buffer
727(2)
TCP Segmentation Unit
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)
U32 Filters
739(4)
Route Filters
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)
Netlink Data Structure
755(2)
nl_table
755(1)
rtnetlink_link
755(2)
Summary
757(2)
Next Edition
759(4)
Bibliography 763(2)
Index 765
Sameer Seth works at Juniper Networks as Senior Staff Engineer for JUNOS Kernel Team. Previously, he was a senior engineer at Sun Microsystems, where he worked on the TCP/IP stack in Solaris, sockets, streams, NFS, and related kernel framework. He has ten years of experience working with Linux in research and commercial environments. He has also worked on embedded TCP/IP Linux stack as well as on X86 architectures. Additionally, he has worked on different communication protocols on Motorola MPC8260 processors. His community work includes blogging for opensolaris technology (blogs.sun.com/sameer) and he delivers technical talks on open solaris technology. In his spare time he enjoys writing and talking on technical topics related to networking and Unix. M. Ajaykumar Venkatesulu is currently working on networking and naming services. He has seven years of experience with Linux networking and kernel in research and commercial environments. His areas of interest include Linux kernel, embedded systems, IP routing, and IP QoS.