blob: 29809f40215adff01a960db3e4286eeb1a39028e [file] [log] [blame]
/*
* Copyright 2018-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.opencord.aaa;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableMap;
import java.util.LinkedList;
import java.util.concurrent.atomic.AtomicLong;
/**
* Records metrics for the AAA application.
*/
public class AaaStatistics {
public static final String RADIUS_ACCEPT_RESPONSES_RX = "radiusAccessAcceptRx";
public static final String RADIUS_REJECT_RESPONSES_RX = "radiusRejectResponsesRx";
public static final String RADIUS_CHALLENGE_RESPONSES_RX = "radiusAccessChallengeRx";
public static final String RADIUS_ACCESS_REQUESTS_TX = "radiusAccessRequestTx";
public static final String RADIUS_ACCESS_REQUESTS_IDENTITY_TX = "radiusAccessRequestIdentityTx";
public static final String RADIUS_ACCESS_REQUESTS_CHALLENGE_TX = "radiusAccessRequestChallengeTx";
public static final String RADIUS_PENDING_REQUESTS = "radiusPendingRequests";
public static final String TIMED_OUT_PACKETS = "timedOutPackets";
public static final String UNKNOWN_TYPE_RX = "unknownTypeRx";
public static final String INVALID_VALIDATORS_RX = "invalidValidatorsRx";
public static final String DROPPED_RESPONSES_RX = "droppedResponsesRx";
public static final String MALFORMED_RESPONSES_RX = "malformedResponsesRx";
public static final String UNKNOWN_SERVER_RX = "unknownServerRx";
public static final String REQUEST_RTT_MILLIS = "requestRttMillis";
public static final String REQUEST_RE_TX = "requestReTx";
public static final String NUM_SESSIONS_EXPIRED = "numSessionsExpired";
public static final String EAPOL_LOGOFF_RX = "eapolLogoffRx";
public static final String EAPOL_AUTH_SUCCESS_TX = "eapolAuthSuccessTx";
public static final String EAPOL_AUTH_FAILURE_TX = "eapolAuthFailureTrans";
public static final String EAPOL_START_REQ_RX = "eapolStartRequestRx";
public static final String EAPOL_MD5_CHALLENGE_RESP_RX = "eapolMd5ChallengeResponseRx";
public static final String EAPOL_TLS_CHALLENGE_RESP = "eapolTlsRespChallenge";
public static final String EAPOL_TRANS_RESP_NOT_NAK = "eapolTransRespNotNak";
public static final String EAPOL_CHALLENGE_REQ_TX = "eapolChallengeRequestTx";
public static final String EAPOL_ID_RESP_FRAMES_RX = "eapolIdentityResponseRx";
public static final String EAPOL_ID_MSG_RESP_TX = "eapolIdentityMsgResponseTx";
public static final String EAPOL_FRAMES_TX = "eapolFramesTx";
public static final String AUTH_STATE_IDLE = "authStateIdle";
public static final String EAPOL_ID_REQUEST_FRAMES_TX = "eapolIdentityRequestTx";
public static final String EAPOL_REQUEST_FRAMES_TX = "eapolRequestFramesTx"; //TODO check
public static final String INVALID_PKT_TYPE = "invalidPktType";
public static final String INVALID_BODY_LENGTH = "invalidBodyLength";
public static final String EAPOL_VALID_FRAMES_RX = "eapolValidFramesRx";
public static final String EAPOL_PENDING_REQUESTS = "eapolPendingRequests";
public static final String[] COUNTER_NAMES = new String[]{
RADIUS_ACCEPT_RESPONSES_RX,
RADIUS_REJECT_RESPONSES_RX,
RADIUS_CHALLENGE_RESPONSES_RX,
RADIUS_ACCESS_REQUESTS_TX,
RADIUS_ACCESS_REQUESTS_IDENTITY_TX,
RADIUS_ACCESS_REQUESTS_CHALLENGE_TX,
RADIUS_PENDING_REQUESTS,
TIMED_OUT_PACKETS,
UNKNOWN_TYPE_RX,
INVALID_VALIDATORS_RX,
DROPPED_RESPONSES_RX,
MALFORMED_RESPONSES_RX,
UNKNOWN_SERVER_RX,
REQUEST_RTT_MILLIS,
REQUEST_RE_TX,
NUM_SESSIONS_EXPIRED,
EAPOL_LOGOFF_RX,
EAPOL_AUTH_SUCCESS_TX,
EAPOL_AUTH_FAILURE_TX,
EAPOL_START_REQ_RX,
EAPOL_MD5_CHALLENGE_RESP_RX,
EAPOL_TLS_CHALLENGE_RESP,
EAPOL_TRANS_RESP_NOT_NAK,
EAPOL_CHALLENGE_REQ_TX,
EAPOL_ID_RESP_FRAMES_RX,
EAPOL_ID_MSG_RESP_TX,
EAPOL_FRAMES_TX,
AUTH_STATE_IDLE,
EAPOL_ID_REQUEST_FRAMES_TX,
EAPOL_REQUEST_FRAMES_TX,
INVALID_PKT_TYPE,
INVALID_BODY_LENGTH,
EAPOL_VALID_FRAMES_RX,
EAPOL_PENDING_REQUESTS,
};
// Number of access accept packets sent to the server
private AtomicLong radiusAcceptResponsesRx = new AtomicLong();
// Number of access reject packets sent to the server
private AtomicLong radiusRejectResponsesRx = new AtomicLong();
// Number of access challenge packets sent to the server
private AtomicLong radiusChallengeResponsesRx = new AtomicLong();
// Number of access request packets sent to the server
private AtomicLong radiusAccessRequestsTx = new AtomicLong();
// Number of identity request packets sent to the server
private AtomicLong radiusAccessRequestsIdentityTx = new AtomicLong();
// Number of challenge request packets sent to the server
private AtomicLong radiusAccessRequestsChallengeTx = new AtomicLong();
// Number of access request packets pending a response from the server
private AtomicLong radiusPendingRequests = new AtomicLong();
// Number of packets send to the server which timed out.
private AtomicLong timedOutPackets = new AtomicLong();
// Number of packets of an unknown RADIUS type received from the accounting
// server
private AtomicLong unknownTypeRx = new AtomicLong();
// Number of access response packets received from the server with an invalid
// validator
private AtomicLong invalidValidatorsRx = new AtomicLong();
// Number of dropped packets received from the accounting server
private AtomicLong droppedResponsesRx = new AtomicLong();
// Number of malformed access response packets received from the server
private AtomicLong malformedResponsesRx = new AtomicLong();
// Number of packets received from an unknown server
private AtomicLong unknownServerRx = new AtomicLong();
// Roundtrip packet time to the accounting server
private AtomicLong requestRttMilis = new AtomicLong();
// Number of access request packets retransmitted to the server
private AtomicLong requestReTx = new AtomicLong();
// Number of sessions expired
private AtomicLong numberOfSessionsExpired = new AtomicLong();
//Number of EAPOL logoff messages received resulting in disconnected state
private AtomicLong eapolLogoffRx = new AtomicLong();
//Number of authenticated transitions due to successful authentication
private AtomicLong eapolAuthSuccessTx = new AtomicLong();
//Number of transitions to held due to authentication failure
private AtomicLong eapolAuthFailureTx = new AtomicLong();
//Number of transitions to connecting due to start request
private AtomicLong eapolStartReqRx = new AtomicLong();
//MD5 Response Challenge
private AtomicLong eapolMd5ChallRespRx = new AtomicLong();
//Tls Response Challenge
private AtomicLong eapolTlsChallResp = new AtomicLong();
//Number of transitions to response (received response other that NAK)
private AtomicLong eapolTransRespNotNak = new AtomicLong();
//Number of EAP request packets sent due to the authenticator choosing the EAP method
private AtomicLong eapolChallengeReqTx = new AtomicLong();
//Attr Identity
private AtomicLong eapolAttrIdentity = new AtomicLong();
//Number of authenticating transitions due to EAP response or identity message
private AtomicLong eapolResIdentityMsgTrans = new AtomicLong();
//Current number of EAPOL frames transmitted
private AtomicLong eapolFramesTx = new AtomicLong();
//Authenticator state when idle
private AtomicLong authStateIdle = new AtomicLong();
//Number of request ID EAP frames transmitted
private AtomicLong eapolIdRequestFramesTx = new AtomicLong();
//Current number of request EAP frames transmitted
private AtomicLong eapolReqFramesTx = new AtomicLong();
//Number of EAPOL frames received with invalid packet type
private AtomicLong invalidPktType = new AtomicLong();
//Number of EAPOL frames received with invalid body length
private AtomicLong invalidBodyLength = new AtomicLong();
//number of valid EAPOL frames received
private AtomicLong eapolValidFramesRx = new AtomicLong();
//Number of request pending response from supplicant
private AtomicLong eapolPendingReq = new AtomicLong();
public Long getEapolResIdentityMsgTrans() {
return eapolResIdentityMsgTrans.get();
}
public Long getEapolattrIdentity() {
return eapolAttrIdentity.get();
}
public Long getEapolChallengeReqTx() {
return eapolChallengeReqTx.get();
}
public Long getEapolTransRespNotNak() {
return eapolTransRespNotNak.get();
}
public Long getEapolMd5ChallRespRx() {
return eapolMd5ChallRespRx.get();
}
public Long getEapolTlsChallResp() {
return eapolTlsChallResp.get();
}
public Long getEapolLogoffRx() {
return eapolLogoffRx.get();
}
public Long getEapolAuthSuccessTx() {
return eapolAuthSuccessTx.get();
}
public Long getEapolAuthFailureTx() {
return eapolAuthFailureTx.get();
}
public Long getEapolStartReqRx() {
return eapolStartReqRx.get();
}
private LinkedList<Long> packetRoundTripTimeList = new LinkedList<Long>();
public Long getEapolPendingReq() {
return eapolPendingReq.get();
}
public Long getEapolValidFramesRx() {
return eapolValidFramesRx.get();
}
public Long getInvalidBodyLength() {
return invalidBodyLength.get();
}
public Long getInvalidPktType() {
return invalidPktType.get();
}
public Long getEapolIdRequestFramesTx() {
return eapolIdRequestFramesTx.get();
}
public Long getEapolReqFramesTx() {
return eapolReqFramesTx.get();
}
public Long getAuthStateIdle() {
return authStateIdle.get();
}
public Long getEapolFramesTx() {
return eapolFramesTx.get();
}
public LinkedList<Long> getPacketRoundTripTimeList() {
return packetRoundTripTimeList;
}
public int getPacketRoundTripTimeListSize() {
return packetRoundTripTimeList.size();
}
public void clearPacketRoundTripTimeList() {
packetRoundTripTimeList.clear();
}
public void getPacketRoundTripTimeListRemoveFirst() {
packetRoundTripTimeList.removeFirst();
}
public void getPacketRoundTripTimeListAdd(long time) {
packetRoundTripTimeList.add(time);
}
public Long getRequestReTx() {
return requestReTx.get();
}
public void setRequestRttMilis(AtomicLong requestRttMilis) {
this.requestRttMilis = requestRttMilis;
}
public Long getUnknownServerRx() {
return unknownServerRx.get();
}
public Long getRequestRttMilis() {
return requestRttMilis.get();
}
public Long getMalformedResponsesRx() {
return malformedResponsesRx.get();
}
public Long getDroppedResponsesRx() {
return droppedResponsesRx.get();
}
public Long getInvalidValidatorsRx() {
return invalidValidatorsRx.get();
}
public Long getRadiusAcceptResponsesRx() {
return radiusAcceptResponsesRx.get();
}
public Long getRadiusRejectResponsesRx() {
return radiusRejectResponsesRx.get();
}
public Long getRadiusChallengeResponsesRx() {
return radiusChallengeResponsesRx.get();
}
public Long getRadiusAccessRequestsTx() {
return radiusAccessRequestsTx.get();
}
public Long getRadiusPendingRequests() {
return radiusPendingRequests.get();
}
public Long getUnknownTypeRx() {
return unknownTypeRx.get();
}
public void increaseAcceptResponsesRx() {
radiusAcceptResponsesRx.incrementAndGet();
}
public void increaseRejectResponsesRx() {
radiusRejectResponsesRx.incrementAndGet();
}
public void increaseChallengeResponsesRx() {
radiusChallengeResponsesRx.incrementAndGet();
}
public void increaseAccessRequestsTx() {
radiusAccessRequestsTx.incrementAndGet();
}
public void increaseRequestReTx() {
requestReTx.incrementAndGet();
}
public void incrementInvalidPktType() {
invalidPktType.incrementAndGet();
}
public void increaseOrDecreasePendingRequests(boolean isIncrement) {
if (isIncrement) {
radiusPendingRequests.incrementAndGet();
} else {
radiusPendingRequests.decrementAndGet();
}
}
public void increaseUnknownTypeRx() {
unknownTypeRx.incrementAndGet();
}
public void increaseMalformedResponsesRx() {
malformedResponsesRx.incrementAndGet();
}
public void increaseInvalidValidatorsRx() {
invalidValidatorsRx.incrementAndGet();
}
public void incrementUnknownServerRx() {
unknownServerRx.incrementAndGet();
}
public void incrementNumberOfSessionsExpired() {
numberOfSessionsExpired.incrementAndGet();
}
public void incrementEapolLogoffRx() {
eapolLogoffRx.incrementAndGet();
}
public void incrementEapolAuthSuccessTrans() {
eapolAuthSuccessTx.incrementAndGet();
}
public void incrementEapolauthFailureTrans() {
eapolAuthFailureTx.incrementAndGet();
}
public void incrementEapolStartReqRx() {
eapolStartReqRx.incrementAndGet();
}
public void incrementEapolMd5RspChall() {
eapolMd5ChallRespRx.incrementAndGet();
}
public void incrementEapolAtrrIdentity() {
eapolAttrIdentity.incrementAndGet();
}
public void incrementEapolTlsRespChall() {
eapolTlsChallResp.incrementAndGet();
}
public void incrementEapolFramesTx() {
eapolFramesTx.incrementAndGet();
}
public void incrementAuthStateIdle() {
authStateIdle.incrementAndGet();
}
public void incrementRequestIdFramesTx() {
eapolIdRequestFramesTx.incrementAndGet();
}
public void incrementInvalidBodyLength() {
invalidBodyLength.incrementAndGet();
}
public void incrementValidEapolFramesRx() {
eapolValidFramesRx.incrementAndGet();
}
public void incrementPendingReqSupp() {
eapolPendingReq.incrementAndGet();
}
public void decrementPendingReqSupp() {
eapolPendingReq.decrementAndGet();
}
public void countDroppedResponsesRx() {
long numberOfDroppedPackets = invalidValidatorsRx.get();
numberOfDroppedPackets += unknownTypeRx.get();
numberOfDroppedPackets += malformedResponsesRx.get();
numberOfDroppedPackets += numberOfSessionsExpired.get();
this.droppedResponsesRx = new AtomicLong(numberOfDroppedPackets);
}
public void countReqEapFramesTx() {
long noReqEapFramesTx = eapolIdRequestFramesTx.get();
noReqEapFramesTx += radiusChallengeResponsesRx.get();
this.eapolReqFramesTx = new AtomicLong(noReqEapFramesTx);
}
public void resetAllCounters() {
clearPacketRoundTripTimeList();
radiusAccessRequestsTx.set(0);
radiusAccessRequestsIdentityTx.set(0);
radiusAccessRequestsChallengeTx.set(0);
radiusAcceptResponsesRx.set(0);
radiusChallengeResponsesRx.set(0);
droppedResponsesRx.set(0);
invalidValidatorsRx.set(0);
malformedResponsesRx.set(0);
radiusPendingRequests.set(0);
radiusRejectResponsesRx.set(0);
requestReTx.set(0);
requestRttMilis.set(0);
unknownServerRx.set(0);
unknownTypeRx.set(0);
eapolLogoffRx.set(0);
eapolAuthSuccessTx.set(0);
eapolAuthFailureTx.set(0);
eapolStartReqRx.set(0);
eapolTransRespNotNak.set(0);
eapolChallengeReqTx.set(0);
eapolResIdentityMsgTrans.set(0);
eapolFramesTx.set(0);
authStateIdle.set(0);
eapolIdRequestFramesTx.set(0);
eapolReqFramesTx.set(0);
invalidPktType.set(0);
invalidBodyLength.set(0);
eapolValidFramesRx.set(0);
eapolPendingReq.set(0);
timedOutPackets.set(0);
eapolMd5ChallRespRx.set(0);
eapolTlsChallResp.set(0);
eapolAttrIdentity.set(0);
}
public void countTransRespNotNak() {
long eapolTransactionNotNak = eapolMd5ChallRespRx.get();
eapolTransactionNotNak += eapolTlsChallResp.get();
this.eapolTransRespNotNak = new AtomicLong(eapolTransactionNotNak);
}
public void countEapolResIdentityMsgTrans() {
long authTransaction = eapolMd5ChallRespRx.get();
authTransaction += eapolTlsChallResp.get();
authTransaction += eapolAttrIdentity.get();
this.eapolResIdentityMsgTrans = new AtomicLong(authTransaction);
}
public void incrementEapPktTxauthEap() {
eapolChallengeReqTx.incrementAndGet();
}
public void incrementRadiusReqIdTx() {
radiusAccessRequestsIdentityTx.incrementAndGet();
}
public void incrementRadiusReqChallengeTx() {
radiusAccessRequestsChallengeTx.incrementAndGet();
}
public Long getRadiusReqIdTx() {
return radiusAccessRequestsIdentityTx.get();
}
public Long getRadiusReqChallengeTx() {
return radiusAccessRequestsChallengeTx.get();
}
public long getTimedOutPackets() {
return timedOutPackets.get();
}
public void increaseTimedOutPackets() {
timedOutPackets.incrementAndGet();
}
/**
* Creates a snapshot of the current values of the counters.
*
* @return statistics snapshot
*/
public AaaStatisticsSnapshot snapshot() {
ImmutableMap.Builder<String, Long> builder = ImmutableMap.builder();
builder.put(RADIUS_ACCEPT_RESPONSES_RX, radiusAcceptResponsesRx.get())
.put(RADIUS_REJECT_RESPONSES_RX, radiusRejectResponsesRx.get())
.put(RADIUS_CHALLENGE_RESPONSES_RX, radiusChallengeResponsesRx.get())
.put(RADIUS_ACCESS_REQUESTS_TX, radiusAccessRequestsTx.get())
.put(RADIUS_ACCESS_REQUESTS_IDENTITY_TX, radiusAccessRequestsIdentityTx.get())
.put(RADIUS_ACCESS_REQUESTS_CHALLENGE_TX, radiusAccessRequestsChallengeTx.get())
.put(RADIUS_PENDING_REQUESTS, radiusPendingRequests.get())
.put(TIMED_OUT_PACKETS, timedOutPackets.get())
.put(UNKNOWN_TYPE_RX, unknownTypeRx.get())
.put(INVALID_VALIDATORS_RX, invalidValidatorsRx.get())
.put(DROPPED_RESPONSES_RX, droppedResponsesRx.get())
.put(MALFORMED_RESPONSES_RX, malformedResponsesRx.get())
.put(UNKNOWN_SERVER_RX, unknownServerRx.get())
.put(REQUEST_RTT_MILLIS, requestRttMilis.get())
.put(REQUEST_RE_TX, requestReTx.get())
.put(NUM_SESSIONS_EXPIRED, numberOfSessionsExpired.get())
.put(EAPOL_LOGOFF_RX, eapolLogoffRx.get())
.put(EAPOL_AUTH_SUCCESS_TX, eapolAuthSuccessTx.get())
.put(EAPOL_AUTH_FAILURE_TX, eapolAuthFailureTx.get())
.put(EAPOL_START_REQ_RX, eapolStartReqRx.get())
.put(EAPOL_MD5_CHALLENGE_RESP_RX, eapolMd5ChallRespRx.get())
.put(EAPOL_TLS_CHALLENGE_RESP, eapolTlsChallResp.get())
.put(EAPOL_TRANS_RESP_NOT_NAK, eapolTransRespNotNak.get())
.put(EAPOL_CHALLENGE_REQ_TX, eapolChallengeReqTx.get())
.put(EAPOL_ID_RESP_FRAMES_RX, eapolAttrIdentity.get())
.put(EAPOL_ID_MSG_RESP_TX, eapolResIdentityMsgTrans.get())
.put(EAPOL_FRAMES_TX, eapolFramesTx.get())
.put(AUTH_STATE_IDLE, authStateIdle.get())
.put(EAPOL_ID_REQUEST_FRAMES_TX, eapolIdRequestFramesTx.get())
.put(EAPOL_REQUEST_FRAMES_TX, eapolReqFramesTx.get())
.put(INVALID_PKT_TYPE, invalidPktType.get())
.put(INVALID_BODY_LENGTH, invalidBodyLength.get())
.put(EAPOL_VALID_FRAMES_RX, eapolValidFramesRx.get())
.put(EAPOL_PENDING_REQUESTS, eapolPendingReq.get());
return new AaaStatisticsSnapshot(builder.build());
}
public static AaaStatistics fromSnapshot(AaaStatisticsSnapshot snapshot) {
AaaStatistics stats = new AaaStatistics();
stats.radiusAcceptResponsesRx.set(snapshot.get(RADIUS_ACCEPT_RESPONSES_RX));
stats.radiusRejectResponsesRx.set(snapshot.get(RADIUS_REJECT_RESPONSES_RX));
stats.radiusChallengeResponsesRx.set(snapshot.get(RADIUS_CHALLENGE_RESPONSES_RX));
stats.radiusAccessRequestsTx.set(snapshot.get(RADIUS_ACCESS_REQUESTS_TX));
stats.radiusAccessRequestsIdentityTx.set(snapshot.get(RADIUS_ACCESS_REQUESTS_IDENTITY_TX));
stats.radiusAccessRequestsChallengeTx.set(snapshot.get(RADIUS_ACCESS_REQUESTS_CHALLENGE_TX));
stats.radiusPendingRequests.set(snapshot.get(RADIUS_PENDING_REQUESTS));
stats.timedOutPackets.set(snapshot.get(TIMED_OUT_PACKETS));
stats.unknownTypeRx.set(snapshot.get(UNKNOWN_TYPE_RX));
stats.invalidValidatorsRx.set(snapshot.get(INVALID_VALIDATORS_RX));
stats.droppedResponsesRx.set(snapshot.get(DROPPED_RESPONSES_RX));
stats.malformedResponsesRx.set(snapshot.get(MALFORMED_RESPONSES_RX));
stats.unknownServerRx.set(snapshot.get(UNKNOWN_SERVER_RX));
stats.requestRttMilis.set(snapshot.get(REQUEST_RTT_MILLIS));
stats.requestReTx.set(snapshot.get(REQUEST_RE_TX));
stats.numberOfSessionsExpired.set(snapshot.get(NUM_SESSIONS_EXPIRED));
stats.eapolLogoffRx.set(snapshot.get(EAPOL_LOGOFF_RX));
stats.eapolAuthSuccessTx.set(snapshot.get(EAPOL_AUTH_SUCCESS_TX));
stats.eapolAuthFailureTx.set(snapshot.get(EAPOL_AUTH_FAILURE_TX));
stats.eapolStartReqRx.set(snapshot.get(EAPOL_START_REQ_RX));
stats.eapolMd5ChallRespRx.set(snapshot.get(EAPOL_MD5_CHALLENGE_RESP_RX));
stats.eapolTlsChallResp.set(snapshot.get(EAPOL_TLS_CHALLENGE_RESP));
stats.eapolTransRespNotNak.set(snapshot.get(EAPOL_TRANS_RESP_NOT_NAK));
stats.eapolChallengeReqTx.set(snapshot.get(EAPOL_CHALLENGE_REQ_TX));
stats.eapolAttrIdentity.set(snapshot.get(EAPOL_ID_RESP_FRAMES_RX));
stats.eapolResIdentityMsgTrans.set(snapshot.get(EAPOL_ID_MSG_RESP_TX));
stats.eapolFramesTx.set(snapshot.get(EAPOL_FRAMES_TX));
stats.authStateIdle.set(snapshot.get(AUTH_STATE_IDLE));
stats.eapolIdRequestFramesTx.set(snapshot.get(EAPOL_ID_REQUEST_FRAMES_TX));
stats.eapolReqFramesTx.set(snapshot.get(EAPOL_REQUEST_FRAMES_TX));
stats.invalidPktType.set(snapshot.get(INVALID_PKT_TYPE));
stats.invalidBodyLength.set(snapshot.get(INVALID_BODY_LENGTH));
stats.eapolValidFramesRx.set(snapshot.get(EAPOL_VALID_FRAMES_RX));
stats.eapolPendingReq.set(snapshot.get(EAPOL_PENDING_REQUESTS));
return stats;
}
public String toString() {
MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(this.getClass());
helper.add(RADIUS_ACCEPT_RESPONSES_RX, radiusAcceptResponsesRx.get())
.add(RADIUS_REJECT_RESPONSES_RX, radiusRejectResponsesRx.get())
.add(RADIUS_CHALLENGE_RESPONSES_RX, radiusChallengeResponsesRx.get())
.add(RADIUS_ACCESS_REQUESTS_TX, radiusAccessRequestsTx.get())
.add(RADIUS_ACCESS_REQUESTS_IDENTITY_TX, radiusAccessRequestsIdentityTx.get())
.add(RADIUS_ACCESS_REQUESTS_CHALLENGE_TX, radiusAccessRequestsChallengeTx.get())
.add(RADIUS_PENDING_REQUESTS, radiusPendingRequests.get())
.add(TIMED_OUT_PACKETS, timedOutPackets.get())
.add(UNKNOWN_TYPE_RX, unknownTypeRx.get())
.add(INVALID_VALIDATORS_RX, invalidValidatorsRx.get())
.add(DROPPED_RESPONSES_RX, droppedResponsesRx.get())
.add(MALFORMED_RESPONSES_RX, malformedResponsesRx.get())
.add(UNKNOWN_SERVER_RX, unknownServerRx.get())
.add(REQUEST_RTT_MILLIS, requestRttMilis.get())
.add(REQUEST_RE_TX, requestReTx.get())
.add(NUM_SESSIONS_EXPIRED, numberOfSessionsExpired.get())
.add(EAPOL_LOGOFF_RX, eapolLogoffRx.get())
.add(EAPOL_AUTH_SUCCESS_TX, eapolAuthSuccessTx.get())
.add(EAPOL_AUTH_FAILURE_TX, eapolAuthFailureTx.get())
.add(EAPOL_START_REQ_RX, eapolStartReqRx.get())
.add(EAPOL_MD5_CHALLENGE_RESP_RX, eapolMd5ChallRespRx.get())
.add(EAPOL_TLS_CHALLENGE_RESP, eapolTlsChallResp.get())
.add(EAPOL_TRANS_RESP_NOT_NAK, eapolTransRespNotNak.get())
.add(EAPOL_CHALLENGE_REQ_TX, eapolChallengeReqTx.get())
.add(EAPOL_ID_RESP_FRAMES_RX, eapolAttrIdentity.get())
.add(EAPOL_ID_MSG_RESP_TX, eapolResIdentityMsgTrans.get())
.add(EAPOL_FRAMES_TX, eapolFramesTx.get())
.add(AUTH_STATE_IDLE, authStateIdle.get())
.add(EAPOL_ID_REQUEST_FRAMES_TX, eapolIdRequestFramesTx.get())
.add(EAPOL_REQUEST_FRAMES_TX, eapolReqFramesTx.get())
.add(INVALID_PKT_TYPE, invalidPktType.get())
.add(INVALID_BODY_LENGTH, invalidBodyLength.get())
.add(EAPOL_VALID_FRAMES_RX, eapolValidFramesRx.get())
.add(EAPOL_PENDING_REQUESTS, eapolPendingReq.get());
return helper.toString();
}
}