hi there

hi there
I have been using snmpset in a Win10 command line to set variables in
example table netSnmpIETFWGTable and this works perfectly as follows:
C:\usr\bin>snmpset -v 2c -c nsCommStrRW 127.1.1.1
NET-SNMP-EXAMPLES-MIB::nsIETFWGChair1.\"wg1\" s jblog1
NET-SNMP-EXAMPLES-MIB::nsIETFWGChair2.\"wg1\" s jsnow1
NET-SNMP-EXAMPLES-MIB::nsIETFWGChair1."wg1" = STRING: "jblog1"
NET-SNMP-EXAMPLES-MIB::nsIETFWGChair2."wg1" = STRING: "jsnow1"
C:\usr\bin>snmptable -v 2c -c nsCommStrRW -Cc 12 -Cb -CB 127.1.1.1
NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
SNMP table: NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
        Name      Chair1      Chair2
       "wg1"    "jblog1"    "jsnow1"

I have a requirement however to run the set command within an application
and have done this by compiling the snmpset.c (net-snmp-5.8) source listing
into a test application as follows:
1) int snmpset(int argc, char *argv[]) //rename snmpset.c main function
2) static int quiet = 1;  //enable quiet mode
3) create a new c++ main driver function that runs snmpset loop:

#include <iostream>
#include <cstring>
#include <vector>
#include <sstream>
#include <chrono>
#include <thread>
extern "C"{
int snmpset(int argc, char *argv[]);
}
std::string int_to_string(int i){
 std::stringstream ss;
 ss << i;
 return (ss.str());
}
int main()
{
        int argc = 9, result = 0 ;
        std::string  comm, Wg, WgValue, Chair1, Chair2, Chair1Value,
Chair2Value;
        Wg  = "NET-SNMP-EXAMPLES-MIB::nsIETFWGName.\"wg1\"";
        char wg_array [Wg.size()+1];
        strcpy(wg_array, Wg.c_str());
        WgValue  = "wg1";
        char wgValue_array [comm.size()+1];
        strcpy(wgValue_array, WgValue.c_str());
        comm  = "nsCommStrRW";
        char comm_array [comm.size()+1];
        strcpy(comm_array, comm.c_str());
        char* snmp_set [] = {"snmpset.exe","-v", "2c", "-c", comm_array, "
127.1.1.1:161", wg_array, "s", wgValue_array};
        result = snmpset (argc, snmp_set );
        if (result){
            std::cout <<"snmpset fail: "<<result <<"\n";
        }
        Chair1  = "NET-SNMP-EXAMPLES-MIB::nsIETFWGChair1.\"wg1\"";
        char chair1_array [Chair1.size()+1];
        strcpy(chair1_array, Chair1.c_str());
        Chair2  = "NET-SNMP-EXAMPLES-MIB::nsIETFWGChair2.\"wg1\"";
        char chair2_array [Chair2.size()+1];
        strcpy(chair2_array, Chair2.c_str());
        argc = 12;
        while(true){
                for (int i =0; i<10000000; ++i)
                {
                comm  = "nsCommStrRW";
                char comm_array [comm.size()+1];
                strcpy(comm_array, comm.c_str());
                Chair1Value  = "jblog" + int_to_string(i);
                char Chair1Value_array [Chair1Value.size()+1];
                strcpy(Chair1Value_array, Chair1Value.c_str());
                Chair2Value  = "jsnow" + int_to_string(i);;
                char Chair2Value_array [Chair2Value.size()+1];
                strcpy(Chair2Value_array, Chair2Value.c_str());
                char* snmp_set [] = {"snmpset.exe","-v", "2c", "-c",
comm_array, "127.1.1.1:161", chair1_array, "s", Chair1Value_array,
chair2_array, "s", Chair2Value_array};
                result = snmpset (argc, snmp_set );
                    if (result){
                        std::cout <<"snmpset fail: "<<result <<"\n";
                        break;
                    }
                 std::this_thread::sleep_for(std::chrono::milliseconds(50));
                }
        }
    return 0;
}

The program updates Chair1 and Chair2 as expected as shown by issueing
consecutive snmptable commands:
C:\usr\bin>snmptable -v 2c -c nsCommStrRW -Cc 12 -Cb -CB 127.1.1.1
NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
SNMP table: NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
        Name      Chair1      Chair2
       "wg1"   "jblog88"   "jsnow88"
C:\usr\bin>snmptable -v 2c -c nsCommStrRW -Cc 12 -Cb -CB 127.1.1.1
NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
SNMP table: NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
        Name      Chair1      Chair2
       "wg1"  "jblog132"  "jsnow132"
C:\usr\bin>snmptable -v 2c -c nsCommStrRW -Cc 12 -Cb -CB 127.1.1.1
NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
SNMP table: NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
        Name      Chair1      Chair2
       "wg1"  "jblog626"  "jsnow626"

The problem however is that the application appears to consume memory each
time snmpset is called.
Here are some stats i have collected.
netSnmpIETFWGTable memory usage:
Time       Mem Usage(Kbytes)    Program Loops
09:00     1712                             0
09:30     2960                             25332
10:00     4624                             55858
10:30     6256                             85844
So after running for approx 1.5 hours the application had consumed approx
4MBytes
i need the application to run continuously therefore any memory used during
snmpset function call needs to be released on return.

Any help much appreciated.

Cathal
_______________________________________________
Net-snmp-users mailing list
Net-snmp-users@lists.sourceforge.net
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users

Reply via email to