--===============1338834828==
Content-Type: multipart/alternative;
boundary="----=_Part_2211_16468174.1207239925174"

------=_Part_2211_16468174.1207239925174
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi

I am learning to coding MIBs. My problem is that my module is not answering
to MODE_GET message. Here is code

/*
* Note: this file originally auto-generated by mib2c using
* : mib2c.int_watch.conf,v 5.0 2002/04/20 07:30:13 hardaker Exp $
*/

#include
#include
#include
#include "nstAgentPluginObject.h"

/*
* the variable we want to tie an OID to. The agent will handle all
* * GET and SET requests to this variable changing it's value as needed.
*/

static int nstAgentPluginObject = 3;
static int nstAgentPluginObject1 = 42;
static int nstAgentPluginObject2 = 69;


#define DELAYED_INSTANCE_SET_NAME "nstAgentPluginObject2_delayed"


int
nstAgentPluginObject2_handler(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests)

{

u_long *nstAgentPluginObject2_cache = NULL;
int ret;

DEBUGMSGTL(("nstAgentPluginObject2", "Got request, mode = %d:\n",
reqinfo->mode));

//requests->delegated = 0;

switch (reqinfo->mode) {

case MODE_GET:
case MODE_GETNEXT:
/*
* return the currend delay time
*/

DEBUGMSGTL(("nstAgentPluginObject2", "Got get, value = %d:\n",
nstAgentPluginObject2));

ret = snmp_set_var_typed_value(requests->requestvb,
ASN_INTEGER,
(u_char *) & nstAgentPluginObject2,
sizeof(nstAgentPluginObject2));

DEBUGMSGTL(("nstAgentPluginObject2", "snmp_set_var_typed_value returned
%d\n",
ret));
break;

case MODE_SET_RESERVE1:
/*
* check type
*/
if (requests->requestvb->type != ASN_INTEGER) {
/*
* not an integer. Bad dog, no bone.
*/
netsnmp_set_request_error(reqinfo, requests,
SNMP_ERR_WRONGTYPE);
/*
* we don't need the cache any longer
*/
//netsnmp_free_delegated_cache(cache);
return SNMP_ERR_WRONGTYPE;
}
break;

case MODE_SET_RESERVE2:
/*
* store old value for UNDO support in the future.
*/
memdup((u_char **) & nstAgentPluginObject2_cache,
(u_char *) & nstAgentPluginObject2,
sizeof(nstAgentPluginObject2));

/*
* malloc failed
*/
if (nstAgentPluginObject2_cache == NULL) {
netsnmp_set_request_error(reqinfo, requests,
SNMP_ERR_RESOURCEUNAVAILABLE);
//netsnmp_free_delegated_cache(cache);
return SNMP_ERR_RESOURCEUNAVAILABLE;
}

/*
* Add our temporary information to the request itself.
* This is then retrivable later. The free function
* passed auto-frees it when the request is later
* deleted.
*/
netsnmp_request_add_list_data(requests,
netsnmp_create_data_list
(DELAYED_INSTANCE_SET_NAME,
nstAgentPluginObject2_cache, free));
break;

case MODE_SET_ACTION:
/*
* update current value
*/
nstAgentPluginObject2 = *(requests->requestvb->val.integer);
DEBUGMSGTL(("nstAgentPluginObject2_handler", "updated
nstAgentPluginObject2 -> %d\n",
nstAgentPluginObject2));
break;

case MODE_SET_UNDO:
/*
* ack, something somewhere failed. We reset back to the
* previously old value by extracting the previosuly
* stored information back out of the request
*/
nstAgentPluginObject2 =
*((u_long *) netsnmp_request_get_list_data(requests,

DELAYED_INSTANCE_SET_NAME));
break;

case MODE_SET_COMMIT:
case MODE_SET_FREE:
/*
* the only thing to do here is free the old memdup'ed
* value, but it's auto-freed by the datalist recovery, so
* we don't have anything to actually do here
*/
break;



}



return SNMP_ERR_NOERROR;


}
/*
* our initialization routine, automatically called by the agent
* (to get called, the function name must match init_FILENAME())
*/
void
init_nstAgentPluginObject(void)
{
static oid nstAgentPluginObject_oid[] =
{ 1, 3, 6, 1, 4, 1, 8072, 2, 4, 1, 1, 3, 0 };

static oid nstAgentPluginObject1_oid[] =
{ 1, 3, 6, 1, 4, 1, 8072, 2, 4, 1, 1, 4, 0 };

static oid nstAgentPluginObject2_oid[] =
{ 1, 3, 6, 1, 4, 1, 8072, 2, 4, 1, 1, 5, 0 };


netsnmp_handler_registration *my_test;


/*
* a debugging statement. Run the agent with -DnstAgentPluginObject to
see
* the output of this debugging statement.
*/
DEBUGMSGTL(("nstAgentPluginObject",
"Initializing the nstAgentPluginObject module\n"));


/*
* the line below registers our variables defined above as
* accessible and makes it writable. A read only version of any
* of these registration would merely call
* register_read_only_int_instance() instead. The functions
* called below should be consistent with your MIB, however.
*
* 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.
*/
DEBUGMSGTL(("nstAgentPluginObject",
"Initalizing nstAgentPluginObject scalar integer. Default
value = %d\n",
nstAgentPluginObject));

DEBUGMSGTL(("nstAgentPluginObject1",
"Initalizing nstAgentPluginObject scalar integer. Default
value = %d\n",
nstAgentPluginObject1));



netsnmp_register_int_instance("nstAgentPluginObject",
nstAgentPluginObject_oid,
OID_LENGTH(nstAgentPluginObject_oid),
&nstAgentPluginObject, NULL);

netsnmp_register_int_instance("nstAgentPluginObject1",
nstAgentPluginObject1_oid,
OID_LENGTH(nstAgentPluginObject1_oid),
&nstAgentPluginObject1, NULL);

my_test =
netsnmp_create_handler_registration("nstAgentPluginObject2",
nstAgentPluginObject2_handler,
nstAgentPluginObject2_oid,

OID_LENGTH(nstAgentPluginObject2_oid),
HANDLER_CAN_RWRITE);

netsnmp_register_instance(my_test);


//netsnmp_register_int_instance("nstAgentPluginObject2",
// nstAgentPluginObject2_oid,
// OID_LENGTH(nstAgentPluginObject2_oid),
// &nstAgentPluginObject2, NULL);


DEBUGMSGTL(("nstAgentPluginObject",
"Done initalizing nstAgentPluginObject module\n"));
}

