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