zoukankan      html  css  js  c++  java
  • openwrt14.07 howto generate /etc/config/network

    openwrt14.07 howto generate /etc/config/network

    1 firstboot test in board

     

    1.1 firstboot operation

    root@OpenWrt:~# firstboot
    
    root@OpenWrt:~# ls /etc/uci-defaults/
    01_leds                       09_fix-trx-header
    02_network                    10_migrate-shadow
    03_network-switchX-migration  11_migrate-sysctl
    03_network-vlan-migration     12_network-generate-ula
    04_led_migration              30_uboot-envtools
    09_fix-seama-header
    
    root@OpenWrt:~# ls /etc/config/
    auth_local      dropbear        igmp            system
    autossh         firewall        lbd             wifidog
    captive_portal  horst           php5-fastcgi    wireless
    

    after firstboot & before reboot

    1. there are files in /etc/uci-defaults
    2. there is no network in /etc/config

    1.2 reboot operation

    root@OpenWrt:~# reboot
    
    root@OpenWrt:~# ls /etc/config/
    auth_local      dropbear        igmp            php5-fastcgi    wifidog
    autossh         firewall        lbd             system          wireless
    captive_portal  horst           network         ubootenv
    
    root@OpenWrt:~# ls /etc/uci-defaults/
    root@OpenWrt:~#
    

    after firstboot & reboot

    1. network generated in /etc/config
    2. files in /etc/uci-defaults are removed

    2 analysis

     

    2.1 invoke sequences

    1. /sbin/init -> procd -> "sysinit" -> /etc/rc.d/xxx
    2. /etc/rc.d/S10boot -> /etc/init.d/boot
    3. /etc/init.d/boot -> uci_apply_defaults
    4. uci_apply_defaults -> /etc/uci-defaults/02_network

    2.2 /etc/init.d/boot -> uci_apply_defaults

    Focus on the boot script which is located in package/base-files/files/etc/init.d/boot

    uci_apply_defaults() {
    	. /lib/functions/system.sh
    
    	cd /etc/uci-defaults || return 0
    	files="$(ls)"
    	[ -z "$files" ] && return 0
    	mkdir -p /tmp/.uci
    	for file in $files; do
    		( . "./$(basename $file)" ) && rm -f "$file"
    	done
    	uci commit
    }
    
    boot() {
    	...
    
    	uci_apply_defaults
    
    	...
    }
    

    Once openwrt starts, /etc/init.d/boot will boot, and invoke uci_apply_defaults.

    The files in etc/uci-defaults will be executed only once. That's why when we invoke firstboot, there are files in /etc/uci-defaults, and after reboot there are nothing left.

    2.3 /etc/uci-defaults/02_network

    SDK: 02_network located in target/linux/ar71xx/base-files/etc/uci-defaults/02_network

    board: 02_network located in /etc/uci-defaults

    After 'firstboot', this file exist in /etc/uci-defaults, and disappear after reboot.

    #!/bin/sh
    #
    # Copyright (C) 2011 OpenWrt.org
    #
    
    [ -e /etc/config/network ] && exit 0
    
    touch /etc/config/network
    
    . /lib/functions/uci-defaults.sh
    . /lib/ar71xx.sh
    
    ucidef_set_interface_loopback
    
    board=$(ar71xx_board_name)
    
    ...
    
    uci commit network
    
    exit 0
    

    From this script, /etc/config/network created and filled by /lib/functions/uci-defaults.sh

    2.4 uci-defaults.sh

    file locattion:

    in board: /lib/functions/uci-defaults.sh

    in SDK: 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_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
    }
    
     
  • 相关阅读:
    SVN服务器搭建(一)
    排序算法二:冒泡排序
    【LeetCode】136. Single Number
    【LeetCode】217. Contains Duplicate
    【LeetCode】189. Rotate Array
    【LeetCode】122. Best Time to Buy and Sell Stock II
    【LeetCode】26. Remove Duplicates from Sorted Array
    【LeetCode】20. Valid Parentheses
    【LeetCode】680. Valid Palindrome II
    【LeetCode】345. Reverse Vowels of a String
  • 原文地址:https://www.cnblogs.com/aqing1987/p/5387702.html
Copyright © 2011-2022 走看看