From 8c8d591d67e872e363fb124786a71ddc1711641d Mon Sep 17 00:00:00 2001 From: "Chris A. Evans" Date: Wed, 31 May 2017 15:45:31 -0500 Subject: [PATCH] newdevice: Add basic support for CradlePoint WiPipe Cellular Broadband Routers (#6695) * Add basic support for CradlePoint Ceullular Broadband Rotuers new file: html/images/os/cradlepoint.png new file: includes/definitions/wipipe.yaml new file: includes/discovery/sensors/dbm/wipipe.inc.php new file: includes/discovery/sensors/pre-cache/wipipe.inc.php new file: includes/discovery/sensors/state/wipipe.inc.php new file: includes/polling/os/wipipe.inc.php * Added snmprec test file * Updated definitions file * Updated copyright blocks and comments * Added WIPIPE-MIB# * renamed: tests/snmpsim/wipipe.smmprec -> tests/snmpsim/wipipe.snmprec * copied: html/images/os/cradlepoint.png -> html/images/logos/cradlepoint.png modified: html/images/os/cradlepoint.png modified: includes/definitions/wipipe.yaml modified: includes/discovery/sensors/pre-cache/wipipe.inc.php modified: includes/polling/os/wipipe.inc.php * Changes requested by laf modified: includes/discovery/sensors/dbm/wipipe.inc.php modified: includes/discovery/sensors/pre-cache/wipipe.inc.php modified: includes/polling/os/wipipe.inc.php * Reworked devFWUpgradeStatus state sensor modified: includes/discovery/sensors/state/wipipe.inc.php * Fixed hardware/OS version detection modified: includes/polling/os/wipipe.inc.php * moved mib file to correct location --- html/images/logos/cradlepoint.png | Bin 0 -> 25184 bytes html/images/os/cradlepoint.png | Bin 0 -> 2699 bytes includes/definitions/wipipe.yaml | 9 + includes/discovery/sensors/dbm/wipipe.inc.php | 48 ++ .../sensors/pre-cache/wipipe.inc.php | 16 + .../discovery/sensors/state/wipipe.inc.php | 91 +++ includes/polling/os/wipipe.inc.php | 18 + mibs/cradlepoint/WIPIPE-MIB | 520 ++++++++++++++++++ tests/snmpsim/wipipe.snmprec | 2 + 9 files changed, 704 insertions(+) create mode 100644 html/images/logos/cradlepoint.png create mode 100644 html/images/os/cradlepoint.png create mode 100644 includes/definitions/wipipe.yaml create mode 100644 includes/discovery/sensors/dbm/wipipe.inc.php create mode 100644 includes/discovery/sensors/pre-cache/wipipe.inc.php create mode 100644 includes/discovery/sensors/state/wipipe.inc.php create mode 100644 includes/polling/os/wipipe.inc.php create mode 100644 mibs/cradlepoint/WIPIPE-MIB create mode 100644 tests/snmpsim/wipipe.snmprec diff --git a/html/images/logos/cradlepoint.png b/html/images/logos/cradlepoint.png new file mode 100644 index 0000000000000000000000000000000000000000..49df31c82d731c9d1e438567111a97dd9a3a07f6 GIT binary patch literal 25184 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 literal 0 HcmV?d00001 diff --git a/html/images/os/cradlepoint.png b/html/images/os/cradlepoint.png new file mode 100644 index 0000000000000000000000000000000000000000..cf63ed00bf802d6e3cf84c6468cf7c47b0a66ad9 GIT binary patch literal 2699 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 + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +echo 'CradlePoint WiPipe'; + +$multiplier = 1; +$divisor = 1; + +foreach ($pre_cache['wipipe_oids'] as $index => $entry) { + // Modem Signal Strength + if ($entry['mdmSignalStrength']) { + $oid = '.1.3.6.1.4.1.20992.1.2.2.1.4.' . $index; + // Get Modem Model & Phone Number for description + $modemdesc = $entry['mdmDescr']; + $modemmdn = $entry['mdmMDN']; + $descr = "Signal Strength - " . $modemdesc . " - " . $modemmdn; + $currentsignal = $entry['mdmSignalStrength']; + // Discover Sensor + discover_sensor( + $valid['sensor'], + 'dbm', + $device, + $oid, + 'mdmSignalStrength.'.$index, + 'wipipe', + $descr, + $divisor, + $multiplier, + null, + null, + null, + null, + $currentsignal, + 'snmp' + ); + } +} diff --git a/includes/discovery/sensors/pre-cache/wipipe.inc.php b/includes/discovery/sensors/pre-cache/wipipe.inc.php new file mode 100644 index 0000000000..9108eae5b6 --- /dev/null +++ b/includes/discovery/sensors/pre-cache/wipipe.inc.php @@ -0,0 +1,16 @@ + + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +echo 'Caching WIPIPE-MIB'; +$pre_cache['wipipe_oids'] = snmpwalk_cache_multi_oid($device, 'mdmEntry', array(), 'WIPIPE-MIB'); diff --git a/includes/discovery/sensors/state/wipipe.inc.php b/includes/discovery/sensors/state/wipipe.inc.php new file mode 100644 index 0000000000..60d9b5ec60 --- /dev/null +++ b/includes/discovery/sensors/state/wipipe.inc.php @@ -0,0 +1,91 @@ + + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +echo "CradlePoint WiPipe"; + +foreach ($pre_cache['wipipe_oids'] as $index => $entry) { + // Modem Connection Status + if ($entry['mdmStatus']) { + $cur_oid = '.1.3.6.1.4.1.20992.1.2.2.1.5.'; + //Create State Index + $state_name = 'mdmStatus'; + $state_index_id = create_state_index($state_name); + //Create State Translation + if ($state_index_id) { + $states = array( + array($state_index_id,'established',0,1,0) , + array($state_index_id,'establishing',0,2,0) , + array($state_index_id,'ready',0,3,0) , + array($state_index_id,'error',0,4,2) , + array($state_index_id,'disconnected',0,5,2) , + array($state_index_id,'disconnecting',0,6,1) , + array($state_index_id,'suspended',0,7,2) , + array($state_index_id,'empty',0,8,3) , + array($state_index_id,'notconfigured',0,9,3) , + array($state_index_id,'userstopped',0,10,1) + ); + foreach ($states as $value) { + $insert = array( + 'state_index_id' => $value[0], + 'state_descr' => $value[1], + 'state_draw_graph' => $value[2], + 'state_value' => $value[3], + 'state_generic_value' => $value[4] + ); + dbInsert($insert, 'state_translations'); + } + } + // Get Modem Model & Phone Number for description + $modemdesc = $entry['mdmDescr']; + $modemmdn = $entry['mdmMDN']; + $descr = "mdmStatus - " . $modemdesc . " - " . $modemmdn; + //Discover Sensors + discover_sensor($valid['sensor'], 'state', $device, $cur_oid.$index, $index, $state_name, $descr, '1', '1', null, null, null, null, $entry['mdmStatus'], 'snmp', $index); + //Create Sensor To State Index + create_sensor_to_state_index($device, $state_name, $index); + } +} +// Device Firmware Upgrade Status +$upgradestatus = snmpwalk_cache_oid($device, 'devFWUpgradeStatus', array(), 'WIPIPE-MIB'); +foreach ($upgradestatus as $index => $entry) { + $cur_oid = '.1.3.6.1.4.1.20992.1.1.4.'; + //Create State Index + $state_name = 'devFWUpgradeStatus'; + $state_index_id = create_state_index($state_name); + //Create State Translation + if ($state_index_id) { + $states = array( + array($state_index_id,'idle',0,1,0) , + array($state_index_id,'upgrading',0,2,0) , + array($state_index_id,'uptodate',0,3,0) , + array($state_index_id,'updateAvail',0,4,1) , + array($state_index_id,'failure',0,5,2) + ); + foreach ($states as $value) { + $insert = array( + 'state_index_id' => $value[0], + 'state_descr' => $value[1], + 'state_draw_graph' => $value[2], + 'state_value' => $value[3], + 'state_generic_value' => $value[4] + ); + dbInsert($insert, 'state_translations'); + } + } + $descr = "Firmware Upgrade Status"; + //Discover Sensors + discover_sensor($valid['sensor'], 'state', $device, $cur_oid.$index, $index, $state_name, $descr, '1', '1', null, null, null, null, $entry['devFWUpgradeStatus'], 'snmp', $index); + //Create Sensor To State Index + create_sensor_to_state_index($device, $state_name, $index); +} diff --git a/includes/polling/os/wipipe.inc.php b/includes/polling/os/wipipe.inc.php new file mode 100644 index 0000000000..40bc7a62fe --- /dev/null +++ b/includes/polling/os/wipipe.inc.php @@ -0,0 +1,18 @@ + + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +// Rip hardware and firmware version from sysDescr string -- example: Cradlepoint CBA850, Firmware Version 6.2.0.dd92f49 +preg_match('/(.*) ([\w\d]+), (.*) ([\w\d\.]+)/', $poll_device['sysDescr'], $wipipe_data); +$hardware = $wipipe_data[2]; +$version = $wipipe_data[4]; diff --git a/mibs/cradlepoint/WIPIPE-MIB b/mibs/cradlepoint/WIPIPE-MIB new file mode 100644 index 0000000000..7d692c5e16 --- /dev/null +++ b/mibs/cradlepoint/WIPIPE-MIB @@ -0,0 +1,520 @@ +WIPIPE-MIB DEFINITIONS ::= BEGIN + +-- WiPipe MIB Release 1.13 + +-- Copyright 2008-2016 by CradlePoint, Inc. All rights reserved + +-- This Specification is supplied "AS IS", CradlePoint makes no warranty, +-- either expressed or implied, as to the use, operation, condition, +-- or performance of the Specification. + +IMPORTS + enterprises + FROM RFC1155-SMI + OBJECT-TYPE + FROM RFC-1212; + +-- =============================================================================================== + +-- textual conventions + +DisplayString ::= + OCTET STRING +-- This data type is used to model textual information taken +-- from the NVT ASCII character set. By convention, objects +-- with this syntax are declared as having + +-- +-- SIZE (0..255) + +PhysAddress ::= + OCTET STRING +-- This data type is used to model media addresses. For many +-- types of media, this will be in a binary representation. +-- For example, an ethernet address would be represented as +-- a string of 6 octets. + + + +-- groups in WIPIPE + +wipipe OBJECT IDENTIFIER ::= { enterprises 20992 } + +wipipeMgmt OBJECT IDENTIFIER ::= { wipipe 1 } + +wipipeProd OBJECT IDENTIFIER ::= { wipipe 2 } + +mbr1000 OBJECT IDENTIFIER ::= { wipipeProd 1 } + +ctr500 OBJECT IDENTIFIER ::= { wipipeProd 2 } + +mbr800 OBJECT IDENTIFIER ::= { wipipeProd 3 } + +mbr1100 OBJECT IDENTIFIER ::= { wipipeProd 4 } + +mbr1200 OBJECT IDENTIFIER ::= { wipipeProd 5 } + +mbr900 OBJECT IDENTIFIER ::= { wipipeProd 6 } + +cba250 OBJECT IDENTIFIER ::= { wipipeProd 7 } + +cba750 OBJECT IDENTIFIER ::= { wipipeProd 8 } + +cx111 OBJECT IDENTIFIER ::= { wipipeProd 9 } + +mbr1400 OBJECT IDENTIFIER ::= { wipipeProd 10 } + +mbr1200b OBJECT IDENTIFIER ::= { wipipeProd 11 } + +cbr400 OBJECT IDENTIFIER ::= { wipipeProd 12 } + +cbr450 OBJECT IDENTIFIER ::= { wipipeProd 13 } + +ibr600 OBJECT IDENTIFIER ::= { wipipeProd 14 } + +ibr650 OBJECT IDENTIFIER ::= { wipipeProd 15 } + +mbr1400v2 OBJECT IDENTIFIER ::= { wipipeProd 16 } + +cba750b OBJECT IDENTIFIER ::= { wipipeProd 17 } + +aer2100 OBJECT IDENTIFIER ::= { wipipeProd 18 } + +ibr1150 OBJECT IDENTIFIER ::= { wipipeProd 19 } + +ibr1100 OBJECT IDENTIFIER ::= { wipipeProd 20 } + +cba850 OBJECT IDENTIFIER ::= { wipipeProd 21 } + +ibr350 OBJECT IDENTIFIER ::= { wipipeProd 22 } + +aer3100 OBJECT IDENTIFIER ::= { wipipeProd 23 } + +aer1600 OBJECT IDENTIFIER ::= { wipipeProd 24 } + +ibr650b OBJECT IDENTIFIER ::= { wipipeProd 25 } + +aer3150 OBJECT IDENTIFIER ::= { wipipeProd 26 } + +aer1650 OBJECT IDENTIFIER ::= { wipipeProd 27 } + +aer2150 OBJECT IDENTIFIER ::= { wipipeProd 28 } + +ibr600b OBJECT IDENTIFIER ::= { wipipeProd 29 } + +ibr950 OBJECT IDENTIFIER ::= { wipipeProd 30 } + +ibr900 OBJECT IDENTIFIER ::= { wipipeProd 31 } + +wipipeDevice OBJECT IDENTIFIER ::= { wipipeMgmt 1 } + +wipipeCellMdm OBJECT IDENTIFIER ::= { wipipeMgmt 2 } + + +-- the WiPipe Device Management group + +devFWVersion OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual description providing the firmware + version currently running on the device. + It is mandatory that this only contain + printable ASCII characters. + @GET-FUNC=snmp_get_devFWVersion" +::= { wipipeDevice 1 } + +devFWUpgrade OBJECT-TYPE + SYNTAX INTEGER { + none (1), + auto (2), + manual (3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Initiate a FW upgrade on the device. + none - No upgrade is being performed or initiated. + auto - If no other upgrade is begin performed, when this value + is written then an automatic upgrade will be performed. + When an automatic upgrade is done then the device will + pull the most current FW image from the Wipipe server + and install it. + If this value is read then the router is performing an + automatic upgrade and the devFWUpgradeStatus object should + be read for further information. + manual - If no other upgrade is begin performed, when this value + is written then a manual upgrade will be performed. + When an manual upgrade is done it will use the URL set + in the devFWUpgradeURL object as the place to get the + firmware image and install. If the devFWUpgradeURL object + is not set then no upgrade will be performed. + If this value is read then the router is performing an + manual upgrade and the devFWUpgradeStatus object should + be read for further information. - + @SET-FUNC=snmp_set_devFWUpgrade + @GET-FUNC=snmp_get_devFWUpgrade" +::= { wipipeDevice 2 } + +devFWUpgradeURL OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Set the URL that points to the firmware image that will be used + when doing a manual firmware upgrade. + @SET-FUNC=snmp_set_devFWUpgradeURL + @GET-FUNC=snmp_get_devFWUpgradeURL" +::= { wipipeDevice 3 } + +devFWUpgradeStatus OBJECT-TYPE + SYNTAX INTEGER { + idle (1), + upgrading (2), + uptodate (3), + updateAvail (4), + failure (5) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Show the result of the FW upgrade command. + idle = there is no upgrade in process. + upgrading = the new FW is being downloaded and written to flash. + uptodate = the device is already at the latest FW. Nothing to upgrade. + updateAvail - the device has an automatic update available. + failure = some sort of failure occurred during the upgrade. + The FW will not be upgraded. + NOTE - while the FW image is being written to flash interrupts are + disabled so no status will be returned at this time. + User should get the FW version string in order to determine if the + unit has been updated successfully. + @GET-FUNC=snmp_get_devFWUpgradeStatus" +::= { wipipeDevice 4 } + + +devGpioConfigInput OBJECT-TYPE + SYNTAX INTEGER { + none (1), + input (2), + reboot (3), + ignitionSensing (4) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Set the Input GPIO config on the connector. + none - ignore input value. + input - read the input value. + reboot - if the input is held low for 10 seconds, + reboot the router. + ignition_sensing - if the input is held low for 300 seconds, + power off the router. IBR11x0 series feature. + @SET-FUNC=snmp_set_devGpioConfigInput + @GET-FUNC=snmp_get_devGpioConfigInput" +::= { wipipeDevice 5 } + +devGpioReadInput OBJECT-TYPE + SYNTAX INTEGER (0..1) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Read the Input GPIO value on the connector. + 0 - low. + 1 - high. + @SET-FUNC=snmp_set_devGpioReadInput + @GET-FUNC=snmp_get_devGpioReadInput" +::= { wipipeDevice 6 } + +devGpioConfigOutput OBJECT-TYPE + SYNTAX INTEGER { + low (1), + high (2), + routerRunning (3), + modemConnected (4) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Set the output GPIO config on the connector. + low - Default low output value. + high - high output value. + routerRunning - high output value once the router completes + its boot process. + modemConnected - high output value when the modem completes a + data connection + @SET-FUNC=snmp_set_devGpioConfigOutput + @GET-FUNC=snmp_get_devGpioConfigOutput" +::= { wipipeDevice 7 } + +devGpioReadOutput OBJECT-TYPE + SYNTAX INTEGER (0..1) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Read the Output GPIO value on the connector. + 0 - low. + 1 - high. + @SET-FUNC=snmp_set_devGpioReadOutput + @GET-FUNC=snmp_get_devGpioReadOutput" +::= { wipipeDevice 8 } + +-- The WiPipe Cellular Modem Management Group + +mdmNumber OBJECT-TYPE + SYNTAX INTEGER (0..10) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of Cellular Modems (regardless of their + current state) present on this system. + @GET-FUNC=snmp_get_mdmNumber" + ::= { wipipeCellMdm 1 } + + +mdmTable OBJECT-TYPE + SYNTAX SEQUENCE OF MdmEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of Modem entries. The number of entries is + given by the value of ifNumber." + ::= { wipipeCellMdm 2 } + +mdmEntry OBJECT-TYPE + SYNTAX MdmEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "An entry containing management information applicable to a + particular modem. + @ROW-FUNC=snmp_get_mdmTable_row" + INDEX { mdmIndex }::= { mdmTable 1 } + +MdmEntry ::= + SEQUENCE { + mdmIndex INTEGER, + mdmDescr DisplayString, + mdmPort DisplayString, + mdmSignalStrength INTEGER, + mdmStatus INTEGER, + mdmECIO INTEGER, + mdmSerialNumber DisplayString, + mdmFirmwareVersion DisplayString, + mdmMDN DisplayString, + mdmSERDIS DisplayString, + mdmPROF DisplayString, + mdmCINR INTEGER, + mdmSINR INTEGER, + mdmRSRP INTEGER, + mdmRSRQ INTEGER, + mdmROAM INTEGER, + mdmRFBAND DisplayString, + mdmHOMECARRIER DisplayString, + mdmIMSI DisplayString, + mdmIMEI DisplayString, + mdmAPN DisplayString, + mdmRFCHANNEL DisplayString + } + + + +mdmIndex OBJECT-TYPE + SYNTAX INTEGER (0..10) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A unique value, greater than zero, for each cellular modem. It + is recommended that values are assigned contiguously + starting from 1. The value for each interface sub-layer + must remain constant at least from one re-initialization of + the entity's network management system to the next re- + initialization." + ::= { mdmEntry 1 } + +mdmDescr OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual string containing information about the + modem." + ::= { mdmEntry 2 } + +mdmPort OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual string containing information about what + port the modem is installed in." + ::= { mdmEntry 3 } + +mdmSignalStrength OBJECT-TYPE + SYNTAX INTEGER (-120..-30) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems signal strength, given in + dBm's." + ::= { mdmEntry 4 } + +mdmStatus OBJECT-TYPE + SYNTAX INTEGER { + established (1), + establishing (2), + ready (3), + error (4), + disconnected (5), + disconnecting (6), + suspended (7), + empty (8), + notconfigured (9), + userstopped (10) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual string containing infomation of the state + of the modem." + ::= { mdmEntry 5 } + +mdmECIO OBJECT-TYPE + SYNTAX INTEGER (-120..0) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems Ec/Io ratio given in dBm's." + ::= { mdmEntry 6 } + +mdmSerialNumber OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual string representing the unique serial number of the device." + ::= { mdmEntry 7 } + +mdmFirmwareVersion OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..64)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual string representing the current firmware version of the modem. + Not all modems report this value." + ::= { mdmEntry 8 } + +mdmMDN OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual string representing the unique Mobile Directory Number of the device." + ::= { mdmEntry 9 } + +mdmSERDIS OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual string representing the Service Display of the device." + ::= { mdmEntry 10 } + +mdmPROF OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual string representing the Profile of the device." + ::= { mdmEntry 11 } + +mdmCINR OBJECT-TYPE + SYNTAX INTEGER (-120..0) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems CINR ratio given in dBm's." + ::= { mdmEntry 12 } + +mdmSINR OBJECT-TYPE + SYNTAX INTEGER (-20..40) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems SINR ratio given in dBm's." + ::= { mdmEntry 13 } + +mdmRSRP OBJECT-TYPE + SYNTAX INTEGER (-120..100) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems RSRP given in dBm's." + ::= { mdmEntry 14 } + +mdmRSRQ OBJECT-TYPE + SYNTAX INTEGER (-120..50) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems RSRQ given in dBm's." + ::= { mdmEntry 15 } + +mdmROAM OBJECT-TYPE + SYNTAX INTEGER (0..2) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems Roaming Status." + ::= { mdmEntry 16 } + +mdmRFBAND OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems RF band." + ::= { mdmEntry 17 } + +mdmHOMECARRIER OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems Home Carrier." + ::= { mdmEntry 18 } + +mdmIMSI OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems IMSI." + ::= { mdmEntry 19 } + +mdmIMEI OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems IMEI." + ::= { mdmEntry 20 } + +mdmAPN OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems APN." + ::= { mdmEntry 21 } + +mdmRFCHANNEL OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The cellular modems RF Channel." + ::= { mdmEntry 22 } + +END diff --git a/tests/snmpsim/wipipe.snmprec b/tests/snmpsim/wipipe.snmprec new file mode 100644 index 0000000000..14844fde4d --- /dev/null +++ b/tests/snmpsim/wipipe.snmprec @@ -0,0 +1,2 @@ +1.3.6.1.2.1.1.1.0|4|Cradlepoint CBA850, Firmware Version 6.2.0.dd92f49 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.20992.2.21