ReactOS 0.4.16-dev-297-gc569aee
|
Modules | |
Core | |
Traps | |
MIB2 | |
Options | |
SNMPv2c and SNMPv3 compatible agent
There is also a MIB compiler and a MIB viewer in lwIP/contrib subdir (lwip/contrib/apps/LwipMibCompiler).
The agent implements the most important MIB2 MIBs including IPv6 support (interfaces, UDP, TCP, SNMP, ICMP, SYSTEM). IP MIB is an older version without IPv6 statistics (TODO).
Rewritten by Martin Hentschel info@.nosp@m.cl-s.nosp@m.oft.d.nosp@m.e and Dirk Ziegelmeier dzieg.nosp@m.el@g.nosp@m.mx.de
Note the S in SNMP stands for "Simple". Note that "Simple" is relative. SNMP is simple compared to the complex ISO network management protocols CMIP (Common Management Information Protocol) and CMOT (CMip Over Tcp).
When SNMPv3 is used, several functions from snmpv3.h must be implemented by the user. This is mainly user management and persistence handling. The sample provided in lwip-contrib is insecure, don't use it in production systems, especially the missing persistence for engine boots variable simplifies replay attacks.
The standard lwIP stack management information base. This is a required MIB, so this is always enabled. The groups EGP, CMOT and transmission are disabled by default.
Most mib-2 objects are not writable except: sysName, sysLocation, sysContact, snmpEnableAuthenTraps. Writing to or changing the ARP and IP address and route tables is not possible.
Note lwIP has a very limited notion of IP routing. It currently doesn't have a route table and doesn't have a notion of the U,G,H flags. Instead lwIP uses the interface list with only one default interface acting as a single gateway interface (G) for the default route.
The agent returns a "virtual table" with the default route 0.0.0.0 for the default interface and network routes (no H) for each network interface in the netif_list. All routes are considered to be up (U).
MIBs can only be added in compile-time, not in run-time.
First of all you'll need to add the following define to your local lwipopts.h: #define LWIP_SNMP 1
and add the source files your makefile.
Note you'll might need to adapt you network driver to update the mib2 variables for your interface.
The following function calls must be made in your program to actually get the SNMP agent running.
Before starting the agent you should supply pointers for sysContact, sysLocation, and snmpEnableAuthenTraps. You can do this by calling
You can register a callback which is called on successful write access: snmp_set_write_callback().
Additionally you may want to set
Also before starting the agent you need to setup one or more trap destinations using these calls:
If you need more than MIB2, set the MIBs you want to use by snmp_set_mibs().
Finally, enable the agent by calling snmp_init()