Here is snmp agent output

-bash-3.00# /usr/sfw/sbin/snmpd -f -L -DnstAgentPluginObject,dlmod
dlmod: register mib
dlmod: dlmod_path: /usr/sfw/lib/amd64/snmp/dlmod
dlmod: dlmod_create_module
dlmod: dlmod_load_module nstAgentPluginObject:
/usr/sfw/lib/amd64/nstAgentPluginObject.so
nstAgentPluginObject: Initializing the nstAgentPluginObject module
nstAgentPluginObject: Initalizing nstAgentPluginObject scalar integer.
Default value = 3
nstAgentPluginObject1: Initalizing nstAgentPluginObject scalar integer.
Default value = 42
nstAgentPluginObject: Done initalizing nstAgentPluginObject module
NET-SNMP version 5.0.9
nstAgentPluginObject2: Got request, mode = 160:
nstAgentPluginObject2: Got get, value = 69:
nstAgentPluginObject2: snmp_set_var_typed_value returned 0
nstAgentPluginObject2: Got request, mode = 160:
nstAgentPluginObject2: Got get, value = 69:
nstAgentPluginObject2: snmp_set_var_typed_value returned 0
nstAgentPluginObject2: Got request, mode = 160:
nstAgentPluginObject2: Got get, value = 69:
nstAgentPluginObject2: snmp_set_var_typed_value returned 0
nstAgentPluginObject2: Got request, mode = 160:
nstAgentPluginObject2: Got get, value = 69:
nstAgentPluginObject2: snmp_set_var_typed_value returned 0
nstAgentPluginObject2: Got request, mode = 160:
nstAgentPluginObject2: Got get, value = 69:
nstAgentPluginObject2: snmp_set_var_typed_value returned 0
nstAgentPluginObject2: Got request, mode = 160:
nstAgentPluginObject2: Got get, value = 69:
nstAgentPluginObject2: snmp_set_var_typed_value returned 0
^CReceived TERM or STOP signal... shutting down...
dlmod: Module nstAgentPluginObject unloaded

