Hi Milan, >From a quick look at your code it looks like you've missed a crucial line to register the handler:
netsnmp_register_handler( reg ); Which you need to do after your line: reg = netsnmp_handler_registration_create(...) Also, one important point (I forgot to mention previously), if there are any other handlers which register for specific OIDs (e.g. .1.3.6.1.2.1.1.4.0) - these will be called instead of your generic handler. Hope that helps. Graeme > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > Sent: 09 August 2007 15:43 > To: Graeme Wilson > Cc: net-snmp-users@lists.sourceforge.net > Subject: RE: Newbie question: writing a simple agent > > Hello Graeme, > > sorry for bothering you again. > > I have tried to merge your code with MFD code. I am obviously > doing something wrong. When I run snmpwalk on the agent I can see that > agent_check_and_process(1) in the main loop finishes but the > handler does not get called. > > I get error message from the agent: > > Connection from UDP: [127.0.0.1]:-32767 > > I assume this means this request was not handled by the agent. > > I do not know if netsnmp_register_handler(reg) is successful, > it returns 0. I was googling but I did not find meaning of this value. > > Did I miss something in my main()? I am attaching short code. > > Thank you and please do net get angry with me for so many mails. > > Milan > > ---- > > > #include "agent.h" > #include "agent_error.h" > > static int keep_running; > > void stop_server(UNUSED int a) { > keep_running = 0; > } > > /* Ippc function which will be called for all OIDs below the > root one registered above */ int IppcOidHandler(UNUSED > netsnmp_mib_handler *handler, > UNUSED netsnmp_handler_registration *reginfo, > UNUSED netsnmp_agent_request_info *reqinfo, > netsnmp_request_info *requests) { > int ret = SNMP_ERR_NOERROR; > > printf("Received SNMP request"); > for (unsigned i = 0; i < requests->range_end_len; i++) { > printf("%d.", (int)requests->range_end[i]); > } > printf("\n"); > > switch(reqinfo->mode) > { > case MODE_GET: > /* Call some other code to process the 'requests' argument */ > //ret = myData->getData( requests ); > break; > case MODE_GETNEXT: > /* Call some other code to process the 'requests' argument */ > //ret = myData->getNextData( requests ); > break; > default: > /* we should never get here in my code */ > //iRet = SNMP_ERR_GENERR; > break; > } > return 1; //ret; > } > > int main (UNUSED int argc, UNUSED char **argv) { > netsnmp_mib_handler *handler; > netsnmp_handler_registration *reg; > > static oid root_oid[] = { 1, 3, 6 }; > > snmp_enable_stderrlog(); > > SOCK_STARTUP; > > init_agent("ippc agent"); > > init_snmp("ippc agent"); > > init_master_agent(); /* open the port to listen on (defaults to > udp:161) */ > > keep_running = 1; > signal(SIGTERM, stop_server); > signal(SIGINT, stop_server); > > handler = netsnmp_create_handler("IppcOIDHandler", > &IppcOidHandler ); > > if (handler) { > reg = netsnmp_handler_registration_create( "IppcHandler", > handler, > root_oid, > OID_LENGTH(root_oid), > 0); > > printf("returned=%d\n", netsnmp_register_handler(reg)); > } > else { > exit(1); > } > > > while(keep_running) { > agent_check_and_process(1); /* 0 == don't block */ > printf("mainloop\n"); > } > > /* at shutdown time */ > netsnmp_unregister_handler(reg); > snmp_shutdown("ippc agent"); > SOCK_CLEANUP; > > return 0; > } > > > > > ---- > > > On Wed, August 8, 2007 4:10 pm, Graeme Wilson wrote: > > Hi Milan, > > > > > > No worries about the questions. > > > > > > For my subagent (binary/executable) I doctored an existing > 'main' that > > I had from when I'd created a subagent with mib2c - its > just like your > > example below: - init_agent > > - etc etc > > - register your handler here > > - loop (agent_check_and_process) > > - etc etc > > > > > > Cheers > > Graeme > > > > > > > >> -----Original Message----- > >> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > >> Sent: 08 August 2007 14:47 > >> To: Graeme Wilson > >> Cc: net-snmp-users@lists.sourceforge.net > >> Subject: RE: Newbie question: writing a simple agent > >> > >> > >> Hello Graeme, > >> > >> > >> I went through your code and it seems it is exactly what I need. > >> > >> > >> I am just confused about one thing: how does it plug into snmpd? > >> > >> > >> I understand that I need to do in agent main() registration (and > >> un-registration at agent finish) but what do I actually generate? > >> > >> Should I create a binary like in MFD example and loop using > >> agent_check_and_process() or snmp_select_info() or should I create > >> some kind of .so that does mere regsitration and finishes? > >> > >> In the former case the scenario is > >> - init_agent > >> - init_snmp > >> - init_master_agent(); > >> - register handler > >> - loop > >> - un-register handler > >> - snmp_shutdown > >> > >> > >> or am I missing something? > >> > >> Sorry for asking you newbie trivial questions :-) > >> > >> > >> Thanks. > >> > >> > >> Milan > >> > >> > >> > >> > >> > >> > >> On Wed, August 8, 2007 11:11 am, Graeme Wilson wrote: > >> > >>> > >> > >>> Hi, > >>> > >>> > >>> > >>> I have done something similar recently (I provide some > sample code > >>> below - but note that ultimately everything is still done within > >>> > >> the agent). > >>> My Agent simply registers the root OID of the MIB it will > >>> > >> handle and > >>> some other function knows all about the data and the > specific OIDs > >>> that the Agent handles. I just registered a generic > handler for the > >>> root oid and > >> then when it > >>> is called, the handler make appropriate calls to handle the > >> request. > >>> I guess in your case you could then request the data (if > >>> > >> any) from the > >>> process/thread that holds the Data and OIDS. > >>> > >>> Hope that helps. > >>> Graeme > >>> ------------- > >>> /* In your main/initialise function */ > >>> netsnmp_mib_handler* handler = netsnmp_create_handler( > >>> "GenericOIDHandler", &genericOidHandler ); > >>> > >>> > >>> > >>> netsnmp_handler_registration* reg = > >>> netsnmp_handler_registration_create( "GenericHandler", handler, > >>> root_oid, OID_LENGTH(root_oid), 0 ); > >>> > >>> netsnmp_register_handler( reg ); > >>> > >>> > >>> > >>> /* Generic function which will be called for all OIDs below > >>> > >> the root > >>> one registered above */ int genericOidHandler( > netsnmp_mib_handler > >>> *handler, netsnmp_handler_registration *reginfo, > >>> netsnmp_agent_request_info *reqinfo, netsnmp_request_info > >> *requests ) > >> > >>> { int ret = SNMP_ERR_NOERROR; > >>> > >>> > >>> switch(reqinfo->mode) { case MODE_GET: /* Call some other code to > >>> process the 'requests' argument */ ret = myData->getData( > requests > >>> ); break; case MODE_GETNEXT: /* Call some other code to > process the > >>> 'requests' > >>> argument */ ret = myData->getNextData( requests ); break; > default: > >>> /* we should never get here in my code */ iRet = SNMP_ERR_GENERR; > >>> break; } return ret; } > >>> > >>> > >>> > >>> > >>>> -----Original Message----- > >>>> From: [EMAIL PROTECTED] > >>>> [mailto:[EMAIL PROTECTED] On > Behalf Of > >>>> [EMAIL PROTECTED] > >>>> Sent: 08 August 2007 06:51 > >>>> To: Mike Ayers > >>>> Cc: net-snmp-users@lists.sourceforge.net > >>>> Subject: RE: Newbie question: writing a simple agent > >>>> > >>>> > >>>> > >>>> Hello Mike, > >>>> > >>>> > >>>> > >>>> thanks for replying to my question. > >>>> > >>>> I understand that a standard approach is to register the > >>>> > >> agent for a > >>>> range of OISs and to let the agent to be OID aware while > the other > >>>> process should take care of the underlaying data. > >>>> > >>>> However, I was asked to write an agent that would NOT be > >>>> > >> OID-aware. > >> > >>>> All it would know it is responsible for a range of OIDs without > >>>> knowing any details. It would forward complete OIDs to the other > >>>> process that would take care about OID > >> disassembly/translation, data > >>>> manipulation etc. > >>>> > >>>> I am wondering if this is possible within the Net SNMP > API, at all. > >>>> > >>>> > >>>> > >>>> If so, where should I start? > >>>> > >>>> > >>>> > >>>> Thanks. > >>>> > >>>> > >>>> > >>>> Milan > >>>> > >>>> > >>>> > >>>> On Tue, August 7, 2007 11:44 pm, Mike Ayers wrote: > >>>> > >>>> > >>>>> > >>>> > >>>>>> From: [EMAIL PROTECTED] > >>>>>> [mailto:[EMAIL PROTECTED] On > >>>>>> > >> Behalf Of > >> > >>>>>> [EMAIL PROTECTED] > >>>>>> > >>>>>> > >>>>>> > >>>>> > >>>>> > >>>>>> The agent itself will not be aware of individual OIDs > and their > >>>>>> meaning. This will be done by the other process that also > >>>> holds the > >>>>>> actual data. > >>>>> > >>>>> This is a bit of a design problem as stated. The (sub)agent is > >>>>> responsible for managing its OID range, and therefore it is not > >>>>> possible to have a subagent completely unaware of the OIDs. > >>>> This does > >>>> > >>>> > >>>>> not, however, mean that the subagent needs to be aware of > >> the data > >>>>> underlying the MIB. > >>>>> > >>>>> A common paradigm is to have the subagent register for > >>>>> > >> the range of > >>>>> values (table, MIB, whatever) that it will manage, and > >> have the OP > >>>>> (other > >>>>> process) manage the data within the range. The agent does OID > >>>>> assembly/disassembly (i.e. breaking OIDs into range part > >>>> and specific > >>>>> part), possibly reformat the specific part to make it more > >>>>> understandable to the OP (thus only the subagent need be > >>>> MIB aware). > >>>> > >>>> > >>>>> The OP returns the values for the requested data, then > >>>>> > >> the subagent > >>>>> formats and assembles the response. > >>>>> > >>>>> > >>>>> HTH, > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> Mike > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>> > >> > --------------------------------------------------------------------- > >> > >>>> - > >>>> > >>>> > >>>>> --- This SF.net email is sponsored by: Splunk Inc. > >>>>> Still grepping through log files to find problems? Stop. > >>>>> Now Search log events and configuration files using AJAX > >>>>> > >>>>> > >>>> and a browser. > >>>>> Download your FREE copy of Splunk now >> > http://get.splunk.com/ > >>>>> _______________________________________________ > >>>>> Net-snmp-users mailing list > >>>>> Net-snmp-users@lists.sourceforge.net > >>>>> Please see the following page to unsubscribe or change > >>>>> > >>>>> > >>>> other options: > >>>>> https://lists.sourceforge.net/lists/listinfo/net-snmp-users > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>> > >>>> > >>>> > >>>> -------------------------------------------------------------- > >>>> ----------- > >>>> This SF.net email is sponsored by: Splunk Inc. > >>>> Still grepping through log files to find problems? Stop. > >>>> Now Search log events and configuration files using AJAX and a > >>>> browser. Download your FREE copy of Splunk now >> > >>>> http://get.splunk.com/ > >>>> _______________________________________________ > >>>> Net-snmp-users mailing list > >>>> Net-snmp-users@lists.sourceforge.net > >>>> Please see the following page to unsubscribe or change > >>>> > >> other options: > >>>> https://lists.sourceforge.net/lists/listinfo/net-snmp-users > >>>> > >>>> > >>>> > >>>> > >>> > >>> > >>> > >> > --------------------------------------------------------------------- > >> - > >> > >>> --- This SF.net email is sponsored by: Splunk Inc. > >>> Still grepping through log files to find problems? Stop. > >>> Now Search log events and configuration files using AJAX > >>> > >> and a browser. > >>> Download your FREE copy of Splunk now >> http://get.splunk.com/ > >>> _______________________________________________ > >>> Net-snmp-users mailing list > >>> Net-snmp-users@lists.sourceforge.net > >>> Please see the following page to unsubscribe or change > >>> > >> other options: > >>> https://lists.sourceforge.net/lists/listinfo/net-snmp-users > >>> > >>> > >>> > >>> > >> > >> > >> > >> > > > > > > > > ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Net-snmp-users mailing list Net-snmp-users@lists.sourceforge.net Please see the following page to unsubscribe or change other options: https://lists.sourceforge.net/lists/listinfo/net-snmp-users