Loading core/java/android/net/MacAddress.java +24 −5 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import com.android.internal.util.Preconditions; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.security.SecureRandom; import java.util.Arrays; import java.util.Random; Loading Loading @@ -329,16 +330,34 @@ public final class MacAddress implements Parcelable { /** * Returns a generated MAC address whose 24 least significant bits constituting the * NIC part of the address are randomly selected. * NIC part of the address are randomly selected and has Google OUI base. * * The locally assigned bit is always set to 1. The multicast bit is always set to 0. * * @return a random locally assigned MacAddress. * @return a random locally assigned, unicast MacAddress with Google OUI. * * @hide */ public static @NonNull MacAddress createRandomUnicastAddressWithGoogleBase() { return createRandomUnicastAddress(BASE_GOOGLE_MAC, new SecureRandom()); } /** * Returns a generated MAC address whose 46 bits, excluding the locally assigned bit and the * unicast bit, are randomly selected. * * The locally assigned bit is always set to 1. The multicast bit is always set to 0. * * @return a random locally assigned, unicast MacAddress. * * @hide */ public static @NonNull MacAddress createRandomUnicastAddress() { return createRandomUnicastAddress(BASE_GOOGLE_MAC, new Random()); SecureRandom r = new SecureRandom(); long addr = r.nextLong() & VALID_LONG_MASK; addr |= LOCALLY_ASSIGNED_MASK; addr &= ~MULTICAST_MASK; return new MacAddress(addr); } /** Loading @@ -355,8 +374,8 @@ public final class MacAddress implements Parcelable { */ public static @NonNull MacAddress createRandomUnicastAddress(MacAddress base, Random r) { long addr = (base.mAddr & OUI_MASK) | (NIC_MASK & r.nextLong()); addr = addr | LOCALLY_ASSIGNED_MASK; addr = addr & ~MULTICAST_MASK; addr |= LOCALLY_ASSIGNED_MASK; addr &= ~MULTICAST_MASK; return new MacAddress(addr); } Loading tests/net/java/android/net/MacAddressTest.java +10 −1 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ public class MacAddressTest { final int iterations = 1000; final String expectedAndroidOui = "da:a1:19"; for (int i = 0; i < iterations; i++) { MacAddress mac = MacAddress.createRandomUnicastAddress(); MacAddress mac = MacAddress.createRandomUnicastAddressWithGoogleBase(); String stringRepr = mac.toString(); assertTrue(stringRepr + " expected to be a locally assigned address", Loading @@ -195,6 +195,15 @@ public class MacAddressTest { assertTrue(stringRepr + " expected to begin with " + expectedLocalOui, stringRepr.startsWith(expectedLocalOui)); } for (int i = 0; i < iterations; i++) { MacAddress mac = MacAddress.createRandomUnicastAddress(); String stringRepr = mac.toString(); assertTrue(stringRepr + " expected to be a locally assigned address", mac.isLocallyAssigned()); assertEquals(MacAddress.TYPE_UNICAST, mac.getAddressType()); } } @Test Loading Loading
core/java/android/net/MacAddress.java +24 −5 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import com.android.internal.util.Preconditions; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.security.SecureRandom; import java.util.Arrays; import java.util.Random; Loading Loading @@ -329,16 +330,34 @@ public final class MacAddress implements Parcelable { /** * Returns a generated MAC address whose 24 least significant bits constituting the * NIC part of the address are randomly selected. * NIC part of the address are randomly selected and has Google OUI base. * * The locally assigned bit is always set to 1. The multicast bit is always set to 0. * * @return a random locally assigned MacAddress. * @return a random locally assigned, unicast MacAddress with Google OUI. * * @hide */ public static @NonNull MacAddress createRandomUnicastAddressWithGoogleBase() { return createRandomUnicastAddress(BASE_GOOGLE_MAC, new SecureRandom()); } /** * Returns a generated MAC address whose 46 bits, excluding the locally assigned bit and the * unicast bit, are randomly selected. * * The locally assigned bit is always set to 1. The multicast bit is always set to 0. * * @return a random locally assigned, unicast MacAddress. * * @hide */ public static @NonNull MacAddress createRandomUnicastAddress() { return createRandomUnicastAddress(BASE_GOOGLE_MAC, new Random()); SecureRandom r = new SecureRandom(); long addr = r.nextLong() & VALID_LONG_MASK; addr |= LOCALLY_ASSIGNED_MASK; addr &= ~MULTICAST_MASK; return new MacAddress(addr); } /** Loading @@ -355,8 +374,8 @@ public final class MacAddress implements Parcelable { */ public static @NonNull MacAddress createRandomUnicastAddress(MacAddress base, Random r) { long addr = (base.mAddr & OUI_MASK) | (NIC_MASK & r.nextLong()); addr = addr | LOCALLY_ASSIGNED_MASK; addr = addr & ~MULTICAST_MASK; addr |= LOCALLY_ASSIGNED_MASK; addr &= ~MULTICAST_MASK; return new MacAddress(addr); } Loading
tests/net/java/android/net/MacAddressTest.java +10 −1 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ public class MacAddressTest { final int iterations = 1000; final String expectedAndroidOui = "da:a1:19"; for (int i = 0; i < iterations; i++) { MacAddress mac = MacAddress.createRandomUnicastAddress(); MacAddress mac = MacAddress.createRandomUnicastAddressWithGoogleBase(); String stringRepr = mac.toString(); assertTrue(stringRepr + " expected to be a locally assigned address", Loading @@ -195,6 +195,15 @@ public class MacAddressTest { assertTrue(stringRepr + " expected to begin with " + expectedLocalOui, stringRepr.startsWith(expectedLocalOui)); } for (int i = 0; i < iterations; i++) { MacAddress mac = MacAddress.createRandomUnicastAddress(); String stringRepr = mac.toString(); assertTrue(stringRepr + " expected to be a locally assigned address", mac.isLocallyAssigned()); assertEquals(MacAddress.TYPE_UNICAST, mac.getAddressType()); } } @Test Loading