#!/bin/sh
#
# usage: nomad-topology IP COMMUNITY COMMUNITY ...

START=1
if [ 1`which fping 2>/dev/null` = "1" ] ; then
echo Could not find fping in your path ; START=0 ; fi
if [ 1`which snmpget 2>/dev/null` = "1" ] ; then
echo Could not find snmpget in your path ; START=0 ; fi
if [ 1`which snmpwalk 2>/dev/null` = "1" ] ; then
echo Could not find snmpwalk in your path ; START=0 ; fi

if [ $START = "1" ] ; then
	if [ 1$NOMAD_DIR = "1" ] ; then NOMAD_DIR=$HOME/.nomad ; fi
	mkdir -p $NOMAD_DIR/topology

	IP=$1
	COMM=
	shift 1;

	if [ ! -z `fping -a $IP 2>/dev/null` ] ; then
		for i in $*; do
			STS=`snmpget -Oq -m "" -c $i -v 1 $IP iso.3.6.1.2.1.1.5.0 2>/dev/null | cut -c 1-3`
			if [ 1$STS = "1iso" ] ; then
				COMM=$i
			fi
		done

		date -u '+%Y%m%d%H%M%S' >$NOMAD_DIR/topology/$IP
		echo $COMM >>$NOMAD_DIR/topology/$IP

		if [ 1$COMM != "1" ] ; then
			(
				#device details (rfc 1213)
				snmpget -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.1.1.0     #description
				snmpget -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.1.4.0     #contact
				snmpget -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.1.5.0     #name
				snmpget -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.1.6.0     #location
				snmpget -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.1.7.0     #services
				snmpget -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.4.1.0     #ipForwarding

				#interface table & interface table extensions (rfc 1213 & 1573)
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.2.2.1.5     #ifSpeed
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.2.2.1.2     #ifDescr
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.2.2.1.3     #ifType
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.2.2.1.8     #ifOperStatus
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.2.2.1.6     #ifPhysAddress
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.31.1.1.1.1  #ifName
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.31.1.1.1.18 #ifDescription

				#ip addresses for interfaces (rfc 1213)
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.4.20.1.2  #ipAdEntIfIndex

				#routing table (rfc 1213)
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.4.21.1.2  #ipRouteIfIndex
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.4.21.1.11 #ipRouteMask
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.4.21.1.7  #ipRouteNextHop
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.4.21.1.8  #ipRouteType

				#ip address table (rfc 1213)
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.4.22.1.2  #ipNetToMediaPhysAddress

				#bridge table (rfc 1493)
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.17.1.4.1.2 #dot1dBasePortIfIdx
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.17.4.3.1.1 #dot1dTpFdbAddress
				snmpwalk -Oq -m "" -c $COMM -v 1 $IP iso.3.6.1.2.1.17.4.3.1.2 #dot1dTpFdbPort

			) >>$NOMAD_DIR/topology/$IP 2>/dev/null
		fi
	fi
fi

