[MTK7621] dhcp.script 脚本分析

news2024/10/6 6:41:06

该脚本只要完成IP地址、DNS和路由设置。由udhcpc程序调用。调用的函数在下面两个文件中定义:

. /lib/functions.sh:定义了一些基础操作,例如配置文件获取等
. /lib/netifd/netifd-proto.sh:定义了IP、DNS和路由的处理函数

在dhcp.script文件中setup_interface函数完成对接口的设置。标红的函数完成对路由信息的组装。

 该函数在netifd-proto.sh文件中定义:

最终通过ubus接口将这些信息传递到netifd模块:

ubus中调用过程如下:

 notify_proto进入的是netifd_iface_notify_proto函数,执行iface->proto->notify(iface->proto, msg);最终调用的是proto_shell_notify:

proto_shell_notify函数->proto_shell_run_command->netifd_start_process->创建子进程并执行

 

还有个问题没有解决是,最开始的dhcp.sh是如何被执行的?

该脚本执行有两个入口点,第一处在netifd初始化过程中

  

其执行了dhcp.sh '' dump,通过popen执行并返回json结果

 第二处为proto_shell_handler->netifd_start_process->分配子进程执行

notify函数初始化:

在proto_shell_run_command 函数中增加如下打印:

 打印信息为:

可以证明udhcpc进程是在该函数中拉起的。

那么dhcp.sh脚本是在何时调用呢?

 

在proto_shell_handler函数中增加如下打印:

打印结果如下,证明每个接口都是先调用dhcp.sh脚本,然后再创建udhcpc进程。

 

 

 

在openwrt中,udhcpc进程都是由netifd拉起的:

 具体拉起udhcpc程序的脚本在/lib/netifd/proto/dhcp.sh文件中,代码如下:

执行ifstatus时是从哪里取的值?

在ubus.c文件中申请了一个静态的内存:

static struct blob_buf b;

struct blob_buf {

    struct blob_attr *head;

    bool (*grow)(struct blob_buf *buf, int minlen);

    int buflen;

    void *buf;

};

struct blob_attr {

    uint32_t id_len;

    char data[];

} __packed;

 

路由信息是从下面两个结构体中读取的:

 

在接收到notify的消息后,同时存储到该结构中:

netifd存储接口信息的结构为:

 

struct interface结构体中存在一个ubus结构体:

 上面的代码是根据ubus结构指针获取interface结构指针 。

 所以struct interface结构是netifid模块存储信息的总结构,该结构下保存着IP地址的所有设置:

主要的结构都挂接在该结构体中:

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/528786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于Photoshop中的【Stable-Diffusion WEBUI】插件:Auto.Photoshop.SD.plugin

文章目录 (零)前言(一)PS的插件(1.1)安装(1.2)简评 (零)前言 本篇主要提到Photoshop中的Stable-Diffusion WEBUI插件,相对WEBUI并不算好用&#x…

MySQL 数据库面试题

TOC 1. MySQL 的内连接、左连接、右连接有有什么区别? inner join 内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集。 left join 在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记…

STM32F401RET6 LQFP64 (Nucleo-F401RE) uart 打印输出

STM32F401RET6 LQFP64 (Nucleo-F401RE) uart 打印输出 1.STM32F401RET6 芯片情况 2.板子硬件 电源部分,开发板可利用JP5跳帽座子来选择使用USB供电或者使用管脚座子的外部Vin进行供电,无论是哪种供电,都需要经过U4的5V转成3.3V的LDO的再给S…

Simulink中如何获取所需变量对应的时间,并实时传输给其他模块

假设需要将时间信息传输给一个显示器模块,可以按照以下步骤进行操作: 在模型中添加“Clock”模块,将其输出与MATLAB函数“simulinktime”模块进行连接。 在模型中添加一个Scope模块,将其输入与Clock模块的输出进行连接。 运行模型,Scope模块将显示当前的仿真时间。 将Scop…

2023自动化测试选择什么工具或者框架好呢?

自动化测试的工具或者框架在市场上种类是比较繁多的。那么作为软件测试开发者应该怎么去选择呢?笔者觉得可以从测试需求、测试用例复杂度、技能水平和预算等方面去考虑。 Selenium 这是最常用的自动化测试工具之一,它可以模拟用户在不同的浏览器中进行操…

工厂人员定位系统源码,支持智能考勤、工时统计、行为检测、历史轨迹回放、人员管理、电子围栏功能

