diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2014-11-27 15:02:26 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2014-11-28 01:38:00 +0200 |
commit | 443bc6290a6a90b2c74612d7d68945e375af0ec3 (patch) | |
tree | 9ce32a260699786b745fbc22e69a62973e8a556e /src | |
parent | 4090bd6ff268036b5fd1fdb0fe6d344fd25b5198 (diff) | |
download | varnish-mib-443bc6290a6a90b2c74612d7d68945e375af0ec3.tar.gz varnish-mib-443bc6290a6a90b2c74612d7d68945e375af0ec3.tar.bz2 |
Implement backend statistics table.
* src/betab.c: New file.
* src/Makefile.am (varnish_mib_la_SOURCES): Add betab.c
* src/VARNISH-MIB.txt: Add backendTable oids
* src/varnish_mib.mib2c: Implement totalPipeHeaderBytes, totalPipeIn,
totalPipeOut, backendRequests and backendTable.
* src/varnish-mib.8: Document changes.
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 5 | ||||
-rw-r--r-- | src/VARNISH-MIB.txt | 210 | ||||
-rw-r--r-- | src/betab.c | 259 | ||||
-rw-r--r-- | src/varnish-mib.8 | 63 | ||||
-rw-r--r-- | src/varnish_mib.mib2c | 46 |
5 files changed, 575 insertions, 8 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 4643fde..a10abd1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -20,6 +20,7 @@ dlmod_LTLIBRARIES = varnish-mib.la varnish_mib_la_SOURCES = \ auth.c\ ban.c\ + betab.c\ sha256.c\ sha256.h\ varnish_mib.c\ @@ -37,7 +38,7 @@ varnish_mib.c varnish_mib.h: varnish_mib.mib2c VARNISH-MIB.txt mib2c -c $< -f $@ varnish #NET_SNMP_INCLUDES = `$(NET_SNMP_CONFIG) --cflags` -NET_SNMP_INCLUDES = +#NET_SNMP_INCLUDES = NET_SNMP_LIBS = `$(NET_SNMP_CONFIG) --libs` NET_SNMP_EXLIBS = `$(NET_SNMP_CONFIG) --external-libs` NET_SNMP_MIBDIRS = `net-snmp-config --mibdirs` @@ -51,7 +52,7 @@ AM_LDFLAGS = \ $(NET_SNMP_LIBS)\ $(NET_SNMP_EXLIBS) -AM_CPPFLAGS=-I. ${VARNISHAPI_CFLAGS} -I$NET_SNMP_INCLUDES +AM_CPPFLAGS=-I. ${VARNISHAPI_CFLAGS} mibdir=@MIBDIR@ mib_DATA = varnish_mib.mib2c diff --git a/src/VARNISH-MIB.txt b/src/VARNISH-MIB.txt index fe91735..bb6075d 100644 --- a/src/VARNISH-MIB.txt +++ b/src/VARNISH-MIB.txt @@ -14,18 +14,20 @@ IMPORTS FROM SNMPv2-SMI DateAndTime FROM SNMPv2-TC + InetAddressIPv4, InetAddressIPv6, InetPortNumber, + FROM INET-ADDRESS-MIB OBJECT-GROUP, MODULE-COMPLIANCE FROM SNMPv2-CONF; varnishMIB MODULE-IDENTITY - LAST-UPDATED "201411261613Z" + LAST-UPDATED "201411280136Z" ORGANIZATION "Shared Autonomous sYstems" CONTACT-INFO "Morten Hermanrud <mhe@say.no> Sergey Poznyakoff <gray@gnu.org> " DESCRIPTION "This MIB module defines objects for Varnish reverse web proxy." - REVISION "201411261044Z" + REVISION "201411280136Z" DESCRIPTION "Second revision." ::= { varnish 0 } @@ -192,6 +194,168 @@ backendConnRetry OBJECT-TYPE DESCRIPTION "Backend connections retried." ::= { connections 8 } + +backendRequests OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total backend requests made." + ::= { backend 2 } + +backendTable OBJECT-TYPE + SYNTAX SEQUENCE OF VarnishBackendEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "A table of configured backends and their statistics" + ::= { backend 3 } + +varnishBackendEntry OBJECT-TYPE + SYNTAX VarnishBackendEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "An entry (conceptual row) describing a backend." + INDEX { vbeIndex } + ::= { backendTable 1 } + +VarnishBackendIdentString ::= TEXTUAL-CONVENTION + DISPLAY-HINT "256t" + STATUS current + DESCRIPTION "An identifier of a Varnish backend." + SYNTAX OCTET STRING (SIZE (0..256)) + +varnishBackendEntry ::= SEQUENCE { + vbeIndex Integer32, + vbeIdent VarnishBackendIdentString, + vbeIPv4 InetAddressIPv4, + vbeIPv6 InetAddressIPv6, + vbePort InetPortNumber, + vbeHappyProbes Counter64, + vbeVcls Counter64, + vbeRequestHeaderBytes Counter64, + vbeRequestBodyBytes Counter64, + vbeResponseHeaderBytes Counter64, + vbeResponseBodyBytes Counter64, + vbePipeHeaderBytes Counter64, + vbePipeIn Counter64, + vbePipeOut Counter64 +} + +vbeIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "A number uniquely identifying each backend." + ::= { varnishBackendEntry 1 } + +vbeIdent OBJECT-TYPE + SYNTAX VarnishBackendIdentString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Textual identifier of the backend." + ::= { varnishBackendEntry 2 } + +vbeIPv4 OBJECT-TYPE + SYNTAX InetAddressIPv4 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IPv4 address of the backend. Empty if the backend has no + IPv4 address." + ::= { varnishBackendEntry 3 } + +vbeIPv6 OBJECT-TYPE + SYNTAX InetAddressIPv6 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IPv6 address of the backend. Empty if the backend has no + IPv6 address." + ::= { varnishBackendEntry 4 } + +vbePort OBJECT-TYPE + SYNTAX InetPortNumber + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Port number." + ::= { varnishBackendEntry 5 } + +vbeHappyProbes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of successful health probes." + ::= { varnishBackendEntry 6 } + +vbeVcls OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of VCL references." + ::= { varnishBackendEntry 7 } + +vbeRequestHeaderBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total number of request header bytes sent to that backend." + ::= { varnishBackendEntry 8 } + +vbeRequestBodyBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total number of request body bytes sent to that backend." + ::= { varnishBackendEntry 9 } + +vbeResponseHeaderBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total number of response header bytes received from that backend." + ::= { varnishBackendEntry 10 } + +vbeResponseBodyBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total number of response body bytes received from that backend." + ::= { varnishBackendEntry 11 } + +vbePipeHeaderBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total number of header bytes piped to that backend." + ::= { varnishBackendEntry 12 } + +vbePipeIn OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total number of bytes piped to that backend." + ::= { varnishBackendEntry 13 } + +vbePipeOut OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total number of bytes piped from that backend." + ::= { varnishBackendEntry 14 } totalSessions OBJECT-TYPE SYNTAX Counter64 @@ -265,6 +429,30 @@ totalResponseBodyBytes OBJECT-TYPE "Total response body bytes." ::= { total 9 } +totalPipeHeaderBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total request header bytes received for piped sessions." + ::= { total 10 } + +totalPipeIn OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total number of bytes forwarded from clients in pipe sessions." + ::= { total 11 } + +totalPipeOut OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total number of bytes forwarded to clients in pipe sessions." + ::= { total 12 } + uptime OBJECT-TYPE SYNTAX TimeTicks MAX-ACCESS read-only @@ -630,6 +818,20 @@ varnishGroup OBJECT-GROUP backendConnRecycled, backendConnUnused, backendConnRetry, + backendRequests, + varnishBackendEntry, + vbeIPv4, + vbeIPv6, + vbePort, + vbeHappyProbes, + vbeVcls, + vbeRequestHeaderBytes, + vbeRequestBodyBytes, + vbeResponseHeaderBytes, + vbeResponseBodyBytes, + vbePipeHeaderBytes, + vbePipeIn, + vbePipeOut, totalSessions, totalRequests, totalPipe, @@ -639,11 +841,13 @@ varnishGroup OBJECT-GROUP clientRequests411, clientRequests413, clientRequests417, - backendConnRetry, totalRequestHeaderBytes, totalRequestBodyBytes, totalResponseHeaderBytes, totalResponseBodyBytes, + totalPipeHeaderBytes, + totalPipeIn, + totalPipeOut, uptime, sessAccepted, sessQueued, diff --git a/src/betab.c b/src/betab.c new file mode 100644 index 0000000..3e10a9a --- /dev/null +++ b/src/betab.c @@ -0,0 +1,259 @@ +/* This file is part of varnish-mib + Copyright (C) 2014 Sergey Poznyakoff + + Varnish-mib is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + Varnish-mib is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with varnish-mib. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "varnish_mib.h" +#include <arpa/inet.h> + +unsigned backendTable_timeout = 5; + +void +varnish_backend_table_timeout_parser(const char *token, char *line) +{ + varnish_mib_timeout_parser(token, line, &backendTable_timeout); +} + +/* + * create a new row in the table + */ +static struct backendTable_entry * +create_entry(netsnmp_tdata *table_data, long idx, + struct backendTable_entry *ent) +{ + struct backendTable_entry *entry; + netsnmp_tdata_row *row; + + entry = SNMP_MALLOC_TYPEDEF(struct backendTable_entry); + if (!entry) + return NULL; + + row = netsnmp_tdata_create_row(); + if (!row) { + SNMP_FREE(entry); + return NULL; + } + row->data = entry; + *entry = *ent; + + entry->vbeIndex = idx; + netsnmp_tdata_row_add_index(row, ASN_INTEGER, + &entry->vbeIndex, + sizeof(entry->vbeIndex)); + if (table_data) + netsnmp_tdata_add_row(table_data, row); + return entry; +} + +#define VSC_POINT_TYPE(p) ((p)->section->fantom->type) +#define VSC_POINT_IDENT(p) ((p)->section->fantom->ident) +#define VSC_POINT_NAME(p) ((p)->desc->name) +#define VSC_POINT_FMT(p) ((p)->desc->fmt) + +struct betab_priv { + int err; + long idx; + struct backendTable_entry ent; + netsnmp_tdata *table; +}; + +struct betab_trans { + const char *name; + size_t off; +}; + +static struct betab_trans betab_trans[] = { + { "vcls", + offsetof(struct backendTable_entry, vbeVcls) }, + { "happy", + offsetof(struct backendTable_entry, vbeHappyProbes) }, + { "bereq_hdrbytes", + offsetof(struct backendTable_entry, vbeRequestHeaderBytes) }, + { "bereq_bodybytes", + offsetof(struct backendTable_entry, vbeRequestBodyBytes) }, + { "beresp_hdrbytes", + offsetof(struct backendTable_entry, vbeResponseHeaderBytes) }, + { "beresp_bodybytes", + offsetof(struct backendTable_entry, vbeResponseBodyBytes) }, + { "pipe_hdrbytes", + offsetof(struct backendTable_entry, vbePipeHeaderBytes) }, + { "pipe_in", + offsetof(struct backendTable_entry, vbePipeIn) }, + { "pipe_out", + offsetof(struct backendTable_entry, vbePipeOut) }, + { NULL } +}; + +static int +identcmp(struct betab_priv *bp, const char *ident) +{ + size_t len; + size_t i; + + if (bp->idx == -1) + return 1; + for (i = 0; i < bp->ent.vbeIdent_len; i++, ident++) + if (bp->ent.vbeIdent[i] != *ident) + return 1; + if (*ident == '(' || *ident == 0) + return 0; + return 1; +} + +static void +uint32_to_bytes (unsigned char *bytes, uint32_t u) +{ + int i; + + for (i = 0; i < 4; i++) + { + bytes[i] = u & 0xff; + u >>= 8; + } +} + +static void +scanbuf(const char *s, struct backendTable_entry *ent) +{ + char ipv4buf[16]; + char ipv6buf[81]; + unsigned long port; + char *p; + union { + struct in_addr in; + struct in6_addr in6; + } v; + + if (*s != '(') + return; + ++s; + p = ipv4buf; + while (p < ipv4buf + sizeof(ipv4buf) && *s && *s != ',') + *p++ = *s++; + if (*s != ',') + return; + *p = 0; + + ++s; + p = ipv6buf; + while (p < ipv6buf + sizeof(ipv6buf) && *s && *s != ',') + *p++ = *s++; + *p = 0; + + ++s; + port = strtoul(s, &p, 10); + if (*p != ')' || port > USHRT_MAX) + return; + + if (ipv4buf[0] && inet_pton(AF_INET, ipv4buf, &v)) { + ent->vbeIPv4_len = 4; + uint32_to_bytes(ent->vbeIPv4, v.in.s_addr); + } + + if (ipv6buf[0] && inet_pton(AF_INET6, ipv6buf, &v)) { + ent->vbeIPv6_len = 16; + memcpy(ent->vbeIPv6, &v, ent->vbeIPv6_len); + } + ent->vbePort = port; +} + +/* Process a single statistics point. See comment below. */ +static int +create_entry_cb(void *priv, const struct VSC_point *const pt) +{ + struct betab_priv *bp = priv; + struct betab_trans *tp; + + if (bp->err || !pt || strcmp(VSC_POINT_TYPE(pt), "VBE") || + strcmp(VSC_POINT_FMT(pt), "uint64_t")) + return 0; + if (identcmp(bp, VSC_POINT_IDENT(pt))) { + const char *full_id; + + if (bp->idx != -1 + && !create_entry(bp->table, bp->idx, &bp->ent)) { + snmp_log(LOG_ERR, "out of memory\n"); + bp->err = SNMP_ERR_GENERR; + return 0; + } + + memset(&bp->ent, 0, sizeof(bp->ent)); + bp->ent.vbeIndex = ++bp->idx; + + full_id = VSC_POINT_IDENT(pt); + bp->ent.vbeIdent_len = strcspn(full_id, "("); + bp->ent.vbeIdent = malloc(bp->ent.vbeIdent_len); + if (!bp->ent.vbeIdent) { + snmp_log(LOG_ERR, "out of memory\n"); + bp->err = SNMP_ERR_GENERR; + return 0; + } + memcpy(bp->ent.vbeIdent, full_id, bp->ent.vbeIdent_len); + full_id += bp->ent.vbeIdent_len; + scanbuf(full_id, &bp->ent); + } + + for (tp = betab_trans; tp->name; tp++) { + if (strcmp(VSC_POINT_NAME(pt), tp->name) == 0) { + U64 *u = (U64*)((char*)&bp->ent + tp->off); + uint64_t n = *(const volatile uint64_t*)pt->ptr; + u->high = n >> 32; + u->low = n & 0xffffffff; + break; + } + } + return 0; +} + +/* Varnish API does not provide access to struct VSC_C_vbe, so the only + way to backend statistics is to iterate over all statistics data, selecting + the entries marked as VBE. That's what this function does. + */ +int +backendTable_load(netsnmp_cache *cache, void *vmagic) +{ + struct VSM_data *vd = varnish_get_vsm_data(); + struct betab_priv bp; + + bp.idx = -1; + bp.err = 0; + bp.table = (netsnmp_tdata *) vmagic; + memset(&bp.ent, 0, sizeof(bp.ent)); + + DEBUGMSGTL(("varnish_ban", "loading backend table")); + VSC_Iter(vd, NULL, create_entry_cb, &bp); + /* FIXME: perhaps handle bp.err separately */ + if (bp.idx != -1) { + DEBUGMSGTL(("varnish_ban", "loaded %lu backend entries", + bp.idx + 1)); + if (!create_entry(bp.table, bp.idx, &bp.ent)) + snmp_log(LOG_ERR, "out of memory\n"); + } + return 0; +} + +void +backendTable_free(netsnmp_cache *cache, void *vmagic) +{ + netsnmp_tdata *table = (netsnmp_tdata *) vmagic; + netsnmp_tdata_row *row; + + DEBUGMSGTL(("varnish_ban", "freeing backend table")); + while ((row = netsnmp_tdata_row_first(table))) { + struct backendTable_entry *entry = row->data; + free(entry->vbeIdent); + SNMP_FREE(entry); + netsnmp_tdata_remove_and_delete_row(table, row); + } +} diff --git a/src/varnish-mib.8 b/src/varnish-mib.8 index e45ed0d..c2d37cd 100644 --- a/src/varnish-mib.8 +++ b/src/varnish-mib.8 @@ -13,7 +13,7 @@ .\" .\" You should have received a copy of the GNU General Public License .\" along with Varnish-mib. If not, see <http://www.gnu.org/licenses/>. -.TH VARNISH-MIB 8 "November 27, 2014" "varnish-mib" +.TH VARNISH-MIB 8 "November 28, 2014" "varnish-mib" .SH NAME varnish\-mib \- net-snmp module for obtaining Varnish Cache statistics .SH SYNOPSIS @@ -61,6 +61,9 @@ It can also be set remotely by assigning new value to the \fBvarnishCLIPortTimeout\fR \fINUMBER\fR Sets timeout for I/O operations with Varnish administrative port. Default is 5 seconds. +.TP +\fBvarnishBackendTableTimeout\fR \fINUMBER\fR +Update interval for \fBbackendTable\fR. Default is 5 seconds. .SH OIDS The following OIDs are defined: .SS Branch \(dqclient\(dq @@ -122,6 +125,55 @@ Number of unused backend connections. .TP .B backendConnRetry Backend connections retried. +.TP +.B backendRequests +Total backend requests made. +.TP +.B backendTable +This branch provides a conceptual table of backends with the +corresponding statistics. It is indexed by \fBvbeIndex\fR. Each row +has the following elements: +.RS +.TP +.B vbeIdent +A string uniqiely identifying the backend. +.TP +.B vbeIPv4 +IPv4 address of the backend. Empty if the backend has no IPv4 address. +.TP +.B vbeIPv6 +IPv6 address of the backend. Empty if the backend has no IPv6 address. +.TP +.B vbePort +Port number. +.TP +.B vbeHappyProbes +Number of successful health probes. +.TP +.B vbeVcls +Number of VCL references. +.TP +.B vbeRequestHeaderBytes +Total number of request header bytes sent to that backend. +.TP +.B vbeRequestBodyBytes +Total number of request body bytes sent to that backend. +.TP +.B vbeResponseHeaderBytes +Total number of response header bytes received from that backend. +.TP +.B vbeResponseBodyBytes +Total number of response body bytes received from that backend. +.TP +.B vbePipeHeaderBytes +Total number of header bytes piped to that backend. +.TP +.B vbePipeIn +Total number of bytes piped to that backend. +.TP +.B vbePipeOut +Total number of bytes piped from that backend. +.RE .SS Branch \(dqtotal\(dq .TP .B totalSessions @@ -150,6 +202,15 @@ Total header bytes sent out in responses. .TP .B totalResponseBodyBytes Total body bytes sent out in responses. +.TP +.B totalPipeHeaderBytes +Total request header bytes received for piped sessions. +.TP +.B totalPipeIn +Total number of bytes forwarded from clients in pipe sessions. +.TP +.B totalPipeOut +Total number of bytes forwarded to clients in pipe sessions. .SS Branch \(dqmaster\(dq .TP .B uptime diff --git a/src/varnish_mib.mib2c b/src/varnish_mib.mib2c index 819ef1c..c120b0e 100644 --- a/src/varnish_mib.mib2c +++ b/src/varnish_mib.mib2c @@ -51,6 +51,7 @@ $vars{'varnish_translate'} = sub { backendConnRecycled => [ 'MAIN', 'backend_recycle' ], backendConnUnused => [ 'MAIN', 'backend_toolate' ], backendConnRetry => [ 'MAIN', 'backend_retry' ], + backendRequests => [ 'MAIN', 'backend_req' ], totalSessions => [ 'MAIN', 's_sess' ], totalRequests => [ 'MAIN', 's_req' ], @@ -61,7 +62,10 @@ $vars{'varnish_translate'} = sub { totalRequestBodyBytes => [ 'MAIN', 's_req_bodybytes' ], totalResponseHeaderBytes => [ 'MAIN', 's_resp_hdrbytes' ], totalResponseBodyBytes => [ 'MAIN', 's_resp_bodybytes' ], - + totalPipeHeaderBytes => [ 'MAIN', 's_pipe_hdrbytes' ], + totalPipeIn => [ 'MAIN', 's_pipe_in' ], + totalPipeOut => [ 'MAIN', 's_pipe_out' ], + sessAccepted => [ 'MAIN', 'sess_conn'], sessQueued => [ 'MAIN', 'sess_queued'], sessDropped => [ 'MAIN', 'sess_dropped'], @@ -120,6 +124,17 @@ $vars{'varnish_translate'} = sub { return 0; }; +%field_dim_tab = ( + vbeIPv4 => 4, + vbeIPv6 => 16 +); + +$vars{'set_field_dim'} = sub { + my $v = shift; + $vars{field_dim} = $field_dim_tab{$v}; + return 0; +}; + $vars{'modulename'} = $vars{'name'}; $vars{'modulename'} =~ s#.*/##; $vars{'modulename'} =~ s/\.c$//; @@ -130,6 +145,7 @@ $vars{'modulename'} =~ s/\.c$//; @open ${modulename}.h@ /* THIS FILE IS GENERATED AUTOMATICALLY. PLEASE DO NOT EDIT. */ #include <config.h> +#include <stddef.h> #include <stdlib.h> #include <stdint.h> @@ -169,7 +185,6 @@ int varnish_ban(netsnmp_agent_request_info *reqinfo, int varnish_mib_timeout_parser(const char *token, char *line, unsigned *retval); -extern unsigned banTable_timeout; void varnish_ban_table_timeout_parser(const char *token, char *line); void varnish_vcli_timeout_parser(const char *token, char *line); @@ -177,6 +192,8 @@ int varnish_ban_table_timeout_set(netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests, struct VSM_data *vd); +void varnish_backend_table_timeout_parser(const char *token, char *line); + @open ${name}@ /* THIS FILE IS GENERATED AUTOMATICALLY. PLEASE DO NOT EDIT. */ @@ -381,7 +398,14 @@ struct ${i}_entry { /* Index values */ @foreach $idx index@ @if $idx.needlength@ + @startperl@ + &{$vars{'set_field_dim'}}($vars{'idx'}); + @endperl@ + @if $field_dim > 0@ + $idx.decl $idx[$field_dim]; + @else@ $idx.decl *$idx; + @end@ size_t ${idx}_len; @else@ $idx.decl $idx; @@ -392,7 +416,14 @@ struct ${i}_entry { @foreach $c nonindex@ @if $c.readable@ @if $c.needlength@ + @startperl@ + &{$vars{'set_field_dim'}}($vars{'c'}); + @endperl@ + @if $field_dim > 0@ + $c.decl ${c}[$field_dim]; + @else@ $c.decl *$c; + @end@ size_t ${c}_len; @else@ $c.decl $c; @@ -401,6 +432,7 @@ struct ${i}_entry { @end@ }; +extern unsigned ${i}_timeout; int ${i}_load(netsnmp_cache *cache, void *vmagic); void ${i}_free(netsnmp_cache *cache, void *vmagic); @pop@ @@ -437,6 +469,10 @@ handle_table_${i}( snmp_set_var_typed_value(request->requestvb, $c.type, table_entry->$c, table_entry->${c}_len); + @elsif $c.type eq 'ASN_COUNTER64'@@ + snmp_set_var_typed_value(requests->requestvb, $c.type, + &table_entry->$c, + sizeof(table_entry->$c)); @else@ snmp_set_var_typed_integer(request->requestvb, $c.type, table_entry->$c); @@ -531,6 +567,12 @@ init_$modulename(void) "varnishBanTableTimeout SECONDS")) snmp_log(LOG_ERR,"can't register config handler\n"); + if (!register_config_handler("snmpd", "varnishBackendTableTimeout", + varnish_backend_table_timeout_parser, + NULL, + "varnishBackendTableTimeout SECONDS")) + snmp_log(LOG_ERR,"can't register config handler\n"); + if (!register_config_handler("snmpd", "varnishCLIPortTimeout", varnish_vcli_timeout_parser, NULL, |