#!/bin/sh -f

# Script to process SNMP SET, GET and GETNEXT OID requests.
# 2.0.001 AES 07-MAY-20 Create.

ROOT=".1.3.6.1.4.1.36555"          # TimeTools root OID
DEVICE=".1.3.6.1.4.1.36555.1.0.0"  # Device OID
NTP=".1.3.6.1.4.1.36555.1.0.1"     # NTP OID
GNSS=".1.3.6.1.4.1.36555.1.0.2"    # GNSS OID
TRAP=".1.3.6.1.4.1.36555.1.1.0"    # Trap OID .1.3.6.1.4.1.36555.1.1.0.xx
REQOID="$2"                        # Requested OID

#  Ignore SET requests.

if [ "$1" = "-s" ]; then
  exit 0
fi

#  GETNEXT - determine next instance

if [ "$1" = "-n" ]; then
  case "$REQOID" in

    $ROOT|               \
    $ROOT.1|             \
    $ROOT.1.0|           \
    $DEVICE|             \
    $DEVICE.0|           \
    $DEVICE.0.*)     OID=$DEVICE.1 ;;     # model

    $DEVICE.1|           \
    $DEVICE.1.*)     OID=$DEVICE.2 ;;     # firmware

    $DEVICE.2|           \
    $DEVICE.2.*)     OID=$DEVICE.3 ;;     # ntp version

    $DEVICE.3|           \
    $DEVICE.3.*)     OID=$DEVICE.4 ;;     # Eth0 state

    $DEVICE.4|           \
    $DEVICE.4.*)     OID=$DEVICE.5 ;;     # Eth1 state 

    $DEVICE.5|           \
    $DEVICE.5.*)     OID=$DEVICE.6 ;;     # UTC time and date

    $DEVICE.6|           \
    $DEVICE.6.*)     OID=$DEVICE.100 ;;   # Last recorded event as string


    $DEVICE.100|         \
    $DEVICE.100.*|       \
    $NTP|                \
    $NTP.0|              \
    $NTP.0.*)         OID=$NTP.1 ;;       # ntp service status

    $NTP.1|           \
    $NTP.1.*)         OID=$NTP.2 ;;       # ntp leap indicator        

    $NTP.2|           \
    $NTP.2.*)         OID=$NTP.3 ;;       # NTP clock source      

    $NTP.3|           \
    $NTP.3.*)         OID=$NTP.4 ;;       # NTP clock stratum 

    $NTP.4|           \
    $NTP.4.*)         OID=$NTP.5 ;;       # NTP clock offset

    $NTP.5|           \
    $NTP.5.*)         OID=$NTP.6 ;;       # NTP reference as string

    $NTP.6|           \
    $NTP.6.*)         OID=$NTP.7 ;;       # NTP dropped packets

    $NTP.7|           \
    $NTP.7.*)         OID=$NTP.8 ;;       # NTP ignored packets.

    $NTP.8|           \
    $NTP.8.*)         OID=$NTP.9 ;;       # NTP received packets

    $NTP.9|           \
    $NTP.9.*)         OID=$NTP.10 ;;      # NTP packets sent

    $NTP.10|          \
    $NTP.10.*)        OID=$NTP.11 ;;      # NTP authentication failed packets 


    $NTP.11|          \
    $NTP.11.*|        \
    $GNSS|            \
    $GNSS.0|          \
    $GNSS.0.*)        OID=$GNSS.1 ;;      # Reference clock service running.

    $GNSS.1|          \
    $GNSS.1.*)        OID=$GNSS.2 ;;      #  GNSS status code.

    $GNSS.2|          \
    $GNSS.2.*)        OID=$GNSS.3 ;;      #  Used satellites.

    $GNSS.3|          \
    $GNSS.3.*)        OID=$GNSS.4 ;;      #  Visible satellites.

    $GNSS.4|          \
    $GNSS.4.*)        OID=$GNSS.5 ;;      #  GNSS position as string.

    $GNSS.5|          \
    $GNSS.5.*)        OID=$GNSS.6 ;;      #  Last received GSNN time stamp as string.

    *)              exit 0 ;;
  esac
