Integrating AgentX into a C++ program with a Main Event Loop

Sverre Moe <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <8c10e9ef-22de-455a-9e3b-5785658c785e@zcs>
I have a C++ program built around glibmm Main Event Loop and need to create an SNMP AgentX in it to be used along Net-SNMP own snmpd. I can't find any information how to integrate it other than the Tutorial "Instrumenting your own code with agentx subagent support" which I find a little shortcoming. 


How do I tie an Net-SNMP AgentX into my the glibmm Main Event Loop ? Perhaps it would be easier to use SNMP++/Agent++/AgentX++ instead of net-snmp. 


All communication to the device happens with sending/receiving XML messages. The program operates in stages, when receiving signals from various parts/managers. I first query the device for all information it has available. When it is received and processed I send a signal that is picked up by my_client so that it can begin to create the MIB file from this information, and then register the scalars. Another one of these signals indicate that the data for SNMP request have been received from device. When I get incoming SNMP requests I need to wait for this signal before I send the response to the SNMP manager/requester. 



Some of my Code: 

main.cpp 
int main(int argc, char **argv) { 



//Needs some code here for SNMP initialization. http://www.net-snmp.org/tutorial/tutorial-5/toolkit/demon/example-demon.c 


my_client client(); 
client.run(); //The Main Event Loop executing within this call to client.run(). 

return (1); 
} 

my_client.cpp 

my_client::my_client( ) : 
_mainloop(Glib::MainLoop::create()) { 

//Define signals 
_manager1.signal_finished().connect(sigc::mem_fun(*this, 
&my_client::manager1_finished)); 

Glib::signal_idle().connect(sigc::bind_return(sigc::mem_fun(*this, 
&my_client::connection), false)); 
} 


void 
my_client::run() { 
_mainloop->run(); 
} 

bool 
my_client::connection() { 

//Getting information from device using manager1. 
... 
} 

void 
my_client::manager1_finished(bool finished) { 
//...Creating MIB file 

//...Register all scalars 
for (All Scalars) { 
netsnmp_register_scalar_group( 

netsnmp_create_handler_registration( text, 
handle_snmp, 
group_oid, 
OID_LENGTH(group_oid), 
HANDLER_CAN_RONLY 
), 1, scalars_total); 
} 
} 

int 
handle_snmp(netsnmp_mib_handler *handler, 
netsnmp_handler_registration *reginfo, 
netsnmp_agent_request_info *reqinfo, 
netsnmp_request_info *requests) { 

//Sending SNMP request to client.... 

//THIS MUST BE DONE WHEN I RECEIVE SIGNAL FROM ONE OF MY MANAGERS 
//THAT THE DATA IS READY/RETRIEVED FROM DEVICE. AND NOT BEFORE. 
snmp_set_var_typed_value(requests->requestvb, 
type, 
datapointer, 
length); 

} 





What I need is to bake this handle_snmp into my Main Event Loop so that snmp_set_var_typed_value is called when I receive a signal that I have gotten the value from the device. 



This is what I have for now: 


    1. C++ program running a Main Event Loop. Functions/Routines for querying the device and creating a MIB definition file. 
    2. Standalone C MIB module, And an snmp-deamon.c containing "main" and net-snmp initialization(instead of using net-snmp-config --compile-subagent). An example agent made from the Net-SNMP tutorials. 


I am not sure how to tie these two parts together. The class my_client is responsible for communicating with the device, handles all the signals, create the MIB definition, registers the scalars, and retrieves the information needed from the device. 

CONFIDENTIALITY
This e-mail and any attachment contain KONGSBERG information which may be 
proprietary, confidential or subject to export regulations, and is only meant 
for the intended recipient(s). Any disclosure, copying, distribution or use is 
prohibited, if not otherwise explicitly agreed with KONGSBERG. If received in 
error, please delete it immediately from your system and notify the sender 
properly.

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct

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