mirror of https://github.com/aredn/aredn.git
103 lines
3.6 KiB
Bash
Executable File
103 lines
3.6 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
|
# Copyright (C) 2006 OpenWrt.org
|
|
|
|
START=99
|
|
boot() {
|
|
|
|
if [ ! -f /etc/aredn_include/ethmacfixup ]
|
|
then
|
|
mkdir -p /etc/aredn_include
|
|
touch /etc/aredn_include/ethmacfixup
|
|
local lanintf="$(uci -q get 'network.lan.ifname')"
|
|
lanintf=${lanintf%% *}
|
|
local wifiintf="$(uci -q get 'network.wifi.ifname')"
|
|
local lanmac=`ifconfig $lanintf | grep -o -E '([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}'`
|
|
local wifimac=`ifconfig $wifiintf | grep -o -E '([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}'`
|
|
|
|
local intlanmac=${lanmac//:/}
|
|
local intwanmac=${wifimac//:/}
|
|
local macdelta=$((0x$intwanmac - 0x$intlanmac))
|
|
|
|
# Deal with lan and wifi having same mac address (common on TP-Link)
|
|
# Deal with lan mac + ~10 = wifi mac address (common on Microtik and
|
|
# breaks OLSR if using derived IP addresses)
|
|
if [ $macdelta -le 10 ]
|
|
then
|
|
local wifimacdigit=`printf "%X" $(((0x${wifimac:9:2} + 1) % 256))`
|
|
local newmac=${wifimac:0:9}${wifimacdigit}${wifimac:11}
|
|
lanintf=${lanintf%%.*}
|
|
echo "" > /etc/aredn_include/ethmacfixup
|
|
echo "config interface 'setethmac'" >> /etc/aredn_include/ethmacfixup
|
|
echo -e "\toption\tifname\t'$lanintf'" >> /etc/aredn_include/ethmacfixup
|
|
echo -e "\toption\tproto\t'none'" >> /etc/aredn_include/ethmacfixup
|
|
echo -e "\toption\tmacaddr\t$newmac" >> /etc/aredn_include/ethmacfixup
|
|
uci set "network.setethmac=interface"
|
|
uci set "network.setethmac.ifname=$lanintf"
|
|
uci set "network.setethmac.proto=none"
|
|
uci set "network.setethmac.macaddr=$newmac"
|
|
uci commit
|
|
/etc/init.d/network reload
|
|
/etc/init.d/network restart
|
|
fi
|
|
fi
|
|
|
|
|
|
[ -x /usr/local/bin/bbhn-postupgrade ] && /usr/local/bin/bbhn-postupgrade
|
|
|
|
# setup nvram variables
|
|
[ -x /usr/local/bin/nvram-setup ] && /usr/local/bin/nvram-setup
|
|
|
|
# run mode specific setup
|
|
[ -x /etc/config/local ] && /etc/config/local
|
|
[ -x /etc/local/services ] && /etc/local/services
|
|
|
|
# set POE passthrough if available
|
|
local poevalue=$(uci -q get aredn.@poe[0].passthrough)
|
|
if [ -z "$poevalue" ]; then
|
|
local dpval=$(jsonfilter -e '@.gpioswitch.poe_passthrough.default' < /etc/board.json)
|
|
if [ ! -z "$dpval" ]; then
|
|
uci -q add aredn poe
|
|
uci -q set aredn.@poe[0].passthrough="$dpval"
|
|
uci -q commit aredn
|
|
poevalue=$dpval
|
|
fi
|
|
fi
|
|
/usr/local/bin/poe_passthrough "${poevalue}"
|
|
|
|
# set USB passthrough if available
|
|
local usbvalue=$(uci -q get aredn.@usb[0].passthrough)
|
|
if [ -z "$usbvalue" ]; then
|
|
local duval=$(jsonfilter -e '@.gpioswitch.usb_power_switch.default' < /etc/board.json)
|
|
uci -q add aredn usb
|
|
uci -q set aredn.@usb[0].passthrough="$duval"
|
|
uci -q commit aredn
|
|
usbvalue=$duval
|
|
fi
|
|
/usr/local/bin/usb_passthrough "${usbvalue}"
|
|
|
|
# package repositories
|
|
local repos="core base arednpackages packages luci routing telephony"
|
|
set -- $repos
|
|
while [ -n "$1" ]; do
|
|
local ucirepo=$(uci -q get aredn.@downloads[0].pkgs_$1)
|
|
local distrepo=$(grep aredn_$1 /etc/opkg/distfeeds.conf | cut -d' ' -f3)
|
|
# get the URLs from distfeeds.conf and set the initial UCI values if not present
|
|
if [ -z $ucirepo ]; then
|
|
uci set aredn.@downloads[0].pkgs_$1=$distrepo
|
|
uci commit aredn
|
|
uci -c /etc/config.mesh set aredn.@downloads[0].pkgs_$1=$distrepo
|
|
uci -c /etc/config.mesh commit aredn
|
|
# check values in distfeeds.conf against UCI settings
|
|
# and change distfeeds.conf if needed (upgrades?)
|
|
elif [ $ucirepo != $distrepo ]; then
|
|
sed -i "s|$distrepo|$ucirepo|g" /etc/opkg/distfeeds.conf
|
|
fi
|
|
shift
|
|
done
|
|
|
|
if [ -z "$(uci -q get aredn.@alerts[0])" ]; then
|
|
uci -q add aredn alerts
|
|
uci -q commit aredn
|
|
fi
|
|
}
|