内核提供接口给用户空间程序,便于用户进行进行信息的读取和配置。
procfs和sysctl都可以导出内部信息,其中procfs主要用于导出只读信息,sysctl导出可写的。此外还有sysfs,ioctl
1. procfs
procfs是内核提供的,一种在用户空间中对各种子系统的设置进行配置的方式,通常挂载在/proc下。
网络代码注册的文件位于/proc/net目录中
2. sysctl系统调用
sysctl接口允许用户读取或者修改内核参数。可以通过sysctl命令导出变量,如果内核支持procfs,会在/proc下创建sys文件,sysctl命令也是通过/proc/sys目录下的文件与内核通信的。现在发行版本一般都支持,如果没支持的那肯定是古董版本。
例如进制转发IP数据包,可以设置如下:
echo 1 > /proc/sys/net/ipv4/ip_forward
将1写入到了文件,后续将不再支持IP转发。也可以通过程序调用系统调用sysctl来实现。
3. sysfs
sysfs是linux2.6提供的虚拟文件系统,设计之初是用于对设备和驱动信息导出到用户空间名称叫做driverfs,后来代码更新“失控”,发现也能支持其他子系统,变成了sysfs,挂载在/sys中。
4. ioctl系统调用
ioctl 系统调用可以操作一个文件,用于实现特殊设备的操作。也可以操作套接字描述符,例如net-tools工具包。
5. netlink
netlink套接口是网络应用程序与内核通信的接口,IPROUTE2包中的大多数命令都使用这个接口。使用也比较简单,可以通过套接口标准的API来打开、关闭。
关于netlink可以参考《linux中通用Netlink详解及使用剖析(附源码)》