Here is snmpget output

-bash-3.00# snmpget -c private localhost
NET-SNMP-TUTORIAL-MIB::nstAgentPluginObject2.0
Timeout: No Response from localhost.
-bash-3.00#

I build module using command

$(CC) $(CFLAGS) -xarch=amd64 -G -o nstAgentPluginObject.so -Kpic
nstAgentPluginObject.c

snmpset is working correctly

-bash-3.00# snmpset -c private localhost
NET-SNMP-TUTORIAL-MIB::nstAgentPluginObject2.0 = 234
NET-SNMP-TUTORIAL-MIB::nstAgentPluginObject2.0 = INTEGER: 234
-bash-3.00#

Also nstAgentPluginObject and nstAgentPluginObject1 are working correctly

I am using version 5.0.9 because I want to create module for x86 Solaris 10.
I installed headerfiles ( ... )
from net-snmp-5.0.11


Christer Ekholm

------=_Part_2211_16468174.1207239925174
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi

I am learning to coding MIBs. My problem is that my module is not answering to MODE_GET message. Here is code

/*
 * Note: this file originally auto-generated by mib2c using
 *        : mib2c.int_watch.conf,v 5.0 2002/04/20 07:30:13 hardaker Exp $

 */

#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include "nstAgentPluginObject.h"

/*

 * the variable we want to tie an OID to.  The agent will handle all
 * * GET and SET requests to this variable changing it's value as needed.
 */

static int      nstAgentPluginObject = 3;
static int      nstAgentPluginObject1 = 42;

static int      nstAgentPluginObject2 = 69;


#define DELAYED_INSTANCE_SET_NAME "nstAgentPluginObject2_delayed"


int
nstAgentPluginObject2_handler(netsnmp_mib_handler *handler,
                         netsnmp_handler_registration *reginfo,

                         netsnmp_agent_request_info *reqinfo,
                         netsnmp_request_info *requests)

