Annotation of embedaddon/quagga/doc/snmptrap.texi, revision 1.1.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>