Get status values via SNMP

using the SDK. Please do not forget to enable SNMP v3.

Sample script

can be run in the SDK test window.

status_snmp.are
/* DESC: This script extends MIB entries of the SNMP agent 
 * with values from nb_status
 * Copyright (coffee) 2014 NetModule AG, Switzerland
 */
 
if (nb_snmp_register("TEMPERATURE", 1, "s", "ro") == -1)
   exit(1);
if (nb_snmp_register("RSRQ", 2, "s", "ro") == -1)
   exit(2);
 
if (nb_snmp_link() == -1)
   exit(3);
 
while (1) {
   status = nb_status("wwan");
   if (nb_snmp_update("TEMPERATURE", struct_get(status, "MOBILE1_MODULE_TEMPERATURE")) == -1)
      exit(4);
   if (nb_snmp_update("RSRQ", struct_get(status, "MOBILE1_RSRQ")) == -1)
      exit(5);
   sleep(5); /* update frequency */
} 

Access via SNMP

Using SNMP v1/2c there are two communities. The “read” community only allows to read data. The “write” or “admin” gives read and write access. With “allowed hosts” you can restrict the SNMP access to the router via an IP range. “0.0.0.0” can be used for any access.

You can also use SNMP v3 for accessing the router. Attention must be paid to the fact that SNMP passwords have to be more than 8 characters long. Shorter passwords have to be doubled for SNMP (e.g. admin01 becomes admin01admin01). Only the user “admin” can be used To see the values run on linux:
snmpwalk -v 3 -u <user> -n “” -l authNoPriv -a MD5 -x DES -A <password>[<password>] <IPaddress> 1.3.6.1.4.1.31496.10.90

For example:

snmpwalk -v 3 -u snmp -n "" -l authNoPriv -a MD5 -x DES -A snmp01password 192.168.1.140  1.3.6.1.4.1.31496.10.90 
 
iso.3.6.1.4.1.31496.10.90.1.0 = STRING: "47.3"
iso.3.6.1.4.1.31496.10.90.2.0 = STRING: "-11.5"

Or use a windows tool:

*if you use SNMP v1/2c with the MibBrowser please set either the “Community” (=read only) or the “Write Commuinity” (=read-write), but not both at the same time.

For easier use please copy the NetModule private MIB (NETMODULE-VENDOR-MIB.mib into the MIB directory (e.g. C:\Program Files\MibBrowser Free Tool\mibs) and load it File→Load MIB .

Useful

These values can be used for nb_status(argument):

Argument Description
“summary” Short status summary
“system” System information
“license” License information
“wwan” WWAN module status
“wlan” WLAN module status
“gnss” GNSS (GPS) module status
“lan” LAN interface status
“wan” WAN interface status
“openvpn” OpenVPN connection status
“ipsec” IPsec connection status
“dio” Digital IO status

To see the fields run dump() in the test windows. E.g:

nb_status.are
status = nb_status("wwan"); 
dump(status);
 
struct(21): {
  .MOBILE1_MODULE_TEMPERATURE = string[4]: "47.4"
  .MOBILE1_SIGNAL = string[3]: "-83"
  .MOBILE1_LAC = string[4]: "FFFE"
  .MOBILE1_CID = string[7]: "16BB302"
  .MOBILE1_RSRQ = string[5]: "-11.5"
  .MOBILE1_ICCID = string[20]: "8949226133742004747F"
  .MOBILE1_REGISTRATION_STATE = string[23]: "registeredInHomeNetwork"
  .MOBILE1_MODULE_INFO = string[126]: "Manufacturer: Huawei Technologies Co., Ltd.  Model: ME909u-521  Revision: 11.235.07.00.00  IMEI: 860461024043005  +GCAP: +CGSM"
  .MOBILE1_MSISDN = string[3]: "n/a"
  .MOBILE1_SIM_STATE = string[8]: "unlocked"
  .MOBILE1_MEID = string[3]: "n/a"
  .MOBILE1_MODULE_TYPE = string[5]: "me909"
  .MOBILE1_MODULE_SLOT = string[1]: "0"
  .MOBILE1_RSRP = string[4]: "-113"
  .MOBILE1_IMSI = string[15]: "262073993546474"
  .MOBILE1_SERVICE_TYPE = string[3]: "LTE"
  .MOBILE1_LAI = string[5]: "26207"
  .MOBILE1_NETWORK = string[7]: "o2 - de"
  .MOBILE1_SIM = string[4]: "SIM1"
  .MOBILE1_IMEI = string[15]: "860461024043005"
  .MOBILE1_SINR = string[4]: "-1.4"
}

Extended example

status_snmp2.are
/* DESC: This script extends MIB entries of the SNMP agent 
 * with values from nb_status for temperature, signal level, 
 * transferred data on mobile network and
 * reset of transferred data counter
 * Copyright (coffee) 2014 NetModule AG, Switzerland
 */
if (nb_snmp_register("TEMPERATURE", 1, "s", "ro") == -1) exit(1);
if (nb_snmp_register("RSRQ", 2, "s", "ro") == -1) exit(2);
if (nb_snmp_register("DOWNLOADED", 3, "s", "ro") == -1)exit(3);
if (nb_snmp_register("UPLOADED", 4, "s", "ro") == -1)exit(4);
if (nb_snmp_register("RESET_DATA", 5, "s", "rw") == -1)exit(5);
 
if (nb_snmp_link() == -1)exit(6);
 
for(;;) {
   wwan = nb_status("wwan");
   wan = nb_status("wan");
   if (nb_snmp_update("TEMPERATURE", struct_get(wwan, "MOBILE1_MODULE_TEMPERATURE")) == -1) exit(7);
   if (nb_snmp_update("RSRQ", struct_get(wwan, "MOBILE1_RSRQ")) == -1) exit(8);
   if (nb_snmp_update("DOWNLOADED", struct_get(wan, "WANLINK1_DATA_DOWNLOADED")) == -1) exit(9);
   if (nb_snmp_update("UPLOADED", struct_get(wan, "WANLINK1_DATA_UPLOADED")) == -1) exit(10);
 
   if (s = nb_snmp_listen(5))
      if (s.name == "RESET_DATA" && s.value == "reset") {
          nb_reset_statistics("wanlink0");
          if (nb_snmp_update("RESET_DATA", strftime("%d.%m.%Y %H:%M:%S", localtime(time()))) == -1) exit(11);
      }
} 

Please extend the NetModule router MIB (VENODR-MIB.txt before “trap objects” with:

-- ****************************************************************************
-- NBSdkTable
-- ****************************************************************************
sdkTemperature OBJECT-TYPE
    SYNTAX  DisplayString
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
        "The temperature of the WWAN Module 1"
    ::= { sdk 1 }
    
sdkRSRQ OBJECT-TYPE
    SYNTAX  DisplayString
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
        "The RSRQ of the WWAN Module 1"
    ::= { sdk 2 }
    
sdkDataDownloaded OBJECT-TYPE
    SYNTAX  DisplayString
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
        "The data downloaded on the WAN interface"
    ::= { sdk 3 }
    
sdkDataUploaded OBJECT-TYPE
    SYNTAX  DisplayString
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
        "The data uploaded on the WAN interface"
    ::= { sdk 4 }   

sdkDataReset OBJECT-TYPE
    SYNTAX  DisplayString 
    MAX-ACCESS  read-write
    STATUS  current
    DESCRIPTION
        "Write 'reset' to reset the up- and download counters for the WAN interface."
    ::= { sdk 5 }