@node SNMP Support, Zebra Protocol, Kernel Interface, Top
@comment  node-name,  next,  previous,  up
@chapter SNMP Support

SNMP (Simple Network Managing Protocol) is widely implemented feature
for collecting network information from router and/or host.  Zebra
itself does not support SNMP agent functionality.  But conjuction with
SNMP agent, Zebra provides routing protocol MIBs.

Zebra uses SMUX protocol (RFC1227) for making communication with SNMP
agent.  There are several SNMP agent which support SMUX.  We recommend
to use the latest @command{ucd-snmp} software.  

@menu
* How to get ucd-snmp::         
* SMUX configuration::          
@end menu

@node How to get ucd-snmp, SMUX configuration, SNMP Support, SNMP Support
@comment  node-name,  next,  previous,  up
@section How to get ucd-snmp

ucd-snmp is a free software which distributed so called "as is" software
license.  Please check the license which comes with distribution of
@command{ucd-snmp}.  The authors of ucd-snmp are the University of
California, the University of California at Davis, and the Electrical
Engineering department at the University of California at Davis.

You can get ucd-snmp from @url{ftp://ucd-snmp.ucdavis.edu/}.  As of this
writing we are testing with @command{ucd-snmp-4.1.pre1.tar.gz}.

To enable SMUX protocol support, please configure @command{ucd-snmp}
like below.

@example
% configure --with-mib-modules=smux
@end example

After compile and install @command{ucd-snmp}, you will need to configure
smuxpeer.  I'm now using configuration shown below.  This means SMUX client
connects to MIB 1.3.6.1.6.3.1 with password test.
  
@example
/usr/local/share/snmp/snmpd.conf
================================
smuxpeer 1.3.6.1.6.3.1 test
@end example

@node SMUX configuration,  , How to get ucd-snmp, SNMP Support
@comment  node-name,  next,  previous,  up
@section SMUX configuration

To enable SNMP support of Zebra, you have to configure Zebra with
@command{--enable-snmp} (@pxref{Configure the Software}).

@deffn {Command} {smux peer @var{oid}} {}
@deffnx {Command} {no smux peer @var{oid}} {}
@end deffn

@deffn {Command} {smux peer @var{oid} @var{password}} {}
@deffnx {Command} {no smux peer @var{oid} @var{password}} {}
@end deffn

@example
!
smux peer .1.3.6.1.6.3.1 test
!
@end example
