blob: da8c3c1e6735caa21503c6f6c2d6d1cfb41ec55c [file] [log] [blame]
/*
* 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 */