1258945Sroberto/*****************************************************************************
2258945Sroberto *
3258945Sroberto *  ntpSnmpSubAgentObject.h
4258945Sroberto *
5258945Sroberto *	Definitions and macros for ntpSnmpSubAgentObject.c
6258945Sroberto *
7258945Sroberto ****************************************************************************/
8258945Sroberto
9258945Sroberto
10258945Sroberto#ifndef NTPSNMPSUBAGENTOBJECT_H
11258945Sroberto#define NTPSNMPSUBAGENTOBJECT_H
12258945Sroberto
13258945Sroberto/* Function Prototypes */
14258945Srobertosize_t ntpsnmpd_parse_string(const char *string, char *field, size_t
15258945Sroberto			     fieldsize, char *value, size_t valuesize);
16258945Srobertosize_t ntpsnmpd_cut_string(const char *string, char *dest, char delim,
17258945Sroberto			   int fieldnumber, size_t maxsize);
18258945Srobertosize_t read_ntp_value(const char *variable, char *value,
19258945Sroberto		      size_t valuesize);
20258945Sroberto
21258945Sroberto/* Initialization */
22258945Srobertovoid init_ntpSnmpSubagentObject(void);
23258945Sroberto
24258945Sroberto/* MIB Section 1 Callback Functions*/
25258945SrobertoNetsnmp_Node_Handler get_ntpEntSoftwareName;
26258945SrobertoNetsnmp_Node_Handler get_ntpEntSoftwareVersion;
27258945SrobertoNetsnmp_Node_Handler get_ntpEntSoftwareVendor;
28258945SrobertoNetsnmp_Node_Handler get_ntpEntSystemType;
29258945SrobertoNetsnmp_Node_Handler get_ntpEntTimeResolution;
30258945SrobertoNetsnmp_Node_Handler get_ntpEntTimePrecision;
31258945SrobertoNetsnmp_Node_Handler get_ntpEntTimeDistance;
32258945Sroberto
33258945Sroberto/* MIB Section 2 Callback Functions (TODO) */
34258945SrobertoNetsnmp_Node_Handler get_ntpEntStatusCurrentMode;
35258945SrobertoNetsnmp_Node_Handler get_ntpEntStatusCurrentModeVal;
36258945SrobertoNetsnmp_Node_Handler get_ntpEntStatusStratum;
37258945SrobertoNetsnmp_Node_Handler get_ntpEntStatusActiveRefSourceId;
38258945SrobertoNetsnmp_Node_Handler get_ntpEntStatusActiveRefSourceName;
39258945SrobertoNetsnmp_Node_Handler get_ntpEntStatusActiveOffset;
40258945Sroberto
41258945Sroberto#define NTPV4_OID 1,3,6,1,2,1,197	/* mib-2 197 */
42258945Sroberto
43258945Sroberto
44258945Sroberto/*
45258945Sroberto * The following macros simplify the registration of the callback
46258945Sroberto * functions and register the name and OID of either read-only (RO) or
47258945Sroberto * read-write (RW) functions.
48258945Sroberto */
49258945Sroberto
50258945Sroberto#define SETUP_OID_RO(oidname, ...)				\
51258945Srobertostatic oid oidname##_oid [] = { __VA_ARGS__ };			\
52258945Sroberto{								\
53258945Sroberto	netsnmp_register_read_only_instance(			\
54258945Sroberto		netsnmp_create_handler_registration(		\
55258945Sroberto			"#oidname",				\
56258945Sroberto			get_##oidname,				\
57258945Sroberto			oidname##_oid,				\
58258945Sroberto			OID_LENGTH				\
59258945Sroberto			( oidname##_oid ),			\
60258945Sroberto			HANDLER_CAN_RONLY));			\
61258945Sroberto}
62258945Sroberto
63258945Sroberto#define SETUP_OID_RW(oidname, ...)				\
64258945Srobertostatic oid oidname##_oid [] = { __VA_ARGS__ };			\
65258945Sroberto{								\
66258945Sroberto	netsnmp_register_instance(				\
67258945Sroberto		netsnmp_create_handler_registration(		\
68258945Sroberto			"#oidname",				\
69258945Sroberto			do_##oidname,				\
70258945Sroberto			oidname##_oid,				\
71258945Sroberto			OID_LENGTH				\
72258945Sroberto			( oidname##_oid ),			\
73258945Sroberto			HANDLER_CAN_RWRITE));			\
74258945Sroberto}
75258945Sroberto
76258945Sroberto#define NTP_OID_RO(oidname, w, x, y, z)				\
77258945Sroberto	SETUP_OID_RO(oidname, NTPV4_OID, w, x, y, z)
78258945Sroberto#define NTP_OID_RW(oidname, w, x, y, z)				\
79258945Sroberto	SETUP_OID_RW(oidname, NTPV4_OID, w, x, y, z)
80258945Sroberto
81258945Sroberto#endif
82