本文参看代码版本为2.6.35.8
inet_init 分析
1,proto_register():分别注册变量tcp_prot,udp_prot,raw_prot。不负责的听说这里是注册到了私有链表,仅用于/proc。2,sock_register(inet_family_ops),在全局数组net_family里面注册inet_family_ops。
static const struct net_proto_family inet_family_ops = {
.family = PF_INET,
.create = inet_create, //创建socket时需要调用的函数
.owner = THIS_MODULE,
};
3,inet_add_protocol():分别注册变量icmp_protocol udp_protocol tcp_protocol,在全局数组inet_protos里面,填充IPPROTO_ICMP IPPROTO_TCP IPPROTO_UDP对应区域。猜测该数组用于ip层向上送数据时,被查找以确定正确的四层接收函数。tcp_protocol定义如下:
static const struct net_protocol tcp_protocol = {
.handler = tcp_v4_rcv, //最为重要的传输层接收函数
.e

本文深入分析了Linux内核2.6.35.8版本中的inet_init()函数,主要探讨其在TCP/IP协议栈初始化中的作用,涉及SOCK_DGRAM、IPPROTO_UDP、UDP_CSUM_DEFAULT等相关配置。
最低0.47元/天 解锁文章
127

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



