snmp,how to edit code generated by mib2c?

Hi,

I'm reading net-snmp site, using C language and unix environment, I have manager ( do get/set command), agent and server ... I'm trying to monitor cpu, memory and disk usage and get Ip address of server and send the value back to agent, stored in variable which enable manager to gets the value through get command...

  • if I use mib2c -c mib2c.int_watch.conf myMIB ( I provide a sample code at the end of this message):
    it declare the variables as integers (same managed object in myMIB, e.g: example1: in the provided code), how can I manipulate the variable outside of SNMP gets/sets ? ( example1= 20, will not change the value of example1 that seen by the manager).

-If I use mib2c -c mib2c.scalar.conf myMIB
It declare no variables just provide handler function ... how to edit the handler and change value of managed object if it is not declared?

Thanks in advance ..

----------------------------------------------

Code example: (mib2c -c mib2c.int_watch.conf myMIB)
This example creates some scalar registrations that allows some simple variables to be accessed via SNMP. In a more realistic example, it is likely that these variables would also be manipulated in other ways outside of SNMP gets/sets.
If this module is compiled into an agent, you should be able to issue snmp commands that look something like (authentication information not shown in these commands):

snmpget localhost netSnmpExampleInteger.0
netSnmpExampleScalars = 42
snmpset localhost netSnmpExampleInteger.0 = 1234
netSnmpExampleScalars = 1234
snmpget localhost netSnmpExampleInteger.0
netSnmpExampleScalars = 1234
/*

  • start be including the appropriate header files
    */
    #include <net-snmp/net-snmp-config.h>
    #include <net-snmp/net-snmp-includes.h>
    #include <net-snmp/agent/net-snmp-agent-includes.h>

/*

  • Then, we declare the variables we want to be accessed
    /
    static int example1 = 42; /
    default value */

/*

  • our initialization routine, automatically called by the agent

  • (to get called, the function name must match init_FILENAME())
    /
    void
    init_scalar_int(void)
    {
    /

    • the OID we want to register our integer at. This should be a
    • fully qualified instance. In our case, it's a scalar at:
    • NET-SNMP-EXAMPLES-MIB::netSnmpExampleInteger.0 (note the
    • trailing 0 which is required for any instantiation of any
    • scalar object)
      */
      oid my_registration_oid[] =
      { 1, 3, 6, 1, 4, 1, 8072, 2, 1, 1, 0 };

    /*

    • a debugging statement. Run the agent with -Dexample_scalar_int to see
    • the output of this debugging statement.
      */
      DEBUGMSGTL(("example_scalar_int",
      "Initalizing example scalar int. Default value = %d\n",
      example1));

    /*

    • the line below registers our "example1" variable above as
    • accessible and makes it writable. A read only version of the
    • same registration would merely call
    • register_read_only_int_instance() instead.
      *
    • If we wanted a callback when the value was retrieved or set
    • (even though the details of doing this are handled for you),
    • you could change the NULL pointer below to a valid handler
    • function.
      */
      netsnmp_register_int_instance("my example int variable",
      my_registration_oid,
      OID_LENGTH(my_registration_oid),
      &example1, NULL);

    DEBUGMSGTL(("example_scalar_int",
    "Done initalizing example scalar int\n"));
    }

Hey dude!

I am working on a 64 bit system for which I need to know its
diagnostics. Like array status, cpu temp, hard drive status, temp
etc.
What I have done is I have written a new MIB for that system which is
error free [I checked it through snmpB mib editor].
Then I produced the 2 files[.h & .c] through mib2c script provided
along with net-snmp 5.4.2.1 which are required to compile with new mib
modules.
Then I built the net-snmp package from the source using the option ./
configure --with-mib-modules and edited the snmpd.conf file as per
need.
Its reading my MIB and snmpwalk returns me some default values. for
example:

[root@vik local]# snmpwalk -v2c -c myco localhost .1.3.6.1.4.1.myoid
SNMPv2-SMI::enterprises.myoid.1.1.2.2.1.1.1.2.0 = INTEGER: 0
SNMPv2-SMI::enterprises.myoid.1.1.2.2.1.1.1.3.0 = INTEGER: 0
SNMPv2-SMI::enterprises.myoid.1.1.2.2.1.1.1.4.0 = INTEGER: 0
SNMPv2-SMI::enterprises.myoid.1.1.2.2.1.1.1.5.0 = INTEGER: 0
SNMPv2-SMI::enterprises.myoid.1.1.2.2.1.1.1.6.0 = INTEGER: 0
SNMPv2-SMI::enterprises.myoid.1.1.2.2.1.1.1.7.0 = INTEGER: 0

It looks like I have to add some code in the .c & .h file but I am not sure what it is?
Also I am using python scripts to retrieve the diagnostics, since its the external program I think I can pass the OIDs along with the script name & path in the snmpd.conf file.
It looks like if you are using an externam programme then u dnt need to compile it thru mib2c.

I am not sure as whats happening in there...

Anyways please reply if you have any information.

Thanks
Vik