网卡驱动的流程分析

简介:
数据包的发送:
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所占用的内存。将接受到的数据加入一个队列,触发一个软中断标志位,
返回式基本就意味着接受数据包的中断处理函数任务已经完成。
目录
相关文章
|
10月前
|
人工智能 算法 测试技术
StockMixer:上海交大推出预测股票价格的 MLP 架构,通过捕捉指标、时间和股票间的复杂相关性,预测下一个交易日的收盘价
StockMixer 是上海交通大学推出的基于多层感知器的股票价格预测架构,通过指标、时间和股票混合实现高效预测。
636 11
StockMixer:上海交大推出预测股票价格的 MLP 架构,通过捕捉指标、时间和股票间的复杂相关性,预测下一个交易日的收盘价
|
机器学习/深度学习 数据可视化 数据挖掘
R语言包管理:如何使用CRAN与Bioconductor
【8月更文挑战第28天】CRAN和Bioconductor是R语言包的两个重要来源,分别覆盖了广泛的科学计算和生物信息学领域。通过掌握CRAN和Bioconductor的包管理技巧,用户可以更加高效地利用R语言进行数据分析、统计建模和生物信息学研究。在实际应用中,建议根据具体需求选择合适的包,并合理设置镜像站点以提高下载速度。同时,定期更新和卸载不再需要的包,有助于保持R环境的整洁和高效。
|
12月前
|
编译器 Scala
Scala 提取器(Extractor)
Scala 提取器(Extractor)
144 1
|
Android开发
android 获取wifi的协议标准
android 获取wifi的协议标准
256 0
|
存储 SQL 移动开发
mysql之常用函数、聚合函数以及合并(union&union all)
1) UNION:将所有的查询结果合并到一起,然后去除掉相同的记录 2) UNION ALL:将所有的查询结果合并到一起,不会去除掉相同的记录 前提条件:结果集列数个数相同,列的类型还要相同或是兼容 使用场景:在项目统计报表模块,用来合并数据
|
弹性计算 网络架构
跨地域的VPC私网互通【高速通道案例】
初次接触阿里云高速通道,使用起来很刺手,概念模糊难懂,用起来也很容易出错,通过该案例亲自动手操作下,理解其中原理以及高速通道的应用场景,以后对高速通道便不再陌生。
9698 0
|
边缘计算 物联网 开发工具
快速学会物联网边缘计算设备接入的方法
设备接入是Link IoT Edge提供的基础能力,设备接入模块在Link IoT Edge中称为驱动(driver)或设备接入驱动。所有连接到Link IoT Edge的设备都需要通过驱动实现接入。
1730 0
|
人工智能 算法 数据挖掘
《中国人工智能学会通讯》——12.48 混合型数据聚类算法
本节书摘来自CCAI《中国人工智能学会通讯》一书中的第12章,第12.48节, 更多章节内容可以访问云栖社区“CCAI”公众号查看。
1376 0