File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / ntpsnmpd / ntpsnmpd.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 1 month ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    1: /*****************************************************************************
    2:  *
    3:  *  ntpsnmpd.c
    4:  *
    5:  *  The NTP SNMP daemon is an Agent X subagent application that 
    6:  *  registers itself with a running SNMP Agent X master process running
    7:  *  on the same machine on port TCP 705. It utilizes the libntqp library
    8:  *  which accesses status and general data of a running ntpd process on
    9:  *  the same machine and enables the user to monitor the status of a
   10:  *  ntp daemon process via SNMP. 
   11:  *
   12:  *  This started as a Google Summer of Code 2008 project, 
   13:  *  including the ntpsnmpd sub agent and the libntpq library. 
   14:  *
   15:  *  For more information please visit
   16:  *	http://support.ntp.org/bin/view/Dev/GSoC2008snmp
   17:  *  Or contact:
   18:  *   Harlan Stenn   (Mentor) at stenn@ntp.org
   19:  *   Heiko Gerstung (Student) at gerstung@ntp.org 
   20:  *
   21:  ****************************************************************************/
   22: 
   23: #include <ntp_snmp.h>
   24: #include <signal.h>
   25: #include <sys/time.h>
   26: 
   27: #ifdef SOLARIS /* needed with at least Solaris 8 */
   28: #include <siginfo.h>
   29: #endif
   30: 
   31: #include <libntpq.h>
   32: #include <ntpsnmpd-opts.h>
   33: 
   34: static int keep_running;
   35: RETSIGTYPE stop_server(int);
   36: 
   37: RETSIGTYPE
   38: stop_server(int a) {
   39:     keep_running = 0;
   40: }
   41: 
   42: /* The main function just sets up a few things and then enters a loop in which it will 
   43:  * wait for SNMP requests coming from the master agent 
   44:  */
   45: 
   46: int
   47: main (int argc, char **argv) {
   48:   int background = 0; /* start as background process */
   49:   int use_syslog = 1; /* use syslog for logging */
   50: 
   51: 	{
   52: 		int optct = optionProcess(&ntpsnmpdOptions, argc, argv);
   53: 		argc -= optct;
   54: 		argv += optct;
   55: 	}
   56: 
   57: 	if (!HAVE_OPT(NOFORK))
   58: 		background = 1;
   59: 
   60: 	if (!HAVE_OPT(SYSLOG))
   61: 		use_syslog = 0;
   62: 
   63:   /* using the net-snmp syslog facility */
   64:   if (use_syslog)
   65:     snmp_enable_calllog();
   66:   else
   67:     snmp_enable_stderrlog();
   68: 
   69:   /* Become Subagent */
   70:     netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
   71:  
   72:   /* go into background mode, if requested */
   73:   if (background && netsnmp_daemonize(1, !use_syslog))
   74:       exit(1);
   75: 
   76:   /* Now register with the master Agent X process */
   77: 
   78:   /* call Netsnmp socket startup macro, which will initialize the network stuff if required */
   79:   SOCK_STARTUP;
   80: 
   81:   /* Set AgentX socket interface */
   82:   netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
   83:                             NETSNMP_DS_AGENT_X_SOCKET, OPT_ARG( AGENTXSOCKET ));
   84: 
   85:   init_agent("ntpsnmpd");
   86: 
   87:   /* Try to connect to ntpd */
   88:   if ( ntpq_openhost("localhost") == 0 )
   89:   {
   90: 	fprintf(stderr, "Error: Could not connect to ntpd. Aborting.\n");
   91: 	exit(1);
   92:   }
   93:   
   94: 
   95:   /* Register callback functions ...  */
   96:   init_ntpSnmpSubagentObject();  
   97:   init_snmp("ntpsnmpd");
   98: 
   99:   /* Signal handler */
  100:   keep_running = 1;
  101:   signal(SIGTERM, stop_server);
  102:   signal(SIGINT, stop_server);
  103: 
  104:   snmp_log(LOG_INFO,"ntpsnmpd started.\n");
  105:   
  106:   /* main loop here... */
  107:   while(keep_running) {
  108: 	agent_check_and_process(1); /* 0 == don't block */
  109:   }
  110: 
  111:   /* at shutdown time */
  112:   ntpq_closehost();
  113:   snmp_shutdown("ntpsnmpd");
  114:   SOCK_CLEANUP;
  115: 
  116:   return 0;
  117: }
  118: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>