- 論壇徽章:
- 0
|
本帖最后由 cuic139 于 2011-12-16 17:23 編輯
代碼流程里是在inet_init函數(shù)里
注冊上的處理函數(shù),底層判斷為icmp就去調(diào)用相關(guān)的rcv函數(shù)- if (inet_add_protocol(&icmp_protocol, IPPROTO_ICMP) < 0)
- printk(KERN_CRIT "inet_init: Cannot add ICMP protocol\n");
- if (inet_add_protocol(&udp_protocol, IPPROTO_UDP) < 0)
- printk(KERN_CRIT "inet_init: Cannot add UDP protocol\n");
- if (inet_add_protocol(&tcp_protocol, IPPROTO_TCP) < 0)
- printk(KERN_CRIT "inet_init: Cannot add TCP protocol\n");
復(fù)制代碼- static const struct net_protocol icmp_protocol = {
- .handler = icmp_rcv,
- .no_policy = 1,
- .netns_ok = 1,
- };
復(fù)制代碼 具體轉(zhuǎn)發(fā)流程你可以在icmp_rcv里面加一個dump_stack,然后dmesg看一下就全都出來了
協(xié)議棧大致的轉(zhuǎn)發(fā)流程見版主的帖子http://www.72891.cn/thread-1960601-1-1.html |
|