else

#  GET requests - check for valid instance

  case "$REQOID" in
    $DEVICE.1|       \
    $DEVICE.2|       \
    $DEVICE.3|       \
    $DEVICE.4|       \
    $DEVICE.5|       \
    $DEVICE.6|       \
    $DEVICE.100|     \
                     \
    $NTP.1|          \
    $NTP.2|          \
    $NTP.3|          \
    $NTP.4|          \
    $NTP.5|          \
    $NTP.6|          \
    $NTP.7|          \
    $NTP.8|          \
    $NTP.9|          \
    $NTP.10|         \
    $NTP.11|         \
                     \
    $GNSS.1|         \
    $GNSS.2|         \
    $GNSS.3|         \
    $GNSS.4|         \
    $GNSS.5|         \
    $GNSS.6)         OID=$REQOID ;;
    *)               exit 0 ;;
  esac
fi


# Process GET requests - returning 0

echo "$OID"
case "$OID" in
  $DEVICE.1) /usr/sbin/SnmpQuery model ; exit 0 ;;   
  $DEVICE.2) /usr/sbin/SnmpQuery firmware ; exit 0 ;;   
  $DEVICE.3) /usr/sbin/SnmpQuery ntpversion ; exit 0 ;;   
  $DEVICE.4) /usr/sbin/SnmpQuery eth0status ; exit 0 ;;   
  $DEVICE.5) /usr/sbin/SnmpQuery eth1status ; exit 0 ;;   
  $DEVICE.6) /usr/sbin/SnmpQuery date ; exit 0 ;; 
  $DEVICE.100) /usr/sbin/SnmpQuery snmpevent ; exit 0 ;;   

  $NTP.1) /usr/sbin/SnmpQuery ntpservice ; exit 0 ;;   
  $NTP.2) /usr/sbin/SnmpQuery ntpleap ; exit 0 ;;   
  $NTP.3) /usr/sbin/SnmpQuery ntpclksource ; exit 0 ;;   
  $NTP.4) /usr/sbin/SnmpQuery ntpstratum ; exit 0 ;;   
  $NTP.5) /usr/sbin/SnmpQuery ntpoffset ; exit 0 ;;   
  $NTP.6) /usr/sbin/SnmpQuery ntprefid ; exit 0 ;;      
  $NTP.7) echo "Unsigned32"; ntpq -c iostats | grep "dropped packets:" | sed s/"dropped packets:"[[:space:]]*//; exit 0 ;;
  $NTP.8) echo "Unsigned32"; ntpq -c iostats | grep "ignored packets:" | sed s/"ignored packets:"[[:space:]]*//; exit 0 ;;
  $NTP.9) echo "Unsigned32"; ntpq -c iostats | grep "received packets:" | sed s/"received packets:"[[:space:]]*//; exit 0 ;;
  $NTP.10) echo "Unsigned32"; ntpq -c iostats | grep "packets sent:" | sed s/"packets sent:"[[:space:]]*//; exit 0 ;;
  $NTP.11) echo "Unsigned32"; ntpq -c sysstats | grep "authentication failed:" | sed s/"authentication failed:"[[:space:]]*//; exit 0 ;;

  $GNSS.1) /usr/sbin/SnmpQuery refclockservice ; exit 0 ;;   
  $GNSS.2) /usr/sbin/SnmpQuery gnssstatus ; exit 0 ;;   
  $GNSS.3) /usr/sbin/SnmpQuery gnssused ; exit 0 ;;   
  $GNSS.4) /usr/sbin/SnmpQuery gnssvisible ; exit 0 ;;   
  $GNSS.5) /usr/sbin/SnmpQuery gnsspositionstr ; exit 0 ;;   
  $GNSS.6) /usr/sbin/SnmpQuery gnsslastsyncstr ; exit 0 ;; 
  *) echo "string";  echo "Fail $OID $REQOID"; exit 0 ;;  # Should never get to here.
esac


