linux内核源码分析--核心网络文件和目录

发布于:2024-05-05 ⋅ 阅读:(31) ⋅ 点赞:(0)

3-2显示/proc/sys网络代码所使用主要目录每个目录而言列出了哪一章描述文件

proc/sys/net

bridge ipv4 core

route neigh conf

3-2/proc/sys/net 核心目录

根据前借所述我们来看net树根是如何定义的以及引导期间如何注册

对于如图3-2所示每个目录以及这些目录每个文件而言都有一个ctl_table 实体3-3显示3-2所示大多数目录ctl_table实体在何处定义以及父子关系什么为了

使具有更高可读性并没有包括所有目录

3-3三个方块显示ctl_table初始化三个实例注意

netdev_max_bcklog文件分派一个proc_handler例程因为netdev_max_backlog是一个整数来自于用户输入proc_dointvec读取

min_delay 文件分派proc_handlerstrategy两个因为内核变量ip_rt_min_delay jiffies表示但是用户输入输出都是表示因此这两个例程可以完成转换jiffies

ip_local_port_range 文件是一个有趣实例这个文件允许用户配置一个范围定义两个值这恶搞范围必须遵循一个最小值一个最大值规范因此所选strategyproc_handler例程必须能够管理一个蒸熟值数组这些表示这个范围并且用于确保用户输入遵循范围

ioctl

3-4顶端可以看到ioctl调用如何发布来看一个包括ifconfig示例

稍早我们就说过ifconfig命令使用ioctl内核通信例如系统管理输入ifconfig eth0 mtu1250这样命令用以改变接口eth0MTUifconfig打开一个套接字管理员那里接受的信息初始化一个本地数据结构然后ioctl 调用传给内核SIOCSIFMTU命令标识符

struct ifreq data;

fd = socket(PF_INET, SOCK_DGRAM, 0);

err = ioctl(fd, SIOCSIFMTU, &data);

内核会在几个不同地方处理ioctl命令3-4显示网络代码最常用ioctl命令如何sock_ioctl分派并且路由正确函数处理例程我们不说明sock_ioctl如何调用或者UDPTCP这些传输协议如何注册处理例程如果你想深入挖掘这部分代码可以使用作为起点有关本书谈及例程3-4提供正确章节指引

kernel/sysctl.c --root_table

.proname="net"

.child = net_table

net/sysctl_net.c

net_table

.proname = "core"

.child = core_table

proname = ipv4

.child = ipv4_table

net/core/sysctl_net_core.c

core_table

net/ipv4/sysctl_net.c

.proname = netdev_max_backlog

.data = &netdev_max_backlog

.maxlen = sizeof(int)

.mode = 0644

.pro_handler = &proc_dointvec

net/ipv4/route.c

ipv4_route_table

.proname = min_delay

.data = &ip_rt_min_delay

.maxlen = sizeof(int)

.mode = 0644

.provc_handler = &proc_dointvec_jiffies

.strategy = &sysctl_jiffies

3-3 /proc/sys/net创建核心目录

为了方便起见图中ioctl命令名称已经做了分解例如用于一条路径新增路由表命令SIOCADDRT显示SIOC ADDR RT强调两个感兴趣组建ADD 表示添加什么RT表示添加一条路由多数命令遵循语法通常当一个对象类型可以读写命令名称多一个组件G是指取得S是指设置SIOCGIFADDRSIOCSIFADDR这两个命令可以接口新增或者删除IP地址就是实际例子先前ifconfig范例所见SIOCSIFMTU设定S接口IF最大传输单位MTU这件事dev_ioctl但是并没有出现3-4

网络ioctl命令列在include/linux.sockio.h设备驱动程序可以代码定义命令范围介于SIOCDEVPRIVATESIOCDEVPRIVATE 之间例如可以看一看隧道设备使用四个私有命令include/linux/if_tunnel.h是如何定义然而使用私有ioctl命令被反对不鼓励


网站公告

今日签到

点亮在社区的每一天
去签到