协议初始化此处主要列举inet协议的初始化过程。staticint__initinet_init(void){structsk_buff*dummy_skb;structinet_protocol*p;structinet_protosw*q;structlist_head*r;printk(KERN_INFO"NET4:LinuxTCP/IP1。 0forNET4。0\n");if(sizeof(structinet_skb_parm)>sizeof(dummy_skb->cb)){printk(KERN_CRIT"inet_proto_init:panic\n");return-EINVAL;}/**TellSOCKETthatwearealive。 。。注册socket,告诉socketinet类型的地址族已经准备好了*/(void)sock_register(&inet_family_ops);/**Addalltheprotocols。包括arp,ip、ICMP、UPD、tcp_v4、tcp、igmp的初始化,主要初始化各种协议对应的inode和socket变量。 其中arp_init完成系统中路由部分neighbour表的初始化ip_init完成ip协议的初始化。在这两个函数中,都通过定义一个packet_type结构的变量将这种数据包对应的协议发送数据、允许发送设备都做初始化。*/printk(KERN_INFO"IPProtocols:");for(p=inet_protocol_base;p!=NULL;){structinet_protocol*tmp=(structinet_protocol*)p->next;inet_add_protocol(p);printk("%s%s",p->name,tmp?",":"\n");p=tmp;}/*Registerthesocket-sideinformationforinet_create。 */for(r=&inetsw[0];r<&inetsw[SOCK_MAX];++r)INIT_LIST_HEAD(r);for(q=inetsw_array;q<&inetsw_array[INETSW_ARRAY_LEN];++q)inet_register_protosw(q)。
阅读全文 >