You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

653 lines
25 KiB
Bash

#!/bin/sh /etc/rc.common
#
# Copyright (c) 2013, 2017-2018 Qualcomm Technologies, Inc.
# All Rights Reserved.
# Confidential and Proprietary - Qualcomm Technologies, Inc.
#
# 2013 Qualcomm Atheros, Inc.
#
# All Rights Reserved.
# Qualcomm Atheros Confidential and Proprietary.
START=55
USE_PROCD=1
RESPAWN_THRESHOLD=120
RESPAWN_TIMEOUT=5
RESPAWN_RETRIES=10
SERVICE_PATH="/usr/sbin/hyd"
HYD_CONFIG_FILE_PREFIX="/tmp/hyd"
# The stop_wifidown command is a special command that does not try to do
# any locking in order to prevent deadlocks during a wifi down operation
# that is actually part of a Wi-Fi interface restart.
EXTRA_COMMANDS="stop_wifidown"
EXTRA_HELP=<<EOF
stop_wifidown Stop hyd while bring down Wi-Fi interfaces
EOF
#check hyd config to enable/disable cfg80211
config_load 'hyd'
config_get_bool hyd_cfg config 'cfg80211_enable' '0'
if [ "$hyd_cfg" -eq "1" ]; then
HYD_CFG80211=-cfg80211
else
HYD_CFG80211=
fi
ieee1905managed_bridge=
ieee1905managed_bridge2=
. /lib/functions/hyfi-debug.sh
. /lib/functions/hyfi-iface.sh
. /lib/functions/hyfi-network.sh
if [ -f /lib/functions/lbd-config.sh ]; then
. /lib/functions/lbd-config.sh
fi
__hyd_cfg_append() {
local configfile=$2
echo "$1" >> "$configfile"
}
__hyd_cfg_nl_append() {
local configfile=$2
echo "" >> "$configfile"
echo "$1" >> "$configfile"
}
# __hyd_cfg_add_str <section> <option> <output key> <config file>
__hyd_cfg_add_str_new_key() {
local key="$2"
local section="$1"
local option="$2"
local output_key="$3"
local configfile=$4
config_get val "${section}" "${option}"
[ -n "${val}" ] && __hyd_cfg_append "${output_key}=${val}" $configfile
}
# __hyd_cfg_add_str <section> <option> <config file>
__hyd_cfg_add_str() {
__hyd_cfg_add_str_new_key $1 $2 $2 $3
}
__hyd_get_default_mode() {
local wan_iface
config_load network
config_get wan_iface wan ifname
if [ -n "$wan_iface" ]; then
eval "$1='HYROUTER'"
else
eval "$1='HYCLIENT'"
fi
}
__hyd_get_wlan_sta_ifaces() {
local config="$1"
local iface network mode disabled
config_get iface "$config" ifname
config_get network "$config" network
config_get mode "$config" mode
config_get disabled "$config" disabled '0'
if [ "$2" = "$network" -a "$mode" = "sta" -a "$disabled" -eq 0 ]; then
non_relay_ifaces=${non_relay_ifaces}${non_relay_ifaces:+","}${iface}
fi
}
# __hyd_get_nonrelay_eth_iface()
# input: $1 IEEE1905.1 managed bridge interface
# output: $2 Name of the upstream Ethernet interface
__hyd_get_nonrelay_eth_iface() {
local ieee1905managed="$1"
local eth_ifaces_full eth_ifaces
local ifname=""
# Query user config first. Even with Ethernet monitoring disabled, a
# manually configured upstream interface will always be non-relaying.
config_load hyd
config_get ifname config NonRelayingEthernetInterface ""
if [ -n "${ifname}" ]; then
eval "$2='${ifname}'"
return
fi
# If ethernet monitoring is disabled, there should be no nonrelaying
# ethernet interfaces.
if [ "$(uci get repacd.repacd.EnableEthernetMonitoring)" != "1" ]; then
eval "$2=''"
return
fi
# assume that our upstream interface is eth0, but verify it
# exists first. if it doesn't exist, we may be running on an
# unknown board.
# the reason we look for an interface that matches a pattern
# instead of referencing it directly is because the upstream port
# could be in a VLAN, for example if guest networks are configured.
hyfi_get_ether_ifaces ${ieee1905managed} eth_ifaces_full
hyfi_strip_list ${eth_ifaces_full} eth_ifaces
for eth_iface in ${eth_ifaces}; do
case ${eth_iface} in
eth0*)
ifname=${eth_iface}
;;
esac
done
eval "$2='${ifname}'"
}
__hyd_cfg_add_interface() {
local all_ifaces wlan_ifaces plc_iface non_relay_ifaces default_mode
local non_relay_eth_iface
local wlan_vlan_sta_ifaces
local br_name=$1
local configfile=$2
__hyd_cfg_append 'HybridBridgeInterfaceName=br-'$br_name $configfile
# Get a list of all interfaces
hyfi_get_ifaces $br_name all_ifaces wlan_ifaces
__hyd_cfg_append 'ManagedInterfacesList='$all_ifaces $configfile
__hyd_cfg_append 'WlanInterfaces='$wlan_ifaces $configfile
__hyd_get_default_mode default_mode
config_get mode config 'Mode' "$default_mode"
if [ "${mode}" = 'HYCLIENT' ];then
# Get PLC interface
hyfi_get_plc_iface $br_name plc_iface
if [ -n "$plc_iface" ]; then
hyfi_strip_list $plc_iface plc_iface
non_relay_ifaces=$plc_iface
fi
# Get all WLAN interfaces bound to the managed bridge
config_load wireless
config_foreach __hyd_get_wlan_sta_ifaces wifi-iface $br_name
hyfi_get_wlan_vlan_sta_ifaces $br_name wlan_vlan_sta_ifaces
if [ -n "${wlan_vlan_sta_ifaces}" ]; then
non_relay_ifaces=${non_relay_ifaces}${non_relay_ifaces:+","}${wlan_vlan_sta_ifaces}
fi
# Get the Ethernet interface to be included in the
# non-relaying group
__hyd_get_nonrelay_eth_iface $br_name non_relay_eth_iface
if [ -n "${non_relay_eth_iface}" ]; then
non_relay_ifaces=${non_relay_ifaces}${non_relay_ifaces:+","}${non_relay_eth_iface}
fi
__hyd_cfg_append 'NoRelayGroupList='"$non_relay_ifaces" $configfile
__hyd_cfg_append 'ForceGroupRelaying=1' $configfile
fi
local switch_lan_vid
local switch_cpu_root_port
__hyfi_get_switch_lan_vid switch_lan_vid
__hyfi_get_switch_cpu_port switch_cpu_root_port
__hyd_cfg_append 'SwitchLanVid='"$switch_lan_vid" $configfile
__hyd_cfg_append 'SwitchCpuPort='"$switch_cpu_root_port" $configfile
local iface_vlanids
hyfi_get_iface_vlanids iface_vlanids
__hyd_cfg_append 'VlanIds='"$iface_vlanids" $configfile
}
__hyd_cfg_add_head() {
local configfile=$1
echo ";" >"$configfile"
__hyd_cfg_append '; Automatically generated hyd configure file,do not change it.' $configfile
__hyd_cfg_append ';' $configfile
__hyd_cfg_append '; INTERFACE: interface manager' $configfile
__hyd_cfg_append '; HY: hy manager' $configfile
__hyd_cfg_append '; WLAN: wlan manager' $configfile
__hyd_cfg_append '; PLC: plc manager' $configfile
__hyd_cfg_append '; ETH: eth manager' $configfile
__hyd_cfg_append '; PATHCH: pc service' $configfile
__hyd_cfg_append '; PATHCHWLAN: pcw service' $configfile
__hyd_cfg_append '; PATHCHPLC: pcp service' $configfile
__hyd_cfg_append '; PATHCHETH: pce service' $configfile
__hyd_cfg_append '; TOPOLOGY: td service' $configfile
__hyd_cfg_append '; HSPECEST: he service' $configfile
__hyd_cfg_append '; PATHSELECT: ps service' $configfile
__hyd_cfg_append '; LOGSETTINGS: log service' $configfile
__hyd_cfg_append '; IEEE1905: IEEE 1905.1 settings' $configfile
__hyd_cfg_append '; HCP: HCP settings' $configfile
__hyd_cfg_append '; MAP: Multi-AP SIG settings' $configfile
__hyd_cfg_append ';' $configfile
}
__hyd_create_config() {
local br_name=$1
local configfile=$2
config_load 'hyd'
__hyd_cfg_add_head $configfile
__hyd_cfg_nl_append '[INTERFACE]' $configfile
__hyd_cfg_add_interface $br_name $configfile
__hyd_cfg_add_str hy ForwardingMode $configfile
__hyd_cfg_nl_append '[HY]' $configfile
__hyd_cfg_add_str hy LoadBalancingSeamless $configfile
__hyd_cfg_add_str hy ConstrainTCPMedium $configfile
__hyd_cfg_add_str hy MaxLBReordTimeout $configfile
__hyd_cfg_add_str hy HActiveMaxAge $configfile
__hyd_cfg_nl_append '[PATHCH]' $configfile
# The following parameters are taken from the LBD config.
config_load 'lbd'
__hyd_cfg_add_str_new_key Offload MUSafetyThreshold_W2 ChanUtilSafetyThreshold_W2 $configfile
__hyd_cfg_add_str_new_key Offload MUSafetyThreshold_W5 ChanUtilSafetyThreshold_W5 $configfile
config_load 'hyd' # in case loading whc clobbered any values
__hyd_cfg_nl_append '[PATHCHWLAN]' $configfile
__hyd_cfg_add_str PathChWlan UpdatedStatsInterval_W2 $configfile
__hyd_cfg_add_str PathChWlan StatsAgedOutInterval_W2 $configfile
__hyd_cfg_add_str PathChWlan MaxMediumUtilization_W2 $configfile
__hyd_cfg_add_str PathChWlan MediumChangeThreshold_W2 $configfile
__hyd_cfg_add_str PathChWlan LinkChangeThreshold_W2 $configfile
__hyd_cfg_add_str PathChWlan MaxMediumUtilizationForLC_W2 $configfile
__hyd_cfg_add_str PathChWlan CPULimitedTCPThroughput_W2 $configfile
__hyd_cfg_add_str PathChWlan CPULimitedUDPThroughput_W2 $configfile
__hyd_cfg_add_str PathChWlan PHYRateThresholdForMU_W2 $configfile
__hyd_cfg_add_str PathChWlan ProbePacketInterval_W2 $configfile
__hyd_cfg_add_str PathChWlan ProbePacketSize_W2 $configfile
__hyd_cfg_add_str PathChWlan EnableProbe_W2 $configfile
__hyd_cfg_add_str PathChWlan AssocDetectionDelay_W2 $configfile
__hyd_cfg_add_str PathChWlan UpdatedStatsInterval_W5 $configfile
__hyd_cfg_add_str PathChWlan StatsAgedOutInterval_W5 $configfile
__hyd_cfg_add_str PathChWlan MaxMediumUtilization_W5 $configfile
__hyd_cfg_add_str PathChWlan MediumChangeThreshold_W5 $configfile
__hyd_cfg_add_str PathChWlan LinkChangeThreshold_W5 $configfile
__hyd_cfg_add_str PathChWlan MaxMediumUtilizationForLC_W5 $configfile
__hyd_cfg_add_str PathChWlan CPULimitedTCPThroughput_W5 $configfile
__hyd_cfg_add_str PathChWlan CPULimitedUDPThroughput_W5 $configfile
__hyd_cfg_add_str PathChWlan PHYRateThresholdForMU_W5 $configfile
__hyd_cfg_add_str PathChWlan ProbePacketInterval_W5 $configfile
__hyd_cfg_add_str PathChWlan ProbePacketSize_W5 $configfile
__hyd_cfg_add_str PathChWlan EnableProbe_W5 $configfile
__hyd_cfg_add_str PathChWlan AssocDetectionDelay_W5 $configfile
__hyd_cfg_add_str PathSelect LinkCapacityThreshold $configfile
__hyd_cfg_add_str PathChWlan ScalingFactorHighRate_W5 $configfile
__hyd_cfg_add_str PathChWlan ScalingFactorHighRate_W2 $configfile
__hyd_cfg_add_str PathChWlan ScalingFactorLow $configfile
__hyd_cfg_add_str PathChWlan ScalingFactorMedium $configfile
__hyd_cfg_add_str PathChWlan ScalingFactorHigh $configfile
__hyd_cfg_add_str PathChWlan ScalingFactorTCP $configfile
__hyd_cfg_add_str PathChWlan UseWHCAlgorithm $configfile
__hyd_cfg_nl_append '[PATHCHPLC]' $configfile
__hyd_cfg_add_str PathChPlc MaxMediumUtilization $configfile
__hyd_cfg_add_str PathChPlc MediumChangeThreshold $configfile
__hyd_cfg_add_str PathChPlc LinkChangeThreshold $configfile
__hyd_cfg_add_str PathChPlc StatsAgedOutInterval $configfile
__hyd_cfg_add_str PathChPlc UpdateStatsInterval $configfile
__hyd_cfg_add_str PathChPlc EntryExpirationInterval $configfile
__hyd_cfg_add_str PathChPlc MaxMediumUtilizationForLC $configfile
__hyd_cfg_add_str PathChPlc LCThresholdForUnreachable $configfile
__hyd_cfg_add_str PathChPlc LCThresholdForReachable $configfile
__hyd_cfg_add_str PathChPlc HostPLCInterfaceSpeed $configfile
__hyd_cfg_nl_append '[TOPOLOGY]' $configfile
__hyd_cfg_add_str Topology ND_UPDATE_INTERVAL $configfile
__hyd_cfg_add_str Topology BD_UPDATE_INTERVAL $configfile
__hyd_cfg_add_str Topology HOLDING_TIME $configfile
__hyd_cfg_add_str Topology TIMER_LOW_BOUND $configfile
__hyd_cfg_add_str Topology TIMER_UPPER_BOUND $configfile
__hyd_cfg_add_str Topology MSGID_DELTA $configfile
__hyd_cfg_add_str Topology HA_AGING_INTERVAL $configfile
__hyd_cfg_add_str Topology ENABLE_TD3 $configfile
__hyd_cfg_add_str Topology ENABLE_BD_SPOOFING $configfile
__hyd_cfg_add_str Topology NOTIFICATION_THROTTLING_WINDOW $configfile
__hyd_cfg_add_str Topology PERIODIC_QUERY_INTERVAL $configfile
__hyd_cfg_add_str Topology ENABLE_NOTIFICATION_UNICAST $configfile
__hyd_cfg_nl_append '[PATHSELECT]' $configfile
__hyd_cfg_add_str PathSelect UpdateHDInterval $configfile
__hyd_cfg_add_str PathSelect LinkCapacityThreshold $configfile
__hyd_cfg_add_str PathSelect UDPInterfaceOrder $configfile
__hyd_cfg_add_str PathSelect NonUDPInterfaceOrder $configfile
__hyd_cfg_add_str PathSelect SerialflowIterations $configfile
__hyd_cfg_add_str PathSelect DeltaLCThreshold $configfile
__hyd_cfg_add_str PathSelect EnableBadLinkStatsSwitchFlow $configfile
__hyd_cfg_nl_append '[HSPECEST]' $configfile
__hyd_cfg_add_str HSPECEst UpdateHSPECInterval $configfile
__hyd_cfg_add_str HSPECEst NotificationThresholdLimit $configfile
__hyd_cfg_add_str HSPECEst NotificationThresholdPercentage $configfile
__hyd_cfg_add_str HSPECEst AlphaNumerator $configfile
__hyd_cfg_add_str HSPECEst AlphaDenominator $configfile
__hyd_cfg_add_str HSPECEst LocalFlowRateThreshold $configfile
__hyd_cfg_add_str HSPECEst LocalFlowRatioThreshold $configfile
__hyd_cfg_add_str HSPECEst MaxHActiveEntries $configfile
__hyd_cfg_nl_append '[LOGSETTINGS]' $configfile
__hyd_cfg_add_str LogSettings EnableLog $configfile
__hyd_cfg_add_str LogSettings LogRestartIntervalSec $configfile
__hyd_cfg_add_str LogSettings LogPCSummaryIntervalSec $configfile
__hyd_cfg_add_str LogSettings LogServerIP $configfile
__hyd_cfg_add_str LogSettings LogServerPort $configfile
__hyd_cfg_add_str LogSettings EnableLogPCW2 $configfile
__hyd_cfg_add_str LogSettings EnableLogPCW5 $configfile
__hyd_cfg_add_str LogSettings EnableLogPCP $configfile
__hyd_cfg_add_str LogSettings EnableLogTD $configfile
__hyd_cfg_add_str LogSettings EnableLogHE $configfile
__hyd_cfg_add_str LogSettings EnableLogPS $configfile
__hyd_cfg_add_str LogSettings LogHEThreshold1 $configfile
__hyd_cfg_add_str LogSettings LogHEThreshold2 $configfile
__hyd_cfg_nl_append '[IEEE1905]' $configfile
__hyd_cfg_add_str IEEE1905Settings StrictIEEE1905Mode $configfile
__hyd_cfg_add_str IEEE1905Settings GenerateLLDP $configfile
__hyd_cfg_add_str IEEE1905Settings AvoidDupRenew $configfile
__hyd_cfg_add_str IEEE1905Settings AvoidDupTopologyNotification $configfile
__hyd_cfg_nl_append '[HCP]' $configfile
__hyd_cfg_add_str HCPSettings V1Compat $configfile
__hyd_cfg_nl_append '[WLAN]' $configfile
__hyd_cfg_add_str Wlan WlanCheckFreqInterval $configfile
__hyd_cfg_add_str Wlan WlanALDNLNumOverride $configfile
__hyd_cfg_nl_append '[MAP]' $configfile
__hyd_cfg_add_str MultiAP EnableController $configfile
__hyd_cfg_add_str MultiAP EnableAgent $configfile
__hyd_cfg_add_str MultiAP EnableSigmaDUT $configfile
__hyd_cfg_add_str MultiAP ClientAssocCtrlTimeoutSec $configfile
__hyd_cfg_add_str MultiAP ClientAssocCtrlTimeoutUsec $configfile
__hyd_cfg_add_str MultiAP ShortBlacklistTimeSec $configfile
__hyd_cfg_add_str MultiAP AlwaysClearBlacklists $configfile
__hyd_cfg_add_str MultiAP ClientSteerTimeoutSec $configfile
__hyd_cfg_add_str MultiAP ClientSteerTimeoutUsec $configfile
__hyd_cfg_add_str MultiAP MetricsReportingInterval $configfile
__hyd_cfg_add_str MultiAP RSSIHysteresis_W2 $configfile
__hyd_cfg_add_str MultiAP RSSIHysteresis_W5 $configfile
__hyd_cfg_add_str MultiAP LoadBalancingInterval $configfile
__hyd_cfg_add_str MultiAP EnableChannelSelection $configfile
__hyd_cfg_add_str MultiAP MinPreferredChannelIndex $configfile
__hyd_cfg_add_str MultiAP MaxPreferredChannelIndex $configfile
# The following parameters are taken from the LBD config.
config_load 'lbd'
__hyd_cfg_add_str_new_key Offload MUOverloadThreshold_W2 ChanUtilSteeringThreshold_W2 $configfile
__hyd_cfg_add_str_new_key Offload MUOverloadThreshold_W5 ChanUtilSteeringThreshold_W5 $configfile
__hyd_cfg_add_str_new_key Offload MUOverloadThreshold_W2 ChanUtilReportingThreshold_W2 $configfile
__hyd_cfg_add_str_new_key Offload MUOverloadThreshold_W5 ChanUtilReportingThreshold_W5 $configfile
__hyd_cfg_add_str_new_key APSteer LowRSSIAPSteerThreshold_SIG RSSISteeringThreshold_W2 $configfile
__hyd_cfg_add_str_new_key APSteer LowRSSIAPSteerThreshold_SIG RSSISteeringThreshold_W5 $configfile
__hyd_cfg_add_str_new_key APSteer LowRSSIAPSteerThreshold_SIG RSSIReportingThreshold_W2 $configfile
__hyd_cfg_add_str_new_key APSteer LowRSSIAPSteerThreshold_SIG RSSIReportingThreshold_W5 $configfile
__hyd_cfg_add_str_new_key ActiveSteer TxRateXingThreshold_UG HighTxRateXingThreshold $configfile
__hyd_cfg_add_str_new_key ActiveSteer TxRateXingThreshold_DG LowTxRateXingThreshold $configfile
__hyd_cfg_add_str_new_key ActiveSteer RateRSSIXingThreshold_UG HighRateRSSIXingThreshold $configfile
__hyd_cfg_add_str_new_key ActiveSteer RateRSSIXingThreshold_DG LowRateRSSIXingThreshold $configfile
__hyd_cfg_add_str_new_key IdleSteer RSSISteeringPoint_UG InactRSSIXingHighThreshold $configfile
__hyd_cfg_add_str_new_key IdleSteer RSSISteeringPoint_DG InactRSSIXingLowThreshold $configfile
config_load 'hyd' # in case loading whc clobbered any values
__hyd_cfg_nl_append '[STEERMSG]' $configfile
__hyd_cfg_add_str SteerMsg AvgUtilReqTimeout $configfile
__hyd_cfg_add_str SteerMsg LoadBalancingCompleteTimeout $configfile
__hyd_cfg_add_str SteerMsg RspTimeout $configfile
__hyd_cfg_nl_append '[MONITOR]' $configfile
__hyd_cfg_add_str Monitor DisableMonitoringLegacyClients $configfile
__hyd_cfg_add_str Monitor DisableSteeringInactiveLegacyClients $configfile
__hyd_cfg_add_str Monitor DisableSteeringActiveLegacyClients $configfile
__hyd_cfg_add_str Monitor DisableSteeringMax11kUnfriendlyClients $configfile
__hyd_cfg_add_str Monitor MonitorTimer $configfile
__hyd_cfg_add_str Monitor MonitorResponseTimeout $configfile
# If the configuration exists, go ahead and append it. Even if the Wi-Fi load
# balancing feature is disabled, there should be no harm in doing so.
if [ -f /etc/config/lbd ]; then
local default_mode enable_ctrl enable_agent multi_ap_mode
__hyd_get_default_mode default_mode
config_get mode config 'Mode' "$default_mode"
config_get enable_ctrl MultiAP 'EnableController' '0'
config_get enable_agent MultiAP 'EnableAgent' '0'
if [ "$enable_ctrl" -gt 0 ] || [ "$enable_agent" -gt 0 ]; then
multi_ap_mode='map'
else
multi_ap_mode='son'
fi
__hyd_cfg_nl_append '[WLB]' "$configfile"
__hyd_cfg_add_str config DisableSteering "$configfile"
if [ "${mode}" = 'HYCLIENT' ];then
# running in multi-AP RE mode
lbd_create_config "$configfile" $multi_ap_mode 0 "$br_name"
else
# running in multi-AP CAP mode
lbd_create_config "$configfile" $multi_ap_mode 1 "$br_name"
fi
fi
}
__hyd_set_wlan_mcastenhance() {
hyfi_get_wlan_ifaces $ieee1905managed_bridge wlan_ifaces wlan_included_ifaces
[ -z "$wlan_ifaces" ] && return
hyfi_strip_list $wlan_ifaces wlan_ifaces
for wlan_iface in ${wlan_ifaces}; do
if [ -z $HYD_CFG80211 ]; then
iwpriv $wlan_iface mcastenhance $1
else
cfg80211tool $wlan_iface mcastenhance $1
fi
done
if [ -n "$ieee1905managed_bridge2" ];then
hyfi_get_wlan_ifaces $ieee1905managed_bridge2 wlan_ifaces2 wlan_included_ifaces2
[ -z "$wlan_ifaces2" ] && return
hyfi_strip_list $wlan_ifaces2 wlan_ifaces2
for wlan_iface in ${wlan_ifaces}; do
if [ -z $HYD_CFG80211 ]; then
iwpriv $wlan_iface2 mcastenhance $1
else
cfg80211tool $wlan_iface2 mcastenhance $1
fi
done
fi
}
__hyd_reset_cpu_limit_value_for_legacy_boards() {
config_load 'hyd'
local tcp2g udp2g tcp5g udp5g limit name
config_get tcp2g PathChWlan 'CPULimitedTCPThroughput_W2' '0'
[ "$tcp2g" -gt 0 ] && return 1
config_get udp2g PathChWlan 'CPULimitedUDPThroughput_W2' '0'
[ "$udp2g" -gt 0 ] && return 1
config_get tcp5g PathChWlan 'CPULimitedTCPThroughput_W5' '0'
[ "$tcp5g" -gt 0 ] && return 1
config_get udp5g PathChWlan 'CPULimitedUDPThroughput_W5' '0'
[ "$udp5g" -gt 0 ] && return 1
[ -f /tmp/sysinfo/board_name ] || return 1
name=`cat /tmp/sysinfo/board_name`
case "$name" in
reh132 | aph126 | aph128 | db120)
limit=160
;;
aph131)
limit=300
;;
*)
# Max u_int32. If the throughput should be limited for a particular
# board, add an entry for it above.
limit=4294967295
;;
esac
uci set hyd.PathChWlan.CPULimitedTCPThroughput_W2=$limit
uci set hyd.PathChWlan.CPULimitedUDPThroughput_W2=$limit
uci set hyd.PathChWlan.CPULimitedTCPThroughput_W5=$limit
uci set hyd.PathChWlan.CPULimitedUDPThroughput_W5=$limit
uci commit hyd
}
# this block of code is for checking if all the configured interfaces are ready.
# a global flag is used for passing the rechecking resule
is_iface_all_up=1
__hyd_check_one_iface_ready() {
local config=$1
local network mode disabled device dev_disabled
config_get iface "$config" ifname
config_get network "$config" network
config_get mode "$config" mode
config_get disabled "$config" disabled '0'
# Skip this interface if disabled at the device level
config_get device "$config" device
config_get dev_disabled "$device" disabled '0'
if [ "$dev_disabled" -gt 0 ]; then
return
fi
if [ "$2" = "$network" -a "$disabled" -eq 0 ]; then
# interface name may not be available
if [ -z "$iface" ]; then
is_iface_all_up=0
else
# interface may not be up
iwconfig $iface 2>/dev/null |grep $iface
retval=$?
if [ $retval -ne 0 ] ;then
is_iface_all_up=0
fi
fi
fi
}
__hyd_check_interfaces_ready () {
config_load wireless
is_iface_all_up=1
config_foreach __hyd_check_one_iface_ready wifi-iface $1
if [ $is_iface_all_up -ne 1 ] ;then
hyfi_echo hyd "some interface(s) are not ready."
fi
}
start_service() {
hyfi_lock # Ensure only single config file generator
config_load 'hyd'
config_get_bool enabled config 'Enable' '0'
local hyd_rcd_enabled=`ls /etc/rc.d/S${START}hyd 2> /dev/null`
[ "$enabled" -gt 0 -a -n "$hyd_rcd_enabled" ] || {
hyfi_unlock
return 1
}
# Get the IEEE1905.1 managed bridge name and attach
hyfi_get_ieee1905_managed_iface ieee1905managed_bridge ieee1905managed_bridge2
# Make sure the bridge is attached first
if ! hyctl show br-$ieee1905managed_bridge | grep -q br-$ieee1905managed_bridge ; then
hyfi_error "hyd" "Bridge is not attached; start hyfi-bridging first"
hyfi_unlock
return 1
fi
if [ -n "$ieee1905managed_bridge2" ] ;then
if ! hyctl show br-$ieee1905managed_bridge2 | grep -q br-$ieee1905managed_bridge2 ; then
hyfi_error "hyd" "Bridge is not attached; start hyfi-bridging first"
hyfi_unlock
return 1
fi
fi
# Enable wlan Hy-Fi multicast enhancement
__hyd_set_wlan_mcastenhance 5
# By default disable retag of DSCP when multicast enhancement is enabled.
hyctl setmc br-$ieee1905managed_bridge retag disable
if [ -n "$ieee1905managed_bridge2" ] ;then
hyctl setmc br-$ieee1905managed_bridge2 retag disable
fi
__hyd_reset_cpu_limit_value_for_legacy_boards
# check for all the interfaces for private network ready
__hyd_check_interfaces_ready ${ieee1905managed_bridge}
if [ $is_iface_all_up -eq 0 ]; then
hyfi_error "hyd" "Private network interface checking failed"
hyfi_unlock
return 1
fi
if [ -n "$ieee1905managed_bridge2" ] ;then
# check for all the interfaces for guest network ready
__hyd_check_interfaces_ready ${ieee1905managed_bridge2}
if [ $is_iface_all_up -eq 0 ]; then
hyfi_error "hyd" "Guest network interface checking failed" >> /tmp/bill.log
hyfi_unlock
return 1
fi
fi
# Create temp configuration files, then rename and then start hyd
hyd_temp_file=${HYD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge}-tmp.conf
hyd_temp_file2=${HYD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge2}-tmp.conf
__hyd_create_config $ieee1905managed_bridge ${hyd_temp_file}
if [ -n "$ieee1905managed_bridge2" ] ;then
__hyd_create_config $ieee1905managed_bridge2 ${hyd_temp_file2}
fi
hyfi_echo hyd "starting daemon"
procd_open_instance
procd_set_param command ${SERVICE_PATH} -d -C "$HYD_CONFIG_FILE_PREFIX-${ieee1905managed_bridge}.conf" -P 7777 $HYD_CFG80211
# Uncomment this line to send the logs to a file
#procd_set_param env DBG_APPEND_FILE_PATH=/tmp/hyd.log
procd_set_param respawn ${RESPAWN_THRESHOLD} ${RESPAWN_TIMEOUT} ${RESPAWN_RETRIES}
procd_add_reload_trigger "hyd" "lbd"
procd_close_instance
if [ -n "$ieee1905managed_bridge2" ] ;then
hyfi_echo hyd "starting daemon ${ieee1905managed_bridge2}"
procd_open_instance
procd_set_param command ${SERVICE_PATH} -d -C "$HYD_CONFIG_FILE_PREFIX-${ieee1905managed_bridge2}.conf" -P 8888 $HYD_CFG80211
procd_set_param respawn ${RESPAWN_THRESHOLD} ${RESPAWN_TIMEOUT} ${RESPAWN_RETRIES}
procd_add_reload_trigger "hyd" "lbd"
procd_close_instance
fi
# rename the temp files to final files
mv ${hyd_temp_file} ${HYD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge}.conf
if [ -n "$ieee1905managed_bridge2" ] ;then
mv ${hyd_temp_file2} ${HYD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge2}.conf
fi
hyfi_unlock
}
stop_service() {
hyfi_get_ieee1905_managed_iface ieee1905managed_bridge ieee1905managed_bridge2
# Disable wlan Hy-Fi multicast enhancement
__hyd_set_wlan_mcastenhance 2
}