History of C# SNMP Library

By Lex Li

This article describes the history of C# SNMP (#SNMP) Library.

The Road to 1.0 Release

Microsoft introduced .NET Framework to developers in 2000. While this platform has built-in support for many network protocols such as HTTP, FTP, and SMTP, it lacks of SNMP protocol support. Many third party solutions were developed to fill the gap, but most of them are commercial products.

Lex Li did an evaluation report of the existing libraries in 2008 for a project [1]. He was quite satisfied with some of the commercial solutions, but felt that there should be a need to have an open source implementation. Based on the code base from Malcolm Crowe [2], Lex was able to start a new open source project called C# SNMP Library [3] in April 2008 (#SNMP for short).

It was challenging a task to design an easy-to-use SNMP API, and also difficult a mission to study the SNMP protocol details. Remember the facts that Lex just graduated in 2007, and only had one year experience on programming professional projects. But luckily all initial problems (such as message parsing) were solved via experiments, and even features such as MIB parsing was developed in a way [4] . By using TDD approach, every major features are covered by unit test cases to ensure that regression bugs can be easily tracked down and fixed.

Near the final release of 1.0, two more products were added (the MIB browser and MIB compiler), so the project was renamed to #SNMP Suite.

The 1.0 release (code name UnicornHorn) was finally released in July 2008 [5] , four months after the project launch. It features basic SNMP v1 and v2c support.

SNMP v3 Support and Beyond

Steve Santacroce joined the project development in August 2008 [6] , and Lex joined Microsoft in October 2008. The efforts required to drive #SNMP forward were so overwhelming that Lex had to drop another open source project [7] .

The next major release of #SNMP Suite was 1.5 (code name TwinTower) in January 2009 [8] . It provides refined API surface, and many bugfixes over the initial release. The 2.0 release (code name CrossRoad) was released in April 2009 [9], which finished all tasks except SNMP v3 support.

SNMP v3 is a monster to conquer, because it introduced fundamental changes to the message format (and different agent side behaviors). Thus, many API elements have to be completely rewritten. But things became easier as another open source SNMP implementation named SNMP#NET was published by Milan Sinadinovic [10] . By reusing the encryption code, C# SNMP Library soon started to support SNMP v3 packets. The 3.0 release (code name Trident) was released in August 2009 with initial SNMP v3 support.

The next major task was to implement an SNMP agent that can process incoming requests. Fortunately Lex was working on ASP.NET/IIS at Microsoft at that time, so he reused many ideas he learned from ASP.NET request pipeline and designed a similar pipeline for SNMP messages [11] . The 4.0 release (code name SquareRoot) shipped the initial result in March 2010 with SNMP v1 and v2c message support [12] . SNMP v3 message support only arrived in 5.0 release (code name CatPaw) [13] in May 2010. Mono support was also included for the first time as Lex revised DockPanel Suite [14] .

The 6.0 release (code name HoneyCell) in November 2010 was the first major release that ships no big change [15] . #SNMP Suite had become more mature.

New Releases and License Changes

The 7.0 release (code name BigDipper) was released in October 2011 [16] was mainly a bug fix release.

The 8.0 release (code name TritonMate) was released in April 2013 [17] . It featured a new compiler based on ANTLR [18] , which was under BSD 3 Clause. This indicated a move to more permissive licenses. The SNMP pipeline code was changed to MIT/X11 in the same release [19] . After the final release, the code base had been updated to support Xamarin’s mobile platforms.

A serious bug in SNMP v3 was found and fixed [20] so that affected releases were updated with patches.

A significant license change was announced too, which released the Library code under MIT/X11 [21], which means all source code then was released under permissive licenses.

Following the license change, #SNMP Pro was announced, which forms a group of commercial products from LeXtudio [22] . Many issues once reported to the open source MIB compiler were finally fixed in the Pro edition by the new compiler design.

The open source project was renamed back to C# SNMP Library. Its latest release 8.5 was published in February 2015 [23] . This release featured full support for Windows, OS X, Linux, and Xamarin platforms.

The 9.x release in 2016 is code named LordGate [24] . This release was aiming to complete async/await support and .NET Core support. The release cycle became more flexible.

The 10.x release finally embraced .NET Standard support. It also completed AES support (adding AES 192/256). To support platforms where native AES is missing, a new SharpSnmpLib.BouncyCastle package is added.

The 11.x release separated the samples to a new repository and fixed a few long standing issues.

The 12.x release revised supported platforms to better align with modern .NET. It has been optimized to utilize new socket features introduced in .NET 6, and also added type annotations to the code base.

Footnotes