{

    u_long         *nstAgentPluginObject2_cache = NULL;
    int ret;

  DEBUGMSGTL(("nstAgentPluginObject2", "Got request, mode = %d:\n",

                reqinfo->mode));

 //requests->delegated = 0;

    switch (reqinfo->mode) {

    case MODE_GET:
    case MODE_GETNEXT:
        /*
         * return the currend delay time

         */

    DEBUGMSGTL(("nstAgentPluginObject2", "Got get, value = %d:\n",
                nstAgentPluginObject2));

        ret = snmp_set_var_typed_value(requests->requestvb,

                                 ASN_INTEGER,
                                 (u_char *) & nstAgentPluginObject2,
                                 sizeof(nstAgentPluginObject2));

    DEBUGMSGTL(("nstAgentPluginObject2", "snmp_set_var_typed_value returned  %d\n",

                ret));
        break;

    case MODE_SET_RESERVE1:
        /*
         * check type
         */
        if (requests->requestvb->type != ASN_INTEGER) {
            /*
             * not an integer.  Bad dog, no bone.

             */
            netsnmp_set_request_error(reqinfo, requests,
                                      SNMP_ERR_WRONGTYPE);
            /*
             * we don't need the cache any longer
             */

            //netsnmp_free_delegated_cache(cache);
            return SNMP_ERR_WRONGTYPE;
        }
        break;

    case MODE_SET_RESERVE2:
        /*
         * store old value for UNDO support in the future.

         */
        memdup((u_char **) & nstAgentPluginObject2_cache,
               (u_char *) & nstAgentPluginObject2, sizeof(nstAgentPluginObject2));

        /*
         * malloc failed
         */

        if (nstAgentPluginObject2_cache == NULL) {
            netsnmp_set_request_error(reqinfo, requests,
                                      SNMP_ERR_RESOURCEUNAVAILABLE);
            //netsnmp_free_delegated_cache(cache);

            return SNMP_ERR_RESOURCEUNAVAILABLE;
        }

        /*
         * Add our temporary information to the request itself.
         * This is then retrivable later.  The free function
         * passed auto-frees it when the request is later

         * deleted.
         */
        netsnmp_request_add_list_data(requests,
                                      netsnmp_create_data_list
                                      (DELAYED_INSTANCE_SET_NAME,

                                       nstAgentPluginObject2_cache, free));
        break;

    case MODE_SET_ACTION:
        /*
         * update current value
         */
        nstAgentPluginObject2 = *(requests->requestvb->val.integer);

        DEBUGMSGTL(("nstAgentPluginObject2_handler", "updated nstAgentPluginObject2 -> %d\n",
                    nstAgentPluginObject2));
        break;

    case MODE_SET_UNDO:
        /*

         * ack, something somewhere failed.  We reset back to the
         * previously old value by extracting the previosuly
         * stored information back out of the request
         */
        nstAgentPluginObject2 =

            *((u_long *) netsnmp_request_get_list_data(requests,
                                                        DELAYED_INSTANCE_SET_NAME));
        break;

    case MODE_SET_COMMIT:
    case MODE_SET_FREE:

        /*
         * the only thing to do here is free the old memdup'ed
         * value, but it's auto-freed by the datalist recovery, so
         * we don't have anything to actually do here
         */

        break;



    }



    return SNMP_ERR_NOERROR;


}
/*
 * our initialization routine, automatically called by the agent
 * (to get called, the function name must match init_FILENAME())

 */
void
init_nstAgentPluginObject(void)
{
    static oid      nstAgentPluginObject_oid[] =
        { 1, 3, 6, 1, 4, 1, 8072, 2, 4, 1, 1, 3, 0 };

    static oid      nstAgentPluginObject1_oid[] =

        { 1, 3, 6, 1, 4, 1, 8072, 2, 4, 1, 1, 4, 0 };

    static oid      nstAgentPluginObject2_oid[] =
        { 1, 3, 6, 1, 4, 1, 8072, 2, 4, 1, 1, 5, 0 };


    netsnmp_handler_registration *my_test;



    /*
     * a debugging statement.  Run the agent with -DnstAgentPluginObject to see
     * the output of this debugging statement.
     */
    DEBUGMSGTL(("nstAgentPluginObject",
                "Initializing the nstAgentPluginObject module\n"));



    /*
     * the line below registers our variables defined above as
     * accessible and makes it writable.  A read only version of any
     * of these registration would merely call
     * register_read_only_int_instance() instead.  The functions

     * called below should be consistent with your MIB, however.
     *
     * 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.
     */
    DEBUGMSGTL(("nstAgentPluginObject",
                "Initalizing nstAgentPluginObject scalar integer.  Default value = %d\n",
                nstAgentPluginObject));


    DEBUGMSGTL(("nstAgentPluginObject1",
                "Initalizing nstAgentPluginObject scalar integer.  Default value = %d\n",
                nstAgentPluginObject1));



    netsnmp_register_int_instance("nstAgentPluginObjec t",

                                  nstAgentPluginObject_oid,
                                  OID_LENGTH(nstAgentPluginObject_oid),
                                  &nstAgentPluginObject, NULL);

    netsnmp_register_int_instance("nstAgentPluginObjec t1",

                                  nstAgentPluginObject1_oid,
                                  OID_LENGTH(nstAgentPluginObject1_oid),
                                  &nstAgentPluginObject1, NULL);

    my_test =

        netsnmp_create_handler_registration("nstAgentPlugi nObject2",
                                            nstAgentPluginObject2_handler,
                                            nstAgentPluginObject2_oid,

                                            OID_LENGTH(nstAgentPluginObject2_oid),
                                            HANDLER_CAN_RWRITE);

    netsnmp_register_instance(my_test);


    //netsnmp_register_int_instance("nstAgentPluginObjec t2",

      //                            nstAgentPluginObject2_oid,
      //                            OID_LENGTH(nstAgentPluginObject2_oid),
      //                            &nstAgentPluginObject2, NULL);



    DEBUGMSGTL(("nstAgentPluginObject",
                "Done initalizing nstAgentPluginObject module\n"));
}

