mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2026-02-09 21:33:07 +01:00
119 lines
2.9 KiB
Bash
Executable file
119 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
|
|
|
|
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"
|
|
uci -q commit network
|
|
|
|
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 uplinkport
|
|
|
|
config_load layer2_interface_ethernet
|
|
config_get baseifname Wan baseifname
|
|
|
|
[ -n "$baseifname" ] || baseifname="$(db -q get hw.board.ethernetWanPort)"
|
|
|
|
uplinkport=$(uci show ports | grep "uplink='1'" | cut -d'.' -f2)
|
|
|
|
if [ -n "$uplinkport" ]; then
|
|
baseifname="$(uci -q get ports.$uplinkport.ifname)"
|
|
else
|
|
uplinkport=$(uci show ports | grep "ifname='$baseifname'" | cut -d'.' -f2)
|
|
[ -n "$uplinkport" ] && uci -q set ports.$uplinkport.uplink=1 && uci commit ports
|
|
fi
|
|
|
|
# if [ "$(db get hw.board.hardware)" != "EG300" ]; then
|
|
# if [ "$(get_port_speed $baseifname)" != "1000FD" ]; 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
|
|
|
|
start
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger layer2_interface_ethernet layer2_interface_vlan
|
|
}
|
|
|