#!/bin/sh /etc/rc.common . /lib/functions.sh include /lib/network START=22 USE_PROCD=1 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 } removeethernet() { config_get baseifname $1 baseifname config_get ifname $1 ifname ifname="${ifname:-$baseifname.1}" vlanctl --if-delete $ifname config_load layer2_interface_vlan #kill all vlans related to this interface config_foreach removevlan vlan_interface } removevlan() { local baseifname local ifname local wan=`uci -q get layer2_interface_ethernet.Wan.baseifname` config_get baseifname $1 baseifname config_get ifname $1 ifname ifname="${ifname:-$baseifname.1}" if [ "$wan" == "$baseifname" ]; then echo "vlanctl --if-delete $ifname" vlanctl --if-delete $ifname fi } addethernet() { config_get baseifname $1 baseifname config_get ifname $1 ifname config_get bridge $1 bridge config_get mac2 $1 mac2 ifname="${ifname:-$baseifname.1}" brcm_virtual_interface_rules "$baseifname" "$ifname" "$bridge" "$mac2" } boot() { local baseifname wanport portnum config_load layer2_interface_ethernet config_get baseifname Wan baseifname 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 wanport=$(db get hw.board.ethernetWanPort) unit=$(echo $(get_port_number $wanport) | cut -d ' ' -f 1) port=$(echo $(get_port_number $wanport) | cut -d ' ' -f 2) ethswctl -c pause -n $unit -p $port -v 1 ethswctl -c hw-switching -o enable if [ $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 echo '1' > /proc/sys/net/ipv6/conf/$baseifname/disable_ipv6 ifconfig $baseifname up } start_service() { local baseifname echo "Setting up Ethernet WAN" config_load layer2_interface_ethernet config_foreach addethernet ethernet_interface } stop_service() { local ifname config_load layer2_interface_ethernet config_foreach removeethernet ethernet_interface } reload_service() { stop start } service_triggers() { procd_add_reload_trigger layer2_interface_ethernet }