Here is snmp agent output

-bash-3.00#  /usr/sfw/sbin/snmpd  -f -L -DnstAgentPluginObject,dlmod

dlmod: register mib
dlmod: dlmod_path: /usr/sfw/lib/amd64/snmp/dlmod
dlmod: dlmod_create_module
dlmod: dlmod_load_module nstAgentPluginObject: /usr/sfw/lib/amd64/nstAgentPluginObject.so
nstAgentPluginObject: Initializing the nstAgentPluginObject module

nstAgentPluginObject: Initalizing nstAgentPluginObject scalar integer.  Default value = 3
nstAgentPluginObject1: Initalizing nstAgentPluginObject scalar integer.  Default value = 42
nstAgentPluginObject: Done initalizing nstAgentPluginObject module

NET-SNMP version 5.0.9
nstAgentPluginObject2: Got request, mode = 160:
nstAgentPluginObject2: Got get, value = 69:
nstAgentPluginObject2: snmp_set_var_typed_value returned  0
nstAgentPluginObject2: Got request, mode = 160:

nstAgentPluginObject2: Got get, value = 69:
nstAgentPluginObject2: snmp_set_var_typed_value returned  0
nstAgentPluginObject2: Got request, mode = 160:
nstAgentPluginObject2: Got get, value = 69:
nstAgentPluginObject2: snmp_set_var_typed_value returned  0

nstAgentPluginObject2: Got request, mode = 160:
nstAgentPluginObject2: Got get, value = 69:
nstAgentPluginObject2: snmp_set_var_typed_value returned  0
nstAgentPluginObject2: Got request, mode = 160:
nstAgentPluginObject2: Got get, value = 69:

nstAgentPluginObject2: snmp_set_var_typed_value returned  0
nstAgentPluginObject2: Got request, mode = 160:
nstAgentPluginObject2: Got get, value = 69:
nstAgentPluginObject2: snmp_set_var_typed_value returned  0

^CReceived TERM or STOP signal...  shutting down...
dlmod: Module nstAgentPluginObject unloaded

Here is snmpget output

-bash-3.00# snmpget  -c private localhost NET-SNMP-TUTORIAL-MIB::nstAgentPluginObject2.0

Timeout: No Response from localhost.
-bash-3.00#

I build module using command

$(CC)  $(CFLAGS)  -xarch=amd64 -G -o nstAgentPluginObject.so -Kpic nstAgentPluginObject.c

snmpset is working correctly


-bash-3.00# snmpset -c private localhost NET-SNMP-TUTORIAL-MIB::nstAgentPluginObject2.0 = 234
NET-SNMP-TUTORIAL-MIB::nstAgentPluginObject2.0 = INTEGER: 234
-bash-3.00#

Also nstAgentPluginObject and nstAgentPluginObject1 are working correctly


I am using version 5.0.9 because I want to create module for x86 Solaris 10. I installed headerfiles ( <net-snmp/net-snmp-config.h> ... )
from net-snmp-5.0.11


Christer Ekholm






------=_Part_2211_16468174.1207239925174--


--===============1338834828==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216...et/marketplace
--===============1338834828==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/...et-snmp-coders

--===============1338834828==--