summaryrefslogtreecommitdiff
path: root/include/net-snmp/library/lcd_time.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net-snmp/library/lcd_time.h')
-rw-r--r--include/net-snmp/library/lcd_time.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/include/net-snmp/library/lcd_time.h b/include/net-snmp/library/lcd_time.h
new file mode 100644
index 0000000..2c65e2c
--- /dev/null
+++ b/include/net-snmp/library/lcd_time.h
@@ -0,0 +1,137 @@
+/*
+ * lcd_time.h
+ */
+
+#ifndef _LCD_TIME_H
+#define _LCD_TIME_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ * undefine to enable time synchronization only on authenticated packets
+ */
+#define LCD_TIME_SYNC_OPT 1
+
+ /*
+ * Macros and definitions.
+ */
+#define ETIMELIST_SIZE 23
+
+
+
+ typedef struct enginetime_struct {
+ u_char *engineID;
+ u_int engineID_len;
+
+ u_int engineTime;
+ u_int engineBoot;
+ /*
+ * Time & boots values received from last authenticated
+ * * message within the previous time window.
+ */
+
+ time_t lastReceivedEngineTime;
+ /*
+ * Timestamp made when engineTime/engineBoots was last
+ * * updated. Measured in seconds.
+ */
+
+#ifdef LCD_TIME_SYNC_OPT
+ u_int authenticatedFlag;
+#endif
+ struct enginetime_struct *next;
+ } enginetime , *Enginetime;
+
+
+
+
+ /*
+ * Macros for streamlined engineID existence checks --
+ *
+ * e is char *engineID,
+ * e_l is u_int engineID_len.
+ *
+ *
+ * ISENGINEKNOWN(e, e_l)
+ * Returns:
+ * TRUE If engineID is recoreded in the EngineID List;
+ * FALSE Otherwise.
+ *
+ * ENSURE_ENGINE_RECORD(e, e_l)
+ * Adds the given engineID to the EngineID List if it does not exist
+ * already. engineID is added with a <enginetime, engineboots>
+ * tuple of <0,0>. ALWAYS succeeds -- except in case of a
+ * fatal internal error.
+ * Returns:
+ * SNMPERR_SUCCESS On success;
+ * SNMPERR_GENERR Otherwise.
+ *
+ * MAKENEW_ENGINE_RECORD(e, e_l)
+ * Returns:
+ * SNMPERR_SUCCESS If engineID already exists in the EngineID List;
+ * SNMPERR_GENERR Otherwise -and- invokes ENSURE_ENGINE_RECORD()
+ * to add an entry to the EngineID List.
+ *
+ * XXX Requres the following declaration in modules calling ISENGINEKNOWN():
+ * static u_int dummy_etime, dummy_eboot;
+ */
+#define ISENGINEKNOWN(e, e_l) \
+ ( (get_enginetime(e, e_l, \
+ &dummy_eboot, &dummy_etime, TRUE) == SNMPERR_SUCCESS) \
+ ? TRUE \
+ : FALSE )
+
+#define ENSURE_ENGINE_RECORD(e, e_l) \
+ ( (set_enginetime(e, e_l, 0, 0, FALSE) == SNMPERR_SUCCESS) \
+ ? SNMPERR_SUCCESS \
+ : SNMPERR_GENERR )
+
+#define MAKENEW_ENGINE_RECORD(e, e_l) \
+ ( (ISENGINEKNOWN(e, e_l) == TRUE) \
+ ? SNMPERR_SUCCESS \
+ : (ENSURE_ENGINE_RECORD(e, e_l), SNMPERR_GENERR) )
+
+
+
+ /*
+ * Prototypes.
+ */
+ int get_enginetime(u_char * engineID, u_int engineID_len,
+ u_int * engine_boot,
+ u_int * engine_time,
+ u_int authenticated);
+
+ int get_enginetime_ex(u_char * engineID,
+ u_int engineID_len,
+ u_int * engine_boot,
+ u_int * engine_time,
+ u_int * last_engine_time,
+ u_int authenticated);
+
+ int set_enginetime(u_char * engineID, u_int engineID_len,
+ u_int engine_boot, u_int engine_time,
+ u_int authenticated);
+
+
+
+
+
+
+
+ Enginetime
+ search_enginetime_list(u_char * engineID, u_int engineID_len);
+
+ int hash_engineID(u_char * engineID, u_int engineID_len);
+
+ void dump_etimelist_entry(Enginetime e, int count);
+ void dump_etimelist(void);
+ void free_etimelist(void);
+ void free_enginetime(unsigned char *engineID, size_t engineID_len);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _LCD_TIME_H */