Skip to content

Commit

Permalink
Merge pull request #483 from nodogsplash/4.3.4beta
Browse files Browse the repository at this point in the history
fas: Add mesh interface detection, syslog and command line help.
  • Loading branch information
bluewavenet committed Dec 28, 2019
2 parents 58182cd + c048e22 commit 19d669b
Showing 1 changed file with 36 additions and 5 deletions.
41 changes: 36 additions & 5 deletions forward_authentication_service/libs/get_client_interface.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,51 @@
#Copyright (C) Blue Wave Projects and Services 2015-2019
#This software is released under the GNU GPL license.

# This script requires the iw package (usually available by default)
pid=$(ps | grep get_client_interface | awk -F ' ' 'NR==2 {print $1}')

# This script requires the iw and ip packages (usually available by default)

if [ -z $(command -v ip) ]; then
echo "ip utility not available" | logger -p "daemon.warn" -s -t "NDS-Library[$pid]"
exit 1
fi

if [ -z $(command -v iw) ]; then
echo "iw utility not available" | logger -p "daemon.warn" -s -t "NDS-Library[$pid]"
exit 1
fi

# mac address of client is passed as a command line argument
mac=$1

# exit if mac not passed
if [ -z $mac ]; then

if [ $(echo $mac | awk -F ':' '{print NF}') != 6 ]; then
echo "
Usage: get_client_interface [clientmac]
Returns: [local_interface] [meshnode_mac] [local_mesh_interface]
Where:
[local_interface] is the local interface the client is using.
[meshnode_mac] is the mac address of the 802.11s meshnode the
client is using (null if mesh not present).
[local_mesh_interface] is the local 802.11s interface the
client is using (null if mesh not present).
"
exit 1
fi

# Get default interface
# This will be the interface NDS is bound to eg. br-lan
clientif=$(ip -4 neigh | awk -F ' ' 'match($s,"'"$mac"' REACHABLE")>0 {printf $3" "}')
clientif=$(ip -4 neigh | awk -F ' ' 'match($s,"'"$mac"' ")>0 {printf $3}')

if [ -z $clientif ]; then
# The client has gone offline eg battery saving or switched to another ssid
echo "Client $mac is not online" | logger -p "daemon.info" -s -t "NDS-Library[$pid]"
exit 1
fi

Expand All @@ -29,14 +58,16 @@ interface_list=$(iw dev | awk -F 'Interface ' 'NF>1{printf $2" "}')
# Scan the wireless interfaces on this device for the client mac
for interface in $interface_list; do
macscan=$(iw dev $interface station dump | awk -F " " 'match($s, "'"$mac"'")>0{print $2}')
meshmac=$(iw dev $interface mpp dump | awk -F "$mac " 'NF>1{print $2}')

if [ ! -z $macscan ]; then
clientif=$interface
break
fi
done

# Return the local interface the client is using
echo $clientif
# Return the local interface the client is using, the mesh node mac address and the local mesh interface
echo "$clientif $meshmac"

exit 0

0 comments on commit 19d669b

Please sign in to comment.