linux网口初始化_深入理解Linux网络技术内幕-网络设备初始化(三) | 学步园

虚拟设备

虚拟设备是建立在一个或多个真实设备之上的抽象,虚拟设备与真实设备之间的对应关系可以是一对一、一对多、多对一的,有可能在其他虚拟设备之上建立虚拟设备。但并非所有组合都有意义,也并非所有组合都有内核支持。

8e0b299133c9b63d76f3c37a039c01c9.png

虚拟设备的使用情形有如下几种:

绑定(Bonding):一组真实设备虚拟为一个虚拟设备,使其如同单一设备来提高性能;

802.1Q:这是一种VLAN标准,用VLAN报头扩充802.3/Ethernet帧头,建立VLAN;

桥接(Bridding):桥接接口就是网桥的虚拟设备

别名接口(aliasing interface):允许一个真实Ethernet接口可以具有多个虚拟接口(eth0:0 eth0:1等),每个接口都有自己的IP配置。现在,网络代码的改进,在同一个NIC设备上配置多个IP地址已经不需要定义一个新的虚拟接口。

普通均衡器(true equalizer, TEQL):这是队列规则,用于流量控制

隧道接口(tunnel  interface):IP over IP隧道已经GRE(通用路由封装)协议的实现基础就是虚拟设备的建立

虚拟设备与内核网络协议栈之间的交互

虚拟设备和真实设备与内核的交互方式略有不同:

初始化:大多数虚拟设备如同真实设备一样,都会被分派一个net_device数据结构,但并非所有的虚拟设备都会被分派一个net_device实例,别名设备只是作为相关联的真实设备上的简单标签来实现的

配置:大多数虚拟设备需要提供特殊的用户空间工具来配置,尤其是只应用于虚拟设备的高层字段,无法使用ifconfig等标准工具进行配置

外部接口:每个虚拟设备通常都会输出一个文件或包含一些文件的目录到/proc文件系统内,与虚拟设备相关的文件属于额外文件,不会替代与物理设备相关的文件,也就是说虚拟设备会生成自己的/proc文件,但本身自己没有net_device实例的别名设备是个例外

传输:当虚拟设备与真实设备不是一对一的关系时,用于传输的函数可能需要选择所用的真实设备以及其他任务,因为QoS是按照每个设备的需要而应用的,虚拟设备和真实设备之间有多重关系时,就意味着要配置流量控制

接收:虚拟设备都是软件对象,不需要参与系统上真实资源的交互,如注册IRQ处理以及分配I/O端口和I/O内存等。因此不同种类的虚拟设备在接收数据包时具有不同的行为

外部通知信息:虚拟设备的逻辑是实现在真实设备之上的,真实设备对此逻辑毫无所知,因此无法将这些通知信息传过去。通知信息就必须直接面对虚拟设备,如在绑定情形中,如果绑定设备组中的一个设备宕机,则用于分配流量的

Proc文件系统中相关与网络初始化的配置文件

/proc中的一些文件会输出内部数据结构和配置参数的值,用于记录设备驱动程序分配的资源和状态。如lsmod命令就是将proc/modules文件作为信息来源输出当前系统中加载的模块和依赖关系。

在/proc/net目录下有设备处理层初始化函数net_dev_init通过dev_proc_init和dev_mcast_init创建的文件:

dev文件:包含了注册到内核中每个网络设备有关接收和传输的一些统计数据:

1b0f167eae4d1dd746b14ec81b5d00c5.png

dev_mcast文件:显示注册到内核中每个网络设备一些IP多播使用的参数值

d0de86616b33044057e60700b02dfed8.png

wireless:类似于dev文件,输出每个无线设备dev->get_wireless_stats的一些参数值。这些值只适用于无线设备,因为无线设备会分配一个数据结构来保存这些统计数据

0af7238798661ff0dbbc34e2d7df33ca.png

softnet_stat:输出有关网络子系统使用的软件中断的统计数据

18e07060e9e47c13b0eae2411cd525bb.png

与系统初始化相关的函数

request_irq                            分配IRQ线并注册中断处理例程回调函数,可以注册独享或共享中断线

free_irq                                  注销中断处理例程回调函数,若没有设备再使用此中断线,则释放这个中断线资源

request_region                      分配I/O端口及I/O内存

release_region                       释放I/O端口及I/O内存

call_usermodehelper              调用用户空间辅助应用程序

module_param                       模块配置参数

net_dev_init                          在系统引导期间对一段网络代码做初始化

全局变量

dev_boot_phase                     布尔标识。以强制NIC设备在驱动程序注册前执行net_dev_init

数据结构

struct irq_action                    每个IRQ线实例定义结构,包括一个回调函数

net_device                             描述一个网络设备

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值