#!/bin/sh

# Print the type of interface for the uplink.
# For example:
#   Fiber Jack will print "GPON"
#   Network Box will print "ETHERNET" because the WAN port is Ethernet
#   TV Box will print "WIFI", "MOCA", or "ETHERNET" depending on how
#     it is connected.

. /etc/utils.sh

# PROC_NET_ARP and BR_IF_PATH allow a gftest to pass in alternate
# paths to test files.

proc_net_arp=${PROC_NET_ARP:-"/proc/net/arp"}
lookup_mac_for_ip() {
  local nexthop="$1"
  while read ip junk junk mac junk; do
    if [ "$ip" = "$nexthop" ]; then
      echo "$mac"
      return
    fi
  done <"$proc_net_arp"
}

br_if_path=${BR_IF_PATH:-"/sys/devices/virtual/net/"}
lookup_bridge_ifname_for_mac() {
  bridge="$1"
  mac="$2"
  ifnum=$(brctl showmacs "$bridge" | grep "$mac" | cut -f1)
  if [ -n "$ifnum" ]; then
    echo $(ls -1 "${br_if_path}/${bridge}/brif" | head -n "$ifnum" | tail -n 1)
  fi
}

lookup_bridge_ifname_for_nexthop() {
  bridge="$1"
  nexthop="$2"
  mac=$(lookup_mac_for_ip "$nexthop")
  if [ -n "$mac" ]; then
    lookup_bridge_ifname_for_mac "$bridge" "$mac"
  fi
}

linktype_for_ifname() {
  ifname="$1"
  if startswith "$ifname" "pon"; then
    echo GPON
  elif startswith "$ifname" "man"; then
    echo GPON
  elif startswith "$ifname" "wan"; then
    echo ETHERNET
  elif startswith "$ifname" "wcli"; then
    echo WIFI
  elif startswith "$ifname" "wlan"; then
    echo WIFI
  elif startswith "$ifname" "lan"; then
    echo ETHERNET
  elif startswith "$ifname" "eth0"; then
    echo ETHERNET
  elif startswith "$ifname" "eth1"; then
    echo MOCA
  elif startswith "$ifname" "moca"; then
    echo MOCA
  elif startswith "$ifname" "eth2"; then
    echo WIFI
  else
    echo UNKNOWN_TYPE
  fi
}

ifname="$(activewan)"
if startswith "$ifname" "br" ; then
  nexthop=$(ip -o route list 0/0 dev "$ifname" 2>/dev/null | head -n 1 | cut -d' ' -f3)
  ifname=$(lookup_bridge_ifname_for_nexthop "$ifname" "$nexthop")
fi

if [ -n "$ifname" ]; then
  linktype_for_ifname "$ifname"
else
  echo UNKNOWN_IF
fi

exit 0
