X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fstaging%2Fwigyori.git;a=blobdiff_plain;f=package%2Fbase-files%2Ffiles%2Fbin%2Fconfig_generate;h=abb1388ba15dac23800b9dbb158296a8fbabefc6;hp=49784ebfaec6b0bc7d4852b1ac8ae2bfdcdcd963;hb=ad27c133eb606ee39fa346b7bdb26c1764ee869e;hpb=6c8daa6ba3e39cfb5373eff1297c798676ef76eb diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate index 49784ebfae..abb1388ba1 100755 --- a/package/base-files/files/bin/config_generate +++ b/package/base-files/files/bin/config_generate @@ -4,7 +4,8 @@ CFG=/etc/board.json . /usr/share/libubox/jshn.sh -[ -f $CFG ] || exit 1 +[ -s $CFG ] || /bin/board_detect || exit 1 +[ -s /etc/config/network -a -s /etc/config/system ] && exit 0 generate_static_network() { uci -q batch <<-EOF @@ -14,17 +15,21 @@ generate_static_network() { set network.loopback.proto='static' set network.loopback.ipaddr='127.0.0.1' set network.loopback.netmask='255.0.0.0' - delete network.globals - set network.globals='globals' - set network.globals.ula_prefix='auto' EOF + [ -e /proc/sys/net/ipv6 ] && { + uci -q batch <<-EOF + delete network.globals + set network.globals='globals' + set network.globals.ula_prefix='auto' + EOF + } if json_is_a dsl object; then json_select dsl if json_is_a atmbridge object; then json_select atmbridge - local vpi vci encaps payload - json_get_vars vpi vci encaps payload + local vpi vci encaps payload nameprefix + json_get_vars vpi vci encaps payload nameprefix uci -q batch <<-EOF delete network.atm set network.atm='atm-bridge' @@ -32,6 +37,7 @@ generate_static_network() { set network.atm.vci='$vci' set network.atm.encaps='$encaps' set network.atm.payload='$payload' + set network.atm.nameprefix='$nameprefix' EOF json_select .. fi @@ -42,7 +48,7 @@ generate_static_network() { json_get_vars type annex firmware tone xfer_mode uci -q batch <<-EOF delete network.dsl - set network.dsl='$type' + set network.dsl='dsl' set network.dsl.annex='$annex' set network.dsl.firmware='$firmware' set network.dsl.tone='$tone' @@ -56,11 +62,11 @@ generate_static_network() { addr_offset=2 generate_network() { - local ifname macaddr protocol type + local ifname macaddr protocol type ipaddr netmask json_select network json_select "$1" - json_get_vars ifname macaddr protocol + json_get_vars ifname macaddr protocol ipaddr netmask json_select .. json_select .. @@ -77,52 +83,67 @@ generate_network() { set network.$1.type='$type' set network.$1.ifname='$ifname' set network.$1.proto='none' - set network.$1.macaddr='$macaddr' EOF + if [ -n "$macaddr" ]; then + for name in $ifname; do + uci -q batch <<-EOF + delete network.$1_${name/./_}_dev + set network.$1_${name/./_}_dev='device' + set network.$1_${name/./_}_dev.name='$name' + set network.$1_${name/./_}_dev.macaddr='$macaddr' + EOF + done + fi + case "$protocol" in static) - local ipaddr + local ipad case "$1" in - lan) ipaddr="192.168.1.1" ;; - *) ipaddr="192.168.$((addr_offset++)).1" ;; + lan) ipad=${ipaddr:-"192.168.1.1"} ;; + *) ipad=${ipaddr:-"192.168.$((addr_offset++)).1"} ;; esac + netm=${netmask:-"255.255.255.0"} + uci -q batch <<-EOF set network.$1.proto='static' - set network.$1.ipaddr='$ipaddr' - set network.$1.netmask='255.255.255.0' - set network.$1.ip6assign='60' + set network.$1.ipaddr='$ipad' + set network.$1.netmask='$netm' EOF + [ -e /proc/sys/net/ipv6 ] && uci set network.$1.ip6assign='60' ;; dhcp) # fixup IPv6 slave interface if parent is a bridge [ "$type" = "bridge" ] && ifname="br-$1" - uci -q batch <<-EOF - set network.$1.proto='dhcp' - delete network.${1}6 - set network.${1}6='interface' - set network.${1}6.ifname='$ifname' - set network.${1}6.proto='dhcpv6' - EOF + uci set network.$1.proto='dhcp' + [ -e /proc/sys/net/ipv6 ] && { + uci -q batch <<-EOF + delete network.${1}6 + set network.${1}6='interface' + set network.${1}6.ifname='$ifname' + set network.${1}6.proto='dhcpv6' + EOF + } ;; pppoe) - # fixup IPv6 slave interface - ifname="pppoe-$1" - uci -q batch <<-EOF set network.$1.proto='pppoe' set network.$1.username='username' set network.$1.password='password' - set network.$1.ipv6='auto' - delete network.${1}6 - set network.${1}6='interface' - set network.${1}6.ifname='$ifname' - set network.${1}6.proto='dhcpv6' EOF + [ -e /proc/sys/net/ipv6 ] && { + uci -q batch <<-EOF + set network.$1.ipv6='1' + delete network.${1}6 + set network.${1}6='interface' + set network.${1}6.ifname='@${1}' + set network.${1}6.proto='dhcpv6' + EOF + } ;; esac } @@ -135,55 +156,59 @@ generate_switch_vlans_ports() { # autogenerate vlans # - json_get_keys roles roles - json_select roles + if json_is_a roles array; then + json_get_keys roles roles + json_select roles - for role in $roles; do - json_select "$role" - json_get_vars ports - json_select .. + for role in $roles; do + json_select "$role" + json_get_vars ports + json_select .. - uci -q batch <<-EOF - add network switch_vlan - set network.@switch_vlan[-1].device='$switch' - set network.@switch_vlan[-1].vlan='$role' - set network.@switch_vlan[-1].ports='$ports' - EOF - done + uci -q batch <<-EOF + add network switch_vlan + set network.@switch_vlan[-1].device='$switch' + set network.@switch_vlan[-1].vlan='$role' + set network.@switch_vlan[-1].ports='$ports' + EOF + done - json_select .. + json_select .. + fi # # write port specific settings # - json_get_keys ports ports - json_select ports + if json_is_a ports array; then + json_get_keys ports ports + json_select ports + + for port in $ports; do + json_select "$port" + json_get_vars num + + if json_is_a attr object; then + json_get_keys attr attr + json_select attr + uci -q batch <<-EOF + add network switch_port + set network.@switch_port[-1].device='$switch' + set network.@switch_port[-1].port=$num + EOF + + for attr in $attr; do + json_get_var val "$attr" + uci -q set network.@switch_port[-1].$attr="$val" + done + json_select .. + fi + json_select .. + done - for port in $ports; do - json_select "$port" - json_get_vars num - - if json_is_a attr object; then - json_get_keys attr attr - json_select attr - uci -q batch <<-EOF - add network switch_port - set network.@switch_port[-1].device='$switch' - set network.@switch_port[-1].port=$num - EOF - - for attr in $attr; do - json_get_var val "$attr" - uci -q set network.@switch_port[-1].$attr="$val" - done - json_select .. - fi json_select .. - done - - json_select .. + fi } generate_switch() { @@ -192,7 +217,8 @@ generate_switch() { json_select switch json_select "$key" - json_get_vars enable reset blinkrate cpu_port + json_get_vars enable reset blinkrate cpu_port \ + ar8xxx_mib_type ar8xxx_mib_poll_interval uci -q batch <<-EOF add network switch @@ -200,6 +226,8 @@ generate_switch() { set network.@switch[-1].reset='$reset' set network.@switch[-1].enable_vlan='$enable' set network.@switch[-1].blinkrate='$blinkrate' + set network.@switch[-1].ar8xxx_mib_type='$ar8xxx_mib_type' + set network.@switch[-1].ar8xxx_mib_poll_interval='$ar8xxx_mib_poll_interval' EOF generate_switch_vlans_ports "$1" @@ -208,6 +236,52 @@ generate_switch() { json_select .. } + +generate_static_system() { + uci -q batch <<-EOF + delete system.@system[0] + add system system + set system.@system[-1].hostname='OpenWrt' + set system.@system[-1].timezone='UTC' + set system.@system[-1].ttylogin='0' + set system.@system[-1].log_size='64' + set system.@system[-1].urandom_seed='0' + + delete system.ntp + set system.ntp='timeserver' + set system.ntp.enabled='1' + set system.ntp.enable_server='0' + add_list system.ntp.server='0.openwrt.pool.ntp.org' + add_list system.ntp.server='1.openwrt.pool.ntp.org' + add_list system.ntp.server='2.openwrt.pool.ntp.org' + add_list system.ntp.server='3.openwrt.pool.ntp.org' + EOF + + if json_is_a system object; then + json_select system + local hostname + if json_get_var hostname hostname; then + uci -q set "system.@system[-1].hostname=$hostname" + fi + + if json_is_a ntpserver array; then + local keys key + json_get_keys keys ntpserver + json_select ntpserver + uci -q delete "system.ntp.server" + + for key in $keys; do + local server + if json_get_var server "$key"; then + uci -q add_list "system.ntp.server=$server" + fi + done + json_select .. + fi + json_select .. + fi +} + generate_rssimon() { local key="$1" local cfg="rssid_$key" @@ -257,11 +331,11 @@ generate_led() { ;; netdev) - local device - json_get_vars device + local device mode + json_get_vars device mode uci -q batch <<-EOF set system.$cfg.trigger='netdev' - set system.$cfg.mode='link tx rx' + set system.$cfg.mode='$mode' set system.$cfg.dev='$device' EOF ;; @@ -276,6 +350,15 @@ generate_led() { EOF ;; + usbport) + local ports port + json_get_values ports ports + uci set system.$cfg.trigger='usbport' + for port in $ports; do + uci add_list system.$cfg.port=$port + done + ;; + rssi) local iface minq maxq offset factor json_get_vars iface minq maxq offset factor @@ -290,18 +373,28 @@ generate_led() { ;; switch) - local port_mask - json_get_vars port_mask + local port_mask speed_mask mode + json_get_vars port_mask speed_mask mode uci -q batch <<-EOF set system.$cfg.port_mask='$port_mask' + set system.$cfg.speed_mask='$speed_mask' + set system.$cfg.mode='$mode' EOF ;; - timer) + portstate) + local port_state + json_get_vars port_state + uci -q batch <<-EOF + set system.$cfg.port_state='$port_state' + EOF + ;; + + timer|oneshot) local delayon delayoff json_get_vars delayon delayoff uci -q batch <<-EOF - set system.$cfg.trigger='timer' + set system.$cfg.trigger='$type' set system.$cfg.delayon='$delayon' set system.$cfg.delayoff='$delayoff' EOF @@ -312,21 +405,51 @@ generate_led() { json_select .. } +generate_gpioswitch() { + local cfg="$1" + + json_select gpioswitch + json_select "$cfg" + local name pin default + json_get_vars name pin default + uci -q batch <<-EOF + delete system.$cfg + set system.$cfg='gpio_switch' + set system.$cfg.name='$name' + set system.$cfg.gpio_pin='$pin' + set system.$cfg.value='$default' + EOF + json_select .. + json_select .. +} + json_init json_load "$(cat ${CFG})" -generate_static_network +umask 077 + +if [ ! -s /etc/config/network ]; then + touch /etc/config/network + generate_static_network + + json_get_keys keys network + for key in $keys; do generate_network $key; done -json_get_keys keys network -for key in $keys; do generate_network $key; done + json_get_keys keys switch + for key in $keys; do generate_switch $key; done +fi -json_get_keys keys switch -for key in $keys; do generate_switch $key; done +if [ ! -s /etc/config/system ]; then + touch /etc/config/system + generate_static_system -json_get_keys keys rssimon -for key in $keys; do generate_rssimon $key; done + json_get_keys keys rssimon + for key in $keys; do generate_rssimon $key; done -json_get_keys keys led -for key in $keys; do generate_led $key; done + json_get_keys keys gpioswitch + for key in $keys; do generate_gpioswitch $key; done + json_get_keys keys led + for key in $keys; do generate_led $key; done +fi uci commit