简介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 

这样就清晰了。

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

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

相关文章

【Linux笔记】Linux命令与使用

博文将不断学习补充 学习参考博文&#xff1a; Linux命令大全&#xff1a;掌握常用命令&#xff0c;轻松使用Linux操作系统-CSDN博客 文件或目录操作命令 zip # zip是使用最多的文档压缩格式 # 方便跨平台使用&#xff0c;但是压缩率不是很高 zip指令未安装 安装zip yum ins…

python实战项目47:Selenium采集百度股市通数据

python实战项目47:Selenium采集百度股市通数据 一、思路分析二、完整代码一、思路分析 这里以获取百度股市通股评下的投票数据为例,页面中的其他数据同理。由于此页面数据是js动态加载的,所以采用Selenium获取数据。思路很简单,通过Selenium打开页面,然后定位到“股评”选…

Python闭包和修饰器

Python闭包和装饰器详解 1. 闭包&#xff08;Closure&#xff09; 闭包是Python中一个重要的概念&#xff0c;涉及嵌套函数和变量的作用域。 概念&#xff1a; 内外函数嵌套&#xff1a;闭包的形成通常涉及到一个外部函数和一个内部函数。内函数引用外函数作用域下的非全局变…

没有B柱?极氪MIX太大胆了!

文 | AUTO芯球 作者 | 雷慢 极氪又给国产车长脸了&#xff0c; 极氪MIX上市&#xff0c;创造了多个行业先例&#xff0c; 估计把合资看得一愣一愣的&#xff0c; 哪见过这样的每月都有新技术、黑科技冒出来&#xff0c; 我看完整个发布会就一个感想&#xff0c; 家里有小…

数据结构——哈夫曼树及其应用(哈夫曼编码)

判断树&#xff1a;用来描述分类过程的二叉树 哈夫曼树&#xff08;最优二叉树&#xff09;的基本概念 路径&#xff1a;从树中一个结点到另一个结点之间的分支构成这两个结点间的路径。 结点的路径长度&#xff1a;两结点间路径上的分支数。 结点的路径长度计算&#xff1…

PDF文件为什么不能编辑是?是啥原因导致的,有何解决方法

PDF文件格式广泛应用于工作中&#xff0c;但有时候我们可能遇到无法编辑PDF文件的情况。这可能导致工作效率降低&#xff0c;特别是在需要修改文件内容时显得尤为棘手。遇到PDF不能编辑时&#xff0c;可以看看是否以下3个原因导致的。 一、文件受保护 有些PDF文件可能被设置了…

JS为什么会阻塞页面渲染?

我看到一个很有意思的教学&#xff0c;我觉得实在是太牛了。我迫不及待要跟大家分享一下了。 来&#xff0c;接下来我为大家讲解一下为什么JS会阻塞页面渲染 首先讲这个大家要有简单的事件循环的概念 后面的文章会简单的为大家介绍一下这些概念 我给大家上一段代码&#xf…

leetcode动态规划(十二)-最后一块石头的重量

题目 1049.最后一块石头的重量 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结…

GORM框架中的预加载功能Preload详解

一、适用性 在使用 GORM 进行数据库操作时&#xff0c;Preload 是一种非常有用的功能&#xff0c;它用于预加载与某个模型相关联的其他模型。下面是关于 Preload 的适用性以及为什么外键字段一般需要 Preload 的一些详细说明。 1. Preload 的适用性 适用于外键字段&#xff1…

矩阵matrix

点积 在 NumPy 中&#xff0c;dot 是矩阵或向量的点积&#xff08;dot product&#xff09;操作。 假设有两个向量a和 b&#xff0c;它们的点积定义为对应元素相乘&#xff0c;然后求和。公式如下&#xff1a; 例子&#xff1a; 点积的计算步骤是&#xff1a; 因此&#xf…

【Python爬虫课程设计】社交媒体数据抓取与情感分析

【Python爬虫课程设计】社交媒体数据抓取与情感分析 文章目录 &#x1f4ca; 引言&#x1f4ca; 项目背景与设计目标 社交媒体数据的重要性项目设计目标 &#x1f4ca; 爬虫程序设计与实现 爬虫程序概述关键技术与工具数据抓取流程 &#x1f4ca; 数据处理与情感分析 数据清洗…

入门 | Prometheus+Grafana 普罗米修斯

一、prometheus介绍 1、监控系统组成 一个完整的监控系统需要包括如下功能&#xff1a;数据产生、数据采集、数据存储、数据处理、数据展示、分析、告警等。 &#xff08;1&#xff09;、数据来源 数据来源&#xff0c;也就是需要监控的数据。数据常见的产生、直接或间接暴露…

【人工智能-初级】第3章 k-最近邻算法(KNN):分类和Python实现

文章目录 一、KNN算法简介二、KNN算法的工作原理2.1 欧氏距离 三、K值的选择四、KNN算法的优缺点4.1 优点4.2 缺点 五、Python实现KNN分类5.1 导入必要的库5.2 加载数据集并进行预处理5.3 创建KNN分类器并进行训练5.4 模型预测与评估5.5 可视化K值对模型性能的影响 六、总结6.1…

服务器磁盘爆满?别慌,教你轻松清理!

服务器磁盘爆满&#xff1f;别慌&#xff0c;教你轻松清理&#xff01; 简介 服务器磁盘空间告急&#xff0c;网站访问缓慢&#xff0c;甚至无法正常运行&#xff1f;别担心&#xff0c;这篇文章将为你提供一份详细的清理指南&#xff0c;帮助你快速释放服务器磁盘空间&#x…

【算法】Bellman-Ford单源最短路径算法(附动图)

目录 一、性质 二、思路 三、有边路限制的最短路 一、性质 适用于含有负权边的图&#xff08;Dijkstra不适用&#xff09; 更简单&#xff0c;但效率慢 如果对应路径存在负权回路则没有最短路径&#xff08;可用于判断图中是否存在负权回路&#xff09; 相比于spfa&#…

[分享] SQL在线编辑工具(好用)

在线SQL编写工具&#xff08;无广告&#xff09; - 在线SQL编写工具 - Web SQL - SQL在线编辑格式化 - WGCLOUD

物联网实训项目:绿色家居套件

1、基本介绍 绿色家居通过物联网技术将家中的各种设备连接到一起&#xff0c;提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。绿色家居提供全方位的信息交互功能&#xff0c;甚至为各种能源费…

使用DeepSpeed进行单机多卡训练

这是你提供的DeepSpeed单机多卡训练步骤的Markdown格式&#xff1a; 使用 DeepSpeed 进行单机多卡训练的主要步骤 1. 安装 DeepSpeed 确保你已经安装了 DeepSpeed 及其依赖&#xff1a; pip install deepspeed设置模型并集成 DeepSpeed 在模型的定义和训练循环中集成 Deep…

solana phantom NFT图片显示不出来?

solana phantom NFT图片显示不出来&#xff1f; 问题 同样是jpeg格式图片&#xff0c;一个phatom可以显示&#xff0c;一个不可以显示为什么&#xff0c;nft图片格式大小有要求吗&#xff1f; 问题分析 Phantom 官网有一些关于 NFT 集成的文档,其中可能会有关于图片大小限制…

049_python基于Python的热门微博数据可视化分析

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…