blob: 29809f40215adff01a960db3e4286eeb1a39028e [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
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +000022import java.util.LinkedList;
kartikey dubeye1545422019-05-22 12:53:45 +000023import java.util.concurrent.atomic.AtomicLong;
24
Jonathan Hartc41227c2020-01-28 16:56:49 -080025/**
26 * Records metrics for the AAA application.
27 */
kartikey dubeye1545422019-05-22 12:53:45 +000028public class AaaStatistics {
Andrea Campanella76ae68d2020-10-14 11:16:37 +020029 public static final String RADIUS_ACCEPT_RESPONSES_RX = "radiusAccessAcceptRx";
30 public static final String RADIUS_REJECT_RESPONSES_RX = "radiusRejectResponsesRx";
31 public static final String RADIUS_CHALLENGE_RESPONSES_RX = "radiusAccessChallengeRx";
32 public static final String RADIUS_ACCESS_REQUESTS_TX = "radiusAccessRequestTx";
33 public static final String RADIUS_ACCESS_REQUESTS_IDENTITY_TX = "radiusAccessRequestIdentityTx";
34 public static final String RADIUS_ACCESS_REQUESTS_CHALLENGE_TX = "radiusAccessRequestChallengeTx";
35 public static final String RADIUS_PENDING_REQUESTS = "radiusPendingRequests";
Jonathan Hartc41227c2020-01-28 16:56:49 -080036 public static final String TIMED_OUT_PACKETS = "timedOutPackets";
37 public static final String UNKNOWN_TYPE_RX = "unknownTypeRx";
38 public static final String INVALID_VALIDATORS_RX = "invalidValidatorsRx";
39 public static final String DROPPED_RESPONSES_RX = "droppedResponsesRx";
40 public static final String MALFORMED_RESPONSES_RX = "malformedResponsesRx";
41 public static final String UNKNOWN_SERVER_RX = "unknownServerRx";
42 public static final String REQUEST_RTT_MILLIS = "requestRttMillis";
43 public static final String REQUEST_RE_TX = "requestReTx";
44 public static final String NUM_SESSIONS_EXPIRED = "numSessionsExpired";
45 public static final String EAPOL_LOGOFF_RX = "eapolLogoffRx";
Andrea Campanella76ae68d2020-10-14 11:16:37 +020046 public static final String EAPOL_AUTH_SUCCESS_TX = "eapolAuthSuccessTx";
47 public static final String EAPOL_AUTH_FAILURE_TX = "eapolAuthFailureTrans";
48 public static final String EAPOL_START_REQ_RX = "eapolStartRequestRx";
49 public static final String EAPOL_MD5_CHALLENGE_RESP_RX = "eapolMd5ChallengeResponseRx";
50 public static final String EAPOL_TLS_CHALLENGE_RESP = "eapolTlsRespChallenge";
Jonathan Hartc41227c2020-01-28 16:56:49 -080051 public static final String EAPOL_TRANS_RESP_NOT_NAK = "eapolTransRespNotNak";
Andrea Campanella76ae68d2020-10-14 11:16:37 +020052 public static final String EAPOL_CHALLENGE_REQ_TX = "eapolChallengeRequestTx";
53 public static final String EAPOL_ID_RESP_FRAMES_RX = "eapolIdentityResponseRx";
54 public static final String EAPOL_ID_MSG_RESP_TX = "eapolIdentityMsgResponseTx";
Jonathan Hartc41227c2020-01-28 16:56:49 -080055 public static final String EAPOL_FRAMES_TX = "eapolFramesTx";
56 public static final String AUTH_STATE_IDLE = "authStateIdle";
Andrea Campanella76ae68d2020-10-14 11:16:37 +020057 public static final String EAPOL_ID_REQUEST_FRAMES_TX = "eapolIdentityRequestTx";
58 public static final String EAPOL_REQUEST_FRAMES_TX = "eapolRequestFramesTx"; //TODO check
Jonathan Hartc41227c2020-01-28 16:56:49 -080059 public static final String INVALID_PKT_TYPE = "invalidPktType";
60 public static final String INVALID_BODY_LENGTH = "invalidBodyLength";
Andrea Campanella76ae68d2020-10-14 11:16:37 +020061 public static final String EAPOL_VALID_FRAMES_RX = "eapolValidFramesRx";
62 public static final String EAPOL_PENDING_REQUESTS = "eapolPendingRequests";
Jonathan Hartc41227c2020-01-28 16:56:49 -080063
64 public static final String[] COUNTER_NAMES = new String[]{
Andrea Campanella76ae68d2020-10-14 11:16:37 +020065 RADIUS_ACCEPT_RESPONSES_RX,
66 RADIUS_REJECT_RESPONSES_RX,
67 RADIUS_CHALLENGE_RESPONSES_RX,
68 RADIUS_ACCESS_REQUESTS_TX,
69 RADIUS_ACCESS_REQUESTS_IDENTITY_TX,
70 RADIUS_ACCESS_REQUESTS_CHALLENGE_TX,
71 RADIUS_PENDING_REQUESTS,
Jonathan Hartc41227c2020-01-28 16:56:49 -080072 TIMED_OUT_PACKETS,
73 UNKNOWN_TYPE_RX,
74 INVALID_VALIDATORS_RX,
75 DROPPED_RESPONSES_RX,
76 MALFORMED_RESPONSES_RX,
77 UNKNOWN_SERVER_RX,
78 REQUEST_RTT_MILLIS,
79 REQUEST_RE_TX,
80 NUM_SESSIONS_EXPIRED,
81 EAPOL_LOGOFF_RX,
Andrea Campanella76ae68d2020-10-14 11:16:37 +020082 EAPOL_AUTH_SUCCESS_TX,
83 EAPOL_AUTH_FAILURE_TX,
84 EAPOL_START_REQ_RX,
85 EAPOL_MD5_CHALLENGE_RESP_RX,
86 EAPOL_TLS_CHALLENGE_RESP,
Jonathan Hartc41227c2020-01-28 16:56:49 -080087 EAPOL_TRANS_RESP_NOT_NAK,
Andrea Campanella76ae68d2020-10-14 11:16:37 +020088 EAPOL_CHALLENGE_REQ_TX,
89 EAPOL_ID_RESP_FRAMES_RX,
90 EAPOL_ID_MSG_RESP_TX,
Jonathan Hartc41227c2020-01-28 16:56:49 -080091 EAPOL_FRAMES_TX,
92 AUTH_STATE_IDLE,
Andrea Campanella76ae68d2020-10-14 11:16:37 +020093 EAPOL_ID_REQUEST_FRAMES_TX,
94 EAPOL_REQUEST_FRAMES_TX,
Jonathan Hartc41227c2020-01-28 16:56:49 -080095 INVALID_PKT_TYPE,
96 INVALID_BODY_LENGTH,
Andrea Campanella76ae68d2020-10-14 11:16:37 +020097 EAPOL_VALID_FRAMES_RX,
98 EAPOL_PENDING_REQUESTS,
Jonathan Hartc41227c2020-01-28 16:56:49 -080099 };
100
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000101 // Number of access accept packets sent to the server
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200102 private AtomicLong radiusAcceptResponsesRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000103 // Number of access reject packets sent to the server
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200104 private AtomicLong radiusRejectResponsesRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000105 // Number of access challenge packets sent to the server
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200106 private AtomicLong radiusChallengeResponsesRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000107 // Number of access request packets sent to the server
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200108 private AtomicLong radiusAccessRequestsTx = new AtomicLong();
109 // Number of identity request packets sent to the server
110 private AtomicLong radiusAccessRequestsIdentityTx = new AtomicLong();
111 // Number of challenge request packets sent to the server
112 private AtomicLong radiusAccessRequestsChallengeTx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000113 // Number of access request packets pending a response from the server
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200114 private AtomicLong radiusPendingRequests = new AtomicLong();
Shubham Sharma1e43c562019-06-19 14:18:12 +0000115 // Number of packets send to the server which timed out.
116 private AtomicLong timedOutPackets = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000117 // Number of packets of an unknown RADIUS type received from the accounting
118 // server
kartikey dubeye1545422019-05-22 12:53:45 +0000119 private AtomicLong unknownTypeRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000120 // Number of access response packets received from the server with an invalid
121 // validator
kartikey dubeye1545422019-05-22 12:53:45 +0000122 private AtomicLong invalidValidatorsRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000123 // Number of dropped packets received from the accounting server
kartikey dubeye1545422019-05-22 12:53:45 +0000124 private AtomicLong droppedResponsesRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000125 // Number of malformed access response packets received from the server
kartikey dubeye1545422019-05-22 12:53:45 +0000126 private AtomicLong malformedResponsesRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000127 // Number of packets received from an unknown server
kartikey dubeye1545422019-05-22 12:53:45 +0000128 private AtomicLong unknownServerRx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000129 // Roundtrip packet time to the accounting server
kartikey dubeye1545422019-05-22 12:53:45 +0000130 private AtomicLong requestRttMilis = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000131 // Number of access request packets retransmitted to the server
kartikey dubeye1545422019-05-22 12:53:45 +0000132 private AtomicLong requestReTx = new AtomicLong();
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000133 // Number of sessions expired
kartikey dubeye1545422019-05-22 12:53:45 +0000134 private AtomicLong numberOfSessionsExpired = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000135 //Number of EAPOL logoff messages received resulting in disconnected state
136 private AtomicLong eapolLogoffRx = new AtomicLong();
137 //Number of authenticated transitions due to successful authentication
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200138 private AtomicLong eapolAuthSuccessTx = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000139 //Number of transitions to held due to authentication failure
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200140 private AtomicLong eapolAuthFailureTx = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000141 //Number of transitions to connecting due to start request
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200142 private AtomicLong eapolStartReqRx = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000143 //MD5 Response Challenge
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200144 private AtomicLong eapolMd5ChallRespRx = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000145 //Tls Response Challenge
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200146 private AtomicLong eapolTlsChallResp = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000147 //Number of transitions to response (received response other that NAK)
148 private AtomicLong eapolTransRespNotNak = new AtomicLong();
149 //Number of EAP request packets sent due to the authenticator choosing the EAP method
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200150 private AtomicLong eapolChallengeReqTx = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000151 //Attr Identity
152 private AtomicLong eapolAttrIdentity = new AtomicLong();
153 //Number of authenticating transitions due to EAP response or identity message
154 private AtomicLong eapolResIdentityMsgTrans = new AtomicLong();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000155 //Current number of EAPOL frames transmitted
156 private AtomicLong eapolFramesTx = new AtomicLong();
157 //Authenticator state when idle
158 private AtomicLong authStateIdle = new AtomicLong();
159 //Number of request ID EAP frames transmitted
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200160 private AtomicLong eapolIdRequestFramesTx = new AtomicLong();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000161 //Current number of request EAP frames transmitted
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200162 private AtomicLong eapolReqFramesTx = new AtomicLong();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000163 //Number of EAPOL frames received with invalid packet type
164 private AtomicLong invalidPktType = new AtomicLong();
165 //Number of EAPOL frames received with invalid body length
166 private AtomicLong invalidBodyLength = new AtomicLong();
167 //number of valid EAPOL frames received
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200168 private AtomicLong eapolValidFramesRx = new AtomicLong();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000169 //Number of request pending response from supplicant
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200170 private AtomicLong eapolPendingReq = new AtomicLong();
Shubham Sharma1f193582019-07-11 12:12:41 +0000171
172 public Long getEapolResIdentityMsgTrans() {
173 return eapolResIdentityMsgTrans.get();
174 }
175
176 public Long getEapolattrIdentity() {
177 return eapolAttrIdentity.get();
178 }
179
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200180 public Long getEapolChallengeReqTx() {
181 return eapolChallengeReqTx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000182 }
183
184 public Long getEapolTransRespNotNak() {
185 return eapolTransRespNotNak.get();
186 }
187
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200188 public Long getEapolMd5ChallRespRx() {
189 return eapolMd5ChallRespRx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000190 }
191
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200192 public Long getEapolTlsChallResp() {
193 return eapolTlsChallResp.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000194 }
195
196 public Long getEapolLogoffRx() {
197 return eapolLogoffRx.get();
198 }
199
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200200 public Long getEapolAuthSuccessTx() {
201 return eapolAuthSuccessTx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000202 }
203
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200204 public Long getEapolAuthFailureTx() {
205 return eapolAuthFailureTx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000206 }
207
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200208 public Long getEapolStartReqRx() {
209 return eapolStartReqRx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000210 }
kartikey dubeye1545422019-05-22 12:53:45 +0000211
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000212 private LinkedList<Long> packetRoundTripTimeList = new LinkedList<Long>();
213
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200214 public Long getEapolPendingReq() {
215 return eapolPendingReq.get();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000216 }
217
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200218 public Long getEapolValidFramesRx() {
219 return eapolValidFramesRx.get();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000220 }
221
222 public Long getInvalidBodyLength() {
223 return invalidBodyLength.get();
224 }
225
226 public Long getInvalidPktType() {
227 return invalidPktType.get();
228 }
229
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200230 public Long getEapolIdRequestFramesTx() {
231 return eapolIdRequestFramesTx.get();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000232 }
233
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200234 public Long getEapolReqFramesTx() {
235 return eapolReqFramesTx.get();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000236 }
237
238 public Long getAuthStateIdle() {
239 return authStateIdle.get();
240 }
241
242 public Long getEapolFramesTx() {
243 return eapolFramesTx.get();
244 }
245
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000246 public LinkedList<Long> getPacketRoundTripTimeList() {
247 return packetRoundTripTimeList;
248 }
249
250 public int getPacketRoundTripTimeListSize() {
251 return packetRoundTripTimeList.size();
252 }
253
254 public void clearPacketRoundTripTimeList() {
255 packetRoundTripTimeList.clear();
256 }
257
258 public void getPacketRoundTripTimeListRemoveFirst() {
259 packetRoundTripTimeList.removeFirst();
260 }
261
262 public void getPacketRoundTripTimeListAdd(long time) {
263 packetRoundTripTimeList.add(time);
264 }
265
kartikey dubeye1545422019-05-22 12:53:45 +0000266 public Long getRequestReTx() {
267 return requestReTx.get();
268 }
269
270 public void setRequestRttMilis(AtomicLong requestRttMilis) {
271 this.requestRttMilis = requestRttMilis;
272 }
273
274 public Long getUnknownServerRx() {
275 return unknownServerRx.get();
276 }
277
278 public Long getRequestRttMilis() {
279 return requestRttMilis.get();
280 }
281
282 public Long getMalformedResponsesRx() {
283 return malformedResponsesRx.get();
284 }
285
286 public Long getDroppedResponsesRx() {
287 return droppedResponsesRx.get();
288 }
289
290 public Long getInvalidValidatorsRx() {
291 return invalidValidatorsRx.get();
292 }
293
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200294 public Long getRadiusAcceptResponsesRx() {
295 return radiusAcceptResponsesRx.get();
kartikey dubeye1545422019-05-22 12:53:45 +0000296 }
297
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200298 public Long getRadiusRejectResponsesRx() {
299 return radiusRejectResponsesRx.get();
kartikey dubeye1545422019-05-22 12:53:45 +0000300 }
301
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200302 public Long getRadiusChallengeResponsesRx() {
303 return radiusChallengeResponsesRx.get();
kartikey dubeye1545422019-05-22 12:53:45 +0000304 }
305
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200306 public Long getRadiusAccessRequestsTx() {
307 return radiusAccessRequestsTx.get();
kartikey dubeye1545422019-05-22 12:53:45 +0000308 }
309
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200310 public Long getRadiusPendingRequests() {
311 return radiusPendingRequests.get();
kartikey dubeye1545422019-05-22 12:53:45 +0000312 }
313
314 public Long getUnknownTypeRx() {
315 return unknownTypeRx.get();
316 }
317
318 public void increaseAcceptResponsesRx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200319 radiusAcceptResponsesRx.incrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000320 }
321
322 public void increaseRejectResponsesRx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200323 radiusRejectResponsesRx.incrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000324 }
325
326 public void increaseChallengeResponsesRx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200327 radiusChallengeResponsesRx.incrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000328 }
329
330 public void increaseAccessRequestsTx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200331 radiusAccessRequestsTx.incrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000332 }
333
334 public void increaseRequestReTx() {
335 requestReTx.incrementAndGet();
336 }
337
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000338 public void incrementInvalidPktType() {
339 invalidPktType.incrementAndGet();
340 }
341
kartikey dubeye1545422019-05-22 12:53:45 +0000342 public void increaseOrDecreasePendingRequests(boolean isIncrement) {
343 if (isIncrement) {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200344 radiusPendingRequests.incrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000345 } else {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200346 radiusPendingRequests.decrementAndGet();
kartikey dubeye1545422019-05-22 12:53:45 +0000347 }
348 }
349
350 public void increaseUnknownTypeRx() {
351 unknownTypeRx.incrementAndGet();
352 }
353
354 public void increaseMalformedResponsesRx() {
355 malformedResponsesRx.incrementAndGet();
356 }
357
358 public void increaseInvalidValidatorsRx() {
359 invalidValidatorsRx.incrementAndGet();
360 }
361
362 public void incrementUnknownServerRx() {
363 unknownServerRx.incrementAndGet();
364 }
365
366 public void incrementNumberOfSessionsExpired() {
367 numberOfSessionsExpired.incrementAndGet();
368 }
369
Shubham Sharma1f193582019-07-11 12:12:41 +0000370 public void incrementEapolLogoffRx() {
371 eapolLogoffRx.incrementAndGet();
372 }
373
374 public void incrementEapolAuthSuccessTrans() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200375 eapolAuthSuccessTx.incrementAndGet();
Shubham Sharma1f193582019-07-11 12:12:41 +0000376 }
377
378 public void incrementEapolauthFailureTrans() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200379 eapolAuthFailureTx.incrementAndGet();
Shubham Sharma1f193582019-07-11 12:12:41 +0000380 }
381
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200382 public void incrementEapolStartReqRx() {
383 eapolStartReqRx.incrementAndGet();
Shubham Sharma1f193582019-07-11 12:12:41 +0000384 }
385
386 public void incrementEapolMd5RspChall() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200387 eapolMd5ChallRespRx.incrementAndGet();
Shubham Sharma1f193582019-07-11 12:12:41 +0000388 }
389
390 public void incrementEapolAtrrIdentity() {
391 eapolAttrIdentity.incrementAndGet();
392 }
393
394 public void incrementEapolTlsRespChall() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200395 eapolTlsChallResp.incrementAndGet();
Shubham Sharma1f193582019-07-11 12:12:41 +0000396 }
397
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000398 public void incrementEapolFramesTx() {
399 eapolFramesTx.incrementAndGet();
400 }
401
402 public void incrementAuthStateIdle() {
403 authStateIdle.incrementAndGet();
404 }
405
406 public void incrementRequestIdFramesTx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200407 eapolIdRequestFramesTx.incrementAndGet();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000408 }
409
410 public void incrementInvalidBodyLength() {
411 invalidBodyLength.incrementAndGet();
412 }
413
414 public void incrementValidEapolFramesRx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200415 eapolValidFramesRx.incrementAndGet();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000416 }
417
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200418 public void incrementPendingReqSupp() {
419 eapolPendingReq.incrementAndGet();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000420 }
421
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200422 public void decrementPendingReqSupp() {
423 eapolPendingReq.decrementAndGet();
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000424 }
425
kartikey dubeye1545422019-05-22 12:53:45 +0000426 public void countDroppedResponsesRx() {
427 long numberOfDroppedPackets = invalidValidatorsRx.get();
428 numberOfDroppedPackets += unknownTypeRx.get();
429 numberOfDroppedPackets += malformedResponsesRx.get();
430 numberOfDroppedPackets += numberOfSessionsExpired.get();
431 this.droppedResponsesRx = new AtomicLong(numberOfDroppedPackets);
432 }
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000433
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000434 public void countReqEapFramesTx() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200435 long noReqEapFramesTx = eapolIdRequestFramesTx.get();
436 noReqEapFramesTx += radiusChallengeResponsesRx.get();
437 this.eapolReqFramesTx = new AtomicLong(noReqEapFramesTx);
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000438 }
439
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000440 public void resetAllCounters() {
441 clearPacketRoundTripTimeList();
442
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200443 radiusAccessRequestsTx.set(0);
444 radiusAccessRequestsIdentityTx.set(0);
445 radiusAccessRequestsChallengeTx.set(0);
446 radiusAcceptResponsesRx.set(0);
447 radiusChallengeResponsesRx.set(0);
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000448 droppedResponsesRx.set(0);
449 invalidValidatorsRx.set(0);
450 malformedResponsesRx.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200451 radiusPendingRequests.set(0);
452 radiusRejectResponsesRx.set(0);
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000453 requestReTx.set(0);
454 requestRttMilis.set(0);
455 unknownServerRx.set(0);
456 unknownTypeRx.set(0);
Shubham Sharmac7fbd9f2019-11-25 10:04:30 +0000457 eapolLogoffRx.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200458 eapolAuthSuccessTx.set(0);
459 eapolAuthFailureTx.set(0);
460 eapolStartReqRx.set(0);
Shubham Sharmac7fbd9f2019-11-25 10:04:30 +0000461 eapolTransRespNotNak.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200462 eapolChallengeReqTx.set(0);
Shubham Sharmac7fbd9f2019-11-25 10:04:30 +0000463 eapolResIdentityMsgTrans.set(0);
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000464 eapolFramesTx.set(0);
465 authStateIdle.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200466 eapolIdRequestFramesTx.set(0);
467 eapolReqFramesTx.set(0);
Shubham Sharma3c8c7022019-09-13 10:39:47 +0000468 invalidPktType.set(0);
469 invalidBodyLength.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200470 eapolValidFramesRx.set(0);
471 eapolPendingReq.set(0);
Shubham Sharma3d54e632019-11-29 07:20:48 +0000472 timedOutPackets.set(0);
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200473 eapolMd5ChallRespRx.set(0);
474 eapolTlsChallResp.set(0);
Jonathan Hartc41227c2020-01-28 16:56:49 -0800475 eapolAttrIdentity.set(0);
Vijaykumar Kushwahaa54ce552019-06-18 09:37:42 +0000476 }
Jonathan Hartc41227c2020-01-28 16:56:49 -0800477
Shubham Sharma1f193582019-07-11 12:12:41 +0000478 public void countTransRespNotNak() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200479 long eapolTransactionNotNak = eapolMd5ChallRespRx.get();
480 eapolTransactionNotNak += eapolTlsChallResp.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000481 this.eapolTransRespNotNak = new AtomicLong(eapolTransactionNotNak);
482 }
483
484 public void countEapolResIdentityMsgTrans() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200485 long authTransaction = eapolMd5ChallRespRx.get();
486 authTransaction += eapolTlsChallResp.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000487 authTransaction += eapolAttrIdentity.get();
488 this.eapolResIdentityMsgTrans = new AtomicLong(authTransaction);
489 }
490
491 public void incrementEapPktTxauthEap() {
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200492 eapolChallengeReqTx.incrementAndGet();
493 }
494
495 public void incrementRadiusReqIdTx() {
496 radiusAccessRequestsIdentityTx.incrementAndGet();
497 }
498
499 public void incrementRadiusReqChallengeTx() {
500 radiusAccessRequestsChallengeTx.incrementAndGet();
501 }
502
503 public Long getRadiusReqIdTx() {
504 return radiusAccessRequestsIdentityTx.get();
505 }
506
507 public Long getRadiusReqChallengeTx() {
508 return radiusAccessRequestsChallengeTx.get();
Shubham Sharma1f193582019-07-11 12:12:41 +0000509 }
Shubham Sharma1e43c562019-06-19 14:18:12 +0000510
511 public long getTimedOutPackets() {
512 return timedOutPackets.get();
513 }
514
515 public void increaseTimedOutPackets() {
516 timedOutPackets.incrementAndGet();
517 }
518
Jonathan Hartc41227c2020-01-28 16:56:49 -0800519 /**
520 * Creates a snapshot of the current values of the counters.
521 *
522 * @return statistics snapshot
523 */
524 public AaaStatisticsSnapshot snapshot() {
525 ImmutableMap.Builder<String, Long> builder = ImmutableMap.builder();
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200526 builder.put(RADIUS_ACCEPT_RESPONSES_RX, radiusAcceptResponsesRx.get())
527 .put(RADIUS_REJECT_RESPONSES_RX, radiusRejectResponsesRx.get())
528 .put(RADIUS_CHALLENGE_RESPONSES_RX, radiusChallengeResponsesRx.get())
529 .put(RADIUS_ACCESS_REQUESTS_TX, radiusAccessRequestsTx.get())
530 .put(RADIUS_ACCESS_REQUESTS_IDENTITY_TX, radiusAccessRequestsIdentityTx.get())
531 .put(RADIUS_ACCESS_REQUESTS_CHALLENGE_TX, radiusAccessRequestsChallengeTx.get())
532 .put(RADIUS_PENDING_REQUESTS, radiusPendingRequests.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800533 .put(TIMED_OUT_PACKETS, timedOutPackets.get())
534 .put(UNKNOWN_TYPE_RX, unknownTypeRx.get())
535 .put(INVALID_VALIDATORS_RX, invalidValidatorsRx.get())
536 .put(DROPPED_RESPONSES_RX, droppedResponsesRx.get())
537 .put(MALFORMED_RESPONSES_RX, malformedResponsesRx.get())
538 .put(UNKNOWN_SERVER_RX, unknownServerRx.get())
539 .put(REQUEST_RTT_MILLIS, requestRttMilis.get())
540 .put(REQUEST_RE_TX, requestReTx.get())
541 .put(NUM_SESSIONS_EXPIRED, numberOfSessionsExpired.get())
542 .put(EAPOL_LOGOFF_RX, eapolLogoffRx.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200543 .put(EAPOL_AUTH_SUCCESS_TX, eapolAuthSuccessTx.get())
544 .put(EAPOL_AUTH_FAILURE_TX, eapolAuthFailureTx.get())
545 .put(EAPOL_START_REQ_RX, eapolStartReqRx.get())
546 .put(EAPOL_MD5_CHALLENGE_RESP_RX, eapolMd5ChallRespRx.get())
547 .put(EAPOL_TLS_CHALLENGE_RESP, eapolTlsChallResp.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800548 .put(EAPOL_TRANS_RESP_NOT_NAK, eapolTransRespNotNak.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200549 .put(EAPOL_CHALLENGE_REQ_TX, eapolChallengeReqTx.get())
550 .put(EAPOL_ID_RESP_FRAMES_RX, eapolAttrIdentity.get())
551 .put(EAPOL_ID_MSG_RESP_TX, eapolResIdentityMsgTrans.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800552 .put(EAPOL_FRAMES_TX, eapolFramesTx.get())
553 .put(AUTH_STATE_IDLE, authStateIdle.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200554 .put(EAPOL_ID_REQUEST_FRAMES_TX, eapolIdRequestFramesTx.get())
555 .put(EAPOL_REQUEST_FRAMES_TX, eapolReqFramesTx.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800556 .put(INVALID_PKT_TYPE, invalidPktType.get())
557 .put(INVALID_BODY_LENGTH, invalidBodyLength.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200558 .put(EAPOL_VALID_FRAMES_RX, eapolValidFramesRx.get())
559 .put(EAPOL_PENDING_REQUESTS, eapolPendingReq.get());
Jonathan Hartc41227c2020-01-28 16:56:49 -0800560
561 return new AaaStatisticsSnapshot(builder.build());
562 }
563
564 public static AaaStatistics fromSnapshot(AaaStatisticsSnapshot snapshot) {
565 AaaStatistics stats = new AaaStatistics();
566
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200567 stats.radiusAcceptResponsesRx.set(snapshot.get(RADIUS_ACCEPT_RESPONSES_RX));
568 stats.radiusRejectResponsesRx.set(snapshot.get(RADIUS_REJECT_RESPONSES_RX));
569 stats.radiusChallengeResponsesRx.set(snapshot.get(RADIUS_CHALLENGE_RESPONSES_RX));
570 stats.radiusAccessRequestsTx.set(snapshot.get(RADIUS_ACCESS_REQUESTS_TX));
571 stats.radiusAccessRequestsIdentityTx.set(snapshot.get(RADIUS_ACCESS_REQUESTS_IDENTITY_TX));
572 stats.radiusAccessRequestsChallengeTx.set(snapshot.get(RADIUS_ACCESS_REQUESTS_CHALLENGE_TX));
573 stats.radiusPendingRequests.set(snapshot.get(RADIUS_PENDING_REQUESTS));
Jonathan Hartc41227c2020-01-28 16:56:49 -0800574 stats.timedOutPackets.set(snapshot.get(TIMED_OUT_PACKETS));
575 stats.unknownTypeRx.set(snapshot.get(UNKNOWN_TYPE_RX));
576 stats.invalidValidatorsRx.set(snapshot.get(INVALID_VALIDATORS_RX));
577 stats.droppedResponsesRx.set(snapshot.get(DROPPED_RESPONSES_RX));
578 stats.malformedResponsesRx.set(snapshot.get(MALFORMED_RESPONSES_RX));
579 stats.unknownServerRx.set(snapshot.get(UNKNOWN_SERVER_RX));
580 stats.requestRttMilis.set(snapshot.get(REQUEST_RTT_MILLIS));
581 stats.requestReTx.set(snapshot.get(REQUEST_RE_TX));
582 stats.numberOfSessionsExpired.set(snapshot.get(NUM_SESSIONS_EXPIRED));
583 stats.eapolLogoffRx.set(snapshot.get(EAPOL_LOGOFF_RX));
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200584 stats.eapolAuthSuccessTx.set(snapshot.get(EAPOL_AUTH_SUCCESS_TX));
585 stats.eapolAuthFailureTx.set(snapshot.get(EAPOL_AUTH_FAILURE_TX));
586 stats.eapolStartReqRx.set(snapshot.get(EAPOL_START_REQ_RX));
587 stats.eapolMd5ChallRespRx.set(snapshot.get(EAPOL_MD5_CHALLENGE_RESP_RX));
588 stats.eapolTlsChallResp.set(snapshot.get(EAPOL_TLS_CHALLENGE_RESP));
Jonathan Hartc41227c2020-01-28 16:56:49 -0800589 stats.eapolTransRespNotNak.set(snapshot.get(EAPOL_TRANS_RESP_NOT_NAK));
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200590 stats.eapolChallengeReqTx.set(snapshot.get(EAPOL_CHALLENGE_REQ_TX));
591 stats.eapolAttrIdentity.set(snapshot.get(EAPOL_ID_RESP_FRAMES_RX));
592 stats.eapolResIdentityMsgTrans.set(snapshot.get(EAPOL_ID_MSG_RESP_TX));
Jonathan Hartc41227c2020-01-28 16:56:49 -0800593 stats.eapolFramesTx.set(snapshot.get(EAPOL_FRAMES_TX));
594 stats.authStateIdle.set(snapshot.get(AUTH_STATE_IDLE));
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200595 stats.eapolIdRequestFramesTx.set(snapshot.get(EAPOL_ID_REQUEST_FRAMES_TX));
596 stats.eapolReqFramesTx.set(snapshot.get(EAPOL_REQUEST_FRAMES_TX));
Jonathan Hartc41227c2020-01-28 16:56:49 -0800597 stats.invalidPktType.set(snapshot.get(INVALID_PKT_TYPE));
598 stats.invalidBodyLength.set(snapshot.get(INVALID_BODY_LENGTH));
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200599 stats.eapolValidFramesRx.set(snapshot.get(EAPOL_VALID_FRAMES_RX));
600 stats.eapolPendingReq.set(snapshot.get(EAPOL_PENDING_REQUESTS));
Jonathan Hartc41227c2020-01-28 16:56:49 -0800601
602 return stats;
603 }
604
605 public String toString() {
606 MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(this.getClass());
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200607 helper.add(RADIUS_ACCEPT_RESPONSES_RX, radiusAcceptResponsesRx.get())
608 .add(RADIUS_REJECT_RESPONSES_RX, radiusRejectResponsesRx.get())
609 .add(RADIUS_CHALLENGE_RESPONSES_RX, radiusChallengeResponsesRx.get())
610 .add(RADIUS_ACCESS_REQUESTS_TX, radiusAccessRequestsTx.get())
611 .add(RADIUS_ACCESS_REQUESTS_IDENTITY_TX, radiusAccessRequestsIdentityTx.get())
612 .add(RADIUS_ACCESS_REQUESTS_CHALLENGE_TX, radiusAccessRequestsChallengeTx.get())
613 .add(RADIUS_PENDING_REQUESTS, radiusPendingRequests.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800614 .add(TIMED_OUT_PACKETS, timedOutPackets.get())
615 .add(UNKNOWN_TYPE_RX, unknownTypeRx.get())
616 .add(INVALID_VALIDATORS_RX, invalidValidatorsRx.get())
617 .add(DROPPED_RESPONSES_RX, droppedResponsesRx.get())
618 .add(MALFORMED_RESPONSES_RX, malformedResponsesRx.get())
619 .add(UNKNOWN_SERVER_RX, unknownServerRx.get())
620 .add(REQUEST_RTT_MILLIS, requestRttMilis.get())
621 .add(REQUEST_RE_TX, requestReTx.get())
622 .add(NUM_SESSIONS_EXPIRED, numberOfSessionsExpired.get())
623 .add(EAPOL_LOGOFF_RX, eapolLogoffRx.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200624 .add(EAPOL_AUTH_SUCCESS_TX, eapolAuthSuccessTx.get())
625 .add(EAPOL_AUTH_FAILURE_TX, eapolAuthFailureTx.get())
626 .add(EAPOL_START_REQ_RX, eapolStartReqRx.get())
627 .add(EAPOL_MD5_CHALLENGE_RESP_RX, eapolMd5ChallRespRx.get())
628 .add(EAPOL_TLS_CHALLENGE_RESP, eapolTlsChallResp.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800629 .add(EAPOL_TRANS_RESP_NOT_NAK, eapolTransRespNotNak.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200630 .add(EAPOL_CHALLENGE_REQ_TX, eapolChallengeReqTx.get())
631 .add(EAPOL_ID_RESP_FRAMES_RX, eapolAttrIdentity.get())
632 .add(EAPOL_ID_MSG_RESP_TX, eapolResIdentityMsgTrans.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800633 .add(EAPOL_FRAMES_TX, eapolFramesTx.get())
634 .add(AUTH_STATE_IDLE, authStateIdle.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200635 .add(EAPOL_ID_REQUEST_FRAMES_TX, eapolIdRequestFramesTx.get())
636 .add(EAPOL_REQUEST_FRAMES_TX, eapolReqFramesTx.get())
Jonathan Hartc41227c2020-01-28 16:56:49 -0800637 .add(INVALID_PKT_TYPE, invalidPktType.get())
638 .add(INVALID_BODY_LENGTH, invalidBodyLength.get())
Andrea Campanella76ae68d2020-10-14 11:16:37 +0200639 .add(EAPOL_VALID_FRAMES_RX, eapolValidFramesRx.get())
640 .add(EAPOL_PENDING_REQUESTS, eapolPendingReq.get());
Jonathan Hartc41227c2020-01-28 16:56:49 -0800641 return helper.toString();
642 }
kartikey dubeye1545422019-05-22 12:53:45 +0000643}