Linux内核与用户空间通信的方式目前主要有9种,分别是内核启动参数、模块参数与 sysfs、sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs。Netlink是一种特殊的文件描述符(套结字),为2.6.14及更高版本的Linux所特有,是一种在内核与用户应用间进行双向数据交互的便捷方式,用户态应用调用标准的套结字API 可以使用netlink提供的强大功能,内核态需要调用专门的内核 API 来使用netlink。Netlink应用已经相当广泛
几个月之前做了关于Linux内核版本1.2.13网络栈的结构框架分析并实现了基于Netfilter的包过滤防火墙,这里以内核3.2.1内核为例来进一步分析,更全面的分析网络栈的结构。
1、先说一下sk_buff结构体
这个结构体是套接字的缓冲区,详细记录了一个数据包的组成,时间、网络设备、各层的首部及首部长度和数据的首尾指针。
下面是他的定义,挺长
struct sk_buff {
/* These two members must be first. */
s
kbuild-progress
显示有关Kbuild的进度信息,如下所示。
18.78% ETA 0:04:56 CC net/netfilter/nf_conntrack_proto_udp.o
18.86% ETA 0:04:56 CC lib/list_sort.o
18.86% ETA 0:04:56 AS arch/x86/lib/memset_64.o
18.94% ETA 0:04:56 CC arch/x86/lib/m