  * Lesser General Public License for more details.
  * 
  * @section Description
- * W5100 Ethernet Controller device driver example code; SNMP agent.
+ * W5100 Ethernet Controller device driver example code; SNMP agent
+ * with support for GET/GETNEXT/SET for MIB-2 SYSTEM and Arduino MIB. 
+ *
+ * @section Testing
+ * Test with Linux snmp commands:
+ * 1. Access the MIB-2 SYSTEM (sysDescr)
+ *   snmpget -v1 -c public 192.168.0.18 0.1.3.6.1.2.1.1.1
+ * 2. Access the Arduino MIB (ardDigitalPin.0)
+ *   snmpget -v1 -c public 192.168.0.18 0.1.3.6.1.4.1.36582.1.0
+ * 3. Walk the OID tree
+ *   snmpwalk -v1 -c public 192.168.0.18 0
  *
  * This file is part of the Arduino Che Cosa project.
  */

  // Wait for a request
  if (snmp.recv(pdu) < 0) return;

  // Match with MIB handlers
  if (!arduino_mib(pdu) && !system_mib(pdu))
    pdu.error_status = SNMP::NO_SUCH_NAME;
  
  // Send the response value

{
  // Match with SNMP MIB-2 System OID root
  int sys = pdu.oid.match(SNMP::MIB2_SYSTEM);
  if (sys < 0) return (false);

  // Get next value or step to next mib
  if (pdu.type == SNMP::PDU_GET_NEXT) {
    if (sys < SNMP::sysServices) {
      sys += 1;
      pdu.oid.name[pdu.oid.length - 1] = sys;
      pdu.type = SNMP::PDU_GET;
    }
    else {
      memcpy_P(&pdu.oid, SNMP::ARDUINO_MIB, pgm_read_byte(SNMP::ARDUINO_MIB) + 1);
      pdu.oid.name[pdu.oid.length++] = 0;
      pdu.oid.name[pdu.oid.length++] = 0;
      return (false);
    }
  }

  // Check request type
  if (sys < SNMP::sysDescr || sys > SNMP::sysServices) return (false);

  // Get system value
