diff options
-rw-r--r-- | src/betab.c | 9 | ||||
-rw-r--r-- | src/varnish_mib.mib2c | 66 |
2 files changed, 33 insertions, 42 deletions
diff --git a/src/betab.c b/src/betab.c index 2979f8b..83d77e3 100644 --- a/src/betab.c +++ b/src/betab.c | |||
@@ -79,7 +79,7 @@ struct backend_dfn { | |||
79 | size_t vbeIPv6_len; | 79 | size_t vbeIPv6_len; |
80 | u_long vbePort; | 80 | u_long vbePort; |
81 | 81 | ||
82 | struct VSC_point *vpt[VBE_MAX]; | 82 | const volatile uint64_t *vpt[VBE_MAX]; |
83 | 83 | ||
84 | VTAILQ_ENTRY(backend_dfn) list; | 84 | VTAILQ_ENTRY(backend_dfn) list; |
85 | }; | 85 | }; |
@@ -92,9 +92,6 @@ backend_clear(void) | |||
92 | { | 92 | { |
93 | while (!VTAILQ_EMPTY(&backends)) { | 93 | while (!VTAILQ_EMPTY(&backends)) { |
94 | struct backend_dfn *dfn = VTAILQ_FIRST(&backends); | 94 | struct backend_dfn *dfn = VTAILQ_FIRST(&backends); |
95 | int i; | ||
96 | for (i = 0; i < VBE_MAX; i++) | ||
97 | VSC_Destroy_Point(&dfn->vpt[i]); | ||
98 | VTAILQ_REMOVE(&backends, dfn, list); | 95 | VTAILQ_REMOVE(&backends, dfn, list); |
99 | free(dfn->vbeIdent); | 96 | free(dfn->vbeIdent); |
100 | SNMP_FREE(dfn); | 97 | SNMP_FREE(dfn); |
@@ -127,7 +124,7 @@ backend_register(char const *name, size_t len, char const *param, | |||
127 | } | 124 | } |
128 | for (i = 0; betab_trans[i].param; i++) { | 125 | for (i = 0; betab_trans[i].param; i++) { |
129 | if (strcmp(betab_trans[i].param, param) == 0) { | 126 | if (strcmp(betab_trans[i].param, param) == 0) { |
130 | dfn->vpt[i] = VSC_Clone_Point(vpt); | 127 | dfn->vpt[i] = vpt->ptr; |
131 | break; | 128 | break; |
132 | } | 129 | } |
133 | } | 130 | } |
@@ -162,7 +159,7 @@ backendTable_load(netsnmp_cache *cache, void *vmagic) | |||
162 | 159 | ||
163 | for (i = 0; i < VBE_MAX; i++) { | 160 | for (i = 0; i < VBE_MAX; i++) { |
164 | U64 *u = (U64*)((char*)ent + betab_trans[i].off); | 161 | U64 *u = (U64*)((char*)ent + betab_trans[i].off); |
165 | uint64_t n = *(const volatile uint64_t*)dfn->vpt[i]->ptr; | 162 | uint64_t n = *dfn->vpt[i]; |
166 | u->high = n >> 32; | 163 | u->high = n >> 32; |
167 | u->low = n & 0xffffffff; | 164 | u->low = n & 0xffffffff; |
168 | } | 165 | } |
diff --git a/src/varnish_mib.mib2c b/src/varnish_mib.mib2c index 2b12090..b061022 100644 --- a/src/varnish_mib.mib2c +++ b/src/varnish_mib.mib2c | |||
@@ -120,7 +120,7 @@ $vars{'varnish_translate_table'} = { | |||
120 | }; | 120 | }; |
121 | 121 | ||
122 | $vars{'varnish_hash_table'} = new VarnishMib::MIBTable( | 122 | $vars{'varnish_hash_table'} = new VarnishMib::MIBTable( |
123 | 'struct VSC_point *', | 123 | 'const volatile uint64_t *', |
124 | $vars{'varnish_translate_table'}, | 124 | $vars{'varnish_translate_table'}, |
125 | prefix => 'vmib_', max_collisions => 0 | 125 | prefix => 'vmib_', max_collisions => 0 |
126 | ); | 126 | ); |
@@ -202,7 +202,7 @@ int varnish_ban(netsnmp_agent_request_info *reqinfo, | |||
202 | #include "varnish_mib.h" | 202 | #include "varnish_mib.h" |
203 | #include "backend.h" | 203 | #include "backend.h" |
204 | 204 | ||
205 | static struct vsm *vd; | 205 | static struct vsm *vsm; |
206 | static struct vsc *vsc; | 206 | static struct vsc *vsc; |
207 | 207 | ||
208 | static void dict_load(struct vsc *vsc); | 208 | static void dict_load(struct vsc *vsc); |
@@ -210,23 +210,23 @@ static void dict_load(struct vsc *vsc); | |||
210 | int | 210 | int |
211 | post_config(int majorID, int minorID, void *serverarg, void *clientarg) | 211 | post_config(int majorID, int minorID, void *serverarg, void *clientarg) |
212 | { | 212 | { |
213 | vd = VSM_New(); | 213 | vsm = VSM_New(); |
214 | if (!vd) { | 214 | if (!vsm) { |
215 | snmp_log(LOG_ERR, "VSM_New: %s\n", strerror(errno)); | 215 | snmp_log(LOG_ERR, "VSM_New: %s\n", strerror(errno)); |
216 | return 1; | 216 | return 1; |
217 | } | 217 | } |
218 | 218 | ||
219 | vsc = VSC_New(vd); | 219 | vsc = VSC_New(); |
220 | if (!vsc) { | 220 | if (!vsc) { |
221 | snmp_log(LOG_ERR, "VSC_New: %s\n", strerror(errno)); | 221 | snmp_log(LOG_ERR, "VSC_New: %s\n", strerror(errno)); |
222 | return 1; | 222 | return 1; |
223 | } | 223 | } |
224 | 224 | ||
225 | if (VSM_Attach(vd, 2)) | 225 | if (VSM_Attach(vsm, 2)) |
226 | snmp_log(LOG_ERR, "%s\n", VSM_Error(vd)); | 226 | snmp_log(LOG_ERR, "%s\n", VSM_Error(vsm)); |
227 | 227 | ||
228 | dict_load(vsc); | 228 | dict_load(vsc); |
229 | backend_collect_addr(vd); | 229 | backend_collect_addr(vsm); |
230 | return 0; | 230 | return 0; |
231 | } | 231 | } |
232 | 232 | ||
@@ -248,19 +248,19 @@ varnish_snmp_deinit(void) | |||
248 | struct vsm * | 248 | struct vsm * |
249 | varnish_get_vsm_data(void) | 249 | varnish_get_vsm_data(void) |
250 | { | 250 | { |
251 | if (vd) { | 251 | if (vsm) { |
252 | if (VSM_Status(vd) & (VSM_MGT_CHANGED|VSM_WRK_CHANGED)) { | 252 | if (VSM_Status(vsm) & (VSM_MGT_CHANGED|VSM_WRK_CHANGED)) { |
253 | DEBUGMSGTL(("$modulename", "reopening vd\n")); | 253 | DEBUGMSGTL(("$modulename", "reopening vsm\n")); |
254 | dict_load(vsc); | 254 | dict_load(vsc); |
255 | backend_collect_addr(vd); | 255 | backend_collect_addr(vsm); |
256 | } | 256 | } |
257 | } | 257 | } |
258 | return vd; | 258 | return vsm; |
259 | } | 259 | } |
260 | 260 | ||
261 | ${varnish_hash_table} | 261 | ${varnish_hash_table} |
262 | 262 | ||
263 | static struct VSC_point ** | 263 | static const volatile uint64_t ** |
264 | varnish_var_lookup(char const *str) | 264 | varnish_var_lookup(char const *str) |
265 | { | 265 | { |
266 | if (str) { | 266 | if (str) { |
@@ -279,7 +279,7 @@ varnish_var_lookup(char const *str) | |||
279 | return NULL; | 279 | return NULL; |
280 | } | 280 | } |
281 | 281 | ||
282 | static inline struct VSC_point * | 282 | static inline const volatile uint64_t * |
283 | varnish_get_oid(int i) | 283 | varnish_get_oid(int i) |
284 | { | 284 | { |
285 | return vmib_data_table[i]; | 285 | return vmib_data_table[i]; |
@@ -290,22 +290,17 @@ dict_clear(void) | |||
290 | { | 290 | { |
291 | int i; | 291 | int i; |
292 | for (i = 0; i < MAX_VMIB_OID; i++) | 292 | for (i = 0; i < MAX_VMIB_OID; i++) |
293 | if (vmib_data_table[i]) | 293 | vmib_data_table[i] = NULL; |
294 | VSC_Destroy_Point(&vmib_data_table[i]); | ||
295 | } | 294 | } |
296 | 295 | ||
297 | static struct VSC_point const * | 296 | static void |
298 | dict_install(struct VSC_point const *pt) | 297 | dict_install(struct VSC_point const *pt) |
299 | { | 298 | { |
300 | struct VSC_point **ent; | 299 | const volatile uint64_t **ent; |
301 | 300 | ||
302 | ent = varnish_var_lookup(pt->name); | 301 | ent = varnish_var_lookup(pt->name); |
303 | if (!ent) | 302 | if (ent) |
304 | return NULL; | 303 | *ent = pt->ptr; |
305 | if (*ent) | ||
306 | VSC_Destroy_Point(ent); | ||
307 | *ent = VSC_Clone_Point(pt); | ||
308 | return *ent; | ||
309 | } | 304 | } |
310 | 305 | ||
311 | static int | 306 | static int |
@@ -319,17 +314,16 @@ load_cb(void *priv, const struct VSC_point *vpt) | |||
319 | backend_register(name, p - name, p + 1, vpt); | 314 | backend_register(name, p - name, p + 1, vpt); |
320 | } | 315 | } |
321 | } | 316 | } |
322 | vpt = dict_install(vpt); | 317 | dict_install(vpt); |
323 | return 0; | 318 | return 0; |
324 | } | 319 | } |
325 | 320 | ||
326 | static void | 321 | static void |
327 | dict_load(struct vsc *vsc) | 322 | dict_load(struct vsc *vsc) |
328 | { | 323 | { |
329 | struct vsm_fantom fantom = VSM_FANTOM_NULL; | ||
330 | dict_clear(); | 324 | dict_clear(); |
331 | backend_clear(); | 325 | backend_clear(); |
332 | VSC_Iter(vsc, &fantom, load_cb, NULL); | 326 | VSC_Iter(vsc, vsm, load_cb, NULL); |
333 | } | 327 | } |
334 | 328 | ||
335 | /* Variable handlers. | 329 | /* Variable handlers. |
@@ -361,12 +355,12 @@ handle_$i(netsnmp_mib_handler *handler, | |||
361 | case MODE_GET: | 355 | case MODE_GET: |
362 | @if $varnish_type eq 'DICT'@ | 356 | @if $varnish_type eq 'DICT'@ |
363 | { | 357 | { |
364 | struct VSC_point *ent = varnish_get_oid($i); | 358 | const volatile uint64_t *ent = varnish_get_oid($i); |
365 | uint64_t val; | 359 | uint64_t val; |
366 | 360 | ||
367 | if (!ent) | 361 | if (!ent) |
368 | return SNMP_ERR_NOSUCHNAME; | 362 | return SNMP_ERR_NOSUCHNAME; |
369 | val = *(uint64_t*)ent->ptr; | 363 | val = *ent; |
370 | @if $i.type eq 'ASN_COUNTER64'@ | 364 | @if $i.type eq 'ASN_COUNTER64'@ |
371 | { | 365 | { |
372 | struct counter64 ctr; | 366 | struct counter64 ctr; |
@@ -446,7 +440,7 @@ handle_$i(netsnmp_mib_handler *handler, | |||
446 | 440 | ||
447 | case MODE_SET_RESERVE2: | 441 | case MODE_SET_RESERVE2: |
448 | @if $varnish_set_reserve2 ne ''@ |