网络驱动程序.pptVIP

  • 2
  • 0
  • 约6.69千字
  • 约 26页
  • 2017-10-10 发布于湖北
  • 举报
网络驱动程序

网络驱动程序的介绍 Linux网络设备驱动结构 Linux网络设备驱动结构 网络协议接口层 网络协议接口层最主要的功能是给上层协议提供了透明的数据包发送和接收接口,当上层协议需要发送数据包时,它将调用网络协议接口层的如下函数发送该数据包: dev_queue_xmit(struct sk_buff *skb); 上层对数据包的接收需要调用netif_rx(): int netif_rx(struct sk_buff *skb); sk_buff结构体用于在 Linux网络子系统中的层之间传递数据,是Linux网 络子系统数据传递的“中枢神经”。 sk_buff结构体 该结构包含如下重要成员: struct device *dev; //处理该包的设备 sk_buff_data_t transport_header;//传输层协议头 sk_buff_data_t network_header;//网络层协议头 sk_buff_data_t mac_header;//链路层协议头 sk_buff_data_t *head; //分配空间的开始 sk_buff_data_t *data; //有效数据的开始 sk_buff_data_t *tail; //有效数据的结束 sk_buff_data_t *end; //分配空间的结束 sk_buff_data_t len; //有效数据的长度 sk_buff结构体:数据缓冲区指针head,data,tail,end head指针指向内存中已分配的用于承载网络数据的缓冲区的起始地址,sk_buff和相关数据志在分配之后,该指针的值就被固定了。 data指针则指向对应当前协议层有效数据的起始地址。data指针的值需随着当前拥有sk_buff的协议层的变化进行相应的移动。 tail指针则指向对应当前协议层有效数据负载的结尾地址,与data指针对应。 end指针指向内存中分配的数据缓冲区的结尾,与head指针对应,sk_buff被分配之后,end指针也被固定下来了。 sk_buff结构体:数据缓冲区指针head,data,tail,end head,data,tail,end的关系: sk_buff 操作:分配,释放,指针移动 分配: struct sk_buff *alloc_skb(unsigned int len,int priority); struct sk_buff *dev_alloc_skb(unsigned int len); alloc_skb()函数分配一个sk_buff缓冲区,参数len为数据缓冲区的空间大小。 参数priority为内存分配的优先级。分配成功后,因为还没有存放具体的网络 数据包,所以sk_buff的data ,tail指针都指向存储空间的起始址head,而len的 大小则为0。 释放: void dev_kfree_skb(struct sk_buff,*skb); dev_kfree_skb()函数用于释放sk_buff结构体。 sk_buff 操作:分配,释放,指针移动 put操作: unsigned char *skb_put(struct sk_buff *skb,unsigned int len); 上述函数将tail指针往下移,增加sk_buff的len的值,并返回tail的当 前值。主要用于在尾部添加数据。 push操作 unsigned char *skb_push(struct sk_buff *skb, unsigned int len); push操作会将data指针上移,因此也需要增加sk_buff的len值,push操作 在存储空间的头部增加一段可以存储网络数据包的空间,主要用于在数据 包发送时添加头部。 sk_buff 操作:分配,释放,指针移动 pull操作 unsigned char *skb_bull(struct sk_buff *skb,unsigned int len); pull操作将data指针下移,并减少skb的len值,这个操作一般用于下层协议向上层协议移交数据包,使data指针指向上一层协议的协议头。 reserve操作 void skb_reserve(struct sk_buff *skb,unsigned int len); reserve操作将data指针和tail指针同时下移,这个操作主要用于在存储空间的头部预留len长度的空隙。 UDP数据包接收的Linux处理流程:sk_buf的操作过程 假设以太网适配器收到一个UDP数据包,Linux从底层到应用层处理 这一数据包的流程如下: 网卡收到一个UDP包后,驱动程序需要创建一个sk

文档评论(0)

1亿VIP精品文档

相关文档