Re: CPU consumption

"Marwan Khoury" <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <[email protected]>
Hi Dave,

Thanks for your reply.

1-Thank you for your response concerning the "not-accessible", I have 
corrected it and mib2c is generating the structure correclty
2-Below is what I did:

#define XXX 2
#define YYY 3
#define NNN 256

void
initialize_table_methodTable(void)
{
    static oid      methodTable_oid[] =
        { 1, 3, 6, 1, 4, 1, 6736, 1, 22, 6 };
    size_t          methodTable_oid_len = OID_LENGTH(methodTable_oid);
    netsnmp_handler_registration *reg;
    netsnmp_tdata  *table_data;
    netsnmp_table_registration_info *table_info;

    reg =
        netsnmp_create_handler_registration("methodTable",
                                            methodTable_handler,
                                            methodTable_oid,
                                            methodTable_oid_len,
                                            HANDLER_CAN_RONLY);

    table_data = netsnmp_tdata_create_table("methodTable",0);
    table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
    netsnmp_table_helper_add_indexes(table_info, ASN_OCTET_STR, /* index: 
name */
                                     0);

    table_info->min_column = XXX;
    table_info->max_column = YYY;

    netsnmp_tdata_register(reg, table_data, table_info);

    /*
     * Initialise the contents of the table here
     */
     setVal(table_data);
}
/*
 * create a new row in the table
 */
netsnmp_tdata_row *
methodTable_createEntry(netsnmp_tdata * table_data, char *name,
                        size_t name_len)
{
    struct methodTable_entry *entry;
    netsnmp_tdata_row *row;

    entry = SNMP_MALLOC_TYPEDEF(struct methodTable_entry);
    if (!entry)
        return NULL;

    row = netsnmp_tdata_create_row();
    if (!row) {
        SNMP_FREE(entry);
        return NULL;
    }
    row->data = entry;
    memcpy(entry->name, name, name_len);
    entry->name_len = name_len;

    entry->profact_total=1;
    entry->profact_ok=1;

    netsnmp_tdata_row_add_index(row, ASN_OCTET_STR, entry->name, name_len);
    netsnmp_tdata_add_row(table_data, row);
    return row;
}

...
int setVal(netsnmp_tdata  *table_data)
{
 netsnmp_tdata_row *rowt;

 rowt=(netsnmp_tdata_row*)methodTable_createEntry(table_data,"sms",3);
}

This is what I am doing now for testing purposes and I am not able to see 
the output in snmpwalk
env MIBS=All snmpwalk -v 2c -c public localhost jpm
gave:
JINNY-JPM-MIB::profact-total.0 = Counter32: 0
JINNY-JPM-MIB::profact-ok.0 = Counter32: 0

I was hoping to see something like:
JINNY-JPM-MIB::name."sms"="sms"
JINNY-JPM-MIB::profact-total."sms"=1
JINNY-JPM-MIB::profact-ok."sms"=1

The values displayed by snmpwalk are only the static values generated by
mib2c -c mib2c.scalar.conf  jpm

Are the values for min_column  and max_column correct ?
Could they be the problem? Acutally I followed your suggestion based on an 
answer I found concerning min_colomn and max_colomn
(http://www.mail-archive.com/[email protected]/msg13621.html)
In fact when I set XXX to 3 I get the following:
env MIBS=All snmpwalk -v 2c -c public localhost jpm

JINNY-JPM-MIB::profact-total.0 = Counter32: 0
JINNY-JPM-MIB::profact-ok.0 = Counter32: 0
JINNY-JPM-MIB::profact-ok."sms" = Counter32: 0

But I know that this is wrong and actually the ouptut is not completrly 
correct since its missing the profact-total colomn

3-I need the non numetic OID since I am parsing the name and searching for 
it in the shared memory.
In v4 the input received from an snmp request is of form:
[Base OID].jpm.profact-ok
So i used to take the name "jpm.profact-ok" and search for it in the shared 
memory
In addition I had to add the following to my agentx subagent:
netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, 
NETSNMP_OID_OUTPUT_UCD);
In order to receive the data as I mentioned above.
My question is where is the OID in order to search for it? Is it available.
I know i can construct the name from each function for simple based ex:

int
                handle_profact_total(netsnmp_mib_handler *handler,
      netsnmp_handler_registration *reginfo,
      netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests)
{
    /*
     * We are never called for a GETNEXT if it's registered as a
     * "instance", as it's "magically" handled for us.
     */

    /*
     * a instance handler also only hands us one request at a time, so
     * we don't need to loop over a list of requests; we'll only get one.
     */
I know here that the name is jpm.profact-total and I can search for it, but 
what would I do for the tables, where can I find the index in the snmp 
request?
If you can redirect me to the index in the table, that would be sufficient 
and I will used the solution that I mentioned above.

Thanks in advance

Regards,
Marwan

----- Original Message ----- 
From: "Dave Shield" <[email protected]>
To: "Marwan Khoury" <[email protected]>
Cc: <[email protected]>
Sent: Wednesday, September 02, 2009 3:40 PM
Subject: Re: CPU consumption


> 2009/8/31 Marwan Khoury <[email protected]>:
>> 1-Why did mib2c generate the following structure:
>
>   [snip]
>
>> what is the reason behind the existing of two field of value name and
>> name_len
>
> Index columns are meant to be marked as "not-accessible".
> The mib2c templates expect this to hold, so generate fields
> in the data structure for both all index values (which won't
> be accessible) and accessible column objects (which won't
> be index values).
>
> If your MIB is malformed, and has accessible column objects,
> then the data structure generated will also be sub-obtimal.
>
>
>> 2-How can I set the values of each colomn in a row?
>
>   [snip]
>
> That looks OK at first sight.
> Whenever you call 'methodTable_createEntry()'
> to create a row in the table, that should initialise
> the column values appropriately.
>
>
>> and the following command:
>>    env MIBS=All snmpwalk -v 2c -c public localhost jpm
>> gave:
>> JINNY-JPM-MIB::profact-total.0 = Counter32: 0
>> JINNY-JPM-MIB::profact-ok.0 = Counter32: 0
>
> You haven't said anything about how you are initialising
> the table, or what rows you are creating.
>
>
>
>> 3-My aim is to read the OID from the snmp request and fetch the value of 
>> it
>> from a shared memory, How can I extract the OID from the request in order 
>> to
>> print it as a string and search fro it in the shared memory?
>
> Your handler shouldn't be concerned with OIDs as such - but with
> the index values for a given row.   This is extracted for you by the
> table handler, and made available via the 'request' parameter.
>
> Please see existing MIB module code for examples.
>
>
>
> Dave


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



No virus found in this incoming message.
Checked by AVG - www.avg.com
Version: 8.5.409 / Virus Database: 270.13.75/2340 - Release Date: 09/01/09 
20:03:00


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.