网络驱动程序.ppt

网络驱动程序.ppt

ID:48752654

大小:376.50 KB

页数:26页

时间:2020-01-21

网络驱动程序.ppt_第1页
网络驱动程序.ppt_第2页
网络驱动程序.ppt_第3页
网络驱动程序.ppt_第4页
网络驱动程序.ppt_第5页
资源描述:

《网络驱动程序.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、网络驱动程序的介绍Linux网络设备驱动结构Linux网络设备驱动结构网络协议接口层向网络层协议提供统一的数据包收发接口,通过dev_queue_xmit()函数发送数据,并通过netif_rx()函数接收数据,这一层的存在使得上层协议独立于具体的设备。网络设备接口层向协议接口层提供统一的用于描述具体网络设备属性和操作的结构体net_device,该结构体是设备驱动功能层中各函数的容器。设备驱动功能层各函数是网络设备接口层net_device数据结构的具体成员,是驱使网络设备硬件完成相应动作的程序,它通过hard_start_xmit()函数启动发送操作,并通过网络设备上的中断触发接收操作。

2、网络设备与媒介层是完成数据包发送和接收的物理实体,包括网络适配器和具体的传输媒介。网络协议接口层网络协议接口层最主要的功能是给上层协议提供了透明的数据包发送和接收接口,当上层协议需要发送数据包时,它将调用网络协议接口层的如下函数发送该数据包:dev_queue_xmit(structsk_buff*skb);上层对数据包的接收需要调用netif_rx():intnetif_rx(structsk_buff*skb);sk_buff结构体用于在Linux网络子系统中的层之间传递数据,是Linux网络子系统数据传递的“中枢神经”。sk_buff结构体该结构包含如下重要成员:structdevic

3、e*dev;//处理该包的设备sk_buff_data_ttransport_header;//传输层协议头sk_buff_data_tnetwork_header;//网络层协议头sk_buff_data_tmac_header;//链路层协议头sk_buff_data_t*head;//分配空间的开始sk_buff_data_t*data;//有效数据的开始sk_buff_data_t*tail;//有效数据的结束sk_buff_data_t*end;//分配空间的结束sk_buff_data_tlen;//有效数据的长度sk_buff结构体:数据缓冲区指针head,data,tail,

4、endhead指针指向内存中已分配的用于承载网络数据的缓冲区的起始地址,sk_buff和相关数据志在分配之后,该指针的值就被固定了。data指针则指向对应当前协议层有效数据的起始地址。data指针的值需随着当前拥有sk_buff的协议层的变化进行相应的移动。tail指针则指向对应当前协议层有效数据负载的结尾地址,与data指针对应。end指针指向内存中分配的数据缓冲区的结尾,与head指针对应,sk_buff被分配之后,end指针也被固定下来了。sk_buff结构体:数据缓冲区指针head,data,tail,endhead,data,tail,end的关系:headdatatailend有

5、效数据sk_buff对于传输层而言,用户数据和传输层协议头属于有效数据。对于网络层而言,用户数据,传输层协议头和网络层协议头是有效数据。对于数据链路层而言,用户数据,传输层协议头,网络层协议头和链路层头部都属于有效数据。lensk_buff操作:分配,释放,指针移动分配:structsk_buff*alloc_skb(unsignedintlen,intpriority);structsk_buff*dev_alloc_skb(unsignedintlen);alloc_skb()函数分配一个sk_buff缓冲区,参数len为数据缓冲区的空间大小。参数priority为内存分配的优先级。分配

6、成功后,因为还没有存放具体的网络数据包,所以sk_buff的data,tail指针都指向存储空间的起始址head,而len的大小则为0。释放:voiddev_kfree_skb(structsk_buff,*skb);dev_kfree_skb()函数用于释放sk_buff结构体。sk_buff操作:分配,释放,指针移动put操作:unsignedchar*skb_put(structsk_buff*skb,unsignedintlen);上述函数将tail指针往下移,增加sk_buff的len的值,并返回tail的当前值。主要用于在尾部添加数据。push操作unsignedchar*skb

7、_push(structsk_buff*skb,unsignedintlen);push操作会将data指针上移,因此也需要增加sk_buff的len值,push操作在存储空间的头部增加一段可以存储网络数据包的空间,主要用于在数据包发送时添加头部。sk_buff操作:分配,释放,指针移动pull操作unsignedchar*skb_bull(structsk_buff*skb,unsignedintlen);

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。