diff options
Diffstat (limited to 'package/base-files/files/bin/config_generate')
-rwxr-xr-x | package/base-files/files/bin/config_generate | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate new file mode 100755 index 0000000..c435e7b --- /dev/null +++ b/package/base-files/files/bin/config_generate @@ -0,0 +1,173 @@ +#!/bin/sh + +CFG=/etc/board.json + +. /usr/share/libubox/jshn.sh + +[ -f $CFG ] || exit 1 + +generate_static_network() { + uci -q batch <<EOF +delete network.loopback +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' +delete network.globals +set network.globals='globals' +set network.globals.ula_prefix='fdb1:a57f:2544::/48' +EOF +} + +next_vlan=3 +generate_network() { + local vlan + + json_select network + json_select $1 + json_get_vars ifname create_vlan macaddr + json_select .. + json_select .. + + [ -n "$ifname" ] || return + [ "$create_vlan" -eq 1 ] && case $1 in + lan) vlan=1;; + wan) vlan=2;; + *) + vlan=$next_vlan + next_vlan=$((next_vlan + 1)) + ;; + esac + [ -n "$vlan" ] && ifname=${ifname}.${vlan} + uci -q batch <<EOF +delete network.$1 +set network.$1='interface' +set network.$1.ifname='$ifname' +set network.$1.force_link=1 +set network.$1.proto='none' +set network.$1.macaddr='$macaddr' +EOF + + case $1 in + lan) uci -q batch <<EOF +set network.$1.type='bridge' +set network.$1.proto='static' +set network.$1.ipaddr='192.168.1.1' +set network.$1.netmask='255.255.255.0' +set network.$1.ip6assign='60' +EOF + ;; + wan) uci -q batch <<EOF +set network.$1.proto='dhcp' +delete network.wan6 +set network.wan6='interface' +set network.wan6.ifname='@wan6' +set network.wan6.proto='dhcpv6' +EOF + ;; + esac +} + +generate_switch_vlan() { + local device=$1 + local vlan=$2 + local cpu_port=$3 + + case $vlan in + lan) vlan=1;; + wan) vlan=2;; + *) vlan=${vlan##vlan};; + esac + + json_select vlans + json_select $2 + json_get_values ports + json_select .. + json_select .. + + uci -q 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 ${cpu_port}t' +EOF +} + +generate_switch() { + local key=$1 + local vlans + + json_select switch + json_select $key + json_get_vars enable reset blinkrate cpu_port + + [ -n "$cpu_port" ] || return + + uci -q batch <<EOF +add network switch +set network.@switch[-1].name='$key' +set network.@switch[-1].reset='$reset' +set network.@switch[-1].enable_vlan='$enable' +set network.@switch[-1].blinkrate='$blinkrate' +EOF + + json_get_keys vlans vlans + for vlan in $vlans; do generate_switch_vlan $1 $vlan $cpu_port; done + json_select .. + json_select .. +} + +generate_led() { + local key=$1 + local cfg="led_$key" + + json_select led + json_select $key + json_get_vars name sysfs type trigger device interface default + json_select .. + json_select .. + + uci -q batch <<EOF +delete system.$cfg +set system.$cfg='led' +set system.$cfg.name='$name' +set system.$cfg.sysfs='$sysfs' +set system.$cfg.dev='$device' +set system.$cfg.trigger='$trigger' +set system.$cfg.port_mask='$port_mask' +set system.$cfg.default='$default' +EOF + case $type in + netdev) + uci -q batch <<EOF +set system.$cfg.trigger='netdev' +set system.$cfg.mode='link tx rx' +EOF + ;; + + usb) + uci -q batch <<EOF +set system.$cfg.trigger='usbdev' +set system.$cfg.interval='50' +EOF + ;; + + esac +} + +json_init +json_load "$(cat ${CFG})" + +generate_static_network + +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 + +json_get_keys keys led +for key in $keys; do generate_led $key; done + +uci commit |