Linux网络管理(一):网卡驱动与Linux内核
2024-10-10 06:06:51
下图简单描述了网卡驱动与Linux内核之间的联系:
关于上图的一些说明:
系统初始化:
1. 协议模块调用 dev_add_pack() 来注册协议处理函数到链表 &ptype_base;
2. __init br_init() 用于初始化桥接相关的操作;
3. __init net_dev_init() 初始化了两个软中断;
网卡驱动初始化:
1. 网卡驱动在其 probe() 函数里面初始化 net_device 结构体,用来描述网卡,以及提供操作网卡的接口;
配置网卡:
1. 当我们通过ifconfig来配置网卡时,会调用到net_device->open(),该函数最主要的是注册了一个中断(当网卡接收到数据或数据发送完成会触发中断);
数据的发送与接收:
1. 当我们需要发送数据时,最终调用的是网卡驱动提供的函数:net_device->hard_start_xmit();
2. 当我们接收到数据时,会触发中断,中断处理函数调用会调用内核函数来接收数据,最终由驱动程序调用内核函数netif_receive_skb(),把报文送入协议栈(接下来的代码硬件无关,与具体报文处理协议相关,比如:ARP协议,IPv4协议,IPv6协议等)。
3. 网卡的中断处理函数在调用内核函数接收数据时又分为非NAPI/NAPI两种方式;
4. NAPI方式涉及到中断的下半部处理的概念以及软中断。
5. 报文通过netif_receive_skb()送入协议栈之后,首先判断需不需要进行桥接处理;
6. 如果报文没有被桥接代码处理,再调用协议处理函数来处理;
最新文章
- C/C++实践笔记 003
- 【bzoj3674】 可持久化并查集加强版
- 并发编程 05—— Callable和Future
- linux ps命令介绍
- IOS 从系统图库中获取 图片 并设置为头像
- Fedora14下首次搭建Samba服务器遇到的一些问题
- UIKit和Core Graphics绘图(一)——字符串,线条,矩形,渐变
- Hibernate与iBATIS的比较
- poj1144 Network【tarjan求割点】
- ECshop lib_base.php on line 1241 错误解决方法
- Android 从硬件到应用程序:一步一步爬上去 6 -- 我写的APP测试框架层硬件服务(终点)
- (.NET高级课程笔记)反射总结
- java0425 wen IO
- 记账本,C,Github,Dao
- 现代C++之理解decltype
- 从零开始一起学习SLAM | 为什么要用齐次坐标?
- idea创建web聚合工程(2)
- 显示定位方法,提取中间text 封装成函数的方法
- leetcode1021
- Spark2.1.0模型设计与基本架构(上)