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>