diff options
Diffstat (limited to 'package/base-files/files/bin')
-rwxr-xr-x | package/base-files/files/bin/board_detect | 14 | ||||
-rwxr-xr-x | package/base-files/files/bin/config_generate | 172 | ||||
-rwxr-xr-x | package/base-files/files/bin/ipcalc.sh | 71 | ||||
-rwxr-xr-x | package/base-files/files/bin/login.sh | 18 |
4 files changed, 275 insertions, 0 deletions
diff --git a/package/base-files/files/bin/board_detect b/package/base-files/files/bin/board_detect new file mode 100755 index 0000000..ee04b9e --- /dev/null +++ b/package/base-files/files/bin/board_detect @@ -0,0 +1,14 @@ +#!/bin/sh + +[ -d "/etc/board.d/" -a ! -f "/etc/board.json" ] && { + for a in `ls /etc/board.d/*`; do + [ -x $a ] || continue; + $(. $a) + done +} + +[ -f "/etc/board.json" ] || return 1 +[ -f "/etc/config/network" ] || { + touch /etc/config/network + /bin/config_generate +} diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate new file mode 100755 index 0000000..7bec566 --- /dev/null +++ b/package/base-files/files/bin/config_generate @@ -0,0 +1,172 @@ +#!/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='auto' +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='$ifname' +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 + + 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 + [ -n "$cpu_port" ] && { + 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 diff --git a/package/base-files/files/bin/ipcalc.sh b/package/base-files/files/bin/ipcalc.sh new file mode 100755 index 0000000..5d5eac3 --- /dev/null +++ b/package/base-files/files/bin/ipcalc.sh @@ -0,0 +1,71 @@ +#!/bin/sh + +awk -f - $* <<EOF +function bitcount(c) { + c=and(rshift(c, 1),0x55555555)+and(c,0x55555555) + c=and(rshift(c, 2),0x33333333)+and(c,0x33333333) + c=and(rshift(c, 4),0x0f0f0f0f)+and(c,0x0f0f0f0f) + c=and(rshift(c, 8),0x00ff00ff)+and(c,0x00ff00ff) + c=and(rshift(c,16),0x0000ffff)+and(c,0x0000ffff) + return c +} + +function ip2int(ip) { + for (ret=0,n=split(ip,a,"\."),x=1;x<=n;x++) ret=or(lshift(ret,8),a[x]) + return ret +} + +function int2ip(ip,ret,x) { + ret=and(ip,255) + ip=rshift(ip,8) + for(;x<3;ret=and(ip,255)"."ret,ip=rshift(ip,8),x++); + return ret +} + +function compl32(v) { + ret=xor(v, 0xffffffff) + return ret +} + +BEGIN { + slpos=index(ARGV[1],"/") + if (slpos == 0) { + ipaddr=ip2int(ARGV[1]) + dotpos=index(ARGV[2],".") + if (dotpos == 0) + netmask=compl32(2**(32-int(ARGV[2]))-1) + else + netmask=ip2int(ARGV[2]) + } else { + ipaddr=ip2int(substr(ARGV[1],0,slpos-1)) + netmask=compl32(2**(32-int(substr(ARGV[1],slpos+1)))-1) + ARGV[4]=ARGV[3] + ARGV[3]=ARGV[2] + } + + network=and(ipaddr,netmask) + broadcast=or(network,compl32(netmask)) + + start=or(network,and(ip2int(ARGV[3]),compl32(netmask))) + limit=network+1 + if (start<limit) start=limit + + end=start+ARGV[4] + limit=or(network,compl32(netmask))-1 + if (end>limit) end=limit + + print "IP="int2ip(ipaddr) + print "NETMASK="int2ip(netmask) + print "BROADCAST="int2ip(broadcast) + print "NETWORK="int2ip(network) + print "PREFIX="32-bitcount(compl32(netmask)) + + # range calculations: + # ipcalc <ip> <netmask> <start> <num> + + if (ARGC > 3) { + print "START="int2ip(start) + print "END="int2ip(end) + } +} +EOF diff --git a/package/base-files/files/bin/login.sh b/package/base-files/files/bin/login.sh new file mode 100755 index 0000000..754d290 --- /dev/null +++ b/package/base-files/files/bin/login.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# Copyright (C) 2006-2011 OpenWrt.org + +if ( ! grep -qsE '^root:[!x]?:' /etc/shadow || \ + ! grep -qsE '^root:[!x]?:' /etc/passwd ) && \ + [ -z "$FAILSAFE" ] +then + echo "Login failed." + exit 0 +else +cat << EOF + === IMPORTANT ============================ + Use 'passwd' to set your login password! + ------------------------------------------ +EOF +fi + +exec /bin/ash --login |