diff options
Diffstat (limited to 'include/net-snmp/library/lcd_time.h')
-rw-r--r-- | include/net-snmp/library/lcd_time.h | 137 |
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 */ |