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

news/2024/9/22 21:05:41/

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命令被反对不鼓励


http://www.ppmy.cn/news/1455361.html

相关文章

【毕业设计】基于SSM的运动用品商城的设计与实现

1.项目介绍 在这个日益数字化和信息化的时代,随着人们购物习惯的转变,传统的实体商店已经无法满足人们日益增长的在线购物需求。因此,基于SSM(Spring Spring MVC MyBatis)框架的运动用品商城项目应运而生&#xff0…

数据结构——链表专题2

文章目录 一、返回倒数第k 个节点二、链表的回文结构三、相交链表 一、返回倒数第k 个节点 原题链接:返回倒数第k 个节点 利用快慢指针的方法:先让fast走k步,然后fast和slow一起走,直到fast为空,最后slow指向的结点就…

Node.js爬虫在租房信息监测与分析中的应用

在当今数字化时代,房地产市场的信息变化迅速,租房信息的获取和分析对于租房者和房东都至关重要。随着互联网技术的发展,利用爬虫技术来监测和分析租房信息已成为一种常见的做法。本文将探讨如何利用Node.js爬虫在租房信息监测与分析中的应用前…

mysql学习手记

1.视图 简单一句:将需要重复使用的mysql语句放到视图中去 视图优点:1.简化查询 2.减少数据库改动的成本 3.限制访问 -- 创建视图 CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;-- 使用视图 SELECT * FROM…

Rust Course学习(编写测试)

如果友友你的计算机上没有安装Rust,可以直接安装:Rust 程序设计语言 (rust-lang.org)https://www.rust-lang.org/zh-CN/ Introduce 介绍 Testing in Rust involves writing code specifically designed to verify that other code works as expected. It…

【QEMU系统分析之实例篇(十八)】

系列文章目录 第十八章 QEMU系统仿真的机器创建分析实例 文章目录 系列文章目录第十八章 QEMU系统仿真的机器创建分析实例 前言一、QEMU是什么?二、QEMU系统仿真的机器创建分析实例1.系统仿真的命令行参数2.创建后期后端驱动qemu_create_late_backends()qtest_serv…

Llama3-Tutorial之LMDeploy高效部署Llama3实践

Llama3-Tutorial之LMDeploy高效部署Llama3实践 Llama 3 近期重磅发布,发布了 8B 和 70B 参数量的模型,lmdeploy团队对 Llama 3 部署进行了光速支持!!! 书生浦语和机智流社区同学光速投稿了 LMDeploy 高效量化部署 Llam…

茅台葡萄酒打出节日新式营销“组合拳”,两月内落地品鉴会超千桌

执笔 | 尼 奥 编辑 | 古利特 2024年1-3月酒类进出口数据显示,葡萄酒进口量微增3.66%,进口额同比下滑11%,一季度整体跌势大缓,逐步走出普遍低迷的行情。与之相反的是,作为国产葡萄酒代表的茅台葡萄酒继续保持向上的战…