blob: bb37453a393cfd1077403169c9ec7725b62c0ccc [file] [log] [blame]
kartikey dubeye1545422019-05-22 12:53:45 +00001/*
2 * Copyright 2018-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.opencord.aaa;
18
Jonathan Hartc41227c2020-01-28 16:56:49 -080019import com.google.common.base.MoreObjects;
20import com.google.common.collect.ImmutableMap;
21
Matteo Scandoloe033c262020-10-14 11:37:39 -070022import java.util.Arrays;
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +000023import java.util.LinkedList;
kartikey dubeye1545422019-05-22 12:53:45 +000024import java.util.concurrent.atomic.AtomicLong;
Matteo Scandoloe033c262020-10-14 11:37:39 -070025import java.util.stream.Stream;
kartikey dubeye1545422019-05-22 12:53:45 +000026
Jonathan Hartc41227c2020-01-28 16:56:49 -080027/**
28 * Records metrics for the AAA application.
29 */
kartikey dubeye1545422019-05-22 12:53:45 +000030public class AaaStatistics {
Andrea Campanella76ae68d2020-10-14 11:16:37 +020031 public static final String RADIUS_ACCEPT_RESPONSES_RX = "radiusAccessAcceptRx";
32 public static final String RADIUS_REJECT_RESPONSES_RX = "radiusRejectResponsesRx";
33 public static final String RADIUS_CHALLENGE_RESPONSES_RX = "radiusAccessChallengeRx";
34 public static final String RADIUS_ACCESS_REQUESTS_TX = "radiusAccessRequestTx";
35 public static final String RADIUS_ACCESS_REQUESTS_IDENTITY_TX = "radiusAccessRequestIdentityTx";
36 public static final String RADIUS_ACCESS_REQUESTS_CHALLENGE_TX = "radiusAccessRequestChallengeTx";
37 public static final String RADIUS_PENDING_REQUESTS = "radiusPendingRequests";
Jonathan Hartc41227c2020-01-28 16:56:49 -080038 public static final String TIMED_OUT_PACKETS = "timedOutPackets";
39 public static final String UNKNOWN_TYPE_RX = "unknownTypeRx";
40 public static final String INVALID_VALIDATORS_RX = "invalidValidatorsRx";
41 public static final String DROPPED_RESPONSES_RX = "droppedResponsesRx";
42 public static final String MALFORMED_RESPONSES_RX = "malformedResponsesRx";
43 public static final String UNKNOWN_SERVER_RX = "unknownServerRx";
44 public static final String REQUEST_RTT_MILLIS = "requestRttMillis";
45 public static final String REQUEST_RE_TX = "requestReTx";
46 public static final String NUM_SESSIONS_EXPIRED = "numSessionsExpired";
47 public static final String EAPOL_LOGOFF_RX = "eapolLogoffRx";
Andrea Campanella76ae68d2020-10-14 11:16:37 +020048 public static final String EAPOL_AUTH_SUCCESS_TX = "eapolAuthSuccessTx";
49 public static final String EAPOL_AUTH_FAILURE_TX = "eapolAuthFailureTrans";
50 public static final String EAPOL_START_REQ_RX = "eapolStartRequestRx";
51 public static final String EAPOL_MD5_CHALLENGE_RESP_RX = "eapolMd5ChallengeResponseRx";
52 public static final String EAPOL_TLS_CHALLENGE_RESP = "eapolTlsRespChallenge";
Jonathan Hartc41227c2020-01-28 16:56:49 -080053 public static final String EAPOL_TRANS_RESP_NOT_NAK = "eapolTransRespNotNak";
Andrea Campanella76ae68d2020-10-14 11:16:37 +020054 public static final String EAPOL_CHALLENGE_REQ_TX = "eapolChallengeRequestTx";
55 public static final String EAPOL_ID_RESP_FRAMES_RX = "eapolIdentityResponseRx";
56 public static final String EAPOL_ID_MSG_RESP_TX = "eapolIdentityMsgResponseTx";
Jonathan Hartc41227c2020-01-28 16:56:49 -080057 public static final String EAPOL_FRAMES_TX = "eapolFramesTx";
58 public static final String AUTH_STATE_IDLE = "authStateIdle";
Andrea Campanella76ae68d2020-10-14 11:16:37 +020059 public static final String EAPOL_ID_REQUEST_FRAMES_TX = "eapolIdentityRequestTx";
Matteo Scandoloe033c262020-10-14 11:37:39 -070060 public static final String EAPOL_REQUEST_FRAMES_TX = "eapolRequestAuthTx";
Jonathan Hartc41227c2020-01-28 16:56:49 -080061 public static final String INVALID_PKT_TYPE = "invalidPktType";
62 public static final String INVALID_BODY_LENGTH = "invalidBodyLength";
Andrea Campanella76ae68d2020-10-14 11:16:37 +020063 public static final String EAPOL_VALID_FRAMES_RX = "eapolValidFramesRx";
64 public static final String EAPOL_PENDING_REQUESTS = "eapolPendingRequests";
Jonathan Hartc41227c2020-01-28 16:56:49 -080065
Matteo Scandoloe033c262020-10-14 11:37:39 -070066 // this are the stats that represent a successful EAPOL exchange
67 public static final String[] EAPOL_SM_NAMES = new String[]{
68 EAPOL_START_REQ_RX,
69
70 EAPOL_ID_REQUEST_FRAMES_TX,
71 EAPOL_ID_RESP_FRAMES_RX,
72
Andrea Campanella76ae68d2020-10-14 11:16:37 +020073 RADIUS_ACCESS_REQUESTS_IDENTITY_TX,
Matteo Scandoloe033c262020-10-14 11:37:39 -070074 RADIUS_CHALLENGE_RESPONSES_RX,
75
76 EAPOL_CHALLENGE_REQ_TX,
77 EAPOL_MD5_CHALLENGE_RESP_RX,
78
Andrea Campanella76ae68d2020-10-14 11:16:37 +020079 RADIUS_ACCESS_REQUESTS_CHALLENGE_TX,
Matteo Scandoloe033c262020-10-14 11:37:39 -070080 RADIUS_ACCEPT_RESPONSES_RX,
81
82 EAPOL_AUTH_SUCCESS_TX,
83 };
84
85 // all other EAPOL Stats
86 public static final String[] EAPOL_STATS_NAMES = new String[]{
87 EAPOL_REQUEST_FRAMES_TX,
88 RADIUS_ACCESS_REQUESTS_TX,
89 RADIUS_REJECT_RESPONSES_RX,
Andrea Campanella76ae68d2020-10-14 11:16:37 +020090 RADIUS_PENDING_REQUESTS,
Jonathan Hartc41227c2020-01-28 16:56:49 -080091 TIMED_OUT_PACKETS,
92 UNKNOWN_TYPE_RX,
93 INVALID_VALIDATORS_RX,
94 DROPPED_RESPONSES_RX,
95 MALFORMED_RESPONSES_RX,
96 UNKNOWN_SERVER_RX,
97 REQUEST_RTT_MILLIS,
98 REQUEST_RE_TX,
99 NUM_SESSIONS_EXPIRED,
100 EAPOL_LOGOFF_RX,
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200101 EAPOL_AUTH_FAILURE_TX,
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200102 EAPOL_TLS_CHALLENGE_RESP,
Jonathan Hartc41227c2020-01-28 16:56:49 -0800103 EAPOL_TRANS_RESP_NOT_NAK,
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200104 EAPOL_ID_MSG_RESP_TX,
Jonathan Hartc41227c2020-01-28 16:56:49 -0800105 EAPOL_FRAMES_TX,
106 AUTH_STATE_IDLE,
Jonathan Hartc41227c2020-01-28 16:56:49 -0800107 INVALID_PKT_TYPE,
108 INVALID_BODY_LENGTH,
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200109 EAPOL_VALID_FRAMES_RX,
110 EAPOL_PENDING_REQUESTS,
Jonathan Hartc41227c2020-01-28 16:56:49 -0800111 };
112
Matteo Scandoloe033c262020-10-14 11:37:39 -0700113 public static final String[] COUNTER_NAMES =
114 Stream.concat(Arrays.stream(EAPOL_SM_NAMES), Arrays.stream(EAPOL_STATS_NAMES))
115 .toArray(String[]::new);
116
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000117 // Number of access accept packets sent to the server
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200118 private AtomicLong radiusAcceptResponsesRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000119 // Number of access reject packets sent to the server
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200120 private AtomicLong radiusRejectResponsesRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000121 // Number of access challenge packets sent to the server
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200122 private AtomicLong radiusChallengeResponsesRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000123 // Number of access request packets sent to the server
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200124 private AtomicLong radiusAccessRequestsTx = new AtomicLong();
125 // Number of identity request packets sent to the server
126 private AtomicLong radiusAccessRequestsIdentityTx = new AtomicLong();
127 // Number of challenge request packets sent to the server
128 private AtomicLong radiusAccessRequestsChallengeTx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000129 // Number of access request packets pending a response from the server
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200130 private AtomicLong radiusPendingRequests = new AtomicLong();
Shubham Sharma1e43c562019-06-19 14:18:12 +0000131 // Number of packets send to the server which timed out.
132 private AtomicLong timedOutPackets = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000133 // Number of packets of an unknown RADIUS type received from the accounting
134 // server
kartikey dubeye1545422019-05-22 12:53:45 +0000135 private AtomicLong unknownTypeRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000136 // Number of access response packets received from the server with an invalid
137 // validator
kartikey dubeye1545422019-05-22 12:53:45 +0000138 private AtomicLong invalidValidatorsRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000139 // Number of dropped packets received from the accounting server
kartikey dubeye1545422019-05-22 12:53:45 +0000140 private AtomicLong droppedResponsesRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000141 // Number of malformed access response packets received from the server
kartikey dubeye1545422019-05-22 12:53:45 +0000142 private AtomicLong malformedResponsesRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000143 // Number of packets received from an unknown server
kartikey dubeye1545422019-05-22 12:53:45 +0000144 private AtomicLong unknownServerRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000145 // Roundtrip packet time to the accounting server
kartikey dubeye1545422019-05-22 12:53:45 +0000146 private AtomicLong requestRttMilis = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000147 // Number of access request packets retransmitted to the server
kartikey dubeye1545422019-05-22 12:53:45 +0000148 private AtomicLong requestReTx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000149 // Number of sessions expired
kartikey dubeye1545422019-05-22 12:53:45 +0000150 private AtomicLong numberOfSessionsExpired = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000151 //Number of EAPOL logoff messages received resulting in disconnected state
152 private AtomicLong eapolLogoffRx = new AtomicLong();
153 //Number of authenticated transitions due to successful authentication
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200154 private AtomicLong eapolAuthSuccessTx = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000155 //Number of transitions to held due to authentication failure
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200156 private AtomicLong eapolAuthFailureTx = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000157 //Number of transitions to connecting due to start request
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200158 private AtomicLong eapolStartReqRx = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000159 //MD5 Response Challenge
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200160 private AtomicLong eapolMd5ChallRespRx = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000161 //Tls Response Challenge
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200162 private AtomicLong eapolTlsChallResp = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000163 //Number of transitions to response (received response other that NAK)
164 private AtomicLong eapolTransRespNotNak = new AtomicLong();
165 //Number of EAP request packets sent due to the authenticator choosing the EAP method
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200166 private AtomicLong eapolChallengeReqTx = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000167 //Attr Identity
168 private AtomicLong eapolAttrIdentity = new AtomicLong();
169 //Number of authenticating transitions due to EAP response or identity message
170 private AtomicLong eapolResIdentityMsgTrans = new AtomicLong();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000171 //Current number of EAPOL frames transmitted
172 private AtomicLong eapolFramesTx = new AtomicLong();
173 //Authenticator state when idle
174 private AtomicLong authStateIdle = new AtomicLong();
175 //Number of request ID EAP frames transmitted
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200176 private AtomicLong eapolIdRequestFramesTx = new AtomicLong();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000177 //Current number of request EAP frames transmitted
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200178 private AtomicLong eapolReqFramesTx = new AtomicLong();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000179 //Number of EAPOL frames received with invalid packet type
180 private AtomicLong invalidPktType = new AtomicLong();
181 //Number of EAPOL frames received with invalid body length
182 private AtomicLong invalidBodyLength = new AtomicLong();
183 //number of valid EAPOL frames received
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200184 private AtomicLong eapolValidFramesRx = new AtomicLong();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000185 //Number of request pending response from supplicant
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200186 private AtomicLong eapolPendingReq = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000187
188 public Long getEapolResIdentityMsgTrans() {
189 return eapolResIdentityMsgTrans.get();
190 }
191
192 public Long getEapolattrIdentity() {
193 return eapolAttrIdentity.get();
194 }
195
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200196 public Long getEapolChallengeReqTx() {
197 return eapolChallengeReqTx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000198 }
199
200 public Long getEapolTransRespNotNak() {
201 return eapolTransRespNotNak.get();
202 }
203
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200204 public Long getEapolMd5ChallRespRx() {
205 return eapolMd5ChallRespRx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000206 }
207
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200208 public Long getEapolTlsChallResp() {
209 return eapolTlsChallResp.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000210 }
211
212 public Long getEapolLogoffRx() {
213 return eapolLogoffRx.get();
214 }
215
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200216 public Long getEapolAuthSuccessTx() {
217 return eapolAuthSuccessTx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000218 }
219
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200220 public Long getEapolAuthFailureTx() {
221 return eapolAuthFailureTx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000222 }
223
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200224 public Long getEapolStartReqRx() {
225 return eapolStartReqRx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000226 }
kartikey dubeye1545422019-05-22 12:53:45 +0000227
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000228 private LinkedList<Long> packetRoundTripTimeList = new LinkedList<Long>();
229
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200230 public Long getEapolPendingReq() {
231 return eapolPendingReq.get();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000232 }
233
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200234 public Long getEapolValidFramesRx() {
235 return eapolValidFramesRx.get();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000236 }
237
238 public Long getInvalidBodyLength() {
239 return invalidBodyLength.get();
240 }
241
242 public Long getInvalidPktType() {
243 return invalidPktType.get();
244 }
245
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200246 public Long getEapolIdRequestFramesTx() {
247 return eapolIdRequestFramesTx.get();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000248 }
249
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200250 public Long getEapolReqFramesTx() {
251 return eapolReqFramesTx.get();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000252 }
253
254 public Long getAuthStateIdle() {
255 return authStateIdle.get();
256 }
257
258 public Long getEapolFramesTx() {
259 return eapolFramesTx.get();
260 }
261
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000262 public LinkedList<Long> getPacketRoundTripTimeList() {
263 return packetRoundTripTimeList;
264 }
265
266 public int getPacketRoundTripTimeListSize() {
267 return packetRoundTripTimeList.size();
268 }
269
270 public void clearPacketRoundTripTimeList() {
271 packetRoundTripTimeList.clear();
272 }
273
274 public void getPacketRoundTripTimeListRemoveFirst() {
275 packetRoundTripTimeList.removeFirst();
276 }
277
278 public void getPacketRoundTripTimeListAdd(long time) {
279 packetRoundTripTimeList.add(time);
280 }
281
kartikey dubeye1545422019-05-22 12:53:45 +0000282 public Long getRequestReTx() {
283 return requestReTx.get();
284 }
285
286 public void setRequestRttMilis(AtomicLong requestRttMilis) {
287 this.requestRttMilis = requestRttMilis;
288 }
289
290 public Long getUnknownServerRx() {
291 return unknownServerRx.get();
292 }
293
294 public Long getRequestRttMilis() {
295 return requestRttMilis.get();
296 }
297
298 public Long getMalformedResponsesRx() {
299 return malformedResponsesRx.get();
300 }
301
302 public Long getDroppedResponsesRx() {
303 return droppedResponsesRx.get();
304 }
305
306 public Long getInvalidValidatorsRx() {
307 return invalidValidatorsRx.get();
308 }
309
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200310 public Long getRadiusAcceptResponsesRx() {
311 return radiusAcceptResponsesRx.get();
kartikey dubeye1545422019-05-22 12:53:45 +0000312 }
313
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200314 public Long getRadiusRejectResponsesRx() {
315 return radiusRejectResponsesRx.get();
kartikey dubeye1545422019-05-22 12:53:45 +0000316 }
317
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200318 public Long getRadiusChallengeResponsesRx() {
319 return radiusChallengeResponsesRx.get();
kartikey dubeye1545422019-05-22 12:53:45 +0000320 }
321
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200322 public Long getRadiusAccessRequestsTx() {
323 return radiusAccessRequestsTx.get();
kartikey dubeye1545422019-05-22 12:53:45 +0000324 }
325
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200326 public Long getRadiusPendingRequests() {
327 return radiusPendingRequests.get();
kartikey dubeye1545422019-05-22 12:53:45 +0000328 }
329
330 public Long getUnknownTypeRx() {
331 return unknownTypeRx.get();
332 }
333
334 public void increaseAcceptResponsesRx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200335 radiusAcceptResponsesRx.incrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000336 }
337
338 public void increaseRejectResponsesRx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200339 radiusRejectResponsesRx.incrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000340 }
341
342 public void increaseChallengeResponsesRx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200343 radiusChallengeResponsesRx.incrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000344 }
345
346 public void increaseAccessRequestsTx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200347 radiusAccessRequestsTx.incrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000348 }
349
350 public void increaseRequestReTx() {
351 requestReTx.incrementAndGet();
352 }
353
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000354 public void incrementInvalidPktType() {
355 invalidPktType.incrementAndGet();
356 }
357
kartikey dubeye1545422019-05-22 12:53:45 +0000358 public void increaseOrDecreasePendingRequests(boolean isIncrement) {
359 if (isIncrement) {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200360 radiusPendingRequests.incrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000361 } else {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200362 radiusPendingRequests.decrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000363 }
364 }
365
366 public void increaseUnknownTypeRx() {
367 unknownTypeRx.incrementAndGet();
368 }
369
370 public void increaseMalformedResponsesRx() {
371 malformedResponsesRx.incrementAndGet();
372 }
373
374 public void increaseInvalidValidatorsRx() {
375 invalidValidatorsRx.incrementAndGet();
376 }
377
378 public void incrementUnknownServerRx() {
379 unknownServerRx.incrementAndGet();
380 }
381
382 public void incrementNumberOfSessionsExpired() {
383 numberOfSessionsExpired.incrementAndGet();
384 }
385
Shubham Sharma1f193582019-07-11 12:12:41 +0000386 public void incrementEapolLogoffRx() {
387 eapolLogoffRx.incrementAndGet();
388 }
389
390 public void incrementEapolAuthSuccessTrans() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200391 eapolAuthSuccessTx.incrementAndGet();
Shubham Sharma1f193582019-07-11 12:12:41 +0000392 }
393
394 public void incrementEapolauthFailureTrans() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200395 eapolAuthFailureTx.incrementAndGet();
Shubham Sharma1f193582019-07-11 12:12:41 +0000396 }
397
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200398 public void incrementEapolStartReqRx() {
399 eapolStartReqRx.incrementAndGet();
Shubham Sharma1f193582019-07-11 12:12:41 +0000400 }
401
402 public void incrementEapolMd5RspChall() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200403 eapolMd5ChallRespRx.incrementAndGet();
Shubham Sharma1f193582019-07-11 12:12:41 +0000404 }
405
406 public void incrementEapolAtrrIdentity() {
407 eapolAttrIdentity.incrementAndGet();
408 }
409
410 public void incrementEapolTlsRespChall() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200411 eapolTlsChallResp.incrementAndGet();
Shubham Sharma1f193582019-07-11 12:12:41 +0000412 }
413
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000414 public void incrementEapolFramesTx() {
415 eapolFramesTx.incrementAndGet();
416 }
417
418 public void incrementAuthStateIdle() {
419 authStateIdle.incrementAndGet();
420 }
421
422 public void incrementRequestIdFramesTx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200423 eapolIdRequestFramesTx.incrementAndGet();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000424 }
425
426 public void incrementInvalidBodyLength() {
427 invalidBodyLength.incrementAndGet();
428 }
429
430 public void incrementValidEapolFramesRx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200431 eapolValidFramesRx.incrementAndGet();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000432 }
433
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200434 public void incrementPendingReqSupp() {
435 eapolPendingReq.incrementAndGet();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000436 }
437
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200438 public void decrementPendingReqSupp() {
439 eapolPendingReq.decrementAndGet();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000440 }
441
kartikey dubeye1545422019-05-22 12:53:45 +0000442 public void countDroppedResponsesRx() {
443 long numberOfDroppedPackets = invalidValidatorsRx.get();
444 numberOfDroppedPackets += unknownTypeRx.get();
445 numberOfDroppedPackets += malformedResponsesRx.get();
446 numberOfDroppedPackets += numberOfSessionsExpired.get();
447 this.droppedResponsesRx = new AtomicLong(numberOfDroppedPackets);
448 }
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000449
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000450 public void countReqEapFramesTx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200451 long noReqEapFramesTx = eapolIdRequestFramesTx.get();
452 noReqEapFramesTx += radiusChallengeResponsesRx.get();
453 this.eapolReqFramesTx = new AtomicLong(noReqEapFramesTx);
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000454 }
455
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000456 public void resetAllCounters() {
457 clearPacketRoundTripTimeList();
458
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200459 radiusAccessRequestsTx.set(0);
460 radiusAccessRequestsIdentityTx.set(0);
461 radiusAccessRequestsChallengeTx.set(0);
462 radiusAcceptResponsesRx.set(0);
463 radiusChallengeResponsesRx.set(0);
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000464 droppedResponsesRx.set(0);
465 invalidValidatorsRx.set(0);
466 malformedResponsesRx.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200467 radiusPendingRequests.set(0);
468 radiusRejectResponsesRx.set(0);
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000469 requestReTx.set(0);
470 requestRttMilis.set(0);
471 unknownServerRx.set(0);
472 unknownTypeRx.set(0);
Shubham Sharmac7fbd9f2019-11-25 10:04:30 +0000473 eapolLogoffRx.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200474 eapolAuthSuccessTx.set(0);
475 eapolAuthFailureTx.set(0);
476 eapolStartReqRx.set(0);
Shubham Sharmac7fbd9f2019-11-25 10:04:30 +0000477 eapolTransRespNotNak.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200478 eapolChallengeReqTx.set(0);
Shubham Sharmac7fbd9f2019-11-25 10:04:30 +0000479 eapolResIdentityMsgTrans.set(0);
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000480 eapolFramesTx.set(0);
481 authStateIdle.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200482 eapolIdRequestFramesTx.set(0);
483 eapolReqFramesTx.set(0);
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000484 invalidPktType.set(0);
485 invalidBodyLength.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200486 eapolValidFramesRx.set(0);
487 eapolPendingReq.set(0);
Shubham Sharma3d54e632019-11-29 07:20:48 +0000488 timedOutPackets.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200489 eapolMd5ChallRespRx.set(0);
490 eapolTlsChallResp.set(0);
Jonathan Hartc41227c2020-01-28 16:56:49 -0800491 eapolAttrIdentity.set(0);
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000492 }
Jonathan Hartc41227c2020-01-28 16:56:49 -0800493
Shubham Sharma1f193582019-07-11 12:12:41 +0000494 public void countTransRespNotNak() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200495 long eapolTransactionNotNak = eapolMd5ChallRespRx.get();
496 eapolTransactionNotNak += eapolTlsChallResp.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000497 this.eapolTransRespNotNak = new AtomicLong(eapolTransactionNotNak);
498 }
499
500 public void countEapolResIdentityMsgTrans() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200501 long authTransaction = eapolMd5ChallRespRx.get();
502 authTransaction += eapolTlsChallResp.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000503 authTransaction += eapolAttrIdentity.get();
504 this.eapolResIdentityMsgTrans = new AtomicLong(authTransaction);
505 }
506
507 public void incrementEapPktTxauthEap() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200508 eapolChallengeReqTx.incrementAndGet();
509 }
510
511 public void incrementRadiusReqIdTx() {
512 radiusAccessRequestsIdentityTx.incrementAndGet();
513 }
514
515 public void incrementRadiusReqChallengeTx() {
516 radiusAccessRequestsChallengeTx.incrementAndGet();
517 }
518
519 public Long getRadiusReqIdTx() {
520 return radiusAccessRequestsIdentityTx.get();
521 }
522
523 public Long getRadiusReqChallengeTx() {
524 return radiusAccessRequestsChallengeTx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000525 }
Shubham Sharma1e43c562019-06-19 14:18:12 +0000526
527 public long getTimedOutPackets() {
528 return timedOutPackets.get();
529 }
530
531 public void increaseTimedOutPackets() {
532 timedOutPackets.incrementAndGet();
533 }
534
Jonathan Hartc41227c2020-01-28 16:56:49 -0800535 /**
536 * Creates a snapshot of the current values of the counters.
537 *
538 * @return statistics snapshot
539 */
540 public AaaStatisticsSnapshot snapshot() {
541 ImmutableMap.Builder<String, Long> builder = ImmutableMap.builder();
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200542 builder.put(RADIUS_ACCEPT_RESPONSES_RX, radiusAcceptResponsesRx.get())
543 .put(RADIUS_REJECT_RESPONSES_RX, radiusRejectResponsesRx.get())
544 .put(RADIUS_CHALLENGE_RESPONSES_RX, radiusChallengeResponsesRx.get())
545 .put(RADIUS_ACCESS_REQUESTS_TX, radiusAccessRequestsTx.get())
546 .put(RADIUS_ACCESS_REQUESTS_IDENTITY_TX, radiusAccessRequestsIdentityTx.get())
547 .put(RADIUS_ACCESS_REQUESTS_CHALLENGE_TX, radiusAccessRequestsChallengeTx.get())
548 .put(RADIUS_PENDING_REQUESTS, radiusPendingRequests.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800549 .put(TIMED_OUT_PACKETS, timedOutPackets.get())
550 .put(UNKNOWN_TYPE_RX, unknownTypeRx.get())
551 .put(INVALID_VALIDATORS_RX, invalidValidatorsRx.get())
552 .put(DROPPED_RESPONSES_RX, droppedResponsesRx.get())
553 .put(MALFORMED_RESPONSES_RX, malformedResponsesRx.get())
554 .put(UNKNOWN_SERVER_RX, unknownServerRx.get())
555 .put(REQUEST_RTT_MILLIS, requestRttMilis.get())
556 .put(REQUEST_RE_TX, requestReTx.get())
557 .put(NUM_SESSIONS_EXPIRED, numberOfSessionsExpired.get())
558 .put(EAPOL_LOGOFF_RX, eapolLogoffRx.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200559 .put(EAPOL_AUTH_SUCCESS_TX, eapolAuthSuccessTx.get())
560 .put(EAPOL_AUTH_FAILURE_TX, eapolAuthFailureTx.get())
561 .put(EAPOL_START_REQ_RX, eapolStartReqRx.get())
562 .put(EAPOL_MD5_CHALLENGE_RESP_RX, eapolMd5ChallRespRx.get())
563 .put(EAPOL_TLS_CHALLENGE_RESP, eapolTlsChallResp.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800564 .put(EAPOL_TRANS_RESP_NOT_NAK, eapolTransRespNotNak.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200565 .put(EAPOL_CHALLENGE_REQ_TX, eapolChallengeReqTx.get())
566 .put(EAPOL_ID_RESP_FRAMES_RX, eapolAttrIdentity.get())
567 .put(EAPOL_ID_MSG_RESP_TX, eapolResIdentityMsgTrans.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800568 .put(EAPOL_FRAMES_TX, eapolFramesTx.get())
569 .put(AUTH_STATE_IDLE, authStateIdle.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200570 .put(EAPOL_ID_REQUEST_FRAMES_TX, eapolIdRequestFramesTx.get())
571 .put(EAPOL_REQUEST_FRAMES_TX, eapolReqFramesTx.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800572 .put(INVALID_PKT_TYPE, invalidPktType.get())
573 .put(INVALID_BODY_LENGTH, invalidBodyLength.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200574 .put(EAPOL_VALID_FRAMES_RX, eapolValidFramesRx.get())
575 .put(EAPOL_PENDING_REQUESTS, eapolPendingReq.get());
Jonathan Hartc41227c2020-01-28 16:56:49 -0800576
577 return new AaaStatisticsSnapshot(builder.build());
578 }
579
580 public static AaaStatistics fromSnapshot(AaaStatisticsSnapshot snapshot) {
581 AaaStatistics stats = new AaaStatistics();
582
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200583 stats.radiusAcceptResponsesRx.set(snapshot.get(RADIUS_ACCEPT_RESPONSES_RX));
584 stats.radiusRejectResponsesRx.set(snapshot.get(RADIUS_REJECT_RESPONSES_RX));
585 stats.radiusChallengeResponsesRx.set(snapshot.get(RADIUS_CHALLENGE_RESPONSES_RX));
586 stats.radiusAccessRequestsTx.set(snapshot.get(RADIUS_ACCESS_REQUESTS_TX));
587 stats.radiusAccessRequestsIdentityTx.set(snapshot.get(RADIUS_ACCESS_REQUESTS_IDENTITY_TX));
588 stats.radiusAccessRequestsChallengeTx.set(snapshot.get(RADIUS_ACCESS_REQUESTS_CHALLENGE_TX));
589 stats.radiusPendingRequests.set(snapshot.get(RADIUS_PENDING_REQUESTS));
Jonathan Hartc41227c2020-01-28 16:56:49 -0800590 stats.timedOutPackets.set(snapshot.get(TIMED_OUT_PACKETS));
591 stats.unknownTypeRx.set(snapshot.get(UNKNOWN_TYPE_RX));
592 stats.invalidValidatorsRx.set(snapshot.get(INVALID_VALIDATORS_RX));
593 stats.droppedResponsesRx.set(snapshot.get(DROPPED_RESPONSES_RX));
594 stats.malformedResponsesRx.set(snapshot.get(MALFORMED_RESPONSES_RX));
595 stats.unknownServerRx.set(snapshot.get(UNKNOWN_SERVER_RX));
596 stats.requestRttMilis.set(snapshot.get(REQUEST_RTT_MILLIS));
597 stats.requestReTx.set(snapshot.get(REQUEST_RE_TX));
598 stats.numberOfSessionsExpired.set(snapshot.get(NUM_SESSIONS_EXPIRED));
599 stats.eapolLogoffRx.set(snapshot.get(EAPOL_LOGOFF_RX));
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200600 stats.eapolAuthSuccessTx.set(snapshot.get(EAPOL_AUTH_SUCCESS_TX));
601 stats.eapolAuthFailureTx.set(snapshot.get(EAPOL_AUTH_FAILURE_TX));
602 stats.eapolStartReqRx.set(snapshot.get(EAPOL_START_REQ_RX));
603 stats.eapolMd5ChallRespRx.set(snapshot.get(EAPOL_MD5_CHALLENGE_RESP_RX));
604 stats.eapolTlsChallResp.set(snapshot.get(EAPOL_TLS_CHALLENGE_RESP));
Jonathan Hartc41227c2020-01-28 16:56:49 -0800605 stats.eapolTransRespNotNak.set(snapshot.get(EAPOL_TRANS_RESP_NOT_NAK));
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200606 stats.eapolChallengeReqTx.set(snapshot.get(EAPOL_CHALLENGE_REQ_TX));
607 stats.eapolAttrIdentity.set(snapshot.get(EAPOL_ID_RESP_FRAMES_RX));
608 stats.eapolResIdentityMsgTrans.set(snapshot.get(EAPOL_ID_MSG_RESP_TX));
Jonathan Hartc41227c2020-01-28 16:56:49 -0800609 stats.eapolFramesTx.set(snapshot.get(EAPOL_FRAMES_TX));
610 stats.authStateIdle.set(snapshot.get(AUTH_STATE_IDLE));
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200611 stats.eapolIdRequestFramesTx.set(snapshot.get(EAPOL_ID_REQUEST_FRAMES_TX));
612 stats.eapolReqFramesTx.set(snapshot.get(EAPOL_REQUEST_FRAMES_TX));
Jonathan Hartc41227c2020-01-28 16:56:49 -0800613 stats.invalidPktType.set(snapshot.get(INVALID_PKT_TYPE));
614 stats.invalidBodyLength.set(snapshot.get(INVALID_BODY_LENGTH));
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200615 stats.eapolValidFramesRx.set(snapshot.get(EAPOL_VALID_FRAMES_RX));
616 stats.eapolPendingReq.set(snapshot.get(EAPOL_PENDING_REQUESTS));
Jonathan Hartc41227c2020-01-28 16:56:49 -0800617
618 return stats;
619 }
620
621 public String toString() {
622 MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(this.getClass());
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200623 helper.add(RADIUS_ACCEPT_RESPONSES_RX, radiusAcceptResponsesRx.get())
624 .add(RADIUS_REJECT_RESPONSES_RX, radiusRejectResponsesRx.get())
625 .add(RADIUS_CHALLENGE_RESPONSES_RX, radiusChallengeResponsesRx.get())
626 .add(RADIUS_ACCESS_REQUESTS_TX, radiusAccessRequestsTx.get())
627 .add(RADIUS_ACCESS_REQUESTS_IDENTITY_TX, radiusAccessRequestsIdentityTx.get())
628 .add(RADIUS_ACCESS_REQUESTS_CHALLENGE_TX, radiusAccessRequestsChallengeTx.get())
629 .add(RADIUS_PENDING_REQUESTS, radiusPendingRequests.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800630 .add(TIMED_OUT_PACKETS, timedOutPackets.get())
631 .add(UNKNOWN_TYPE_RX, unknownTypeRx.get())
632 .add(INVALID_VALIDATORS_RX, invalidValidatorsRx.get())
633 .add(DROPPED_RESPONSES_RX, droppedResponsesRx.get())
634 .add(MALFORMED_RESPONSES_RX, malformedResponsesRx.get())
635 .add(UNKNOWN_SERVER_RX, unknownServerRx.get())
636 .add(REQUEST_RTT_MILLIS, requestRttMilis.get())
637 .add(REQUEST_RE_TX, requestReTx.get())
638 .add(NUM_SESSIONS_EXPIRED, numberOfSessionsExpired.get())
639 .add(EAPOL_LOGOFF_RX, eapolLogoffRx.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200640 .add(EAPOL_AUTH_SUCCESS_TX, eapolAuthSuccessTx.get())
641 .add(EAPOL_AUTH_FAILURE_TX, eapolAuthFailureTx.get())
642 .add(EAPOL_START_REQ_RX, eapolStartReqRx.get())
643 .add(EAPOL_MD5_CHALLENGE_RESP_RX, eapolMd5ChallRespRx.get())
644 .add(EAPOL_TLS_CHALLENGE_RESP, eapolTlsChallResp.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800645 .add(EAPOL_TRANS_RESP_NOT_NAK, eapolTransRespNotNak.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200646 .add(EAPOL_CHALLENGE_REQ_TX, eapolChallengeReqTx.get())
647 .add(EAPOL_ID_RESP_FRAMES_RX, eapolAttrIdentity.get())
648 .add(EAPOL_ID_MSG_RESP_TX, eapolResIdentityMsgTrans.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800649 .add(EAPOL_FRAMES_TX, eapolFramesTx.get())
650 .add(AUTH_STATE_IDLE, authStateIdle.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200651 .add(EAPOL_ID_REQUEST_FRAMES_TX, eapolIdRequestFramesTx.get())
652 .add(EAPOL_REQUEST_FRAMES_TX, eapolReqFramesTx.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800653 .add(INVALID_PKT_TYPE, invalidPktType.get())
654 .add(INVALID_BODY_LENGTH, invalidBodyLength.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200655 .add(EAPOL_VALID_FRAMES_RX, eapolValidFramesRx.get())
656 .add(EAPOL_PENDING_REQUESTS, eapolPendingReq.get());
Jonathan Hartc41227c2020-01-28 16:56:49 -0800657 return helper.toString();
658 }
kartikey dubeye1545422019-05-22 12:53:45 +0000659}