Annotation of embedaddon/ntp/ntpsnmpd/ntpsnmpd.c, revision 1.1

1.1     ! misho       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>