Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
NETSNMP_AGENT_API(3)		    Net-SNMP		    NETSNMP_AGENT_API(3)

NAME
     netsnmp_agent_api - embedding an agent into an external application

SYNOPSIS
     #include <net-snmp/net-snmp-config.h>
     #include <net-snmp/net-snmp-includes.h>
     #include <net-snmp/agent/net-snmp-agent-includes.h>

     int
     main (int argc, char *argv[])
     {
       int agentx_subagent = 1;  /* Change this if you're a master agent.  */

       snmp_enable_stderrlog();

       /*  If we're an AgentX subagent...  */
       if (agentx_subagent) {
	   /* ...make us an AgentX client.  */
	   netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
				  NETSNMP_DS_AGENT_ROLE, 1);
       }

       init_agent("yourappname");

       /*  Initialize your MIB code here.  */
       init_my_mib_code();

       /*  `yourappname' will be used to read yourappname.conf files.  */
       init_snmp("yourappname");

       /*  If we're going to be an SNMP master agent...  */
       if (!agentx_subagent)
	   init_master_agent();  /*  Listen on default port (161).  */

       /*  Your main loop here...  */
       while (whatever) {
	   /* if you use select(), see snmp_api(3) */
	   /*	  --- OR ---  */
	   agent_check_and_process(0); /* 0 == don't block */
       }

       /*  At shutdown time:  */
       snmp_shutdown("yourappname");
     }

     Then:
     $(CC) ... `net-snmp-config --agent-libs`

DESCRIPTION
     Our goal is to create an easy-to-use interface to the Net-SNMP package such
     that you can take code that you have written that has been designed to be a
     Net-SNMP MIB module and embed it into an external application where you can
     either  choose  to be an SNMP master agent or an AgentX sub-agent using the
     same MIB module code.  Our suggestion is that you use our (or another) SNMP
     agent as the AgentX master agent and chose to  become  an	AgentX	subagent
     which then attaches to the master.

     The  Net-SNMP package provides a pair of libraries that enables easy embed-
     ding of an SNMP or AgentX agent into an external software	package.  AgentX
     is  an  extensible  protocol designed to allow multiple SNMP sub-agents all
     run on one machine under a single SNMP master agent.  It is defined in  RFC
     2741.

     You  will	need  to  perform a few tasks in order to accomplish this. First
     off, you will need to initialize both the SNMP library and the  SNMP  agent
     library. As indicated above, this is done slightly differently depending on
     whether or not you are going to perform as a master agent or an AgentX sub-
     agent.

CONFIGURATION
     If  you  intend to operate as an AgentX sub-agent, you will have to config-
     ured the Net-SNMP package with agentx support (which is turned  on  by  de-
     fault, so just don't turn it off)

     Additionally, you will need to link against the Net-SNMP libraries (use the
     output  of  "net-snmp-config  --agent-libs" to get a library list) and call
     subagent_pre_init() as indicated above.

COMPILING
     In order to make use of any of the above API, you will need to link against
     at least the four libraries listed above.

FUNCTIONS
     where to find out more information on them.  It is certainly not a complete
     list of what is available within all the Net-SNMP libraries.

     snmp_enable_stderrlog()
	    Logs error output from the SNMP agent to the standard error stream.

     netsnmp_ds_set_boolean()
	    Please see the default_store(3) manual  page  for  more  information
	    about this API.

     init_agent(char *name)
	    Initializes  the  embedded	agent.	This should be called before the
	    init_snmp() call.  name is used to dictate what .conf file	to  read
	    when init_snmp() is called later.

     init_snmp(char *name)
	    Initializes the SNMP library.  Note that one of the things this will
	    do	will  be  to  read configuration files in an effort to configure
	    your application. It will attempt to read  the  configuration  files
	    named by the name string that you passed in.  It can be used to con-
	    figure  access  control, for instance.   Please see the netsnmp_con-
	    fig_api(3), snmp_config(5), and snmpd.conf(5) manual pages for  fur-
	    ther details on this subject.

     init_master_agent(void)
	    Initializes  the  master  agent and causes it to listen for SNMP re-
	    quests on its default UDP port of 161.

     agent_check_and_process(int block)
	    This checks for packets arriving on the SNMP port and processes them
	    if some are found.	If block is non-zero,  the  function  call  will
	    block  until  a  packet  arrives  or  an  alarm  must  be  run  (see
	    snmp_alarm(3)).  The return value from this function is  a	positive
	    integer  if packets were processed, zero if an alarm occurred and -1
	    if an error occurred.

     snmp_shutdown(char *name);
	    This shuts down the agent, saving  any  needed  persistent	storage,
	    etc.

SEE ALSO
     http://www.net-snmp.org/tutorial-5/toolkit/   select(2),  snmp_api(3),  de-
     fault_store(3), snmp_alarm(3), netsnmp_config_api(3),  snmp_config(5),  sn-
     mpd.conf(5)

V5.9.5.2			   13 Aug 2010		    NETSNMP_AGENT_API(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=netsnmp_agent_api&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help