linux-Tcp IP协议栈源码阅读笔记(4)

来源:未知 责任编辑:责任编辑 发表时间:2015-10-08 14:16 点击:

   net_device{}结构,对应于每一个网络接口设备。这个结构中包含很多可以直接获取网卡信息的函数和变量,同时包含很多对于网卡操作的函数,这些直接指向该网卡驱动程序的许多函数入口,包括发送接收数据帧到缓冲区等。当这些完成后,比如数据接收到缓冲区后便由netif_rx(在net/core/dev.c各种设备驱动程序的上层框架程序)把它们组成sk_buff形式挂到系统接收的backlog队列然后交由上层网络协议处理。同样,对于上层协议处理下来的那些sk_buff。便由dev_queue_xmit函数放入网络缓冲区,交给网卡驱动程序的发送程序处理。

 

   在系统中存在一张链表dev_base将系统中所有的net_device{}结构连在一起。对应于内核初始化而言,系统启动时便为每个所有可能支持的网络接口设备申请了一个net_device{}空间并串连起来,然后对每个接点运行检测过程,如果检测成功,则在dev_base链表中保留这个接点,否则删除。对应于模块加载来说,则是调用register_netdev()注册net_device,在这个函数中运行检测过程,如果成功,则加到dev_base链表。否则就返回检测不到信息。删除同理,调用

unregister_netdev。

 

 

2.启动分析

 

    2.1 初始化进程 :start-kernel(main.c)---->do_basic_setup(main.c)---->sock_init(/net/socket.c)---->do_initcalls(main.c)

 

void __init sock_init(void)

{

 int i;

 

 printk(KERN_INFO "Linux NET4.0 for Linux 2.4/n");

 printk(KERN_INFO "Based upon Swansea University Computer Society NET3.039/n");

 

 /*

  * Initialize all address (protocol) families. 每一项表示的是针对一个地址族的操作集合,例如对于ipv4来说,在net/ipv4/af_inet.c文件中的函数inet_proto_init()就调用sock_register()函数将inet_families_ops初始化到属于IPV4的net_families数组中的一项。

  */

 

 for (i = 0; i < NPROTO; i++)

  net_families[i] = NULL; 

 

 /*

  * Initialize sock SLAB cache.初始化对于sock结构预留的内存的slab缓存。

  */

 

 sk_init();

 

#ifdef SLAB_SKB

 /*

  * Initialize skbuff SLAB cache 初始化对于skbuff结构的slab缓存。以后对于skbuff的申请可以通过函数kmem_cache_alloc()在这个缓存中申请空间。

  */

 skb_init();

#endif

 

 /*

  * Wan router layer.

  */

 

#ifdef CONFIG_WAN_ROUTER 

 wanrouter_init();

#endif

 

 /*

  * Initialize the protocols module. 向系统登记sock文件系统,并且将其安装到系统上来。

  */

 

 register_filesystem(&sock_fs_type);

 sock_mnt = kern_mount(&sock_fs_type);

 /* The real protocol initialization is performed when

  *  do_initcalls is run. 

  */

 

 /*

  * The netlink device handler may be needed early.

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • /etc/fstab 详解
  •  LVS-NAT和LVS-DR模式的实现详解
  •  RHCE考试之磁盘配额
  • nginx主主集群
  •  LVM逻辑卷管理器
  • 学习笔记:ACL详解
  • suse linux双网卡双网关配置
  • puppet文件服务配置
  •  Nginx主主负载均衡架构

快速直达

操作系统导航

LinuxWindows虚拟机
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1