sunsili 发表于 2023-7-27 16:51:15

openwrt的network文件怎么生成的

本帖最后由 sunsili 于 2023-7-28 16:03 编辑

openwrt的network文件怎么生成的?
openwrt的network文件,或者说在/etc/config下的文件,都是动态生成的。脚本的定义openwrt源码目录下的ackage/base-files/files/lib/functions中,有以下几个文件:ls package/base-files/files/lib/functions/
leds.shnetwork.shpreinit.shservice.shsystem.shuci-defaults-new.shuci-defaults.sh
其中uci-defaults.sh会生成默认的/etc/config下的文件,而其它文件是它的“库”。我们看一看uci-default.sh的内容cat package/base-files/files/lib/functions/uci-defaults.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_led_timer() {
      local cfg="led_$1"
      local name=$2
      local sysfs=$3
      local delayon=$4
      local delayoff=$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='timer'
set system.$cfg.delayon='$delayon'
set system.$cfg.delayoff='$delayoff'
EOF
      UCIDEF_LEDS_CHANGED=1
}

ucidef_set_led_mmc() {
      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_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
      local proto=${3:-"none"}

      uci batch <<EOF
set network.$cfg='interface'
set network.$cfg.ifname='$ifname'
set network.$cfg.proto='$proto'
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='$ifname'
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固件的默认配置了。调用这些库的脚本在这里:
root@OMJ:~# ls /etc/board.d
01_leds   02_network

对于网络,则是02_network文件,看看该文件的开头内容为:
root@OMJ:~# cat /etc/board.d/02_network
#!/bin/sh
. /lib/functions.sh. /lib/ramips.sh. /lib/functions/uci-defaults-new.sh. /lib/functions/system.sh
ramips_setup_rt3x5x_vlans(){      if [ ! -x /sbin/swconfig ]; then                # legacy default                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                return      fi      local wanports=""      local lanports=""      for port in 5 4 3 2 1 0; do                if [ `swconfig dev rt305x port $port get disable` = "1" ]; then                        continue                fi                if [ `swconfig dev rt305x port $port get lan` = "0" ]; then                        wanports="$port $wanports"                else                        lanports="$port $lanports"                fi      done      ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"      ucidef_add_switch "rt305x" "1" "1"      ucidef_add_switch_vlan "rt305x" "1" "$lanports 6t"      ucidef_add_switch_vlan "rt305x" "2" "$wanports 6t"}
ramips_setup_interfaces(){      local board="$1"
      ucidef_set_interface_loopback
      case $board in      a5-v11)                ucidef_set_interface_lan "eth0.1"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "0 6t"                ;;
      3g150b | \      3g300m | \      linkits7688 | \      linkits7688d | \      microwrt | \      w150m | \      zte-q7 | \      all0256n | \      all5002 | \      all5003 | \      broadway | \      dcs-930| \      dcs-930l-b1| \      ht-tm02| \      ncs601w | \      wnce2001)                ucidef_add_switch "switch0" "1" "0"                ucidef_set_interface_lan "eth0"                ;;
      3g-6200nl | \      mlw221 | \      mr-102n)                ucidef_set_interface_lan "eth0.2"                ;;      mlwg2)                ucidef_set_interface_lan "eth0.1"                ;;
      m2m)                ucidef_add_switch "switch0" "4"                ucidef_set_interface_lan "eth0"                ;;
      wizard8800 | \      wl-330n | \      wmr300)                ucidef_set_interface_lan "eth0.1"                ;;
      b2c | \      nw718 | \      psr-680w | \      sl-r7205 | \      w502u | \      wr6202)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ;;
      awapn2403)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "0 6t"                ucidef_add_switch_vlan "switch0" "2" "1 6t"                ;;
      br-6475nd)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "1 2 3 4 9t"                ucidef_add_switch_vlan "switch0" "2" "0 9t"                ;;
      re6500 | \      asl26555)                ucidef_set_interface_lan "eth0.1"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "1 2 3 4 6t"                ;;
      cf-wr800n|\      ex2700)                ucidef_set_interface_lan "eth0.1"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "4 6t"                ;;
      cy-swr1100)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 9t"                ucidef_add_switch_vlan "switch0" "2" "4 9t"                ;;
      3g-6200n | \      ai-br100 | \      dir-610-a1 | \      dir-300-b7 | \      dir-320-b1 | \      dir-615-h1 | \      firewrt | \      pbr-m1 | \      hlk-rm04 | \      mt7621 | \      mt7628 | \      mzk-w300nh2 | \      mzk-750dhp | \      whr-300hp2 | \      whr-600d | \      wsr-600 | \      wsr-1166 | \      wt1520 | \      xiaomi-miwifi-mini |\      y1|\      zbt-wg2626)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 6t"                ucidef_add_switch_vlan "switch0" "2" "4 6t"                ;;
      whr-1166d)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 6t"                ucidef_add_switch_vlan "switch0" "2" "5 6t"                ;;      wizfi630a)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "1 2 6t"                ucidef_add_switch_vlan "switch0" "2" "0 6t"                ;;      awm002-evb | \      awm003-evb | \      argus-atp52b | \      dir-645 | \      dir-860l-b1 | \      f5d8235-v1 | \      f5d8235-v2 | \      hg255d | \      rt-n14u | \      wrtnode | \      wt3020 | \      ur-326n4g | \      zbt-wa05)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "1 2 3 4 6t"                ucidef_add_switch_vlan "switch0" "2" "0 6t"                ;;
      ur-336un)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ;;
      br6524n | \      v11st-fe)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "1 2 3 4 5t"                ucidef_add_switch_vlan "switch0" "2" "0 5t"                ;;
      ar670w | \      ar725w | \      rt-n15 | \      wl-351)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 5t"                ucidef_add_switch_vlan "switch0" "2" "4 5t"                ;;
      rt-n56u)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 8t"                ucidef_add_switch_vlan "switch0" "2" "4 8t"                ;;
      tew-691gr|\      tew-692gr)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "0t 1 2 3 4"                ucidef_add_switch_vlan "switch0" "2" "0t 5"                ;;
      vocore)                ucidef_set_interface_lan "eth0.1"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "0 4 6t"                ;;
      wcr-150gn)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "0 6t"                ucidef_add_switch_vlan "switch0" "2" "6t"                ;;
      wr8305rt)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4 6t"                ucidef_add_switch_vlan "switch0" "2" "4 6t"                ;;
      y1s)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "1 2 3 4 5 6t"                ucidef_add_switch_vlan "switch0" "2" "0 6t"                ;;      d105 | \      na930 | \      omni-emb-hpm|\      wli-tx4-ag300n)                ucidef_set_interface_lan "eth0"                ;;
      e1700 | \      mt7620a_mt7530)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch1" "1" "1"                ucidef_add_switch_vlan "switch1" "1" "0 1 2 3 6t"                ucidef_add_switch_vlan "switch1" "2" "4 6t"                ;;
      wzr-agl300nh)                ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                ucidef_add_switch "switch0" "1" "1"                ucidef_add_switch_vlan "switch0" "1" "1 2 3 4 5t"                ucidef_add_switch_vlan "switch0" "2" "0 5t"                ;;      *)                RT3X5X=`cat /proc/cpuinfo | egrep "(RT3.5|RT5350)"`                if [ -n "${RT3X5X}" ]; then                        ramips_setup_rt3x5x_vlans                else                        ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"                fi                ;;      esac}
