iopsys-feed/layer2interface/broadcom/etc/init.d/layer2

125 lines
2.9 KiB
Bash
Executable file

#!/bin/sh /etc/rc.common
. /lib/functions.sh
include /lib/network
START=20
USE_PROCD=1
DEVICE_ADDED=0
get_current_status() {
local port="$1"
local media="$(ethctl $port media-type 2>&1)"
if echo $media | grep "1000" >/dev/null; then
return 0
elif echo $media | grep "100" >/dev/null; then
return 1
elif echo $media | grep "10" >/dev/null; then
return 1
fi
}
device_config_exists() {
ubus call uci get '{"config":"network","type":"device"}' | grep -w name | grep -qw "$1" && return 0
return 1
}
configure_ethernet_iface() {
local name baseifname ifname
config_get name $1 name
config_get baseifname $1 baseifname
config_get ifname $1 ifname
[ -n "$ifname" -a -n "$name" ] || return
device_config_exists "$ifname" && return
uci -q set network.$name=device
uci -q set network.$name.type=untagged
uci -q set network.$name.ifname="$baseifname"
uci -q set network.$name.name="$ifname"
DEVICE_ADDED=1
}
configure_vlan_iface() {
local name baseifname ifname
local vlan8021p vlan8021q
config_get name $1 name
config_get baseifname $1 baseifname
config_get ifname $1 ifname
config_get vlan8021p $1 vlan8021p
config_get vlan8021q $1 vlan8021q
[ -n "$ifname" -a -n "$name" ] || return
device_config_exists "$ifname" && return
uci -q set network.$name=device
uci -q set network.$name.type=8021q
uci -q set network.$name.priority=$vlan8021p
uci -q set network.$name.vid="$vlan8021q"
uci -q set network.$name.ifname="$baseifname"
uci -q set network.$name.name="$ifname"
DEVICE_ADDED=1
}
start_service() {
config_load layer2_interface_ethernet
config_foreach configure_ethernet_iface ethernet_interface
config_load layer2_interface_vlan
config_foreach configure_vlan_iface vlan_interface
[ $DEVICE_ADDED -eq 1 ] && ubus call network reload
}
boot() {
local baseifname port unit
config_load layer2_interface_ethernet
config_get baseifname Wan baseifname
[ -n "$baseifname" ] || baseifname="$(db -q get hw.board.ethernetWanPort)"
if [ "$(db get hw.board.hardware)" != "EG300" ]; then
get_current_status $baseifname
local ret=$?
if [ $ret -eq 1 ]; then
ethctl $baseifname phy-power down
ethctl $baseifname phy-power up
fi
fi
for interf in $(db get hw.board.ethernetPortOrder); do
ethswctl -c wan -i $interf -o disable
done
unit=$(echo $(get_port_number $baseifname) | cut -d ' ' -f 1)
port=$(echo $(get_port_number $baseifname) | cut -d ' ' -f 2)
ethswctl -c pause -n $unit -p $port -v 1
ethswctl -c hw-switching -o enable
if [ -n "$baseifname" ]; then
ethswctl -c wan -i $baseifname -o enable
fi
if [ "$(db get hw.board.tm)" == "1" ]; then
for interf in $(db get hw.board.ethernetPortOrder); do
tmctl porttminit --devtype ETH --if $interf --flag 1 || echo "ERROR: porttminit $interf failed!" > /dev/kmsg
done
fi
# vlanctl --if-suffix .
start
}
service_triggers() {
procd_add_reload_trigger layer2_interface_ethernet layer2_interface_vlan
}