Linux内核网络栈源代码情景分析
第1部分 网络栈总体架构
第0章 网络栈总体架构分析
0.1 网络栈本质及其分层架构
0.2 系统调用接口到内核的请求传递
0.2.1 第一层入口:accept.S文件
0.2.2 第二层入口:socket.S文件
0.2.3 第三层入口:entry.S文件
第2部分 网络协议
第1章 网络协议头文件分析
1.1 etherdevice.h头文件
1.2 icmp.h头文件
1.3 if.h头文件
1.4 if_arp.h头文件
1.5 if_ether.h头文件
1.6 if_plip.h头文件
1.7 if_slip.h头文件
1.8 igmp.h头文件
1.9 in.h头文件
1.10 inet.h头文件
1.11 interrupt.h头文件
1.12 ip.h头文件
1.13 ip_fw.h头文件
1.14 ipx.h头文件
1.15 net.h头文件
1.16 netdevice.h头文件
1.17 notifier.h头文件
1.18 ppp.h头文件
1.19 route.h头文件
1.20 skbuff.h头文件
1.21 socket.h头文件
1.22 sockios.h头文件
1.23 tcp.h头文件
1.24 timer.h头文件
1.25 udp.h头文件
1.26 un.h头文件
1.27 本章小结
第3部分 网络栈实现分析
第2章 BSD socket层实现分析
2.1 protocols.c文件
2.2 socket.c文件
2.2.1 头文件声明、全局变量定义、相关函数声明
2.2.2 move_addr_to_kernel和move_addr_to_user函数
2.2.3 get_fd函数
2.2.4 socki_lookup和sockfd_lookup函数
2.2.5 sock_alloc函数
2.2.6 sock_release_peer、sock_release和sock_close函数
2.2.7 网络套接字普通文件接口函数
2.2.8 sock_awaitconn函数
2.2.9 sock_socket函数
2.2.10 sock_socketpair函数
2.2.11 sock_bind函数
2.2.12 sock_listen函数
2.2.13 sock_accept函数
2.2.14 sock_connect函数
2.2.15 sock_getsockname和sock_getpeername函数
2.2.16 sock_send和sock_sendto函数
2.2.17 sock_recv和sock_recvfrom函数
2.2.18 sock_setsockopt和sock_getsockopt函数
2.2.19 sock_shutdown函数
2.2.20 sock_fcntl函数
2.2.21 sys_socketcall函数
2.2.22 sock_register和sock_unregister函数
2.2.23 proto_init函数
2.2.24 sock_init函数
2.2.25 socket_get_info函数
2.2.26 socket.c文件小结
第3章 INET socket层实现分析
3.1 af_inet.c文件
3.1.1 头文件声明、相关宏及变量定义
3.1.2 sk_inuse函数
3.1.3 get_new_socknum函数
3.1.4 put_sock和remove_sock函数
3.1.5 destroy_sock函数
3.1.6 inet_fcntl函数
3.1.7 inet_setsockopt和inet_getsockopt函数
3.1.8 inet_autobind函数
3.1.9 inet_listen函数
3.1.10 def_callback1、def_callback2和def_callback3函数
3.1.11 inet_create和inet_dup函数
3.1.12 closing和inet_release函数
3.1.13 inet_bind函数
3.1.14 inet_error函数
3.1.15 inet_connect函数
3.1.16 inet_socketpair函数
3.1.17 inet_accept函数
3.1.18 inet_getname函数
3.1.19 inet_recvfrom、inet_recv和inet_read函数
3.1.20 inet_send、inet_write和inet_sendto函数
3.1.21 inet_shutdown函数
3.1.22 inet_select和inet_ioctl函数
3.1.23 get_sock和get_sock_raw函数
3.1.24 INET层操作函数集定义
3.1.25 inet_proto_init函数
3.1.26 af_inet.c文件小结
第4章 传输层实现分析
4.1 tcp.c文件
4.1.1 头文件声明、相关变量及宏定义
4.1.2 tcp_set_state函数
4.1.3 tcp_select_window函数
4.1.4 tcp_find_established、tcp_dequeue_established和tcp_accept函数
4.1.5 tcp_close_pending函数
4.1.6 tcp_time_wait函数
4.1.7 TCP协议超时重传处理函数集
4.1.8 tcp_err函数
4.1.9 tcp_readable函数
4.1.10 tcp_listen_select函数
4.1.11 tcp_select函数
4.1.12 tcp_ioctl函数
4.1.13 tcp_check和tcp_send_check函数
4.1.14 tcp_send_skb函数
4.1.15 tcp_dequeue_partial、tcp_send_partial和tcp_enqueue_partial函数
4.1.16 tcp_send_ack函数
4.1.17 tcp_build_header函数
4.1.18 tcp_write函数
4.1.19 tcp_sendto函数
4.1.20 tcp_read_wakeup和tcp_write_wakeup函数
4.1.21 cleanup_rbuf函数
4.1.22 tcp_read_urg函数
4.1.23 tcp_read函数
4.1.24 tcp_close_state函数
4.1.25 tcp_send_fin函数
4.1.26 tcp_shutdown函数
4.1.27 tcp_recvfrom函数
4.1.28 tcp_reset函数
4.1.29 tcp_options函数
4.1.30 default_mask和tcp_init_seq函数
4.1.31 tcp_conn_request函数
4.1.32 tcp_close函数
4.1.33 tcp_write_xmit函数
4.1.34 tcp_ack函数
4.1.35 tcp_fin函数
4.1.36 tcp_data函数
4.1.37 tcp_check_urg和tcp_urg函数
4.1.38 tcp_accept函数
4.1.39 tcp_connect函数
4.1.40 tcp_sequence函数
4.1.41 tcp_std_reset函数
4.1.42 tcp_send_probe0函数
4.1.43 tcp_setsockopt和tcp_getsockopt函数
4.1.44 tcp_rcv函数
4.1.45 TCP协议操作函数集定义
4.1.46 tcp.c文件小结
4.2 tcp.h头文件
4.3 udp.c文件
4.3.1 头文件声明、变量及宏定义和函数声明
4.3.2 udp_err函数
4.3.3 udp_check和udp_send_check函数
4.3.4 udp_send、udp_sendto和udp_write函数
4.3.5 udp_ioctl函数
4.3.6 udp_recvfrom和udp_read函数
4.3.7 udp_connect函数
4.3.8 udp_close函数
4.3.9 udp_rcv函数
4.3.10 udp_deliver函数
4.3.11 UDP协议操作函数集定义
4.4 udp.h头文件
4.5 sock.h头文件
4.6 sock.c文件
4.6.1 头文件声明、相关宏定义
4.6.2 sock_setsockopt和sock_getsockopt函数
4.6.3 sock_wmalloc和sock_rmalloc函数
4.6.4 sock_rspace和sock_wspace函数
4.6.5 sock_wfree和sock_rfree函数
4.6.6 sock_alloc_send_skb函数
4.6.7 sock_queue_rcv_skb函数
4.6.8 release_sock函数
4.7 datagram.c文件
4.7.1 skb_recv_datagram函数
4.7.2 skb_free_datagram函数
4.7.3 skb_copy_datagram函数
4.7.4 datagram_select函数
4.8 icmp.c文件
4.8.1 头文件声明、变量定义
4.8.2 icmp_send函数
4.8.3 icmp_unreach函数
4.8.4 icmp_redirect函数
4.8.5 icmp_echo函数
4.8.6 icmp_timestamp函数
4.8.7 icmp_info函数
4.8.8 icmp_address函数
4.8.9 icmp_rcv函数
4.8.10 icmp_ioctl函数
4.8.11 icmp.c文件小结
4.9 icmp.h头文件
4.10 igmp.c文件*
4.10.1 igmp_stop_timer、igmp_start_timer、igmp_timer_exp ire、igmp_init_timer和random函数
4.10.2 igmp_send_report函数
4.10.3 igmp_heard_report和igmp_heard_query函数
4.10.4 ip_mc_map函数
4.10.5 ip_mc_filter_add和ip_mc_filter_del函数
4.10.6 igmp_group_dropped和igmp_group_added函数
4.10.7 igmp_rcv函数
4.10.8 ip_mc_inc_group和ip_mc_dec_group函数
4.10.9 ip_mc_join_group和ip_mc_leave_group函数
4.10.10 ip_mc_drop_device函数
4.10.11 ip_mc_allhost函数
4.10.12 ip_mc_drop_socket函数
4.10.13 igmp.c文件小结
4.11 snmp.h头文件
4.12 protocol.h头文件
4.13 protocol.c文件
4.14 proc.c文件
第5章 网络层实现分析
5.1 route.h头文件
5.2 route.c文件
5.2.1 头文件声明、系统变量定义
5.2.2 rt_del函数
5.2.3 ip_rt_flush函数
5.2.4 default_mask和guess_mask函数
5.2.5 get_gw_dev函数
5.2.6 ip_rt_add函数
5.2.7 bad_mask函数
5.2.8 rt_new函数
5.2.9 rt_kill函数
5.2.10 rt_get_info函数
5.2.11 ip_rt_route和ip_rt_local函数
5.2.12 ip_get_old_rtent函数
5.2.13 ip_rt_ioctl函数
5.2.14 route.c文件小结
5.3 ip.h头文件
5.4 ip.c文件
5.4.1 头文件声明、变量定义
5.4.2 ip_ioctl函数
5.4.3 strict_route、loose_route和ip_route_check函数
5.4.4 build_options函数
5.4.5 ip_send和ip_build_header函数
5.4.6 do_options函数
5.4.7 ip_compute_csum和ip_send_check函数
5.4.8 ip_frag_create函数
5.4.9 ip_find函数
5.4.10 ip_free函数
5.4.11 ip_expire函数
5.4.12 ip_create函数
5.4.13 ip_done函数
5.4.14 ip_glue函数
5.4.15 ip_defrag函数
5.4.16 ip_fragment函数
5.4.17 ip_forward函数
5.4.18 ip_rcv函数
5.4.19 ip_loopback函数
5.4.20 ip_queue_xmit函数
5.4.21 ip_mc_procinfo函数
5.4.22 ip_setsockopt和ip_getsockopt函数
5.4.23 ip_rt_event函数
5.4.24 ip_init函数
5.4.25 ip.c文件小结
5.5 ip_fw.c文件
5.5.1 头文件声明、宏及系统变量定义
5.5.2 port_match函数
5.5.3 ip_fw_chk函数
5.5.4 zero_fw_chain函数
5.5.5 free_fw_chain函数
5.5.6 add_to_chain和del_from_chain函数
5.5.7 check_ipfw_struct函数
5.5.8 ip_acct_cnt函数
5.5.9 ip_acct_ctl,ip_fw_ctl函数
5.5.10 ip_chain_procinfo函数
5.5.11 ip_acct_procinfo、ip_fw_blk_procinfo和ip_fw_fwd_pro cinfo函数
5.5.12 ip_fw.c文件小结
5.6 raw.c文件
5.6.1 raw_err函数
5.6.2 raw_rcv函数
5.6.3 raw_sendto和raw_write函数
5.6.4 raw_close函数
5.6.5 raw_init函数
5.6.6 raw_recvfrom和raw_read函数
5.6.7 RAW协议操作函数集定义
5.6.8 raw.c文件小结
5.7 raw.h头文件
5.8 packet.c文件
5.8.1 packet_rcv函数
5.8.2 packet_sendto和packet_write函数
5.8.3 packet_close函数
5.8.4 packet_init函数
5.8.5 packet_recvfrom和packet_read函数
5.8.6 PACKET协议操作函数集定义
5.8.7 packet.c文件小结
第6章 链路层实现分析
6.1 dev_mcast.c文件
6.1.1 dev_mc_add函数
6.1.2 dev_mc_upload函数
6.1.3 dev_mc_delete函数
6.1.4 dev_mc_discard函数
6.2 p8022.h头文件
6.3 p8022call.h头文件
6.4 datalink.h头文件
6.5 p8022.c文件
6.5.1 find_8022_client函数
6.5.2 p8022_rcv函数
6.5.3 p8022_datalink_header函数
6.5.4 802.2协议模块注册
6.5.5 register_8022_client函数
6.5.6 p8022.c文件小结
6.6 psnap.h头文件
6.7 psnapcall.h头文件
6.8 psnap.c文件
6.8.1 find_snap_client函数
6.8.2 snap_rcv函数
6.8.3 snap_datalink_header函数
6.8.4 snap_proto_init函数
6.8.5 register_snap_client函数
6.9 eth.c文件
6.9.1 eth_setup函数
6.9.2 eth_header和eth_rebuild_header函数
6.9.3 eth_type_trans函数
6.9.4 eth.c文件小结
6.10 eth.h头文件
6.11 p8023.c文件
6.11.1 p8023_datalink_header函数
6.11.2 make_8023_client函数
6.12 arp.c文件
6.12.1 ARP缓存表项表示结构及系统变(常)量定义
6.12.2 arp_check_expire函数
6.12.3 arp_release_entry函数
6.12.4 arp_device_event函数
6.12.5 arp_send函数
6.12.6 arp_expire_request函数
6.12.7 arp_send_q函数
6.12.8 arp_destroy函数
6.12.9 arp_rcv函数
6.12.10 arp_find函数
6.12.11 arp_get_info函数
6.12.12 arp_lookup函数
6.12.13 arp_req_set和arp_req_get函数
6.12.14 arp_ioctl函数
6.12.15 ARP协议注册、初始化
6.12.16 arp.c文件小结
6.13 arp.h头文件
6.14 devinit.c文件
6.14.1 Ip_get_mask函数
6.14.2 ip_chk_addr函数
6.14.3 ip_my_addr函数
6.14.4 ip_dev_check函数
6.14.5 devinit.c文件小结
6.15 dev.c文件
6.15.1 头文件声明、系统变量定义
6.15.2 dev_add_pack和dev_remove_pack函数
6.15.3 dev_get、dev_open和dev_close函数
6.15.4 register_netdevice_notifier和unregister_netdevice_notifier函数
6.15.5 dev_queue_xmit函数
6.15.6 netif_rx和dev_rint函数
6.15.7 dev_transmit和dev_tint函数
6.15.8 in_net_bh和net_bh函数
6.15.9 dev_ifconf函数
6.15.10 sprintf_stats和dev_get_info函数
6.15.11 bad_mask函数
6.15.12 dev_ifsioc函数
6.15.13 dev_ioctl函数
6.15.14 dev_init函数
6.15.15 dev.c文件小结
网络栈实现小结
第4部分 网络设备驱动程序
第7章 网络设备驱动程序分析
7.1 关键变量、函数定义及网络设备驱动初始化
7.2 网络设备驱动程序结构
7.3 本章小结
第5部分 系统网络栈初始化
第8章 系统网络栈初始化
8.1 网络栈初始化流程
8.2 数据包传送通道解析
8.3 本章小结
附录A TCP协议可靠性数据传输实现原理分析
主要参考文献