diff options
| author | Remi NGUYEN VAN <reminv@google.com> | 2019-01-19 21:13:24 +0900 |
|---|---|---|
| committer | Remi NGUYEN VAN <reminv@google.com> | 2019-01-21 23:24:41 +0000 |
| commit | 7b84fb336f92c71fa4dd7a8bfe662966f954fa33 (patch) | |
| tree | 6c45563fe34b84d5ba752e00e4ff50c239bc489d /core/java/android | |
| parent | 1f4cce2f198308a0c8ee375503225ed1f6e1f2f4 (diff) | |
Add NetworkStack metrics to system API
Test: atest FrameworksNetTests NetworkStackTests
Bug: 112869080
Change-Id: Ie52c55f248c173e2a5ee603ecd004fbac9004ac1
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/net/metrics/ApfProgramEvent.java | 110 | ||||
| -rw-r--r-- | core/java/android/net/metrics/ApfStats.java | 206 | ||||
| -rw-r--r-- | core/java/android/net/metrics/DhcpClientEvent.java | 44 | ||||
| -rw-r--r-- | core/java/android/net/metrics/DhcpErrorEvent.java | 29 | ||||
| -rw-r--r-- | core/java/android/net/metrics/IpConnectivityLog.java | 26 | ||||
| -rw-r--r-- | core/java/android/net/metrics/IpManagerEvent.java | 16 | ||||
| -rw-r--r-- | core/java/android/net/metrics/IpReachabilityEvent.java | 24 | ||||
| -rw-r--r-- | core/java/android/net/metrics/NetworkEvent.java | 12 | ||||
| -rw-r--r-- | core/java/android/net/metrics/RaEvent.java | 2 | ||||
| -rw-r--r-- | core/java/android/net/metrics/ValidationProbeEvent.java | 70 |
10 files changed, 446 insertions, 93 deletions
diff --git a/core/java/android/net/metrics/ApfProgramEvent.java b/core/java/android/net/metrics/ApfProgramEvent.java index 5dabf35c4867..8601005c8af4 100644 --- a/core/java/android/net/metrics/ApfProgramEvent.java +++ b/core/java/android/net/metrics/ApfProgramEvent.java @@ -17,6 +17,8 @@ package android.net.metrics; import android.annotation.IntDef; +import android.annotation.SystemApi; +import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -36,11 +38,15 @@ import java.util.List; * the APF program in place with a new APF program. * {@hide} */ -public final class ApfProgramEvent implements Parcelable { +@TestApi +@SystemApi +public final class ApfProgramEvent implements IpConnectivityLog.Event { // Bitflag constants describing what an Apf program filters. // Bits are indexeds from LSB to MSB, starting at index 0. + /** @hide */ public static final int FLAG_MULTICAST_FILTER_ON = 0; + /** @hide */ public static final int FLAG_HAS_IPV4_ADDRESS = 1; /** {@hide} */ @@ -48,21 +54,33 @@ public final class ApfProgramEvent implements Parcelable { @Retention(RetentionPolicy.SOURCE) public @interface Flags {} + /** @hide */ @UnsupportedAppUsage - public long lifetime; // Maximum computed lifetime of the program in seconds + public final long lifetime; // Maximum computed lifetime of the program in seconds + /** @hide */ @UnsupportedAppUsage - public long actualLifetime; // Effective program lifetime in seconds + public final long actualLifetime; // Effective program lifetime in seconds + /** @hide */ @UnsupportedAppUsage - public int filteredRas; // Number of RAs filtered by the APF program + public final int filteredRas; // Number of RAs filtered by the APF program + /** @hide */ @UnsupportedAppUsage - public int currentRas; // Total number of current RAs at generation time + public final int currentRas; // Total number of current RAs at generation time + /** @hide */ @UnsupportedAppUsage - public int programLength; // Length of the APF program in bytes + public final int programLength; // Length of the APF program in bytes + /** @hide */ @UnsupportedAppUsage - public int flags; // Bitfield compound of FLAG_* constants - - @UnsupportedAppUsage - public ApfProgramEvent() { + public final int flags; // Bitfield compound of FLAG_* constants + + private ApfProgramEvent(long lifetime, long actualLifetime, int filteredRas, int currentRas, + int programLength, int flags) { + this.lifetime = lifetime; + this.actualLifetime = actualLifetime; + this.filteredRas = filteredRas; + this.currentRas = currentRas; + this.programLength = programLength; + this.flags = flags; } private ApfProgramEvent(Parcel in) { @@ -74,6 +92,75 @@ public final class ApfProgramEvent implements Parcelable { this.flags = in.readInt(); } + /** + * Utility to create an instance of {@link ApfProgramEvent}. + */ + public static class Builder { + private long mLifetime; + private long mActualLifetime; + private int mFilteredRas; + private int mCurrentRas; + private int mProgramLength; + private int mFlags; + + /** + * Set the maximum computed lifetime of the program in seconds. + */ + public Builder setLifetime(long lifetime) { + mLifetime = lifetime; + return this; + } + + /** + * Set the effective program lifetime in seconds. + */ + public Builder setActualLifetime(long lifetime) { + mActualLifetime = lifetime; + return this; + } + + /** + * Set the number of RAs filtered by the APF program. + */ + public Builder setFilteredRas(int filteredRas) { + mFilteredRas = filteredRas; + return this; + } + + /** + * Set the total number of current RAs at generation time. + */ + public Builder setCurrentRas(int currentRas) { + mCurrentRas = currentRas; + return this; + } + + /** + * Set the length of the APF program in bytes. + */ + public Builder setProgramLength(int programLength) { + mProgramLength = programLength; + return this; + } + + /** + * Set the flags describing what an Apf program filters. + */ + public Builder setFlags(boolean hasIPv4, boolean multicastFilterOn) { + mFlags = flagsFor(hasIPv4, multicastFilterOn); + return this; + } + + /** + * Build a new {@link ApfProgramEvent}. + */ + public ApfProgramEvent build() { + return new ApfProgramEvent(mLifetime, mActualLifetime, mFilteredRas, mCurrentRas, + mProgramLength, mFlags); + } + } + + /** @hide */ @Override public void writeToParcel(Parcel out, int flags) { out.writeLong(lifetime); @@ -84,6 +171,7 @@ public final class ApfProgramEvent implements Parcelable { out.writeInt(flags); } + /** @hide */ @Override public int describeContents() { return 0; @@ -96,6 +184,7 @@ public final class ApfProgramEvent implements Parcelable { programLength, actualLifetime, lifetimeString, namesOf(flags)); } + /** @hide */ public static final Parcelable.Creator<ApfProgramEvent> CREATOR = new Parcelable.Creator<ApfProgramEvent>() { public ApfProgramEvent createFromParcel(Parcel in) { @@ -107,6 +196,7 @@ public final class ApfProgramEvent implements Parcelable { } }; + /** @hide */ @UnsupportedAppUsage public static @Flags int flagsFor(boolean hasIPv4, boolean multicastFilterOn) { int bitfield = 0; diff --git a/core/java/android/net/metrics/ApfStats.java b/core/java/android/net/metrics/ApfStats.java index bb2a35c58667..844a1342a7fa 100644 --- a/core/java/android/net/metrics/ApfStats.java +++ b/core/java/android/net/metrics/ApfStats.java @@ -16,6 +16,8 @@ package android.net.metrics; +import android.annotation.SystemApi; +import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -24,42 +26,70 @@ import android.os.Parcelable; * An event logged for an interface with APF capabilities when its IpClient state machine exits. * {@hide} */ -public final class ApfStats implements Parcelable { +@SystemApi +@TestApi +public final class ApfStats implements IpConnectivityLog.Event { - /** time interval in milliseconds these stastistics covers. */ + /** + * time interval in milliseconds these stastistics covers. + * @hide + */ @UnsupportedAppUsage - public long durationMs; - /** number of received RAs. */ + public final long durationMs; + /** + * number of received RAs. + * @hide + */ @UnsupportedAppUsage - public int receivedRas; - /** number of received RAs matching a known RA. */ + public final int receivedRas; + /** + * number of received RAs matching a known RA. + * @hide + */ @UnsupportedAppUsage - public int matchingRas; - /** number of received RAs ignored due to the MAX_RAS limit. */ + public final int matchingRas; + /** + * number of received RAs ignored due to the MAX_RAS limit. + * @hide + */ @UnsupportedAppUsage - public int droppedRas; - /** number of received RAs with a minimum lifetime of 0. */ + public final int droppedRas; + /** + * number of received RAs with a minimum lifetime of 0. + * @hide + */ @UnsupportedAppUsage - public int zeroLifetimeRas; - /** number of received RAs that could not be parsed. */ + public final int zeroLifetimeRas; + /** + * number of received RAs that could not be parsed. + * @hide + */ @UnsupportedAppUsage - public int parseErrors; - /** number of APF program updates from receiving RAs.. */ + public final int parseErrors; + /** + * number of APF program updates from receiving RAs. + * @hide + */ @UnsupportedAppUsage - public int programUpdates; - /** total number of APF program updates. */ + public final int programUpdates; + /** + * total number of APF program updates. + * @hide + */ @UnsupportedAppUsage - public int programUpdatesAll; - /** number of APF program updates from allowing multicast traffic. */ + public final int programUpdatesAll; + /** + * number of APF program updates from allowing multicast traffic. + * @hide + */ @UnsupportedAppUsage - public int programUpdatesAllowingMulticast; - /** maximum APF program size advertised by hardware. */ + public final int programUpdatesAllowingMulticast; + /** + * maximum APF program size advertised by hardware. + * @hide + */ @UnsupportedAppUsage - public int maxProgramSize; - - @UnsupportedAppUsage - public ApfStats() { - } + public final int maxProgramSize; private ApfStats(Parcel in) { this.durationMs = in.readLong(); @@ -74,6 +104,130 @@ public final class ApfStats implements Parcelable { this.maxProgramSize = in.readInt(); } + private ApfStats(long durationMs, int receivedRas, int matchingRas, int droppedRas, + int zeroLifetimeRas, int parseErrors, int programUpdates, int programUpdatesAll, + int programUpdatesAllowingMulticast, int maxProgramSize) { + this.durationMs = durationMs; + this.receivedRas = receivedRas; + this.matchingRas = matchingRas; + this.droppedRas = droppedRas; + this.zeroLifetimeRas = zeroLifetimeRas; + this.parseErrors = parseErrors; + this.programUpdates = programUpdates; + this.programUpdatesAll = programUpdatesAll; + this.programUpdatesAllowingMulticast = programUpdatesAllowingMulticast; + this.maxProgramSize = maxProgramSize; + } + + /** + * Utility to create an instance of {@link ApfStats}. + * @hide + */ + @SystemApi + @TestApi + public static class Builder { + private long mDurationMs; + private int mReceivedRas; + private int mMatchingRas; + private int mDroppedRas; + private int mZeroLifetimeRas; + private int mParseErrors; + private int mProgramUpdates; + private int mProgramUpdatesAll; + private int mProgramUpdatesAllowingMulticast; + private int mMaxProgramSize; + + /** + * Set the time interval in milliseconds these statistics covers. + */ + public Builder setDurationMs(long durationMs) { + mDurationMs = durationMs; + return this; + } + + /** + * Set the number of received RAs. + */ + public Builder setReceivedRas(int receivedRas) { + mReceivedRas = receivedRas; + return this; + } + + /** + * Set the number of received RAs matching a known RA. + */ + public Builder setMatchingRas(int matchingRas) { + mMatchingRas = matchingRas; + return this; + } + + /** + * Set the number of received RAs ignored due to the MAX_RAS limit. + */ + public Builder setDroppedRas(int droppedRas) { + mDroppedRas = droppedRas; + return this; + } + + /** + * Set the number of received RAs with a minimum lifetime of 0. + */ + public Builder setZeroLifetimeRas(int zeroLifetimeRas) { + mZeroLifetimeRas = zeroLifetimeRas; + return this; + } + + /** + * Set the number of received RAs that could not be parsed. + */ + public Builder setParseErrors(int parseErrors) { + mParseErrors = parseErrors; + return this; + } + + /** + * Set the number of APF program updates from receiving RAs. + */ + public Builder setProgramUpdates(int programUpdates) { + mProgramUpdates = programUpdates; + return this; + } + + /** + * Set the total number of APF program updates. + */ + public Builder setProgramUpdatesAll(int programUpdatesAll) { + mProgramUpdatesAll = programUpdatesAll; + return this; + } + + /** + * Set the number of APF program updates from allowing multicast traffic. + */ + public Builder setProgramUpdatesAllowingMulticast(int programUpdatesAllowingMulticast) { + mProgramUpdatesAllowingMulticast = programUpdatesAllowingMulticast; + return this; + } + + /** + * Set the maximum APF program size advertised by hardware. + */ + public Builder setMaxProgramSize(int maxProgramSize) { + mMaxProgramSize = maxProgramSize; + return this; + } + + /** + * Create a new {@link ApfStats}. + */ + public ApfStats build() { + return new ApfStats(mDurationMs, mReceivedRas, mMatchingRas, mDroppedRas, + mZeroLifetimeRas, mParseErrors, mProgramUpdates, mProgramUpdatesAll, + mProgramUpdatesAllowingMulticast, mMaxProgramSize); + } + } + + /** @hide */ @Override public void writeToParcel(Parcel out, int flags) { out.writeLong(durationMs); @@ -88,6 +242,7 @@ public final class ApfStats implements Parcelable { out.writeInt(maxProgramSize); } + /** @hide */ @Override public int describeContents() { return 0; @@ -108,6 +263,7 @@ public final class ApfStats implements Parcelable { .toString(); } + /** @hide */ public static final Parcelable.Creator<ApfStats> CREATOR = new Parcelable.Creator<ApfStats>() { public ApfStats createFromParcel(Parcel in) { return new ApfStats(in); diff --git a/core/java/android/net/metrics/DhcpClientEvent.java b/core/java/android/net/metrics/DhcpClientEvent.java index 98a7d7e8de9a..2a942eedcb47 100644 --- a/core/java/android/net/metrics/DhcpClientEvent.java +++ b/core/java/android/net/metrics/DhcpClientEvent.java @@ -16,6 +16,8 @@ package android.net.metrics; +import android.annotation.SystemApi; +import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -24,7 +26,9 @@ import android.os.Parcelable; * An event recorded when a DhcpClient state machine transitions to a new state. * {@hide} */ -public final class DhcpClientEvent implements Parcelable { +@SystemApi +@TestApi +public final class DhcpClientEvent implements IpConnectivityLog.Event { // Names for recording DhcpClient pseudo-state transitions. /** {@hide} Represents transitions from DhcpInitState to DhcpBoundState */ @@ -32,11 +36,13 @@ public final class DhcpClientEvent implements Parcelable { /** {@hide} Represents transitions from and to DhcpBoundState via DhcpRenewingState */ public static final String RENEWING_BOUND = "RenewingBoundState"; + /** @hide */ public final String msg; + /** @hide */ public final int durationMs; @UnsupportedAppUsage - public DhcpClientEvent(String msg, int durationMs) { + private DhcpClientEvent(String msg, int durationMs) { this.msg = msg; this.durationMs = durationMs; } @@ -46,12 +52,45 @@ public final class DhcpClientEvent implements Parcelable { this.durationMs = in.readInt(); } + /** + * Utility to create an instance of {@link ApfProgramEvent}. + */ + public static class Builder { + private String mMsg; + private int mDurationMs; + + /** + * Set the message of the event. + */ + public Builder setMsg(String msg) { + mMsg = msg; + return this; + } + + /** + * Set the duration of the event in milliseconds. + */ + public Builder setDurationMs(int durationMs) { + mDurationMs = durationMs; + return this; + } + + /** + * Create a new {@link DhcpClientEvent}. + */ + public DhcpClientEvent build() { + return new DhcpClientEvent(mMsg, mDurationMs); + } + } + + /** @hide */ @Override public void writeToParcel(Parcel out, int flags) { out.writeString(msg); out.writeInt(durationMs); } + /** @hide */ @Override public int describeContents() { return 0; @@ -62,6 +101,7 @@ public final class DhcpClientEvent implements Parcelable { return String.format("DhcpClientEvent(%s, %dms)", msg, durationMs); } + /** @hide */ public static final Parcelable.Creator<DhcpClientEvent> CREATOR = new Parcelable.Creator<DhcpClientEvent>() { public DhcpClientEvent createFromParcel(Parcel in) { diff --git a/core/java/android/net/metrics/DhcpErrorEvent.java b/core/java/android/net/metrics/DhcpErrorEvent.java index c6c06f0e59e9..18fde80b69b0 100644 --- a/core/java/android/net/metrics/DhcpErrorEvent.java +++ b/core/java/android/net/metrics/DhcpErrorEvent.java @@ -16,7 +16,8 @@ package android.net.metrics; -import android.annotation.UnsupportedAppUsage; +import android.annotation.SystemApi; +import android.annotation.TestApi; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; @@ -27,48 +28,34 @@ import com.android.internal.util.MessageUtils; * Event class used to record error events when parsing DHCP response packets. * {@hide} */ -public final class DhcpErrorEvent implements Parcelable { +@SystemApi +@TestApi +public final class DhcpErrorEvent implements IpConnectivityLog.Event { public static final int L2_ERROR = 1; public static final int L3_ERROR = 2; public static final int L4_ERROR = 3; public static final int DHCP_ERROR = 4; public static final int MISC_ERROR = 5; - @UnsupportedAppUsage public static final int L2_TOO_SHORT = makeErrorCode(L2_ERROR, 1); - @UnsupportedAppUsage public static final int L2_WRONG_ETH_TYPE = makeErrorCode(L2_ERROR, 2); - @UnsupportedAppUsage public static final int L3_TOO_SHORT = makeErrorCode(L3_ERROR, 1); - @UnsupportedAppUsage public static final int L3_NOT_IPV4 = makeErrorCode(L3_ERROR, 2); - @UnsupportedAppUsage public static final int L3_INVALID_IP = makeErrorCode(L3_ERROR, 3); - @UnsupportedAppUsage public static final int L4_NOT_UDP = makeErrorCode(L4_ERROR, 1); - @UnsupportedAppUsage public static final int L4_WRONG_PORT = makeErrorCode(L4_ERROR, 2); - @UnsupportedAppUsage public static final int BOOTP_TOO_SHORT = makeErrorCode(DHCP_ERROR, 1); - @UnsupportedAppUsage public static final int DHCP_BAD_MAGIC_COOKIE = makeErrorCode(DHCP_ERROR, 2); - @UnsupportedAppUsage public static final int DHCP_INVALID_OPTION_LENGTH = makeErrorCode(DHCP_ERROR, 3); - @UnsupportedAppUsage public static final int DHCP_NO_MSG_TYPE = makeErrorCode(DHCP_ERROR, 4); - @UnsupportedAppUsage public static final int DHCP_UNKNOWN_MSG_TYPE = makeErrorCode(DHCP_ERROR, 5); - @UnsupportedAppUsage public static final int DHCP_NO_COOKIE = makeErrorCode(DHCP_ERROR, 6); - @UnsupportedAppUsage public static final int BUFFER_UNDERFLOW = makeErrorCode(MISC_ERROR, 1); - @UnsupportedAppUsage public static final int RECEIVE_ERROR = makeErrorCode(MISC_ERROR, 2); - @UnsupportedAppUsage public static final int PARSING_ERROR = makeErrorCode(MISC_ERROR, 3); // error code byte format (MSB to LSB): @@ -76,9 +63,9 @@ public final class DhcpErrorEvent implements Parcelable { // byte 1: error subtype // byte 2: unused // byte 3: optional code + /** @hide */ public final int errorCode; - @UnsupportedAppUsage public DhcpErrorEvent(int errorCode) { this.errorCode = errorCode; } @@ -87,16 +74,19 @@ public final class DhcpErrorEvent implements Parcelable { this.errorCode = in.readInt(); } + /** @hide */ @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(errorCode); } + /** @hide */ @Override public int describeContents() { return 0; } + /** @hide */ public static final Parcelable.Creator<DhcpErrorEvent> CREATOR = new Parcelable.Creator<DhcpErrorEvent>() { public DhcpErrorEvent createFromParcel(Parcel in) { @@ -108,7 +98,6 @@ public final class DhcpErrorEvent implements Parcelable { } }; - @UnsupportedAppUsage public static int errorCodeWithOption(int errorCode, int option) { return (0xFFFF0000 & errorCode) | (0xFF & option); } diff --git a/core/java/android/net/metrics/IpConnectivityLog.java b/core/java/android/net/metrics/IpConnectivityLog.java index 998f4ba40daa..c04fcdcadb10 100644 --- a/core/java/android/net/metrics/IpConnectivityLog.java +++ b/core/java/android/net/metrics/IpConnectivityLog.java @@ -16,6 +16,8 @@ package android.net.metrics; +import android.annotation.SystemApi; +import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.net.ConnectivityMetricsEvent; import android.net.IIpConnectivityMetrics; @@ -23,6 +25,7 @@ import android.os.Parcelable; import android.os.RemoteException; import android.os.ServiceManager; import android.util.Log; + import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.BitUtils; @@ -30,18 +33,28 @@ import com.android.internal.util.BitUtils; * Class for logging IpConnectvity events with IpConnectivityMetrics * {@hide} */ +@SystemApi +@TestApi public class IpConnectivityLog { private static final String TAG = IpConnectivityLog.class.getSimpleName(); private static final boolean DBG = false; + /** @hide */ public static final String SERVICE_NAME = "connmetrics"; private IIpConnectivityMetrics mService; + /** + * An event to be logged. + */ + public interface Event extends Parcelable {} + + /** @hide */ @UnsupportedAppUsage public IpConnectivityLog() { } + /** @hide */ @VisibleForTesting public IpConnectivityLog(IIpConnectivityMetrics service) { mService = service; @@ -67,6 +80,7 @@ public class IpConnectivityLog { * @param ev the event to log. If the event timestamp is 0, * the timestamp is set to the current time in milliseconds. * @return true if the event was successfully logged. + * @hide */ public boolean log(ConnectivityMetricsEvent ev) { if (!checkLoggerService()) { @@ -94,7 +108,7 @@ public class IpConnectivityLog { * @param data is a Parcelable instance representing the event. * @return true if the event was successfully logged. */ - public boolean log(long timestamp, Parcelable data) { + public boolean log(long timestamp, Event data) { ConnectivityMetricsEvent ev = makeEv(data); ev.timestamp = timestamp; return log(ev); @@ -106,8 +120,7 @@ public class IpConnectivityLog { * @param data is a Parcelable instance representing the event. * @return true if the event was successfully logged. */ - @UnsupportedAppUsage - public boolean log(String ifname, Parcelable data) { + public boolean log(String ifname, Event data) { ConnectivityMetricsEvent ev = makeEv(data); ev.ifname = ifname; return log(ev); @@ -121,7 +134,7 @@ public class IpConnectivityLog { * @param data is a Parcelable instance representing the event. * @return true if the event was successfully logged. */ - public boolean log(int netid, int[] transports, Parcelable data) { + public boolean log(int netid, int[] transports, Event data) { ConnectivityMetricsEvent ev = makeEv(data); ev.netId = netid; ev.transports = BitUtils.packBits(transports); @@ -133,12 +146,11 @@ public class IpConnectivityLog { * @param data is a Parcelable instance representing the event. * @return true if the event was successfully logged. */ - @UnsupportedAppUsage - public boolean log(Parcelable data) { + public boolean log(Event data) { return log(makeEv(data)); } - private static ConnectivityMetricsEvent makeEv(Parcelable data) { + private static ConnectivityMetricsEvent makeEv(Event data) { ConnectivityMetricsEvent ev = new ConnectivityMetricsEvent(); ev.data = data; return ev; diff --git a/core/java/android/net/metrics/IpManagerEvent.java b/core/java/android/net/metrics/IpManagerEvent.java index c47650f87544..013e3530a941 100644 --- a/core/java/android/net/metrics/IpManagerEvent.java +++ b/core/java/android/net/metrics/IpManagerEvent.java @@ -17,7 +17,8 @@ package android.net.metrics; import android.annotation.IntDef; -import android.annotation.UnsupportedAppUsage; +import android.annotation.SystemApi; +import android.annotation.TestApi; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; @@ -28,11 +29,13 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** - * An event recorded by IpManager when IP provisioning completes for a network or + * An event recorded by IpClient when IP provisioning completes for a network or * when a network disconnects. * {@hide} */ -public final class IpManagerEvent implements Parcelable { +@SystemApi +@TestApi +public final class IpManagerEvent implements IpConnectivityLog.Event { public static final int PROVISIONING_OK = 1; public static final int PROVISIONING_FAIL = 2; @@ -43,6 +46,7 @@ public final class IpManagerEvent implements Parcelable { public static final int ERROR_INVALID_PROVISIONING = 7; public static final int ERROR_INTERFACE_NOT_FOUND = 8; + /** @hide */ @IntDef(value = { PROVISIONING_OK, PROVISIONING_FAIL, COMPLETE_LIFECYCLE, ERROR_STARTING_IPV4, ERROR_STARTING_IPV6, ERROR_STARTING_IPREACHABILITYMONITOR, @@ -51,10 +55,11 @@ public final class IpManagerEvent implements Parcelable { @Retention(RetentionPolicy.SOURCE) public @interface EventType {} + /** @hide */ public final @EventType int eventType; + /** @hide */ public final long durationMs; - @UnsupportedAppUsage public IpManagerEvent(@EventType int eventType, long duration) { this.eventType = eventType; this.durationMs = duration; @@ -65,17 +70,20 @@ public final class IpManagerEvent implements Parcelable { this.durationMs = in.readLong(); } + /** @hide */ @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(eventType); out.writeLong(durationMs); } + /** @hide */ @Override public int describeContents() { return 0; } + /** @hide */ public static final Parcelable.Creator<IpManagerEvent> CREATOR = new Parcelable.Creator<IpManagerEvent>() { public IpManagerEvent createFromParcel(Parcel in) { diff --git a/core/java/android/net/metrics/IpReachabilityEvent.java b/core/java/android/net/metrics/IpReachabilityEvent.java index 715c95e7270b..c7362979af61 100644 --- a/core/java/android/net/metrics/IpReachabilityEvent.java +++ b/core/java/android/net/metrics/IpReachabilityEvent.java @@ -16,7 +16,8 @@ package android.net.metrics; -import android.annotation.UnsupportedAppUsage; +import android.annotation.SystemApi; +import android.annotation.TestApi; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; @@ -28,7 +29,9 @@ import com.android.internal.util.MessageUtils; * a neighbor probe result. * {@hide} */ -public final class IpReachabilityEvent implements Parcelable { +@SystemApi +@TestApi +public final class IpReachabilityEvent implements IpConnectivityLog.Event { // Event types. /** A probe forced by IpReachabilityMonitor. */ @@ -47,9 +50,9 @@ public final class IpReachabilityEvent implements Parcelable { // byte 1: unused // byte 2: type of event: PROBE, NUD_FAILED, PROVISIONING_LOST // byte 3: when byte 2 == PROBE, errno code from RTNetlink or IpReachabilityMonitor. + /** @hide */ public final int eventType; - @UnsupportedAppUsage public IpReachabilityEvent(int eventType) { this.eventType = eventType; } @@ -58,16 +61,19 @@ public final class IpReachabilityEvent implements Parcelable { this.eventType = in.readInt(); } + /** @hide */ @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(eventType); } + /** @hide */ @Override public int describeContents() { return 0; } + /** @hide */ public static final Parcelable.Creator<IpReachabilityEvent> CREATOR = new Parcelable.Creator<IpReachabilityEvent>() { public IpReachabilityEvent createFromParcel(Parcel in) { @@ -79,18 +85,6 @@ public final class IpReachabilityEvent implements Parcelable { } }; - /** - * Returns the NUD failure event type code corresponding to the given conditions. - */ - @UnsupportedAppUsage - public static int nudFailureEventType(boolean isFromProbe, boolean isProvisioningLost) { - if (isFromProbe) { - return isProvisioningLost ? PROVISIONING_LOST : NUD_FAILED; - } else { - return isProvisioningLost ? PROVISIONING_LOST_ORGANIC : NUD_FAILED_ORGANIC; - } - } - @Override public String toString() { int hi = eventType & 0xff00; diff --git a/core/java/android/net/metrics/NetworkEvent.java b/core/java/android/net/metrics/NetworkEvent.java index cb82fbe71f6b..f5b2ff130494 100644 --- a/core/java/android/net/metrics/NetworkEvent.java +++ b/core/java/android/net/metrics/NetworkEvent.java @@ -17,6 +17,8 @@ package android.net.metrics; import android.annotation.IntDef; +import android.annotation.SystemApi; +import android.annotation.TestApi; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; @@ -29,7 +31,9 @@ import java.lang.annotation.RetentionPolicy; /** * {@hide} */ -public final class NetworkEvent implements Parcelable { +@SystemApi +@TestApi +public final class NetworkEvent implements IpConnectivityLog.Event { public static final int NETWORK_CONNECTED = 1; public static final int NETWORK_VALIDATED = 2; @@ -46,6 +50,7 @@ public final class NetworkEvent implements Parcelable { public static final int NETWORK_CONSECUTIVE_DNS_TIMEOUT_FOUND = 12; + /** @hide */ @IntDef(value = { NETWORK_CONNECTED, NETWORK_VALIDATED, @@ -63,7 +68,9 @@ public final class NetworkEvent implements Parcelable { @Retention(RetentionPolicy.SOURCE) public @interface EventType {} + /** @hide */ public final @EventType int eventType; + /** @hide */ public final long durationMs; public NetworkEvent(@EventType int eventType, long durationMs) { @@ -80,17 +87,20 @@ public final class NetworkEvent implements Parcelable { durationMs = in.readLong(); } + /** @hide */ @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(eventType); out.writeLong(durationMs); } + /** @hide */ @Override public int describeContents() { return 0; } + /** @hide */ public static final Parcelable.Creator<NetworkEvent> CREATOR = new Parcelable.Creator<NetworkEvent>() { public NetworkEvent createFromParcel(Parcel in) { diff --git a/core/java/android/net/metrics/RaEvent.java b/core/java/android/net/metrics/RaEvent.java index c41881ca34fb..d308246f4d77 100644 --- a/core/java/android/net/metrics/RaEvent.java +++ b/core/java/android/net/metrics/RaEvent.java @@ -24,7 +24,7 @@ import android.os.Parcelable; * An event logged when the APF packet socket receives an RA packet. * {@hide} */ -public final class RaEvent implements Parcelable { +public final class RaEvent implements IpConnectivityLog.Event { public static final long NO_LIFETIME = -1L; diff --git a/core/java/android/net/metrics/ValidationProbeEvent.java b/core/java/android/net/metrics/ValidationProbeEvent.java index 12c2305dd78e..42e8aa6dc248 100644 --- a/core/java/android/net/metrics/ValidationProbeEvent.java +++ b/core/java/android/net/metrics/ValidationProbeEvent.java @@ -17,6 +17,8 @@ package android.net.metrics; import android.annotation.IntDef; +import android.annotation.SystemApi; +import android.annotation.TestApi; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; @@ -30,7 +32,9 @@ import java.lang.annotation.RetentionPolicy; * An event recorded by NetworkMonitor when sending a probe for finding captive portals. * {@hide} */ -public final class ValidationProbeEvent implements Parcelable { +@SystemApi +@TestApi +public final class ValidationProbeEvent implements IpConnectivityLog.Event { public static final int PROBE_DNS = 0; public static final int PROBE_HTTP = 1; @@ -45,20 +49,27 @@ public final class ValidationProbeEvent implements Parcelable { private static final int FIRST_VALIDATION = 1 << 8; private static final int REVALIDATION = 2 << 8; + /** @hide */ @IntDef(value = {DNS_FAILURE, DNS_SUCCESS}) @Retention(RetentionPolicy.SOURCE) public @interface ReturnCode {} - public long durationMs; + /** @hide */ + public final long durationMs; // probeType byte format (MSB to LSB): // byte 0: unused // byte 1: unused // byte 2: 0 = UNKNOWN, 1 = FIRST_VALIDATION, 2 = REVALIDATION // byte 3: PROBE_* constant - public int probeType; - public @ReturnCode int returnCode; - - public ValidationProbeEvent() { + /** @hide */ + public final int probeType; + /** @hide */ + public final @ReturnCode int returnCode; + + private ValidationProbeEvent(long durationMs, int probeType, int returnCode) { + this.durationMs = durationMs; + this.probeType = probeType; + this.returnCode = returnCode; } private ValidationProbeEvent(Parcel in) { @@ -67,6 +78,47 @@ public final class ValidationProbeEvent implements Parcelable { returnCode = in.readInt(); } + /** + * Utility to create an instance of {@link ApfProgramEvent}. + */ + public static class Builder { + private long mDurationMs; + private int mProbeType; + private int mReturnCode; + + /** + * Set the duration of the probe in milliseconds. + */ + public Builder setDurationMs(long durationMs) { + mDurationMs = durationMs; + return this; + } + + /** + * Set the probe type based on whether it was the first validation. + */ + public Builder setProbeType(int probeType, boolean firstValidation) { + mProbeType = makeProbeType(probeType, firstValidation); + return this; + } + + /** + * Set the return code of the probe. + */ + public Builder setReturnCode(int returnCode) { + mReturnCode = returnCode; + return this; + } + + /** + * Create a new {@link ValidationProbeEvent}. + */ + public ValidationProbeEvent build() { + return new ValidationProbeEvent(mDurationMs, mProbeType, mReturnCode); + } + } + + /** @hide */ @Override public void writeToParcel(Parcel out, int flags) { out.writeLong(durationMs); @@ -74,11 +126,13 @@ public final class ValidationProbeEvent implements Parcelable { out.writeInt(returnCode); } + /** @hide */ @Override public int describeContents() { return 0; } + /** @hide */ public static final Parcelable.Creator<ValidationProbeEvent> CREATOR = new Parcelable.Creator<ValidationProbeEvent>() { public ValidationProbeEvent createFromParcel(Parcel in) { @@ -90,7 +144,7 @@ public final class ValidationProbeEvent implements Parcelable { } }; - public static int makeProbeType(int probeType, boolean firstValidation) { + private static int makeProbeType(int probeType, boolean firstValidation) { return (probeType & 0xff) | (firstValidation ? FIRST_VALIDATION : REVALIDATION); } @@ -98,7 +152,7 @@ public final class ValidationProbeEvent implements Parcelable { return Decoder.constants.get(probeType & 0xff, "PROBE_???"); } - public static String getValidationStage(int probeType) { + private static String getValidationStage(int probeType) { return Decoder.constants.get(probeType & 0xff00, "UNKNOWN"); } |
