Define stroke counter types to implement
[strongswan.git] / src / libcharon / plugins / stroke / stroke_counter.c
1 /*
2 * Copyright (C) 2012 Martin Willi
3 * Copyright (C) 2012 revosec AG
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16 #include "stroke_counter.h"
17
18 #include <threading/spinlock.h>
19
20 ENUM(stroke_counter_type_names,
21 COUNTER_INIT_IKE_SA_REKEY, COUNTER_OUT_INFORMATIONAL_RSP,
22 "ikeInitRekey",
23 "ikeRspRekey",
24 "ikeChildSaRekey",
25 "ikeInInvalid",
26 "ikeInInvalidSpi",
27 "ikeInInitReq",
28 "ikeInInitRsp",
29 "ikeOutInitReq",
30 "ikeOutInitRsp",
31 "ikeInAuthReq",
32 "ikeInAuthRsp",
33 "ikeOutAuthReq",
34 "ikeOutAuthRsp",
35 "ikeInCrChildReq",
36 "ikeInCrChildRsp",
37 "ikeOutCrChildReq",
38 "ikeOutCrChildRsp",
39 "ikeInInfoReq",
40 "ikeInInfoRsp",
41 "ikeOutInfoReq",
42 "ikeOutInfoRsp",
43 );
44
45 typedef struct private_stroke_counter_t private_stroke_counter_t;
46
47 /**
48 * Private data of an stroke_counter_t object.
49 */
50 struct private_stroke_counter_t {
51
52 /**
53 * Public stroke_counter_t interface.
54 */
55 stroke_counter_t public;
56
57 /**
58 * Counter values
59 */
60 u_int64_t counter[COUNTER_MAX];
61
62 /**
63 * Lock for counter values
64 */
65 spinlock_t *lock;
66 };
67
68 METHOD(stroke_counter_t, destroy, void,
69 private_stroke_counter_t *this)
70 {
71 this->lock->destroy(this->lock);
72 free(this);
73 }
74
75 /**
76 * See header
77 */
78 stroke_counter_t *stroke_counter_create()
79 {
80 private_stroke_counter_t *this;
81
82 INIT(this,
83 .public = {
84 .destroy = _destroy,
85 },
86 .lock = spinlock_create(),
87 );
88
89 return &this->public;
90 }