Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b84fb33 authored by Remi NGUYEN VAN's avatar Remi NGUYEN VAN
Browse files

Add NetworkStack metrics to system API

Test: atest FrameworksNetTests NetworkStackTests
Bug: 112869080
Change-Id: Ie52c55f248c173e2a5ee603ecd004fbac9004ac1
parent 1f4cce2f
Loading
Loading
Loading
Loading
+140 −0
Original line number Diff line number Diff line
@@ -3155,6 +3155,146 @@ package android.net {

}

package android.net.metrics {

  public final class ApfProgramEvent implements android.net.metrics.IpConnectivityLog.Event {
  }

  public static class ApfProgramEvent.Builder {
    ctor public ApfProgramEvent.Builder();
    method public android.net.metrics.ApfProgramEvent build();
    method public android.net.metrics.ApfProgramEvent.Builder setActualLifetime(long);
    method public android.net.metrics.ApfProgramEvent.Builder setCurrentRas(int);
    method public android.net.metrics.ApfProgramEvent.Builder setFilteredRas(int);
    method public android.net.metrics.ApfProgramEvent.Builder setFlags(boolean, boolean);
    method public android.net.metrics.ApfProgramEvent.Builder setLifetime(long);
    method public android.net.metrics.ApfProgramEvent.Builder setProgramLength(int);
  }

  public final class ApfStats implements android.net.metrics.IpConnectivityLog.Event {
  }

  public static class ApfStats.Builder {
    ctor public ApfStats.Builder();
    method public android.net.metrics.ApfStats build();
    method public android.net.metrics.ApfStats.Builder setDroppedRas(int);
    method public android.net.metrics.ApfStats.Builder setDurationMs(long);
    method public android.net.metrics.ApfStats.Builder setMatchingRas(int);
    method public android.net.metrics.ApfStats.Builder setMaxProgramSize(int);
    method public android.net.metrics.ApfStats.Builder setParseErrors(int);
    method public android.net.metrics.ApfStats.Builder setProgramUpdates(int);
    method public android.net.metrics.ApfStats.Builder setProgramUpdatesAll(int);
    method public android.net.metrics.ApfStats.Builder setProgramUpdatesAllowingMulticast(int);
    method public android.net.metrics.ApfStats.Builder setReceivedRas(int);
    method public android.net.metrics.ApfStats.Builder setZeroLifetimeRas(int);
  }

  public final class DhcpClientEvent implements android.net.metrics.IpConnectivityLog.Event {
  }

  public static class DhcpClientEvent.Builder {
    ctor public DhcpClientEvent.Builder();
    method public android.net.metrics.DhcpClientEvent build();
    method public android.net.metrics.DhcpClientEvent.Builder setDurationMs(int);
    method public android.net.metrics.DhcpClientEvent.Builder setMsg(String);
  }

  public final class DhcpErrorEvent implements android.net.metrics.IpConnectivityLog.Event {
    ctor public DhcpErrorEvent(int);
    method public static int errorCodeWithOption(int, int);
    field public static final int BOOTP_TOO_SHORT;
    field public static final int BUFFER_UNDERFLOW;
    field public static final int DHCP_BAD_MAGIC_COOKIE;
    field public static final int DHCP_ERROR = 4; // 0x4
    field public static final int DHCP_INVALID_OPTION_LENGTH;
    field public static final int DHCP_NO_COOKIE;
    field public static final int DHCP_NO_MSG_TYPE;
    field public static final int DHCP_UNKNOWN_MSG_TYPE;
    field public static final int L2_ERROR = 1; // 0x1
    field public static final int L2_TOO_SHORT;
    field public static final int L2_WRONG_ETH_TYPE;
    field public static final int L3_ERROR = 2; // 0x2
    field public static final int L3_INVALID_IP;
    field public static final int L3_NOT_IPV4;
    field public static final int L3_TOO_SHORT;
    field public static final int L4_ERROR = 3; // 0x3
    field public static final int L4_NOT_UDP;
    field public static final int L4_WRONG_PORT;
    field public static final int MISC_ERROR = 5; // 0x5
    field public static final int PARSING_ERROR;
    field public static final int RECEIVE_ERROR;
  }

  public class IpConnectivityLog {
    method public boolean log(long, android.net.metrics.IpConnectivityLog.Event);
    method public boolean log(String, android.net.metrics.IpConnectivityLog.Event);
    method public boolean log(int, int[], android.net.metrics.IpConnectivityLog.Event);
    method public boolean log(android.net.metrics.IpConnectivityLog.Event);
  }

  public static interface IpConnectivityLog.Event extends android.os.Parcelable {
  }

  public final class IpManagerEvent implements android.net.metrics.IpConnectivityLog.Event {
    ctor public IpManagerEvent(int, long);
    field public static final int COMPLETE_LIFECYCLE = 3; // 0x3
    field public static final int ERROR_INTERFACE_NOT_FOUND = 8; // 0x8
    field public static final int ERROR_INVALID_PROVISIONING = 7; // 0x7
    field public static final int ERROR_STARTING_IPREACHABILITYMONITOR = 6; // 0x6
    field public static final int ERROR_STARTING_IPV4 = 4; // 0x4
    field public static final int ERROR_STARTING_IPV6 = 5; // 0x5
    field public static final int PROVISIONING_FAIL = 2; // 0x2
    field public static final int PROVISIONING_OK = 1; // 0x1
  }

  public final class IpReachabilityEvent implements android.net.metrics.IpConnectivityLog.Event {
    ctor public IpReachabilityEvent(int);
    field public static final int NUD_FAILED = 512; // 0x200
    field public static final int NUD_FAILED_ORGANIC = 1024; // 0x400
    field public static final int PROBE = 256; // 0x100
    field public static final int PROVISIONING_LOST = 768; // 0x300
    field public static final int PROVISIONING_LOST_ORGANIC = 1280; // 0x500
  }

  public final class NetworkEvent implements android.net.metrics.IpConnectivityLog.Event {
    ctor public NetworkEvent(int, long);
    ctor public NetworkEvent(int);
    field public static final int NETWORK_CAPTIVE_PORTAL_FOUND = 4; // 0x4
    field public static final int NETWORK_CONNECTED = 1; // 0x1
    field public static final int NETWORK_CONSECUTIVE_DNS_TIMEOUT_FOUND = 12; // 0xc
    field public static final int NETWORK_DISCONNECTED = 7; // 0x7
    field public static final int NETWORK_FIRST_VALIDATION_PORTAL_FOUND = 10; // 0xa
    field public static final int NETWORK_FIRST_VALIDATION_SUCCESS = 8; // 0x8
    field public static final int NETWORK_LINGER = 5; // 0x5
    field public static final int NETWORK_REVALIDATION_PORTAL_FOUND = 11; // 0xb
    field public static final int NETWORK_REVALIDATION_SUCCESS = 9; // 0x9
    field public static final int NETWORK_UNLINGER = 6; // 0x6
    field public static final int NETWORK_VALIDATED = 2; // 0x2
    field public static final int NETWORK_VALIDATION_FAILED = 3; // 0x3
  }

  public final class ValidationProbeEvent implements android.net.metrics.IpConnectivityLog.Event {
    method public static String getProbeName(int);
    field public static final int DNS_FAILURE = 0; // 0x0
    field public static final int DNS_SUCCESS = 1; // 0x1
    field public static final int PROBE_DNS = 0; // 0x0
    field public static final int PROBE_FALLBACK = 4; // 0x4
    field public static final int PROBE_HTTP = 1; // 0x1
    field public static final int PROBE_HTTPS = 2; // 0x2
    field public static final int PROBE_PAC = 3; // 0x3
    field public static final int PROBE_PRIVDNS = 5; // 0x5
  }

  public static class ValidationProbeEvent.Builder {
    ctor public ValidationProbeEvent.Builder();
    method public android.net.metrics.ValidationProbeEvent build();
    method public android.net.metrics.ValidationProbeEvent.Builder setDurationMs(long);
    method public android.net.metrics.ValidationProbeEvent.Builder setProbeType(int, boolean);
    method public android.net.metrics.ValidationProbeEvent.Builder setReturnCode(int);
  }

}

