Annotation of embedaddon/strongswan/src/libcharon/plugins/stroke/stroke_counter.c, revision 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>