1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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(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 */
|