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
    }
    
     
  • 相关阅读:
    火狐flash插件
    centos 安装php ide (eclipse + php 插件)
    编译器的工作过程
    php中调用mysql的存储过程和存储函数
    mysql 高性能
    存储过程/游标/mysql 函数
    php 生成二维码
    frameset,frame应用,常用于后台
    html5 meta头部设置
    CAReplicatorLayer复制Layer和动画, 实现神奇的效果
  • 原文地址:https://www.cnblogs.com/aqing1987/p/5387702.html
Copyright © 2011-2022 走看看