在内核中ipv4的初始化工作是由这个函数来做的。
static int __init inet_init(void)
而这个函数一开始要做的事就是注册协议族。如下:
rc = proto_register(&tcp_prot, 1);//注册tcp的协议族
。。。
rc = proto_register(&udp_prot, 1);//注册udp的协议族
。。。
rc = proto_register(&raw_prot, 1);//注册raw原始协议族
。。。
这些协议族都注册到proto_list这个链表上了,
static LIST_HEAD(proto_list);
关于已经注册的协议族的信息可以在/proc/net/protocols中查看。
如下,在我的系统中已经注册的协议族有PACKET,RAWv6,UDPLITEv6,UDPv6,TCPv6 ,UNIX,UDP-Lite,
RAW,UDP ,TCP,NETLINK
这里表示了这些协议族的使用情况和使用的内存分配方式,以及已经实现的方法。
而这些信息都是由net/core/sock.c 中的proto_seq_printf函数打印输出到protocols文件中的。原型如下:
static void proto_seq_printf(struct seq_file *seq, struct proto *proto)
在proc系统下对应的文件是/proc/net/protocols
helight@zhwen:/proc/net$ cat protocols
protocol size sockets memory press maxhdr slab module cl co di ac io in de sh ss gs se re sp bi [...]
11
Nov
Nov
内核中ipv4分析—协议族的初始化
标签:ipv4 协议族













