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.

60 lines
1.9 KiB
Bash

#!/bin/sh
# Copyright (c) 2016 Qualcomm Atheros, Inc.
#
# All Rights Reserved.
# Qualcomm Atheros Confidential and Proprietary.
ETHMON_DEBUG_OUTOUT=0
# State information
switch_state=''
# Emit a message at debug level.
# input: $1 - the message to log
__ethmon_debug() {
local stderr=''
if [ "$ETHMON_DEBUG_OUTOUT" -gt 0 ]; then
stderr='-s'
fi
logger $stderr -t repacd.ethmon -p user.debug "$1"
}
# Given switch_state from `swconfig dev switch0 show | grep "link: port:"`
# and a port number, return the state of that port.
__ethmon_get_port_state() {
local switch_state="$1"
local port=$2
if [ -z "$switch_state" ]; then
echo "unknown"
return
fi
echo "$switch_state" | while read line; do
local curr_port=$(echo $line | awk '{ print $2 }' | cut -d: -f2)
if [ $port -eq $curr_port ]; then
local link_state=$(echo $line | awk '{ print $3 }' | cut -d: -f2)
echo $link_state
return
fi
done
}
# Check the status of the Ethernet links (link state, speed, duplex).
repacd_ethmon_check() {
local new_state
new_state=$(swconfig dev switch0 show | grep "link: port:" | grep -v "port:0")
if [ "$new_state" != "$switch_state" ]; then
# One or more of the switch ports have changed state
echo "$new_state" | while read line; do
local port=$(echo $line | awk '{ print $2 }' | cut -d: -f2)
local new_link_state=$(echo $line | awk '{ print $3 }' | cut -d: -f2)
local link_state=$(__ethmon_get_port_state "$switch_state" $port)
if [ "$link_state" != "$new_link_state" ]; then
__ethmon_debug "port $port state changed from $link_state to $new_link_state"
(export PORT=$port; export EVENT="link"; export STATE=$new_link_state; hotplug-call switch)
fi
done
switch_state="$new_state"
fi
}