注:红色部分是我自己的补充说明。

转:Linux-2.6.21.1 网络函数调用流程
http://www.cublog.cn/u/12313/showart_312426.html
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn
接收以太帧:
netif_rx
-> queue //管理队列
-> netif_receive_skb // 将帧的拷贝交给注册的协议函数处理、初始化skb->{h,nh,mac}
-> bond //多个接口绑定成一个
-> packet_type_all: deliver_skb
-> bridge //桥接
-> packet_type(IPV4)->func == ip_rcv //交给IP分组处理函数
接收IPv4包:
ip_rcv
-> NF_HOOK(PREROUTING) //netfilter钩子
->ip_rcv_finish //检查包的地址、校验和等
-> ip_route_input //路由缓存查找
-> ip_route_input_cached
-> ip_route_input_slow //路由表项查找
-> ip_mkroute_input
-> __mkroute_input
dst->input = ip_forward //数据包转发处理
dst->output = ip_output //dst->output是包发送的处理
-> dst_input //如果skb->dst有效
-> LOCAL_IN: dst->input == ip_local_deliver //本地处理
-> NF_HOOK(NF_INPUT)
-> ip_local_deliver_finish //处理分片等
-> ipprot->handler(tcp, udp, icmp ...)
-> FORWARD: dst->input == ip_forward //数据包转发处理
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wangxing1018/archive/2009/07/04/4322120.aspx
2211

被折叠的 条评论
为什么被折叠?



