Hi Robert,
Being doing a bit of work on this and here is what I've got so far.
Registered my config handler via a call to snmpd_register_config_handler
My handler already handles other tokens, so here is the abridged version
just showing code relevant to the caching:
void config_razorgate_load(const char *key, char *value)
{
char *st = NULL;
char *subtree = NULL;
char *timeout = NULL;
oid suboid[MAX_OID_LEN];
size_t suboid_len = 0;
netsnmp_cache *cache = NULL;
...
else if (compare(razorgate_cache_timeout_token, key))
{
DEBUGMSGTL(("razorgate:config_razorgate_load", "called\n"));
subtree = strtok_r(value, " \t\n", &st);
if (!subtree)
{
config_perror("missing razorgate tablename parameter");
return;
}
timeout = strtok_r(NULL, " \n\t", &st);
if (!timeout)
{
config_perror("missing timeout parameter");
return;
}
suboid_len = strlen(subtree)-1;
if (subtree[suboid_len] == '.')
subtree[suboid_len] = '\0'; /* stamp on a trailing . */
DEBUGMSGTL(("razorgate:config_razorgate_load", "subtree is %s,
timeout is %s\n", subtree, timeout));
suboid_len = MAX_OID_LEN;
if (!snmp_parse_oid(subtree, suboid, &suboid_len))
{
config_perror("Invalid razorgate table object id");
return;
}
DEBUGMSGTL(("razorgate:config_razorgate_load", "suboid is %d\n",
suboid));
cache = netsnmp_cache_find_by_oid(suboid, suboid_len);
if (cache == NULL)
{
config_perror("Failed to retrieve cache object");
return;
}
DEBUGMSGTL(("razorgate:config_razorgate_load", "cache timeout is %d\n",
cache->timeout));
}
...
Debug output when running snmpd shows correct values being parsed and
existing cache timeout value of 60 being returned:
razorgate:config_razorgate_load: called
razorgate:config_razorgate_load: subtree is
razorgateSmtpStatusCountersTable, timeout is 30
razorgate:config_razorgate_load: suboid is -757531856
razorgate:config_razorgate_load: cache timeout is 60
However, I'm not sure how I now update the row entry in the nsCacheTable
for my oid so that the new value is used.
The only function which appears to do something like this is
netsnmp_cache_create(), but this is already called in my interface code.
What is the correct way of replacing the existing cache_entry with the new
one containing the updated timeout value?
Thanks,
Tim
-----Original Message-----
From: NetSNMP Mailbox [mailto:[email protected]] On Behalf Of
Robert Story
Sent: 14 July 2015 03:01
To: Tim Culhane <[email protected]>
Cc: [email protected]
Subject: Re: making the cache timeout for container_load to be configurable
On Fri, 10 Jul 2015 07:14:47 +0100 Tim wrote:
TC> I've no problem giving it a shout.
TC>
TC> If you could give me some guideance that would really help.
Ok, first the config token to specify the timeout. Take a look at
./agent/mibgroup/mibII/vacm_conf.c and search on vacm_parse_view. You should
see code to register a config token ("view"), and to parse the view line
(including parsing an OID, which will be the OID of the table). Register a
new token
("myTableCacheTimeout") int your table's init routine, with a new parse
routine that parses an OID and an integer timeout.
Once you have an OID, netsnmp_cache_find_by_oid should find the cache. Then
set cache_entry->timeout to the timeout value you parsed, and you should be
all set.
Hopefully that will get you started. Ask questions when you get stuck.
Robert
------------------------------------------------------------------------------
_______________________________________________
Net-snmp-coders mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders