Re: netsnmp_create_handler_registration

"Nikos Balkanas" <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <002201c96f7a$91df17e0$02b2a8c0@tardis>
Many thanks,

For pointing me in the right direction.

It took me some time with the debugger to find out where I can get this 
mysterious (x) - well I did know that it was the reqinfo->mode pointer you 
explained, but I didn't know how to get it -.

Converting my .so to executable, so that I can use the debugger, I 
discovered amidst a few function pointers, that custom handlers are actually 
called with 4 arguments. This I discovered no more or less by comparing 
function addresses to my own handler address:

__inline__ static int handler(netsnmp_mib_handler *handler, 
netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *areqinfo, 
netsnmp_request_info *reqinfo)

Uptill now I thought that it was just an empty variable list (Remember an 
older mail of mine asking about calling conventions for handlers?). So the 
required variable is areqinfo->mode.

I think it deserves both a FAQ and a wiki spot. I have to leave on a 
business trip, but when I come back (end of January) I intend to document my 
experiences with custom handlers. Maybe you can tell me then how best to go 
about it.

BR,
Nikos
----- Original Message ----- 
From: "Wes Hardaker" <[email protected]>
To: "Nikos Balkanas" <[email protected]>
Cc: <[email protected]>
Sent: Monday, January 05, 2009 6:19 PM
Subject: Re: netsnmp_create_handler_registration


>>>>>> On Sat, 3 Jan 2009 15:33:51 +0200, "Nikos Balkanas" 
>>>>>> <[email protected]> said:
>
> NB> During a SET operation the custom handler will be called 4 times, 2
> NB> with old values and 2 with new ones (Reserve1, Reserve2, Action,
> NB> Commit).
>
> The values in the varbinds are always the new ones (IE, the ones from
> the SET packet).
>
> NB> If the same handler is used also for GET operations
> NB> (HANDLER_CAN_RWRITE) will be called once only (let's call it
> NB> Reserve1).
>
> It's called GET actually :-)
>
> NB> How can one distinguish between GET and SET calls?
>
> The reqinfo->mode variable will be set to one of (snmp_agent.h):
>
> #define MODE_GET              SNMP_MSG_GET
> #define MODE_GETNEXT          SNMP_MSG_GETNEXT
> #define MODE_GETBULK          SNMP_MSG_GETBULK
> #define MODE_GET_STASH        SNMP_MSG_INTERNAL_GET_STASH
>
> #define MODE_SET_BEGIN        SNMP_MSG_INTERNAL_SET_BEGIN
> #define MODE_SET_RESERVE1     SNMP_MSG_INTERNAL_SET_RESERVE1
> #define MODE_SET_RESERVE2     SNMP_MSG_INTERNAL_SET_RESERVE2
> #define MODE_SET_ACTION       SNMP_MSG_INTERNAL_SET_ACTION
> #define MODE_SET_COMMIT       SNMP_MSG_INTERNAL_SET_COMMIT
> #define MODE_SET_FREE         SNMP_MSG_INTERNAL_SET_FREE
> #define MODE_SET_UNDO         SNMP_MSG_INTERNAL_SET_UNDO
>
> There is even a MODE_IS_GET(x) macro that tells you if the incoming mode
> is a GET type vs a SET type operation.
>
>
> -- 
> Wes Hardaker
> Sparta, Inc. 


------------------------------------------------------------------------------
_______________________________________________
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.