In the beginning, NetHorus was called NETMAN, written in PHP and Perl. I tried to rewrite the project entirely in Perl using Catalyst in 2006, but failed through a lack of time and available books on Catalyst. That’s not to say Catalyst is a bad framework – far from it – but I wanted something a little more ‘me’.
My decision to re-code in Ruby using Rails wasn’t too difficult, although SNMP support was a major concern. SNMP.pm for Perl is awesome – feature-rich, supported, quick… all the things that Ruby’s only SNMP implementation isn’t, despite what its website proclaims.
Right now, I’m at the stage where I could develop snmp.rb, bolt on MIB parsing using libsmi, then struggle down the path of implementing SNMPv3, and lose sight of what I’m really supposed to be doing. Or, I could think of another way – such as using XML-RPC, possibly with BEEP, to an SNMP proxy written in Perl which then dispatches requests.
In a quick brainstorming session at $DAYJOB, I came up with some advantages to handing off SNMP to another device:
- SNMP doesn’t work terribly quickly over high latency paths, so why not use a TCP-based connection as far as possible, and do all the SNMP donkey-work closer to the other endpoint?
- Anything other than SNMPv3 isn’t encrypted in the slightest, and not everyone has the infrastructure to ensure an encrypted path between an SNMP manager and an SNMP agent. Put the proxy on a remote device if you want, and suddenly it becomes easier.
- Embedded devices behind firewalls. Your network suddenly becomes a little easier to manage…
So that’s where it’ll go. It’s not as light as SNMP, but it’s more extensible than what Ruby has to offer. The SNMP proxy doesn’t have to be written in perl either.
For now, I’m concentrating on the basic functionality of getting single and multiple OIDs, and walking tables. The rest will come later.