Re: how to get table data inside request handler
Alexander Bubnov <[email protected]>
| Newsgroups | gmane.network.net-snmp.user |
|---|---|
| Message-ID | <[email protected]> |
I have found an answer on my question: I should keep table_set variable
(result of netsnmp_create_table_data_set()) to access them in Watcher
handler. (Watcher() is a handler of SNMP requests like GET, SET)
But now I have a strange situation:
1. My table has one row (named "ROW1", for example)
2. I receive snmpwalk request
3. Watcher() is called: here I delete all rows which I can
netsnmp_table_row* row = netsnmp_table_data_set_get_first_row(table_set);
while(row)
{
netsnmp_table_dataset_remove_and_delete_row(table_set,row);
row = netsnmp_table_data_set_get_next_row(table_set,row);
fprintf(stderr,"DELETED NEW ROW\n");
}
4. snmpwalk returns "ROW1" - how is it possible if I deleted all rows in
Watcher()? And how to delete them in right way?
Actually, second snmpwalk call shows there are no any rows. I.e. I delete
all rows for next snmpwalk, but not current one.
Can you please help to find out a way to update the table when I receive GET
requests?
Thanks in advance.
2009/2/18 Alexander Bubnov <[email protected]>
> requests varibale of Watcher keeps row instead table pointer
>
> netsnmp_extract_table_data_set(requests); returns NULL
>
> netsnmp_extract_table_row(requests); returns valid data of row.
>
> What should I do to put table data inside request or how to get table data
> by row?
>
> 2009/2/18 Alexander Bubnov <[email protected]>
>
>> Hello, all!
>>
>> Can you please let me know a way getting table data to manipulate it?
>>
>> below code:
>>
>> 1. init_tables - init tables within main function.
>>
>> 2. Watcher - a callback, it is called when some request is received.
>> Inside of this callback I would like to change the table content before I
>> need to get a pointer to the table.
>>
>> inside Watcher() netsnmp_extract_table_data_set() function get NULL
>> instead returing data.
>>
>> #include<string.h>
>> #include <net-snmp/net-snmp-config.h>
>> #include <net-snmp/net-snmp-includes.h>
>> #include <net-snmp/agent/net-snmp-agent-includes.h>
>>
>> const int ROWID = 2;
>>
>>
>> static int Watcher(
>> netsnmp_mib_handler * handler
>> ,netsnmp_handler_registration * reginfo
>> ,netsnmp_agent_request_info * reqinfo
>> ,netsnmp_request_info * requests
>> )
>> {
>>
>> if(MODE_IS_GET(reqinfo->mode))
>> {
>> netsnmp_request_info *request;
>> int i = 0;
>>
>> for(request=requests;request;request = request->next)
>> {
>> netsnmp_table_data_set*table_set =
>> netsnmp_extract_table_data_set(requests);
>>
>> if(table_set)
>> {
>> fprintf(stderr,"NOT NULL\n");
>>
>> }
>> else
>> {
>> fprintf(stderr,"NULL\n");
>> }
>> }
>>
>> return SNMP_ERR_NOERROR;
>> }
>> else if(MODE_IS_SET(reqinfo->mode))
>> {
>> puts("SET request is is not allowed");
>> return SNMP_ERR_NOTWRITABLE;
>> }
>> return SNMP_ERR_GENERR;
>> }
>>
>>
>> void init_tables()
>> {
>> netsnmp_table_data_set *table_set;
>> oid some_oid[] = {1,3,6,1,4,1,23668,1025,2,8,1};
>> const char * table_name = "mytable";
>>
>> const size_t size_some_oid = OID_LENGTH(some_oid);
>> int count = 999;
>> const char* pcount = (const char*)(&count);
>>
>> table_set = netsnmp_create_table_data_set(table_name);
>>
>> table_set->allow_creation = 0;
>>
>> netsnmp_table_dataset_add_index(table_set, ASN_OCTET_STR);
>>
>> netsnmp_table_set_multi_add_default_row(table_set,
>> /*
>> * column 2 = asn type,
>> * writable = 0,
>> * default value = NULL,
>> * default value len = 0
>> */
>> ROWID,ASN_COUNTER,0,NULL,0,
>> NULL /* done */ );
>>
>> netsnmp_register_table_data_set(netsnmp_create_handler_registration
>> (table_name, Watcher,
>> some_oid,
>> size_some_oid,
>> HANDLER_CAN_RONLY|HANDLER_CAN_NOT_CREATE), table_set, NULL);
>>
>> netsnmp_table_row *row = netsnmp_create_table_data_row();
>> netsnmp_table_row_add_index(row, ASN_OCTET_STR, "some data string",
>> strlen("some data string"));
>> netsnmp_set_row_column(row, ROWID, ASN_COUNTER,
>> pcount, sizeof(int));
>> netsnmp_mark_row_column_writable(row, ROWID, 0);
>> netsnmp_table_dataset_add_row(table_set, row);
>> }
>>
>>
>>
>> --
>> /BR, Alexander
>>
>
>
>
> --
> /BR, Alexander
>
--
/BR, Alexander
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
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