Linux 网卡设备驱动程序设计(3)
三。网络子系统深度分析
用户程序通过网络发送这个网络数据包
通过
SCI
协议无关接口
协议栈 《 UDP的实现 会选择路由
《 IP的实现 会建立这个邻居子系统,建立邻居信息
设备无关接口
驱动
函数调用关系(对应上面)
socket_file_ops
do_sock_write
_sock_sendmsg
(SCI 接口)
udp_sendmsg(路由ip_route_output_flow)
udp_push_pending_frames
(选择路由)
ip_push_penging_frames
ip_local_out(实现防火墙)
dst_output
ip_finish_output
ip_finish_output2(dev->neighbour->output)
// 邻居子系统
arp_generic_ops->neigh_resolve_output
(建立邻居子系统)
dev_queue_xmit
dev_hard_start_xmit
(协议无关接口)
dev->netdev_ops->ndo_start_xmit
(驱动)
2.网卡收到数据包如何交给用户来处理
收到函数Receive()
会产生一个中断
1. 接受
(1). 从硬件中读取数据到SKB中
(2).调用Netif_rx()函数
2.
最新文章
- vux 中popup 组件 Mask 遮罩在最上层问题的解决
- OC第八节——目录操作和文件管理
- WPF PRISM开发入门一( 初始化PRISM WPF程序)
- php引用&;符号详解——————给变量起小名
- numpy——linspace创建等差数列
- BZOJ 4337: BJOI2015 树的同构 树hash
- 菜鸟学Linux命令:chmod命令和数字文件权限
- html5+ plus和phoneGap、cordova的比较
- POJ 2528 (线段树 离散化) Mayor's posters
- LocalDB 的创建与迁移
- JavaScript typeof, null, 和 undefined
- 以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区
- Anroid ListView分组和悬浮Header实现
- CentOS 7安装Oracle 11gR2以及设置自启动
- C++ DWORD 转byte char 数组、指针
- c 时间转移函数
- PHP(控制语句,随机数,循环语法)
- 2018年值得关注的10大JavaScript动画库
- 【源码学习之spark core 1.6.1 各种部署模式所使用的的TaskSceduler及SchedulerBackend】
- bzoj1854 [Scoi2010]游戏 ([SCOI2010]连续攻击游戏)