简介openwrt系统下/etc/config/network文件生成过程
openwrt的network文件,或者说在/etc/config下的文件,都是动态生成的。
脚本的函数定义在package/base-files/files/lib/functions中,有以下几个文件:
libra@SVN:~/Wang_SP4/openwrt-d03dc49/package/base-files/files/lib/functions$ ls leds.sh migrations.sh network.sh preinit.sh service.sh system.sh uci-defaults.sh
其中uci-defaults.sh会生成默认的/etc/config下的文件,而其它文件是它的“库”。
我们看一看uci-default.sh的内容
#!/bin/sh
# Copyright (C) 2011 OpenWrt.org
UCIDEF_LEDS_CHANGED=0
ucidef_set_led_netdev() {
local cfg="led_$1"
local name=$2
local sysfs=$3
local dev=$4
uci -q get system.$cfg && return 0
uci batch <<EOF
set system.$cfg='led'
set system.$cfg.name='$name'
set system.$cfg.sysfs='$sysfs'
set system.$cfg.trigger='netdev'
set system.$cfg.dev='$dev'
set system.$cfg.mode='link tx rx'
EOF
UCIDEF_LEDS_CHANGED=1
}
ucidef_set_led_usbdev() {
local cfg="led_$1"
local name=$2
local sysfs=$3
local dev=$4
uci -q get system.$cfg && return 0
uci batch <<EOF
set system.$cfg='led'
set system.$cfg.name='$name'
set system.$cfg.sysfs='$sysfs'
set system.$cfg.trigger='usbdev'
set system.$cfg.dev='$dev'
set system.$cfg.interval='50'
EOF
UCIDEF_LEDS_CHANGED=1
}
ucidef_set_led_wlan() {
local cfg="led_$1"
local name=$2
local sysfs=$3
local trigger=$4
uci -q get system.$cfg && return 0
uci batch <<EOF
set system.$cfg='led'
set system.$cfg.name='$name'
set system.$cfg.sysfs='$sysfs'
set system.$cfg.trigger='$trigger'
EOF
UCIDEF_LEDS_CHANGED=1
}
ucidef_set_led_switch() {
local cfg="led_$1"
local name=$2
local sysfs=$3
local trigger=$4
local port_mask=$5
uci -q get system.$cfg && return 0
uci batch <<EOF
set system.$cfg='led'
set system.$cfg.name='$name'
set system.$cfg.sysfs='$sysfs'
set system.$cfg.trigger='$trigger'
set system.$cfg.port_mask='$port_mask'
EOF
UCIDEF_LEDS_CHANGED=1
}
ucidef_set_led_default() {
local cfg="led_$1"
local name=$2
local sysfs=$3
local default=$4
uci -q get system.$cfg && return 0
uci batch <<EOF
set system.$cfg='led'
set system.$cfg.name='$name'
set system.$cfg.sysfs='$sysfs'
set system.$cfg.default='$default'
EOF
UCIDEF_LEDS_CHANGED=1
}
ucidef_set_led_rssi() {
local cfg="led_$1"
local name=$2
local sysfs=$3
local iface=$4
local minq=$5
local maxq=$6
local offset=$7
local factor=$8
uci -q get system.$cfg && return 0
uci batch <<EOF
set system.$cfg='led'
set system.$cfg.name='$name'
set system.$cfg.sysfs='$sysfs'
set system.$cfg.trigger='rssi'
set system.$cfg.iface='rssid_$iface'
set system.$cfg.minq='$minq'
set system.$cfg.maxq='$maxq'
set system.$cfg.offset='$offset'
set system.$cfg.factor='$factor'
EOF
UCIDEF_LEDS_CHANGED=1
}
ucidef_set_rssimon() {
local dev="$1"
local refresh="$2"
local threshold="$3"
local cfg="rssid_$dev"
uci -q get system.$cfg && return 0
uci batch <<EOF
set system.$cfg='rssid'
set system.$cfg.dev='$dev'
set system.$cfg.refresh='$refresh'
set system.$cfg.threshold='$threshold'
EOF
UCIDEF_LEDS_CHANGED=1
}
ucidef_commit_leds()
{
[ "$UCIDEF_LEDS_CHANGED" == "1" ] && uci commit system
}
ucidef_set_interface_loopback() {
uci batch <<EOF
set network.loopback='interface'
set network.loopback.ifname='lo'
set network.loopback.proto='static'
set network.loopback.ipaddr='127.0.0.1'
set network.loopback.netmask='255.0.0.0'
set network.globals='globals'
set network.globals.ula_prefix='auto'
EOF
}
ucidef_set_interface_raw() {
local cfg=$1
local ifname=$2
uci batch <<EOF
set network.$cfg='interface'
set network.$cfg.ifname='$ifname'
set network.$cfg.proto='none'
EOF
}
ucidef_set_interface_lan() {
local ifname=$1
uci batch <<EOF
set network.lan='interface'
set network.lan.ifname='$ifname'
set network.lan.force_link=1
set network.lan.type='bridge'
set network.lan.proto='static'
set network.lan.ipaddr='192.168.1.1'
set network.lan.netmask='255.255.255.0'
set network.lan.ip6assign='60'
EOF
}
ucidef_set_interface_wan() {
local ifname=$1
uci batch <<EOF
set network.wan='interface'
set network.wan.ifname='$ifname'
set network.wan.proto='dhcp'
set network.wan6='interface'
set network.wan6.ifname='@wan'
set network.wan6.proto='dhcpv6'
EOF
}
ucidef_set_interfaces_lan_wan() {
local lan_ifname=$1
local wan_ifname=$2
ucidef_set_interface_lan "$lan_ifname"
ucidef_set_interface_wan "$wan_ifname"
}
ucidef_set_interface_macaddr() {
local ifname=$1
local mac=$2
uci batch <<EOF
set network.$ifname.macaddr='$mac'
EOF
}
ucidef_add_switch() {
local name=$1
local reset=$2
local enable=$3
uci batch <<EOF
add network switch
set network.@switch[-1].name='$name'
set network.@switch[-1].reset='$reset'
set network.@switch[-1].enable_vlan='$enable'
EOF
}
ucidef_add_switch_vlan() {
local device=$1
local vlan=$2
local ports=$3
uci batch <<EOF
add network switch_vlan
set network.@switch_vlan[-1].device='$device'
set network.@switch_vlan[-1].vlan='$vlan'
set network.@switch_vlan[-1].ports='$ports'
EOF
}
ucidef_add_switch_port() {
local device=$1
local port=$2
uci batch <<EOF
add network switch_port
set network.@switch_port[-1].device='$device'
set network.@switch_port[-1].port='$port'
EOF
}
看到了吧,改这里的内容就会改到openwrt固件的默认配置了。
调用这些库的函数在这里:
libra@SVN:~/Wang_SP4/openwrt-d03dc49/target/linux/ramips/base-files/etc/board.d$ ls 01_leds 02_network 03_gpio_switches
libra@SVN:~/Wang_SP4/openwrt-d03dc49/package/base-files/files/bin$ ls
board_detect config_generate ipcalc.sh
对于网络,则是config_generate 文件,看看该文件后面内容为:
json_init
json_load "$(cat ${CFG})"if [ ! -s /etc/config/network ]; thentouch /etc/config/networkgenerate_static_networkjson_get_keys keys networkfor key in $keys; do generate_network $key; donejson_get_keys keys switchfor key in $keys; do generate_switch $key; done
fiif [ ! -s /etc/config/system ]; thentouch /etc/config/systemgenerate_static_systemjson_get_keys keys rssimonfor key in $keys; do generate_rssimon $key; donejson_get_keys keys gpioswitchfor key in $keys; do generate_gpioswitch $key; donejson_get_keys keys ledfor key in $keys; do generate_led $key; done
fi
uci commit
libra@SVN:~/Wang_SP4/openwrt-d03dc49/package/base-files/files/bin$ cat config_generate
这样就清晰了。
相关文章:
简介openwrt系统下/etc/config/network文件生成过程
openwrt的network文件,或者说在/etc/config下的文件,都是动态生成的。 脚本的函数定义在package/base-files/files/lib/functions中,有以下几个文件: libraSVN:~/Wang_SP4/openwrt-d03dc49/package/base-files/files/lib/functi…...
javaWeb项目-Springboot+vue-XX图书馆管理系统功能介绍
本项目源码(点击下方链接下载):java-springbootvue阿博图书馆管理系统源码(项目源码-说明文档)资源-CSDN文库 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端&…...
华为ENSP用户权限深度解析:构建安全高效的网络管理
在华为ENSP(Enterprise Network Simulation Platform)用户界面中,用户权限级别是一个重要的概念,它用于限制不同用户访问设备的权限,从而增加设备管理的安全性。以下是对华为ENSP用户界面用户权限级别的详细解释&#…...
NFC之NDEF
NDEF的通用格式 MB标志是一个1位字段,当其被设置时,表示NDEF消息的开始。 ME标志是一个1位字段,当其被设置时,表示NDEF消息的结束。 CF标志是一个1位字段,指示这是分块有效载荷的第一个记录块或中间记录块。 SR标志是…...
学习第三十六行
QValidator::State里面state为0,完全不匹配,1,部分匹配,2,完全匹配,对于label或者textedit里面的字符均为QString类型,特别是遇到数字,需要QString::number转化,对于正则表达式&…...
停车场问题
实验内容 1.问题描述: 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆达到时间的先后顺序,依次由北向南排列(大门在最南端,最先达到的第一辆车停放在车场的最北端),若车场…...
海康相 机
海康机器人-机器视觉-下载中心 海康威视MVS客户端及虚拟相机c开发案例-CSDN博客 相机驱动下载: 下载中心 VisionMaster 视频教程_哔哩哔哩_bilibili 【VisionMaster】试用版安装说明_visionmaster试用版-CSDN博客 海康视觉算法平台VisionMaster 4.3.0 C# 二次…...
用map实现el-table全选
<el-button size"small" type"primary" click"searchProxy">查询</el-button><el-checkbox v-model"selectAll" change"changeSelectAll" >全选</el-checkbox><el-table:data"taskList&…...
【开源免费】基于SpringBoot+Vue.JS社区团购系统(JAVA毕业设计)
本文项目编号 T 024 ,文末自助获取源码 \color{red}{T024,文末自助获取源码} T024,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…...
Java进阶之路:构造方法
🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝 🥇博主昵称:小菜元 🍟博客主页…...
2025秋招八股文--网络原理篇
前言 1.本系列面试八股文的题目及答案均来自于网络平台的内容整理,对其进行了归类整理,在格式和内容上或许会存在一定错误,大家自行理解。内容涵盖部分若有侵权部分,请后台联系,及时删除。 2.本系列发布内容分为12篇…...
C#基础-面向对象的七大设计原则
目录 1.开放封闭原则(OCP) 2.单一职责原则(SRP) 3.依赖倒置原则(DIP) 4.里氏替换原则(LSP) 5.接口隔离原则(ISP) 6.合成复用原则(CRP&#…...
CSS 容器查询一探究竟
引言 在 《请列举四种「等比例自适应矩形」实现方案?》 一文中我曾使用到容器查询单位 cqw, 当时在使用 cqw 过程中只是简单过了一下容器查询相关的内容!! 所以这次专门出一篇文章, 对容器查询做一个梳理… 一、是什么 在实际开发中您是否遇到过需要根据父容器的…...
AI论文写作:如何轻松实现高原创度大揭秘
随着人工智能技术的迅猛进步,AI论文写作工具在学术界开始崭露头角,作为一种辅助手段。这些工具不仅能高效地生成论文的初步版本或部分章节,而且其产出的内容往往展现出高度的创新性。本文将探讨AI论文写作工具为何能产出如此高原创度的内容&a…...
AtCoder Beginner Contest 375 A-E 题解
我的老师让我先做最后再交,看正确率(即以OI赛制打abc) 所以我用的小号(… …) C 卡了老半天才出来,我把题读错了 难度: A. Seats 题意 给你一个字符串 S S S,仅包含 . 和 #&…...
其他-自己手动更换汽车电磁进排气阀0.9.2
其他-自己手动更换汽车电磁进排气阀0.9.0 背景本次工具流程注意参考 2024年10月18日08:57:00—0.9.2 背景 昨天手动更换了电磁阀,记录下过程和注意事项,简单总结了一下 本次工具 10号套筒和工具老虎钳锤子一字改刀新的进排气电磁阀 流程 打开引擎盖…...
生成模型初认识
生成模型初认识 参考学习资料:李宏毅-机器学习 以下为课程过程中的简易笔记 生成模型 为什么要用生成模型?——创造力:同一个输入,产生不同的输出(distribution),有一定概率发生某种随机事件…...
Java中的一些名词概念
**函数式接口:** 概念:一个接口中的抽象方法只有一个,那么这个接口就是一个函数式接口。形参: 形参变量是**功能函数里的变量**,只有<u>在被调用的时候才分配内存单元</u>,<u>调用结束后立即释放</u>。…...
沈阳乐晟睿浩科技有限公司:引领抖音小店迈向新纪元
在当今数字化浪潮汹涌的时代,电子商务以其独特的魅力和无限潜力,正深刻改变着人们的消费习惯与商业模式。在这场变革中,沈阳乐晟睿浩科技有限公司凭借其敏锐的市场洞察力和卓越的技术实力,成为了抖音小店领域的佼佼者,…...
[图形学]蒙特卡洛积分方法介绍及其方差计算
一、简介 本文介绍了蒙特卡洛积分算法的基本原理和其误差计算。 二、蒙特卡洛积分介绍 1. 介绍 蒙特卡洛积分算法是一种数值积分算法,用于对复杂函数进行积分。 例如,对于目标积分函数: ∫ a b f ( x ) d x (1) \int_{a}^{b}f(x)\rm{d}x…...
Honey Select 2终极增强指南:200+插件整合补丁一键优化游戏体验
Honey Select 2终极增强指南:200插件整合补丁一键优化游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为《Honey Select 2》游戏体验不…...
4个效率倍增技巧:D3KeyHelper让暗黑3操作自动化更精准
4个效率倍增技巧:D3KeyHelper让暗黑3操作自动化更精准 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 在暗黑破坏神3的高难度游戏场景中&…...
如何永久保存番茄小说?3个强力方案告别网络依赖
如何永久保存番茄小说?3个强力方案告别网络依赖 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 你是否曾在深夜追更时突然断网?是否担心喜欢的小说某天会从平台消失…...
3步掌握microeco:微生物网络分析的完整指南
3步掌握microeco:微生物网络分析的完整指南 【免费下载链接】microeco An R package for data analysis in microbial community ecology 项目地址: https://gitcode.com/gh_mirrors/mi/microeco 还在为复杂的微生物网络分析而头疼吗?面对海量的物…...
终极指南:如何快速掌握 Tooltipster 提示框插件的完整教程
终极指南:如何快速掌握 Tooltipster 提示框插件的完整教程 【免费下载链接】tooltipster A jQuery tooltip plugin 项目地址: https://gitcode.com/gh_mirrors/to/tooltipster Tooltipster 是一个灵活且功能强大的 jQuery 提示框插件,专为现代 We…...
MySQL8.0大小写敏感坑爹实录:lower_case_table_names从报错到解决的完整过程
MySQL 8.0大小写敏感参数避坑指南:从报错到根治的深度实践 最近在迁移开发环境到Docker时,遇到了一个令人头疼的问题——MySQL 8.0服务无法启动,报错提示Different lower_case_table_names settings for server (2) and data dictionary (0)。…...
失业期PHP程序员,能合作就别对着干。多一个朋友,少一个敌人。
这句话是失业期 PHP 程序员在资源匮乏环境下,从“零和博弈”转向“正和博弈”的生存智慧。 它的本质是:承认个体力量的局限性,通过降低人际摩擦系数,将潜在的竞争对手转化为互补的合作伙伴。在失业期,你的核心资产不是…...
OpenClaw操作简化技巧:Kimi-VL-A3B-Thinking常用任务的一键触发
OpenClaw操作简化技巧:Kimi-VL-A3B-Thinking常用任务的一键触发 1. 为什么需要操作简化 第一次接触OpenClaw时,我被它强大的自动化能力震撼——直到需要反复输入冗长的指令来触发同一个任务。比如每天早晨需要让Kimi-VL-A3B-Thinking模型帮我整理前一天…...
GLM-OCR辅助Anaconda环境下的数据分析:自动识别图表中的数据标签
GLM-OCR辅助Anaconda环境下的数据分析:自动识别图表中的数据标签 你是不是也遇到过这种情况?从一份PDF报告或者一篇学术论文里,看到一张特别有价值的图表,上面有你想分析的数据趋势。但问题是,这些数据都“锁”在图片…...
ExcelCPU安全指南:在电子表格中运行代码的5大风险与防护策略
ExcelCPU安全指南:在电子表格中运行代码的5大风险与防护策略 【免费下载链接】excelCPU 16-bit CPU for Excel, and related files 项目地址: https://gitcode.com/gh_mirrors/ex/excelCPU ExcelCPU是一个创新的16位CPU模拟器,完全在Excel电子表格…...
