| /* |
| * 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(const 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(const u_char * engineID, u_int engineID_len, |
| u_int engine_boot, u_int engine_time, |
| u_int authenticated); |
| |
| |
| |
| |
| |
| |
| |
| Enginetime |
| search_enginetime_list(const u_char * engineID, u_int engineID_len); |
| |
| int hash_engineID(const 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 */ |