linux分几个部分:1.操作系统(内核),2.驱动,3.网络
一.名词解释
RX,TX,BH,L2, L3,L4,IRQ,内旋锁,引用计数,VFT(函数指针),向量定义。
二.关键数据结构
2.1 skb_buffer
内核里有一个巨大的堆(heap),存放当前的处理数据。skb_buff是对堆里数据的管理结构。skb_buff字段分为3类:布局类、通用类,处理函数类。
1.布局类
head, end,data, tail,分别指向整个buffer的头和尾,当前处理层的数据区头和尾。同一个buffer在不同处理设备处理函数或协议处理函数中是通过移动指针来取得当前数据的,省去拷贝的时间。这种有两种头和尾可以很好的的实现这种加、减数据。
一般使用系统提供的6个skb处理函数处理上述指针,而不是直接运算。这6个函数分别是: skb_resever, skb_put, skb_push, skb_pull, skb_alloc, skb_free
2.2 设备device结构
三.用户空间和内核空间的交互
3.1 虚拟文件系统
/proc
/proc/sys
/sys
/ proc/interrupt
3.2 ioctl
这是配置设备的通道。从用户态调用ioctl函数,到内核态配置完成,中间经历了这些流程
linux网络技术内幕读书笔记(更至桥接linux实现)这里可能会遇到32位用户态到64位内核态的兼容性问题。具体来说,就是有可能会发现消息号不一致,结构体大小不一致。需要了解compat的内核兼容宏的框架
关键函数dev_ioctl,ioctl,unlock_ioctl,compat_ioctl
3.3 netlink
四.通知链机制
4.1 定义链
4.2 链注册
4.3 链上的通知事件
4.4 网络子系统的通知链
五.内核网络系统初始化
linux网络技术内幕读书笔记(更至桥接linux实现)5.1 系统初始化
parse_args参数设置,中断和定时器,初始化函数
5.2 设备注册和初始化
六. 报文在桥里的处理流程流程
6.1 关键数据结构
ptype_base,
ptype_all
这两张表里记录了以太网各类协议(L3以及以上)的处理函数。
《深入理解Linux网络技术内幕》P284-286
6.1.1 net_receive_skb
这是入桥前的
6.2 桥上数据处理流程
总的说来逻辑是从SrcDev的队列里取报文,根据Dst mac以及其他规则,将报文送到Dst dev的发送函数里。
七.设备管理的框架
这里以ppp设备为例
7.1设备注册
7.1.1设备注册函数
设备处理层初始化: net_dev_init(),《深入理解linux网络技术内幕》P104
register/unregister;
需要携带的关键信息:IRQid,
注册时机:模块加载(“模块“的概念见书:linux驱动)
7.2创建设备
用户态创建一个设备时,内核做了哪些操作。
7.3对设备的控制
7.4删除设备
7.5设备处理报文的流向
7.6创建新设备类型
八.socket框架
九.协议注册框架
十五.桥接
我的疑问:1.网桥接口和网桥端口,以及物理口有什么关系
网友评论