1 /*
2  * Copyright (C) 2016 The Android Open Source Project
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 
17 package android.net.metrics;
18 
19 import android.os.Parcel;
20 import android.os.Parcelable;
21 
22 /**
23  * An event logged for an interface with APF capabilities when its IpClient state machine exits.
24  * {@hide}
25  */
26 public final class ApfStats implements Parcelable {
27 
28     /** time interval in milliseconds these stastistics covers. */
29     public long durationMs;
30     /** number of received RAs. */
31     public int receivedRas;
32     /** number of received RAs matching a known RA. */
33     public int matchingRas;
34     /** number of received RAs ignored due to the MAX_RAS limit. */
35     public int droppedRas;
36     /** number of received RAs with a minimum lifetime of 0. */
37     public int zeroLifetimeRas;
38     /** number of received RAs that could not be parsed. */
39     public int parseErrors;
40     /** number of APF program updates from receiving RAs.. */
41     public int programUpdates;
42     /** total number of APF program updates. */
43     public int programUpdatesAll;
44     /** number of APF program updates from allowing multicast traffic. */
45     public int programUpdatesAllowingMulticast;
46     /** maximum APF program size advertised by hardware. */
47     public int maxProgramSize;
48 
ApfStats()49     public ApfStats() {
50     }
51 
ApfStats(Parcel in)52     private ApfStats(Parcel in) {
53         this.durationMs = in.readLong();
54         this.receivedRas = in.readInt();
55         this.matchingRas = in.readInt();
56         this.droppedRas = in.readInt();
57         this.zeroLifetimeRas = in.readInt();
58         this.parseErrors = in.readInt();
59         this.programUpdates = in.readInt();
60         this.programUpdatesAll = in.readInt();
61         this.programUpdatesAllowingMulticast = in.readInt();
62         this.maxProgramSize = in.readInt();
63     }
64 
65     @Override
writeToParcel(Parcel out, int flags)66     public void writeToParcel(Parcel out, int flags) {
67         out.writeLong(durationMs);
68         out.writeInt(receivedRas);
69         out.writeInt(matchingRas);
70         out.writeInt(droppedRas);
71         out.writeInt(zeroLifetimeRas);
72         out.writeInt(parseErrors);
73         out.writeInt(programUpdates);
74         out.writeInt(programUpdatesAll);
75         out.writeInt(programUpdatesAllowingMulticast);
76         out.writeInt(maxProgramSize);
77     }
78 
79     @Override
describeContents()80     public int describeContents() {
81         return 0;
82     }
83 
84     @Override
toString()85     public String toString() {
86         return new StringBuilder("ApfStats(")
87                 .append(String.format("%dms ", durationMs))
88                 .append(String.format("%dB RA: {", maxProgramSize))
89                 .append(String.format("%d received, ", receivedRas))
90                 .append(String.format("%d matching, ", matchingRas))
91                 .append(String.format("%d dropped, ", droppedRas))
92                 .append(String.format("%d zero lifetime, ", zeroLifetimeRas))
93                 .append(String.format("%d parse errors}, ", parseErrors))
94                 .append(String.format("updates: {all: %d, RAs: %d, allow multicast: %d})",
95                         programUpdatesAll, programUpdates, programUpdatesAllowingMulticast))
96                 .toString();
97     }
98 
99     public static final Parcelable.Creator<ApfStats> CREATOR = new Parcelable.Creator<ApfStats>() {
100         public ApfStats createFromParcel(Parcel in) {
101             return new ApfStats(in);
102         }
103 
104         public ApfStats[] newArray(int size) {
105             return new ApfStats[size];
106         }
107     };
108 }
109