ramips_setup_macs(){      local board="$1"      local lan_mac=""      local wan_mac=""
      case $board in      br-6475nd)                lan_mac=$(cat /sys/class/net/eth0/address)                wan_mac=$(mtd_get_mac_binary devdata 7)                ;;
      w306r-v20)                lan_mac=$(cat /sys/class/net/eth0/address)                wan_mac=$(macaddr_add "$lan_mac" 5)                ;;
      tew-691gr)                lan_mac=$(cat /sys/class/net/eth0/address)                wan_mac=$(macaddr_add "$lan_mac" 3)                ;;
      tew-692gr)                lan_mac=$(cat /sys/class/net/eth0/address)                wan_mac=$(macaddr_add "$lan_mac" 4)                ;;
      m3 |\      m4 |\      x5 |\      x8)                lan_mac=$(cat /sys/class/net/eth0/address)                lan_mac=$(macaddr_add "$lan_mac" -2)                ;;
      a5-v11 |\      bc2 |\      broadway |\      d105 |\      dir-620-a1 |\      esr-9753 |\      freestation5 |\      hlk-rm04 | \      mpr-a1 | \      mpr-a2 | \      dir-300-b7 | \      dir-320-b1 | \      psr-680w |\      sl-r7205 |\      y1 |\      y1s)                lan_mac=$(cat /sys/class/net/eth0/address)                lan_mac=$(macaddr_setbit_la "$lan_mac")                wan_mac=$(macaddr_add "$lan_mac" 1)                ;;
      ht-tm02)                lan_mac=$(cat /sys/class/net/eth0/address)                ;;
      cy-swr1100 | \      dir-645)                lan_mac=$(mtd_get_mac_ascii nvram lanmac)                wan_mac=$(mtd_get_mac_ascii nvram wanmac)                ;;
      e1700)                wan_mac=$(mtd_get_mac_ascii config WAN_MAC_ADDR)                ;;
      wcr-150gn)                wan_mac=$(mtd_get_mac_binary factory 40)                ;;
      rt-n56u)                lan_mac=$(cat /sys/class/net/eth0/address)                lan_mac=$(macaddr_setbit_la "$lan_mac")                wan_mac=$(mtd_get_mac_binary factory 32772)                ;;
      all0239-3g | \      carambola | \      freestation5 | \      w502u | \      wnce2001)                wan_mac=$(mtd_get_mac_binary factory 46)                ;;
      wsr-600|whr-300hp2|whr-600d|whr-1166d)                wan_mac=$(mtd_get_mac_binary factory 4)                lan_mac=$wan_mac                ;;      wizfi630a)                lan_mac=$(mtd_get_mac_binary factory 4)                wan_mac=$(mtd_get_mac_binary factory 40)                ;;      wsr-1166)                local index="$(find_mtd_index "board_data")"                wan_mac="$(grep -m1 mac= "/dev/mtd${index}" | cut -d= -f2)"                lan_mac=$wan_mac                ;;      linkits7688 | \      linkits7688d)                wan_mac=$(mtd_get_mac_binary factory 4)                lan_mac=$(mtd_get_mac_binary factory 46)                ;;      *)                lan_mac=$(cat /sys/class/net/eth0/address)                wan_mac=$(macaddr_add "$lan_mac" 1)                ;;
      esac
      [ -n "$lan_mac" ] && ucidef_set_interface_macaddr lan $lan_mac      [ -n "$wan_mac" ] && ucidef_set_interface_macaddr wan $wan_mac}
board_config_updateboard=$(ramips_board_name)ramips_setup_interfaces $boardramips_setup_macs $boardboard_config_flush
exit 0
页: [1]
查看完整版本: openwrt的network文件怎么生成的