linux内核网络-标识符“每日读书”

net_device结构有三个标识符,不能搞混。

int ifindex 

 独一无二的ID,当设备以dev_new_index注册时分派给的每个设备。

int iflink

  这个字段主要是由隧道设备使用,可以用于标识抵达隧道另一端的真实设备。

unsigned short dev_id

 目前在zSeries OSA NIC上由IPv6所用,此字段用于区别可由不同OS同时共享的同一种设备的诸多虚拟实例,参见/net/ipv6/addrconf.c 中的注释。

配置

有些配置字段由内核根据网络设备的各种类给定一个默认值,而其他字段给驱动程序填写,如前所述,驱动程序可以改变默认值,而有些字段甚至可以在执行期间通过像ifconfig 和ip

的命令予以改变,事实上,有些参数,--base_addr, if_port dma以及irq 通常是在设备模块加载时由用户设置的,另一方面,虚拟设备不会使用这些参数。

char name[IFNAMSIZ]

设备的名称

unsigned long mem_start;

unsigned long mem_end

  这些字段描述设备所用的共享内存,用于设备鱼内核沟通,其初始化和访问智慧在设备驱动程序内进行, 较高分层不需要关心这些字段。

unsigned long base_addr

  设备自有内存映射到IO内存的起始地址。

unsigned int irq

  设备用于内核对话中断编号可以多个设备共享驱动程序适用request_irq函数分配变量并且使用free_irq予以释放

unsigned char if_port

此接口所使用端口类型参见下一节 接口类型端口

unsigned char dma

设备所使用DMA通道为了从内核获取释放DMA通道文件kernel/dma.c 定义函数request_dmafree_dma取得DMA通道之后予以开启或者关闭可以使用各种include/asm-architechture 文件中所提供enable dmadisable dma,这些函数ISA设备使用PCI设备采用了其他方法因而不需要这些函数

并非所有设备都可以DMA因为有些总线不适用DMA

unsigned short flags

unsigned short gflags

unsigned short priv_flags

flags字段中某些位代表网络设备功能其他代表状态改变你可以include/linuxi/if.h 发现这些标识完整列表设备驱动程序通常初始化期间设置这些功能这些状态标识内核管理响应外部事件这些标识设置可以通过熟悉ifconfig命令查看

ifconfig lo

这些例子中UP_LOOKBACK RUNNING就相当于标识IFF_UP IFF_LOOPBACK以及IFF_RUNNING

priv_flags 用于存储用户空间不可见标识目前而言此字段VLANBridge虚拟设备使用gflags 几乎已经不再使用了只是由于兼容性原因存在这些标识可通过dev_change_flags 函数进行修改

int features

这是另一标识用于存储其他一些设备功能为此数据结构包含多个标识变量并非是多余features字段报告适配卡功能以便CPU通信适配能否高端内存DMA或者硬件能否所有封包校验工作可能特征功能列表定义net_device 结构本身之内参数设备驱动程序初始化你可以net_device数据结构定义中找到NETIF_F_XXX特征功能列表以及很好注释

unsigned mtu

MTU代表最大传输单元Maximum Transmission Unit 表示设备能处理最大尺寸2-1最常见网络技术MTU取值

设备类型 MTU

PPP 296

SLIP 296

Ethernet 1500

ISDN 1500

PLIP 1500

Wavelan 1500

EtherChannel 2024

FDDI 4352

Token Ring 4MB/s 4464

Token Bus 8182

Token Ring 16 MB/s 17914

Hyperchannel 65535

Ethernet MTU必要澄清一下Ethernet规范最大有效载荷尺寸1500字节有时候你会发现Ethernet MTU定义1518 或者1514第一个Ethernet最大尺寸包括报头第二个包括报头但不检查序列

1998Alten Networks 提议Ehternet最大载荷增加9KB后来这项提议正式成为一份IETF因特网草案但是IEEE没有接受IEEE规范中有效载荷超过1500字节通常就称为巨大Gigabit Ethernet一起使用增加吞吐量这是因为对于大型数据传输越大所需要数目越少终端也就减少因此CPU使用也会减少报头所需消耗也会变少等等有关增加Ethernet MTU有点以及为什么IEEE不同意这周扩充规格标准化讨论

unsigned short type

设备所属类型include/linux/if_arp.h 包含可能类型完整列表

unsigned short hard_header_len

字节单位设备大小例如Ethernet报头14字节每个设备长度定义设备头文件中例如对于Ethernet而言ETH_HLAN就定义include/linux/if_ether.h

unsigned char broadcast[MAX_ADDR_LEN]

链路层广播地址

unsigned char dev_addr[MAX_ADDR_LEN]

unsigned chaaddr_len

dev_addr设备链路层地址不要将其L3IP地址混淆地址字节长度addr_len指定addr_len 依赖设备的类型Ethernet地址都是6字节

int promiscuity

接口类型端口

有些设备有一个以上的连接器允许用户根据需求选择其中之一使用这个参数用于设置设备端口类型设备驱动程序没有通过配置命令强制选择特定端口类型就会简单选择默认端口类型有些情况下一个设备驱动程序可以处理不同接口类型在这些情况下接口可以特定次序尝试所有端口类型下面显示代码片段一个设备驱动程序如何根据已有配置设定接口模式

switch (dev->if_port)

case IF_PORT_10BASE2:

writeb(readb(addr) & 0xf8 | 1, addr);

break;

case IF_PORT_10BASET:

writeb((readb(addr)&0xf8), addr);

break;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值