#!/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 }