科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux内核2.4.x的网络接口结构(一) (2)

Linux内核2.4.x的网络接口结构(一) (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

由下往上的关系,是通过驱动程序调用上层的netif_rx()(net/core/dev.c 1214行)函数实现的,驱动程序通过这个函数把接到的数据交给上层,请注意所有的网卡驱动程序都需要调用这个函数的,这是网络接口核心层和网络接口设备联系的桥梁。

作者:hcyo 来源:赛迪网技术社区  2007年10月31日

关键字: 接口 网络 内核 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

由下往上的关系,是通过驱动程序调用上层的netif_rx()(net/core/dev.c 1214行)函数实现的,驱动程序通过这个函数把接到的数据交给上层,请注意所有的网卡驱动程序都需要调用这个函数的,这是网络接口核心层和网络接口设备联系的桥梁。

由上往下的关系就复杂点。网络接口核心层需要知道有多少网络设备可以用,每个设备的函数的入口地址等都要知道。网络接口核心层会大声喊,“嘿,有多少设备可以帮我发送数据包?能发送的,请给我排成一队!”。这一队就由dev_base开始,指针structnet_device *dev_base(Linux/include/linux/netdevice.h 436行)就是保存了网络接口核心层所知道的所有设备。对于网络接口核心层来说,所有的设备都是一个net_device结构,它在include/linux/netdevice.h,line 233里被定义,这是从网络接口核心层的角度看到的一个抽象的设备,我们来看看网络接口核心层的角度看到的网络设备具有的功能:

struct net_device { 
  ……… 
  open() 
  stop() 
  hard_start_xmit() /* 让下层发数据包 */ 
  hard_header() 
  rebuild_header() 
  set_mac_address() 
  do_ioctl() 
  set_config() 
  hard_header_cache() 
  header_cache_update() 
  change_mtu() 
  tx_timeout() 
  hard_header_parse() 
  neigh_setup() 
  accept_fastpath() 
  ……… 
  }

如果网络接口核心层需要由下层发送数据的时候,在dev_base找到设备以后,就直接调dev->hard_start_xmit()的这个函数来让下层发数据包。

驱动程序要让网络接口核心层知道自己的存在,当然要加入dev_base所指向的指针链,然后把自己的函数以及各种参数和net_device里的相应的域对应起来。加入dev_base所指向的指针链是通过函数register_netdev(&dev_3c50)(linux/drivers/net/net_init.c, line 532)建立的。而把自己的函数以和net_device里的相应的域及各种参数关系的建立是在el1_probe1()(Linux/drivers/net/3c501.c)里进行的:

el1_probe1(){ 
  ……… 
  dev->open = &el_open; 
  dev->hard_start_xmit = &el_start_xmit; /* 下面注解的,就是此语句 */ 
  dev->tx_timeout = &el_timeout; 
  dev->watchdog_timeo = HZ; 
  dev->stop = &el1_close; 
  dev->get_stats = &el1_get_stats; 
  dev->set_multicast_list = &set_multicast_list; 
  ……… 
  ether_setup(dev); 
  ……… 
  }

进一步的对应工作在ether_setup(dev) (drivers/net/net_init.c, line 405 )里进行。我们注意到dev->hard_start_xmit =&el_start_xmit,这样发送函数的关系就建立了,上层只知道调用dev->hard_start_xmit这个来发送数据,上面的语句就把驱动程序实际的发送函数告诉了上层。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章