[Xorp-hackers] Does anybody have some suggesstion about SNMP?

Bruce Simpson bms at incunabulum.net
Sun Jan 10 18:18:04 PST 2010


On 06/01/2010 10:20, cheng wan wrote:
> Xorp removes SNMP after version 1.6.
> I went through the SNMP part code and found it was not easy to read/write.
> How about this:
> Add agent++ as agent process to Xorp system.
> Modify agent++ to support xrl IPC.
> Agent++ is written in C++ and more lightwight than NET-SNMP.
>

We reviewed Agent++ in-house around 15 months ago, and found it wasn't a 
very good fit for XORP's needs. AgentX is the right approach, but 
Agent++'s API was lacking in any clean way to integrate its I/O into the 
existing XORP processes.

I would suggest that Net-SNMP is still a better place to start. It has 
AgentX support out of the box. The key is to be able to deal with 
composite OID keys in a way which doesn't block out XRL, Net-SNMP or 
other callbacs from running.out of the main event loop.

Bridging XRL to an SNMP API looks deceptively simple on the surface. The 
problem with that approach is that SNMP MIBs often need to use composite 
keys for access to internal data within each routing process, which 
isn't available upfront, unless SNMP is running in the same address space.

This is especially true for BGP, which has had scalability problems. 
Doing a mass copy of BGP's state into the address space of the SNMP 
daemon is not an acceptable solution, this is what the legacy XORP SNMP 
support did.

Table iterators are also another problem. Net-SNMP has an abstraction 
for this, but my research quickly uncovered the issue that proxying 
these to XRL requests isn't easy. State has to be saved for the iterator 
in a way which doesn't block out other parts of Net-SNMP from running, 
whilst the table index fetch is running. You quickly find that XRL is 
introducing unacceptable latency in the SNMP fetch just for the indexes 
themselves.

So the regular Net-SNMP programming idioms can't be used as-is; some 
custom handlers are needed, and a clean way of exporting data 
structures, e.g. via shared memory.

One alternative is to add SNMP instrumentation to each process as a 
loadable plugin DLL, and export each protocol's OID tree via AgentX, to 
an appropriate master agent.

This is breaking the process boundaries in a way in which the original 
architects of XORP had hoped to avoid, but unfortunately, the nature of 
the problem means taking this kind of approach.



More information about the Xorp-hackers mailing list