Hi Adam/All

I may have missed how to make a more formal submission for hardware support, so if there is one let me know.

However, I suspect the mailing list is probably a good arena for any criticism/pointers on what to do better/what not to do when attempting to add new device support.

--

I’ve recently been involved in the installation of equipment and support for a mobile medical facility.

We’ve used Meraki switches and access points for a number of reasons, not least of which is the instant monitoring/alerts capability, web based management, web based troubleshooting capabilities and easy provisioning of equipment when it needs to be replaced.

As much as the Meraki web management portal is useful, it’s not necessarily always available in this facility and we needed a local management system/interface to monitor the equipment, alert local users to any failures/problems, and provide a quick and easy “view” for all of the ICT equipment within the mobile facility.

So, I used Observium, but needed to add support for the Meraki components.

Meraki provide an SNMP interface to their cloud management platform. It’s basically useless if talking directly to equipment as there’s currently no extra information you can extract from the devices themselves.

The Meraki Cloud Controller MIB can be obtained here,

https://n85.meraki.com/resources/MERAKI-CLOUD-CONTROLLER-MIB.mib

Their cloud controller itself looks like the below. I don't really want to add this to Observium myself but have included the OID for detection and possible to for additional inventory collection at a later date. Strip it out if necessary.

<pre class="prettyprint"><code>SNMPv2-MIB::sysDescr.0 = STRING: Cisco Meraki Cloud Controller
SNMPv2-MIB::sysObjectID.0 = OID: MERAKI-CLOUD-CONTROLLER-MIB::cloudController
DISMAN-EVENT-MIB::sysUpTimeInstance = INTEGER: -1685384396
SNMPv2-MIB::sysContact.0 = STRING: support@meraki.com
SNMPv2-MIB::sysName.0 = STRING: dashboard.meraki.com
SNMPv2-MIB::sysLocation.0 = STRING: 500 Terry Francois St., San Francisco, CA 94158, USA</code></pre>

AP's basically look like this,

SNMPv2-MIB::sysDescr.0 = STRING: Meraki MR18 Cloud Managed AP
SNMPv2-MIB::sysObjectID.0 = OID: MERAKI-CLOUD-CONTROLLER-MIB::mr18
SNMPv2-MIB::sysORID.1 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.2 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORID.3 = OID: IF-MIB::ifMIB
SNMPv2-MIB::sysORID.4 = OID: IEEE802dot11-MIB::ieee802dot11
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.2 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORDescr.3 = STRING: The MIB module to describe generic objects for network interface sub-layers
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for managing 802.11 implementations
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (3) 0:00:00.03
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (3) 0:00:00.03</code></pre>

MIB support from the sysORID list appears to be correct, I couldn't discover anything else on the MR18 and MR34 AP's.

Switches basically look like this,

SNMPv2-MIB::sysDescr.0 = STRING: Meraki MS220-24P Cloud Managed PoE Switch
SNMPv2-MIB::sysObjectID.0 = OID: MERAKI-CLOUD-CONTROLLER-MIB::merakiProducts.307
SNMPv2-MIB::sysName.0 = STRING: truck01-s1
SNMPv2-MIB::sysORID.1 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.2 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORID.3 = OID: IF-MIB::ifMIB
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.2 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORDescr.3 = STRING: The MIB module to describe generic objects for network interface sub-layers
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (2) 0:00:00.02
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (22) 0:00:00.22</code></pre>

MIB support from the sysORID list is not quite correct, MS220-24P also supports the BRIDGE-MIB.

I don't have access to any of the security appliances at this time but the OID should be under .1.3.6.1.4.1.29671.2. anyway, so I believe Observium will auto-detect and add those too.

Attached is a 32x32 icon I created from the logo available on the partner website, which can be placed in html/images/os/meraki.png



OS definition for includes/definitions/os.inc.php

$os = "meraki";
$config['os'][$os]['text']              = "Cisco Meraki";
$config['os'][$os]['type']              = "network";
$config['os'][$os]['icon']              = "meraki";
$config['os'][$os]['sysObjectID'][]     = ".1.3.6.1.4.1.29671.1"; // Cloud controller
$config['os'][$os]['sysObjectID'][]     = ".1.3.6.1.4.1.29671.2."; // Hardware
$config['os'][$os]['mibs'][]            = "IEEE802dot11-MIB";
$config['os'][$os]['mibs'][]            = "BRIDGE-MIB";
$config['os'][$os]['mibs'][]            = "MERAKI-CLOUD-CONTROLLER-MIB";</code></pre>

Basic poller support to grab the hardware model/platform type

includes/polling/os/meraki.inc.php

<?php

if (preg_match('/^Meraki ([A-Z\-_0-9]+) (.*)/', $poll_device['sysDescr'], $regexp_result))
{
  $hardware = $regexp_result[1];
  $platform = $regexp_result[2];
}

// EOF


-Colin