package android.net.wifi {

  @Deprecated public class RttManager {
+140 −0
Original line number Diff line number Diff line
@@ -616,6 +616,146 @@ package android.net {

}

package android.net.metrics {

  public final class ApfProgramEvent implements android.net.metrics.IpConnectivityLog.Event {
  }

  public static class ApfProgramEvent.Builder {
    ctor public ApfProgramEvent.Builder();
    method public android.net.metrics.ApfProgramEvent build();
    method public android.net.metrics.ApfProgramEvent.Builder setActualLifetime(long);
    method public android.net.metrics.ApfProgramEvent.Builder setCurrentRas(int);
    method public android.net.metrics.ApfProgramEvent.Builder setFilteredRas(int);
    method public android.net.metrics.ApfProgramEvent.Builder setFlags(boolean, boolean);
    method public android.net.metrics.ApfProgramEvent.Builder setLifetime(long);
    method public android.net.metrics.ApfProgramEvent.Builder setProgramLength(int);
  }

  public final class ApfStats implements android.net.metrics.IpConnectivityLog.Event {
  }

  public static class ApfStats.Builder {
    ctor public ApfStats.Builder();
    method public android.net.metrics.ApfStats build();
    method public android.net.metrics.ApfStats.Builder setDroppedRas(int);
    method public android.net.metrics.ApfStats.Builder setDurationMs(long);
    method public android.net.metrics.ApfStats.Builder setMatchingRas(int);
    method public android.net.metrics.ApfStats.Builder setMaxProgramSize(int);
    method public android.net.metrics.ApfStats.Builder setParseErrors(int);
    method public android.net.metrics.ApfStats.Builder setProgramUpdates(int);
    method public android.net.metrics.ApfStats.Builder setProgramUpdatesAll(int);
    method public android.net.metrics.ApfStats.Builder setProgramUpdatesAllowingMulticast(int);
    method public android.net.metrics.ApfStats.Builder setReceivedRas(int);
    method public android.net.metrics.ApfStats.Builder setZeroLifetimeRas(int);
  }

  public final class DhcpClientEvent implements android.net.metrics.IpConnectivityLog.Event {
  }

  public static class DhcpClientEvent.Builder {
    ctor public DhcpClientEvent.Builder();
    method public android.net.metrics.DhcpClientEvent build();
    method public android.net.metrics.DhcpClientEvent.Builder setDurationMs(int);
    method public android.net.metrics.DhcpClientEvent.Builder setMsg(String);
  }

  public final class DhcpErrorEvent implements android.net.metrics.IpConnectivityLog.Event {
    ctor public DhcpErrorEvent(int);
    method public static int errorCodeWithOption(int, int);
    field public static final int BOOTP_TOO_SHORT;
    field public static final int BUFFER_UNDERFLOW;
    field public static final int DHCP_BAD_MAGIC_COOKIE;
    field public static final int DHCP_ERROR = 4; // 0x4
    field public static final int DHCP_INVALID_OPTION_LENGTH;
    field public static final int DHCP_NO_COOKIE;
    field public static final int DHCP_NO_MSG_TYPE;
    field public static final int DHCP_UNKNOWN_MSG_TYPE;
    field public static final int L2_ERROR = 1; // 0x1
    field public static final int L2_TOO_SHORT;
    field public static final int L2_WRONG_ETH_TYPE;
    field public static final int L3_ERROR = 2; // 0x2
    field public static final int L3_INVALID_IP;
    field public static final int L3_NOT_IPV4;
    field public static final int L3_TOO_SHORT;
    field public static final int L4_ERROR = 3; // 0x3
    field public static final int L4_NOT_UDP;
    field public static final int L4_WRONG_PORT;
    field public static final int MISC_ERROR = 5; // 0x5
    field public static final int PARSING_ERROR;
    field public static final int RECEIVE_ERROR;
  }

  public class IpConnectivityLog {
    method public boolean log(long, android.net.metrics.IpConnectivityLog.Event);
    method public boolean log(String, android.net.metrics.IpConnectivityLog.Event);
    method public boolean log(int, int[], android.net.metrics.IpConnectivityLog.Event);
    method public boolean log(android.net.metrics.IpConnectivityLog.Event);
  }

  public static interface IpConnectivityLog.Event extends android.os.Parcelable {
  }

  public final class IpManagerEvent implements android.net.metrics.IpConnectivityLog.Event {
    ctor public IpManagerEvent(int, long);
    field public static final int COMPLETE_LIFECYCLE = 3; // 0x3
    field public static final int ERROR_INTERFACE_NOT_FOUND = 8; // 0x8
    field public static final int ERROR_INVALID_PROVISIONING = 7; // 0x7
    field public static final int ERROR_STARTING_IPREACHABILITYMONITOR = 6; // 0x6
    field public static final int ERROR_STARTING_IPV4 = 4; // 0x4
    field public static final int ERROR_STARTING_IPV6 = 5; // 0x5
    field public static final int PROVISIONING_FAIL = 2; // 0x2
    field public static final int PROVISIONING_OK = 1; // 0x1
  }

  public final class IpReachabilityEvent implements android.net.metrics.IpConnectivityLog.Event {
    ctor public IpReachabilityEvent(int);
    field public static final int NUD_FAILED = 512; // 0x200
    field public static final int NUD_FAILED_ORGANIC = 1024; // 0x400
    field public static final int PROBE = 256; // 0x100
    field public static final int PROVISIONING_LOST = 768; // 0x300
    field public static final int PROVISIONING_LOST_ORGANIC = 1280; // 0x500
  }

  public final class NetworkEvent implements android.net.metrics.IpConnectivityLog.Event {
    ctor public NetworkEvent(int, long);
    ctor public NetworkEvent(int);
    field public static final int NETWORK_CAPTIVE_PORTAL_FOUND = 4; // 0x4
    field public static final int NETWORK_CONNECTED = 1; // 0x1
    field public static final int NETWORK_CONSECUTIVE_DNS_TIMEOUT_FOUND = 12; // 0xc
    field public static final int NETWORK_DISCONNECTED = 7; // 0x7
    field public static final int NETWORK_FIRST_VALIDATION_PORTAL_FOUND = 10; // 0xa
    field public static final int NETWORK_FIRST_VALIDATION_SUCCESS = 8; // 0x8
    field public static final int NETWORK_LINGER = 5; // 0x5
    field public static final int NETWORK_REVALIDATION_PORTAL_FOUND = 11; // 0xb
    field public static final int NETWORK_REVALIDATION_SUCCESS = 9; // 0x9
    field public static final int NETWORK_UNLINGER = 6; // 0x6
    field public static final int NETWORK_VALIDATED = 2; // 0x2
    field public static final int NETWORK_VALIDATION_FAILED = 3; // 0x3
  }

  public final class ValidationProbeEvent implements android.net.metrics.IpConnectivityLog.Event {
    method public static String getProbeName(int);
    field public static final int DNS_FAILURE = 0; // 0x0
    field public static final int DNS_SUCCESS = 1; // 0x1
    field public static final int PROBE_DNS = 0; // 0x0
    field public static final int PROBE_FALLBACK = 4; // 0x4
    field public static final int PROBE_HTTP = 1; // 0x1
    field public static final int PROBE_HTTPS = 2; // 0x2
    field public static final int PROBE_PAC = 3; // 0x3
    field public static final int PROBE_PRIVDNS = 5; // 0x5
  }

  public static class ValidationProbeEvent.Builder {
    ctor public ValidationProbeEvent.Builder();
    method public android.net.metrics.ValidationProbeEvent build();
    method public android.net.metrics.ValidationProbeEvent.Builder setDurationMs(long);
    method public android.net.metrics.ValidationProbeEvent.Builder setProbeType(int, boolean);
    method public android.net.metrics.ValidationProbeEvent.Builder setReturnCode(int);
  }

}

package android.os {

  public static class Build.VERSION {
+100 −10
Original line number Diff line number Diff line
@@ -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;
+181 −25

File changed.

Preview size limit exceeded, changes collapsed.

+42 −2
Original line number Diff line number Diff line
@@ -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) {
Loading