ARM嵌入式系统网络驱动中的重要数据结构

ARM嵌入式系统网络驱动中的重要数据结构

网络设备的关键数据结构是net_device,它不仅包含了网络接口所使用的中断、地址、实际函数等硬件信息,也包含相关的上层网络协议的内容,它是网络和内核的接口。Net_device适用于所有的网络接口,结构比较复杂。在此分四个方面对它进行介绍。
1、通用部分
net_device的这些项内容用于管理网络设备不和具体协议相关。
char *name:设备的名字,例如eth0,如果不指定,在设备登记时 register_netdev()函数将会自动指定一个;
struct device *next:指向下一个网络设备,用于维护整个网络设备链表;
struct module *owner:在模块加载时指向模块的所有者;
int ifindex:提供快速查找网络设备的索引;
unsigned long state:包含网络设备的状态信息。
2、硬件相关部分
标识设备使用的共享内存的首地址及尾地址,包括如下域段:
unsigned long rmem_end;
unsigned long rmem_start;
unsigned long mem_end;
unsigned long mem_start;
如果设备用来接收和发送的内存块不同,则mem域段用来标识发送的内存位置,rmem用来标识接收的内存位置。mem_start和mem_end可在系统启动时用内核的命令行指定,用ifconfig命令可以查看它们的值。rmem域段从来不被驱动程序以外的程序所引用。
unsigned long base_addr;
unsigned char irq;
I/O基地址和中断号。对于嵌入式系统,这两个值基本是固定的,在PCI总线连接中它们可以在设备检测期间被赋值,但也可以在系统启动时指定传入(如传给LILO)。
ifconfig命令可显示及修改它们的当前值。
unsigned char if_port:记录哪个硬件I/O端口正在被接口所用,如BNC,AUI;
unsigned char dma:设备用的DMA通道;
void *priv:是指向私有数据的指针。
私有数据是个很重要的结构,硬件不同这个结构内部的定义也不相同,不过一般都包括struct enet_statistics这个结构,用于记录网络设备各种统计信息。因为这些统计信息即使在接口卸下(down)时也要保存。所以私有数据总是在设备初始化时,而不是在设备打开时分配内存空间的。
3、物理层相关数据
以下这些数据是针对于网络接口使用的各种不同的物理层的,对于以太网设备一般可直接调用ether_setup函数自动完成填写,像token ring、FDDI等其他接口一般也有类似函数完成这些域段的填写。
unsigned short mtu这个域段表示最大数据传输单元,对以太网而言,该域段为1500,不包括MAC帧的帧首和帧尾。
unsigned short type这个域段表示接口的硬件类型,描述了与该网络接口绑在一起的媒介类型。Linux网络设备支持许多不同种类的媒介,如以太网、X.25、令牌环、SLIP、PPP、Apple Localtalk等。ARP在判定接口支持哪种类型的物理地址时要用到该域段。若是以太网接口,则在ether_setup中将之设为ARPHRD_ETHER。
Unsigned long tx_queue_len这个域段表示一个设备的传输队列能容纳的最大的帧数。对以太网,默认为100;而plip则为节省系统资源,仅设为10。
unsigned short hard_header_len这个域段表示在被传送的包中IP头和其他协议信息之前的字节数。对于以太网接口,该域段为14。
unsigned char broadcast[MAX_ADDR_LEN];
unsigned char dev_addr[MAX_ADDR_LEN];
unsigned char addr_len;
这几个域段提供数据链路层所需要的各种地址信息。
struct dev_mc_list *mc_list;
int mc_count;
这两个域段表示在数据链路层提供多播协议要使用的一些信息。
4、网络层协议相关部分
网路层协议包括8个不同的域段,下面分别讲它们的作用。
下面这域段标识本设备支持的网络层协议地址簇。大部分为AF_INET(因特网IP协议)。
unsigned short family,
下面三个域段分别描述接口的网络层协议地址、协议广播地址和协议的网络掩码。若dev->family为AF_INET,则它们即为 IP地址。这些域段可用ifconfig命令赋值。
unsigned long pa_addr;
unsigned long pa_brdaddr;
unsigned long pa_mask;
下面这个域段表示网络层协议地址的长度。对于IP协议(AF_INET)值为4。
unsigned short pa_alen,
下面这个域段表示点对点协议接口(如SLIP、PPP)用这个域记录连接另一边设备的IP值。
unsigned long pa_dstaddr,
下面域段用于多播协议(Muticast),网络层相关信息。
struct ip_mc_list *ip_mc_list,
下面的域段包含一系列开关值,开关值有的是描述设备属性,有的表示设备现在的状态。最常用的一个就是IFF_UP表示设备是否被激活。这些开关值都可以用ifconfig命令设置。
unsigned short flags,
5、服务处理部分
除了各种数据域段外,net_device还提供一系列函数指针,这些函数指针把统一的操作接口映射为实际的硬件操作函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值