博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网卡驱动的流程分析
阅读量:7224 次
发布时间:2019-06-29

本文共 681 字,大约阅读时间需要 2 分钟。

数据包的发送:
void *priv; /* pointer to private data 分配结构体的时候会多分配一块内存用来存放私人数据*/
int (*hard_start_xmit) (struct sk_buff *skb,struct net_device *dev);
struct sk_buff *skb是网络设备驱动程序中另一个重要的数据结构,通常叫做套接字缓冲区
skb->data指向发送数据包在内存中的位子,而skb->len则是以字节为单位的该数据的长度
第二个参数dev自然就是本次用来发送网络数据的设备对象了。
驱动程序通常使用DMA的方式将套接字缓冲区中的数据传输到网络设备的存储空间,然后由网络设备的硬件
逻辑负责把设备存储空间刚接受到的数据发送出去,在数据发送成功后,会产生一个硬件中断已通知驱动程序
进行相应的处理,比如释放上层传下来的套接字缓冲区,将要发送的数据封装在套接字缓冲器
skb中。需要注意的是,网络子系统高层传下来的额套接字缓冲区需要有设备驱动程序在完成一次
DMA传输后负责释放。
数据包的接受:
int netif_rx(struct sk_buff *skb)
如同网路数据包的发送一样,驱动程序中接收数据包的实现方法依然依赖于具体的硬件设备,但是这个
通常驱动程序需要分配一个套接字缓冲区skb来容纳收到的数据包,然后将skb传递到网络子系统的
上层代码中,后者负责释放skb所占用的内存。将接受到的数据加入一个队列,触发一个软中断标志位,
返回式基本就意味着接受数据包的中断处理函数任务已经完成。

转载地址:http://ecufm.baihongyu.com/

你可能感兴趣的文章
lvs+keepalived+nginx+tomcat高可用高性能集群部署
查看>>
实验:搭建主DNS服务器
查看>>
org.gjt.mm.mysql.Driver与com.mysql.jdbc.Driver区别
查看>>
部署exchange2010三合一:之五:功能测试
查看>>
nginx编译安装参数
查看>>
代码托管
查看>>
第一次给ThinkPHP5核心框架提pull request的完整过程
查看>>
U-Mail邮件系统何以誉为信息整合中转枢纽
查看>>
强大的vim配置文件,让编程更随意
查看>>
崛起于Springboot2.X之配置文件详解(10)
查看>>
定时执行程序-Quartz简单实例
查看>>
【CF 应用开发大赛】MyfCMS系统
查看>>
windows下kangle虚拟主机-架设java空间的教程及心得
查看>>
Discuz! X2.5:文件目录结构
查看>>
我的友情链接
查看>>
TCP/IP协议及首部初了解
查看>>
防火墙iptables
查看>>
CUDA搭建
查看>>
memcached与PostgreSQL缓存命中机制
查看>>
百度地图路线检索(3)
查看>>