Annotation of embedaddon/quagga/doc/snmptrap.texi, revision 1.1
1.1 ! misho 1: @c Documentation on configuring Quagga and snmpd for SNMP traps
! 2: @c contributed by Jeroen Simonetti, jsimonetti@denit.net
! 3:
! 4: @node Handling SNMP Traps
! 5: @section Handling SNMP Traps
! 6:
! 7: To handle snmp traps make sure your snmp setup of quagga works
! 8: correctly as described in the quagga documentation in @xref{SNMP Support}.
! 9:
! 10: The BGP4 mib will send traps on peer up/down events. These should be
! 11: visible in your snmp logs with a message similar to:
! 12:
! 13: @samp{snmpd[13733]: Got trap from peer on fd 14}
! 14:
! 15: To react on these traps they should be handled by a trapsink. Configure
! 16: your trapsink by adding the following lines to @file{/etc/snmpd/snmpd.conf}:
! 17:
! 18: @example
! 19: # send traps to the snmptrapd on localhost
! 20: trapsink localhost
! 21: @end example
! 22:
! 23: This will send all traps to an snmptrapd running on localhost. You can
! 24: of course also use a dedicated management station to catch traps.
! 25: Configure the snmptrapd daemon by adding the following line to
! 26: @file{/etc/snmpd/snmptrapd.conf}:
! 27:
! 28: @c Documentation contributed by Jeroen Simonetti, jsimonetti@denit.net
! 29:
! 30: @example
! 31: traphandle .1.3.6.1.4.1.3317.1.2.2 /etc/snmp/snmptrap_handle.sh
! 32: @end example
! 33:
! 34: This will use the bash script @file{/etc/snmp/snmptrap_handle.sh} to handle
! 35: the BGP4 traps. To add traps for other protocol daemons, lookup their
! 36: appropriate OID from their mib. (For additional information about which
! 37: traps are supported by your mib, lookup the mib on
! 38: @uref{http://www.oidview.com/mibs/detail.html}).
! 39:
! 40: Make sure snmptrapd is started.
! 41:
! 42: The snmptrap_handle.sh script I personally use for handling BGP4 traps
! 43: is below. You can of course do all sorts of things when handling traps,
! 44: like sound a siren, have your display flash, etc., be creative ;).
! 45:
! 46: @verbatim
! 47: #!/bin/bash
! 48:
! 49: # routers name
! 50: ROUTER=`hostname -s`
! 51:
! 52: #email address use to sent out notification
! 53: EMAILADDR="john@doe.com"
! 54: #email address used (allongside above) where warnings should be sent
! 55: EMAILADDR_WARN="sms-john@doe.com"
! 56:
! 57: # type of notification
! 58: TYPE="Notice"
! 59:
! 60: # local snmp community for getting AS belonging to peer
! 61: COMMUNITY="<community>"
! 62:
! 63: # if a peer address is in $WARN_PEERS a warning should be sent
! 64: WARN_PEERS="192.0.2.1"
! 65:
! 66:
! 67: # get stdin
! 68: INPUT=`cat -`
! 69:
! 70: # get some vars from stdin
! 71: uptime=`echo $INPUT | cut -d' ' -f5`
! 72: peer=`echo $INPUT | cut -d' ' -f8 | sed -e 's/SNMPv2-SMI::mib-2.15.3.1.14.//g'`
! 73: peerstate=`echo $INPUT | cut -d' ' -f13`
! 74: errorcode=`echo $INPUT | cut -d' ' -f9 | sed -e 's/\"//g'`
! 75: suberrorcode=`echo $INPUT | cut -d' ' -f10 | sed -e 's/\"//g'`
! 76: remoteas=`snmpget -v2c -c $COMMUNITY localhost SNMPv2-SMI::mib-2.15.3.1.9.$peer | cut -d' ' -f4`
! 77:
! 78: WHOISINFO=`whois -h whois.ripe.net " -r AS$remoteas" | egrep '(as-name|descr)'`
! 79: asname=`echo "$WHOISINFO" | grep "^as-name:" | sed -e 's/^as-name://g' -e 's/ //g' -e 's/^ //g' | uniq`
! 80: asdescr=`echo "$WHOISINFO" | grep "^descr:" | sed -e 's/^descr://g' -e 's/ //g' -e 's/^ //g' | uniq`
! 81:
! 82: # if peer address is in $WARN_PEER, the email should also
! 83: # be sent to $EMAILADDR_WARN
! 84: for ip in $WARN_PEERS; do
! 85: if [ "x$ip" == "x$peer" ]; then
! 86: EMAILADDR="$EMAILADDR,$EMAILADDR_WARN"
! 87: TYPE="WARNING"
! 88: break
! 89: fi
! 90: done
! 91:
! 92:
! 93: # convert peer state
! 94: case "$peerstate" in
! 95: 1) peerstate="Idle" ;;
! 96: 2) peerstate="Connect" ;;
! 97: 3) peerstate="Active" ;;
! 98: 4) peerstate="Opensent" ;;
! 99: 5) peerstate="Openconfirm" ;;
! 100: 6) peerstate="Established" ;;
! 101: *) peerstate="Unknown" ;;
! 102: esac
! 103:
! 104: # get textual messages for errors
! 105: case "$errorcode" in
! 106: 00)
! 107: error="No error"
! 108: suberror=""
! 109: ;;
! 110: 01)
! 111: error="Message Header Error"
! 112: case "$suberrorcode" in
! 113: 01) suberror="Connection Not Synchronized" ;;
! 114: 02) suberror="Bad Message Length" ;;
! 115: 03) suberror="Bad Message Type" ;;
! 116: *) suberror="Unknown" ;;
! 117: esac
! 118: ;;
! 119: 02)
! 120: error="OPEN Message Error"
! 121: case "$suberrorcode" in
! 122: 01) suberror="Unsupported Version Number" ;;
! 123: 02) suberror="Bad Peer AS" ;;
! 124: 03) suberror="Bad BGP Identifier" ;;
! 125: 04) suberror="Unsupported Optional Parameter" ;;
! 126: 05) suberror="Authentication Failure" ;;
! 127: 06) suberror="Unacceptable Hold Time" ;;
! 128: *) suberror="Unknown" ;;
! 129: esac
! 130: ;;
! 131: 03)
! 132: error="UPDATE Message Error"
! 133: case "$suberrorcode" in
! 134: 01) suberror="Malformed Attribute List" ;;
! 135: 02) suberror="Unrecognized Well-known Attribute" ;;
! 136: 03) suberror="Missing Well-known Attribute" ;;
! 137: 04) suberror="Attribute Flags Error" ;;
! 138: 05) suberror="Attribute Length Error" ;;
! 139: 06) suberror="Invalid ORIGIN Attribute" ;;
! 140: 07) suberror="AS Routing Loop" ;;
! 141: 08) suberror="Invalid NEXT_HOP Attribute" ;;
! 142: 09) suberror="Optional Attribute Error" ;;
! 143: 10) suberror="Invalid Network Field" ;;
! 144: 11) suberror="Malformed AS_PATH" ;;
! 145: *) suberror="Unknown" ;;
! 146: esac
! 147: ;;
! 148: 04)
! 149: error="Hold Timer Expired"
! 150: suberror=""
! 151: ;;
! 152: 05)
! 153: error="Finite State Machine Error"
! 154: suberror=""
! 155: ;;
! 156: 06)
! 157: error="Cease"
! 158: case "$suberrorcode" in
! 159: 01) suberror="Maximum Number of Prefixes Reached" ;;
! 160: 02) suberror="Administratively Shutdown" ;;
! 161: 03) suberror="Peer Unconfigured" ;;
! 162: 04) suberror="Administratively Reset" ;;
! 163: 05) suberror="Connection Rejected" ;;
! 164: 06) suberror="Other Configuration Change" ;;
! 165: 07) suberror="Connection collision resolution" ;;
! 166: 08) suberror="Out of Resource" ;;
! 167: 09) suberror="MAX" ;;
! 168: *) suberror="Unknown" ;;
! 169: esac
! 170: ;;
! 171: *)
! 172: error="Unknown"
! 173: suberror=""
! 174: ;;
! 175: esac
! 176:
! 177: # create textual message from errorcodes
! 178: if [ "x$suberror" == "x" ]; then
! 179: NOTIFY="$errorcode ($error)"
! 180: else
! 181: NOTIFY="$errorcode/$suberrorcode ($error/$suberror)"
! 182: fi
! 183:
! 184:
! 185: # form a decent subject
! 186: SUBJECT="$TYPE: $ROUTER [bgp] $peer is $peerstate: $NOTIFY"
! 187: # create the email body
! 188: MAIL=`cat << EOF
! 189: BGP notification on router $ROUTER.
! 190:
! 191: Peer: $peer
! 192: AS: $remoteas
! 193: New state: $peerstate
! 194: Notification: $NOTIFY
! 195:
! 196: Info:
! 197: $asname
! 198: $asdescr
! 199:
! 200: Snmpd uptime: $uptime
! 201: EOF`
! 202:
! 203: # mail the notification
! 204: echo "$MAIL" | mail -s "$SUBJECT" $EMAILADDR
! 205: @end verbatim
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>