网卡驱动的流程分析

简介:
数据包的发送:
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所占用的内存。将接受到的数据加入一个队列,触发一个软中断标志位,
返回式基本就意味着接受数据包的中断处理函数任务已经完成。
目录
相关文章
|
14天前
|
存储 芯片 SoC
|
5月前
|
存储 监控 Cloud Native
剖析Linux网络包接收过程:掌握数据如何被捕获和分发的全过程(上)
剖析Linux网络包接收过程:掌握数据如何被捕获和分发的全过程
|
4月前
|
监控 安全 API
7.6 Windows驱动开发:内核监控FileObject文件回调
本篇文章与上一篇文章`《内核注册并监控对象回调》`所使用的方式是一样的都是使用`ObRegisterCallbacks`注册回调事件,只不过上一篇博文中`LyShark`将回调结构体`OB_OPERATION_REGISTRATION`中的`ObjectType`填充为了`PsProcessType`和`PsThreadType`格式从而实现监控进程与线程,本章我们需要将该结构填充为`IoFileObjectType`以此来实现对文件的监控,文件过滤驱动不仅仅可以用来监控文件的打开,还可以用它实现对文件的保护,一旦驱动加载则文件是不可被删除和改动的。
29 1
7.6 Windows驱动开发:内核监控FileObject文件回调
|
5月前
|
存储 网络协议 Linux
剖析Linux网络包接收过程:掌握数据如何被捕获和分发的全过程(下)
剖析Linux网络包接收过程:掌握数据如何被捕获和分发的全过程
|
8月前
|
监控 Linux 网络安全
如何一目了然地监控远程 Linux 系统
如何一目了然地监控远程 Linux 系统
64 0
|
10月前
|
Linux
【Linux系统开发】 x210开发板 虚拟驱动创建流程(驱动编译进内核)
【Linux系统开发】 x210开发板 虚拟驱动创建流程(驱动编译进内核)
95 0
中央空调系统运行原理以及相关设备介绍
中央空调系统运行原理以及相关设备介绍
|
存储 搜索推荐 小程序
Linux启动流程分析
Linux启动流程分析
Linux启动流程分析
|
网络安全 开发工具
FreeSWITCH线上一次Crashes分析定位过程-ldns库问题
线上一次Crashes分析定位过程-ldns库问题
WGCLOUD运行服务器的硬件配置建议
agent对主机硬件无要求,agent对资源使用率很低,可忽略