系统概述: 工厂人员定位系统,采用UWB定位技术,通过在厂区内部署一定数量的定位基站,以及为人员、车辆、物资佩戴标签卡的形式,实时获取人员精确位置,精度高达10cm。 工厂人员定位系统可实现物资/车辆实时定…

【Linux】】Linux权限的理解

一.Linux中的用户 Linux中分为两种用户,分别为: 1.root 用户,也叫超级用户,它的权限非常高,不受其他权限的约束,也就是可以为所欲为; 2.普通用户:除了root用户外,都是普通…

【2023春招】4399 web后台-Java后端开发

目录 一、JVM1.类加载过程2.static和final变量的初始化时机 二、依赖1.Spring Boot 自动装配2.使用依赖过程中遇到问题如何排查3.引入的某个依赖不符合预期,如何处理 三、数据库:1.InnoDB 和 MyISAM 索引的区别2.字符串类型字段,WHERE 数字&a…

枚举【Java】

文章目录 枚举的使用switch语句Enum类的常用方法枚举的构造方法 反射与枚举 在之前的学习中,如果我们需要组织一组枚举类型的数据,我们通常会使用常量来进行定义。但这种定义方式存在一个问题就是:如果在一个程序中,普通常量和使用…

1053 Path of Equal Weight(超级无敌详细注释+45行代码)

分数 30 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 Given a non-empty tree with root R, and with weight Wi​ assigned to each tree node Ti​. The weight of a path from R to L is defined to be the sum of the weights of all the nodes along the pa…

UE5.1.1C++从0开始(6.两个额外的魔法弹:瞬移魔法弹和黑洞魔法弹)

做完这两个功能总共花费了一个下午加一个晚上的时间,瞬移魔法弹难度较低,黑洞魔法可能我的理解有误导致消耗时间较长,我会在下面把踩的坑写出来。 加上这个作业,我们一共做了三个魔法子弹了。同时那个老师也说我们可以写一个父类…

js中各种运算符

文章目录 扩展运算符:...逻辑运算符(&& 或 || )第一、&& (逻辑与)运算,看一个简单的例子:第二、|| (逻辑或)运算,看一个简单的例子:三、&& (逻辑与) 和||(逻…

JMX vs JFR:谁才是最强大的JVM监控利器?

大家好,我是小米!今天我们来聊一聊JVM监控系统,特别是关于JMX和JFR的使用。你是否有过在线上应用出现性能问题时,无法准确获取关键指标的困扰呢?那么,不妨听听我给大家带来的解决方案。 什么是JMX 首先&a…

什么是CTF?打CTF的意义是什么?(附网络安全入门教程)

什么是CTF? CTF在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。它起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今,已经成为全球范围网络安全圈流行的竞赛形式&#xff0…

使用mkdocs快速部署上线静态站点到Github

背景 mkdocs是一种方便地生成站点的工具,相比hugo、hexo等个人博客而言,mkdocs更加简便、轻量级,可以快速帮助部署上线类似个人技术本(notebook,wiki)之类的站点。并且支持默认支持站点内搜索,…

网络安全自学路线

很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。 算上从学校开始学习,已经在网安这条路上走…

基于ensp的mpls vpn跨域optionA方案(分公司之间不能互访但是能访问总部场景)

目录 一 实验拓扑 二 实验要求 三 实验分析 四 实验配置说明 4.1完成正常ip地址配置,ISP内部使用ospf协议和mpls ldp协议 4.2 PE和CE之间起ebgp邻居 4.3 PE和PE之间起mpbgp邻居 4.4 PE和CE、ASBR之间设置VRF来进行RT值的过滤,选择合适的RT值来完…

网络编程:TCP socket

文章目录 阅读前导 服务端定义日志框架成员属性服务端框架 初始化服务器创建套接字绑定开启监听 运行服务器netstat 工具获取连接和通信准备通信逻辑 单进程服务端函数(version1)telent 工具测试 多进程服务端(version2)创建子进程…

手把手教你学习IEC104协议和编程实现 十四-文件操作之目录操作

文件服务也算是最后一个系统的大章节了。早期的IEC104软件仅实现了基本的通讯,也就是我们常说的3遥,对于定值和文件的操作都很少提及。 首先我们先要看看文件都包含那些。 文件包含的内容 故障录波文件 故障录波文件我们单独开一章来讲解。包含通讯及文件的格式 历史数据…

多核系统内存假共享问题

多核处理器(SMP)系统中, 每一个处理器都有一个本地高速缓存。内存系统必须保证高速缓存的一致性。当不同处理器上的线程修改驻留再同一高速缓存中的变量时就会发生假共享(false sharing),结果导致高速缓存无效,并强制更…