Annotation of embedaddon/strongswan/src/libcharon/plugins/stroke/stroke_counter.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2017 Tobias Brunner
3: * HSR Hochschule fuer Technik Rapperswil
4: *
5: * Copyright (C) 2012 Martin Willi
6: * Copyright (C) 2012 revosec AG
7: *
8: * This program is free software; you can redistribute it and/or modify it
9: * under the terms of the GNU General Public License as published by the
10: * Free Software Foundation; either version 2 of the License, or (at your
11: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
12: *
13: * This program is distributed in the hope that it will be useful, but
14: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16: * for more details.
17: */
18:
19: #include <inttypes.h>
20:
21: #include "stroke_counter.h"
22:
23: #include <counters_query.h>
24:
25: ENUM(stroke_counter_type_names,
26: COUNTER_INIT_IKE_SA_REKEY, COUNTER_OUT_INFORMATIONAL_RSP,
27: "ikeInitRekey",
28: "ikeRspRekey",
29: "ikeChildSaRekey",
30: "ikeInInvalid",
31: "ikeInInvalidSpi",
32: "ikeInInitReq",
33: "ikeInInitRsp",
34: "ikeOutInitReq",
35: "ikeOutInitRsp",
36: "ikeInAuthReq",
37: "ikeInAuthRsp",
38: "ikeOutAuthReq",
39: "ikeOutAuthRsp",
40: "ikeInCrChildReq",
41: "ikeInCrChildRsp",
42: "ikeOutCrChildReq",
43: "ikeOutCrChildRsp",
44: "ikeInInfoReq",
45: "ikeInInfoRsp",
46: "ikeOutInfoReq",
47: "ikeOutInfoRsp",
48: );
49:
50: typedef struct private_stroke_counter_t private_stroke_counter_t;
51:
52: /**
53: * Private data of an stroke_counter_t object.
54: */
55: struct private_stroke_counter_t {
56:
57: /**
58: * Public stroke_counter_t interface.
59: */
60: stroke_counter_t public;
61:
62: /**
63: * Reference to query interface
64: */
65: counters_query_t *query;
66: };
67:
68: /**
69: * Make sure we have the query interface
70: */
71: static inline bool ensure_query(private_stroke_counter_t *this)
72: {
73: if (this->query)
74: {
75: return TRUE;
76: }
77: return (this->query = lib->get(lib, "counters")) != NULL;
78: }
79:
80: /**
81: * Print global or connection-specific IKE counters
82: */
83: static void print_one(private_stroke_counter_t *this, FILE *out, char *name)
84: {
85: uint64_t *counters;
86: counter_type_t i;
87:
88: counters = this->query->get_all(this->query, name);
89: if (!counters)
90: {
91: fprintf(out, "No IKE counters found for '%s'\n", name);
92: return;
93: }
94: if (name)
95: {
96: fprintf(out, "\nList of IKE counters for '%s':\n\n", name);
97: }
98: else
99: {
100: fprintf(out, "\nList of IKE counters:\n\n");
101: }
102: for (i = 0; i < COUNTER_MAX; i++)
103: {
104: fprintf(out, "%-18N %12"PRIu64"\n", stroke_counter_type_names, i,
105: counters[i]);
106: }
107: free(counters);
108: }
109:
110: /**
111: * Print counters for all connections
112: */
113: static void print_all(private_stroke_counter_t *this, FILE *out)
114: {
115: enumerator_t *enumerator;
116: char *name;
117:
118: enumerator = this->query->get_names(this->query);
119: while (enumerator->enumerate(enumerator, &name))
120: {
121: print_one(this, out, name);
122: }
123: enumerator->destroy(enumerator);
124: }
125:
126: METHOD(stroke_counter_t, print, void,
127: private_stroke_counter_t *this, FILE *out, char *name)
128: {
129: if (!ensure_query(this))
130: {
131: fprintf(out, "\nNo counters available (plugin missing?)\n\n");
132: return;
133: }
134: if (name && streq(name, "all"))
135: {
136: return print_all(this, out);
137: }
138: return print_one(this, out, name);
139: }
140:
141: METHOD(stroke_counter_t, reset, void,
142: private_stroke_counter_t *this, char *name)
143: {
144: if (!ensure_query(this))
145: {
146: return;
147: }
148: this->query->reset(this->query, name);
149: }
150:
151: METHOD(stroke_counter_t, destroy, void,
152: private_stroke_counter_t *this)
153: {
154: free(this);
155: }
156:
157: /**
158: * See header
159: */
160: stroke_counter_t *stroke_counter_create()
161: {
162: private_stroke_counter_t *this;
163:
164: INIT(this,
165: .public = {
166: .print = _print,
167: .reset = _reset,
168: .destroy = _destroy,
169: },
170: );
171:
172: return &this->public;
173: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>