声明:本文为原创
#####请转贴时保留以下内容######
作者:GTT
请提出宝贵意见Mail:mtloveft@hotmail.com 
Linux Version:2.6.33
提示:本文是介绍linux 网络协议栈初始化!
  
 
core_initcall级别的初始化方法还有sock_init即
socket的初始化程序。
代码如下
| static int __init sock_init(void){
 /* Initialize sock SLAB cache. */
 sk_init();
 /* Initialize skbuff SLAB cache */
 skb_init();
 /* Initialize the protocols module. */
 init_inodecache();
 register_filesystem(&sock_fs_type);
 sock_mnt = kern_mount(&sock_fs_type);
 /* The real protocol initialization is performed in later initcalls. */
 #ifdef CONFIG_NETFILTER
 netfilter_init();
 #endif
 return 0;
 }
 | 
 
 
 
sk_init()是根据物理内存大小,设置soket buffer的大小
 
| void __init sk_init(void){
 if (totalram_pages <= 4096) {
 sysctl_wmem_max = 32767;
 sysctl_rmem_max = 32767;
 sysctl_wmem_default = 32767;
 sysctl_rmem_default = 32767;
 } else if (totalram_pages >= 131072) {
 sysctl_wmem_max = 131071;
 sysctl_rmem_max = 131071;
 }
 }
 | 
 
 
skb_init()设置packet buffer 的slab 分配方法。
| void __init skb_init(void){
 skbuff_head_cache = kmem_cache_create("skbuff_head_cache",
 sizeof(struct sk_buff),
 0,
 SLAB_HWCACHE_ALIGN|SLAB_PANIC,
 NULL);
 skbuff_fclone_cache = kmem_cache_create("skbuff_fclone_cache",
 (2*sizeof(struct sk_buff)) +
 sizeof(atomic_t),
 0,
 SLAB_HWCACHE_ALIGN|SLAB_PANIC,
 NULL);
 }
 |