1647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi/* 2647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * Copyright (C) 2016 The Android Open Source Project 3647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * 4647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * Licensed under the Apache License, Version 2.0 (the "License"); 5647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * you may not use this file except in compliance with the License. 6647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * You may obtain a copy of the License at 7647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * 8647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * http://www.apache.org/licenses/LICENSE-2.0 9647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * 10647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * Unless required by applicable law or agreed to in writing, software 11647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * distributed under the License is distributed on an "AS IS" BASIS, 12647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * See the License for the specific language governing permissions and 14647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * limitations under the License. 15647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi */ 16647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi 17647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichipackage android.net.metrics; 18647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi 19647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichiimport android.os.Parcel; 20647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichiimport android.os.Parcelable; 21647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi 22647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi/** 23d7375ac9d79b86ffae9fc1e0d92505b6bfa57eb0Erik Kline * An event logged for an interface with APF capabilities when its IpClient state machine exits. 24647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi * {@hide} 25647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi */ 26647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichipublic final class ApfStats implements Parcelable { 27647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi 2822d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi /** time interval in milliseconds these stastistics covers. */ 2922d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi public long durationMs; 3022d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi /** number of received RAs. */ 3122d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi public int receivedRas; 3222d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi /** number of received RAs matching a known RA. */ 3322d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi public int matchingRas; 3422d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi /** number of received RAs ignored due to the MAX_RAS limit. */ 3522d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi public int droppedRas; 3622d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi /** number of received RAs with a minimum lifetime of 0. */ 3722d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi public int zeroLifetimeRas; 3822d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi /** number of received RAs that could not be parsed. */ 3922d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi public int parseErrors; 4022d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi /** number of APF program updates from receiving RAs.. */ 4122d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi public int programUpdates; 4222d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi /** total number of APF program updates. */ 4322d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi public int programUpdatesAll; 4422d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi /** number of APF program updates from allowing multicast traffic. */ 4522d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi public int programUpdatesAllowingMulticast; 4622d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi /** maximum APF program size advertised by hardware. */ 4722d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi public int maxProgramSize; 48647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi 4922d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi public ApfStats() { 50647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi } 51647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi 52647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi private ApfStats(Parcel in) { 53647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi this.durationMs = in.readLong(); 54647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi this.receivedRas = in.readInt(); 55647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi this.matchingRas = in.readInt(); 56647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi this.droppedRas = in.readInt(); 57647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi this.zeroLifetimeRas = in.readInt(); 58647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi this.parseErrors = in.readInt(); 59647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi this.programUpdates = in.readInt(); 6022d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi this.programUpdatesAll = in.readInt(); 6122d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi this.programUpdatesAllowingMulticast = in.readInt(); 62647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi this.maxProgramSize = in.readInt(); 63647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi } 64647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi 65647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi @Override 66647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi public void writeToParcel(Parcel out, int flags) { 67647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi out.writeLong(durationMs); 68647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi out.writeInt(receivedRas); 69647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi out.writeInt(matchingRas); 70647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi out.writeInt(droppedRas); 71647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi out.writeInt(zeroLifetimeRas); 72647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi out.writeInt(parseErrors); 73647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi out.writeInt(programUpdates); 7422d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi out.writeInt(programUpdatesAll); 7522d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi out.writeInt(programUpdatesAllowingMulticast); 76647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi out.writeInt(maxProgramSize); 77647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi } 78647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi 79647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi @Override 80647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi public int describeContents() { 81647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi return 0; 82647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi } 83647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi 84647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi @Override 85647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi public String toString() { 86647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi return new StringBuilder("ApfStats(") 87647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi .append(String.format("%dms ", durationMs)) 88647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi .append(String.format("%dB RA: {", maxProgramSize)) 89647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi .append(String.format("%d received, ", receivedRas)) 90647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi .append(String.format("%d matching, ", matchingRas)) 91647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi .append(String.format("%d dropped, ", droppedRas)) 92647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi .append(String.format("%d zero lifetime, ", zeroLifetimeRas)) 9322d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi .append(String.format("%d parse errors}, ", parseErrors)) 9422d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi .append(String.format("updates: {all: %d, RAs: %d, allow multicast: %d})", 9522d9b2d430c9a4fe17b54811bb77289b821e32dbHugo Benichi programUpdatesAll, programUpdates, programUpdatesAllowingMulticast)) 96647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi .toString(); 97647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi } 98647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi 99647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi public static final Parcelable.Creator<ApfStats> CREATOR = new Parcelable.Creator<ApfStats>() { 100647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi public ApfStats createFromParcel(Parcel in) { 101647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi return new ApfStats(in); 102647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi } 103647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi 104647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi public ApfStats[] newArray(int size) { 105647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi return new ApfStats[size]; 106647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi } 107647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi }; 108647c86d70a0f2162dcc95854e9dccb925c16ecf3Hugo Benichi} 109