在内核中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 br ha uh gp em
- PACKET 520 0 -1 NI 0 no kernel n n n n n n n n n n n n n n n n n n n
- RAWv6 680 0 -1 NI 0 yes kernel y y y n y y y n y y y y n y y y y n n
- UDPLITEv6 664 0 -1 NI 0 yes kernel y y y n y y y n y y y y n n y y y y n
- UDPv6 664 0 1 NI 0 yes kernel y y y n y n y n y y y y n n y y y y n
- TCPv6 1332 1 31 no 304 yes kernel y y y y y y y y y y n y n n y y y y y
- UNIX 452 326 -1 NI 0 yes kernel n n n n n n n n n n n n n n n n n n n
- UDP-Lite 536 0 -1 NI 0 yes kernel y y y n y y y n y y y y y n y y y y n
- RAW 516 0 -1 NI 0 yes kernel y y y n y y y n y y y y n y y y y n n
- UDP 536 3 1 NI 0 yes kernel y y y n y n y n y y y y y n y y y y n
- TCP 1204 21 31 no 304 yes kernel y y y y y y y y y y n y n n y y y y y
- NETLINK 460 6 -1 NI 0 no kernel n n n n n n n n n n n n n n n n n n n
其中这里的cl co di ac io in de sh ss gs se re sp bi br ha uh gp em分别表示以下函数的实现。
- proto_method_implemented(proto->close),
- proto_method_implemented(proto->connect),
- proto_method_implemented(proto->disconnect),
- proto_method_implemented(proto->accept),
- proto_method_implemented(proto->ioctl),
- proto_method_implemented(proto->init),
- proto_method_implemented(proto->destroy),
- proto_method_implemented(proto->shutdown),
- proto_method_implemented(proto->setsockopt),
- proto_method_implemented(proto->getsockopt),
- proto_method_implemented(proto->sendmsg),
- proto_method_implemented(proto->recvmsg),
- proto_method_implemented(proto->sendpage),
- proto_method_implemented(proto->bind),
- proto_method_implemented(proto->backlog_rcv),
- proto_method_implemented(proto->hash),
- proto_method_implemented(proto->unhash),
- proto_method_implemented(proto->get_port),
- proto_method_implemented(proto->enter_memory_pressure));














迄今为止 共有 2 条评论 ↓
1 Zhwen.org网友 | 发布时间 2009年11月13日 at 4:17 am |
Linux高手啊。
2 Zhwen.org网友 | 发布时间 2009年11月13日 at 4:18 am |
代码写的不错哦,学习
发布评论