diff options
Diffstat (limited to 'Tethering/src')
3 files changed, 48 insertions, 1 deletions
diff --git a/Tethering/src/android/net/dhcp/DhcpServingParamsParcelExt.java b/Tethering/src/android/net/dhcp/DhcpServingParamsParcelExt.java index aaaec17bf9..8d58945476 100644 --- a/Tethering/src/android/net/dhcp/DhcpServingParamsParcelExt.java +++ b/Tethering/src/android/net/dhcp/DhcpServingParamsParcelExt.java @@ -185,6 +185,16 @@ public class DhcpServingParamsParcelExt extends DhcpServingParamsParcel { return this; } + /** Set leases subnet prefix length. If the value is smaller than server address prefix length, + * this configuration will be ignored. + * + * <p>If not set, the default value is zero. + */ + public DhcpServingParamsParcelExt setLeasesSubnetPrefixLength(int prefixLength) { + this.leasesSubnetPrefixLength = prefixLength; + return this; + } + private static int[] toIntArray(@NonNull Collection<Inet4Address> addrs) { int[] res = new int[addrs.size()]; int i = 0; diff --git a/Tethering/src/android/net/ip/IpServer.java b/Tethering/src/android/net/ip/IpServer.java index acd2625b19..c718f4c9a0 100644 --- a/Tethering/src/android/net/ip/IpServer.java +++ b/Tethering/src/android/net/ip/IpServer.java @@ -241,6 +241,7 @@ public class IpServer extends StateMachine { private final LinkProperties mLinkProperties; private final boolean mUsingLegacyDhcp; private final boolean mUsingBpfOffload; + private final int mP2pLeasesSubnetPrefixLength; private final Dependencies mDeps; @@ -299,6 +300,7 @@ public class IpServer extends StateMachine { mLinkProperties = new LinkProperties(); mUsingLegacyDhcp = config.useLegacyDhcpServer(); mUsingBpfOffload = config.isBpfOffloadEnabled(); + mP2pLeasesSubnetPrefixLength = config.getP2pLeasesSubnetPrefixLength(); mPrivateAddressCoordinator = addressCoordinator; mDeps = deps; resetLinkProperties(); @@ -527,6 +529,9 @@ public class IpServer extends StateMachine { @Nullable Inet4Address clientAddr) { final boolean changePrefixOnDecline = (mInterfaceType == TetheringManager.TETHERING_NCM && clientAddr == null); + final int subnetPrefixLength = mInterfaceType == TetheringManager.TETHERING_WIFI_P2P + ? mP2pLeasesSubnetPrefixLength : 0 /* default value */; + return new DhcpServingParamsParcelExt() .setDefaultRouters(defaultRouter) .setDhcpLeaseTimeSecs(DHCP_LEASE_TIME_SECS) @@ -534,7 +539,8 @@ public class IpServer extends StateMachine { .setServerAddr(serverAddr) .setMetered(true) .setSingleClientAddr(clientAddr) - .setChangePrefixOnDecline(changePrefixOnDecline); + .setChangePrefixOnDecline(changePrefixOnDecline) + .setLeasesSubnetPrefixLength(subnetPrefixLength); // TODO: also advertise link MTU } diff --git a/Tethering/src/com/android/networkstack/tethering/TetheringConfiguration.java b/Tethering/src/com/android/networkstack/tethering/TetheringConfiguration.java index eaf85899a1..f9f3ed9cc9 100644 --- a/Tethering/src/com/android/networkstack/tethering/TetheringConfiguration.java +++ b/Tethering/src/com/android/networkstack/tethering/TetheringConfiguration.java @@ -149,6 +149,7 @@ public class TetheringConfiguration { // TODO: Add to TetheringConfigurationParcel if required. private final boolean mEnableBpfOffload; private final boolean mEnableWifiP2pDedicatedIp; + private final int mP2pLeasesSubnetPrefixLength; private final int mUsbTetheringFunction; protected final ContentResolver mContentResolver; @@ -214,9 +215,27 @@ public class TetheringConfiguration { R.bool.config_tether_enable_legacy_wifi_p2p_dedicated_ip, false /* defaultValue */); + mP2pLeasesSubnetPrefixLength = getP2pLeasesSubnetPrefixLengthFromRes(res, configLog); + configLog.log(toString()); } + private int getP2pLeasesSubnetPrefixLengthFromRes(final Resources res, final SharedLog log) { + if (!mEnableWifiP2pDedicatedIp) return 0; + + int prefixLength = getResourceInteger(res, + R.integer.config_p2p_leases_subnet_prefix_length, 0 /* default value */); + + // DhcpLeaseRepository ignores the first and last addresses of the range so the max prefix + // length is 30. + if (prefixLength < 0 || prefixLength > 30) { + log.e("Invalid p2p leases subnet prefix length configuration: " + prefixLength); + return 0; + } + + return prefixLength; + } + /** Check whether using legacy dhcp server. */ public boolean useLegacyDhcpServer() { return mEnableLegacyDhcpServer; @@ -272,6 +291,15 @@ public class TetheringConfiguration { return mEnableWifiP2pDedicatedIp; } + /** + * Get subnet prefix length of dhcp leases for wifi p2p. + * This feature only support when wifi p2p use dedicated address. If + * #shouldEnableWifiP2pDedicatedIp is false, this method would always return 0. + */ + public int getP2pLeasesSubnetPrefixLength() { + return mP2pLeasesSubnetPrefixLength; + } + /** Does the dumping.*/ public void dump(PrintWriter pw) { pw.print("activeDataSubId: "); @@ -310,6 +338,9 @@ public class TetheringConfiguration { pw.print("enableWifiP2pDedicatedIp: "); pw.println(mEnableWifiP2pDedicatedIp); + pw.print("p2pLeasesSubnetPrefixLength: "); + pw.println(mP2pLeasesSubnetPrefixLength); + pw.print("mUsbTetheringFunction: "); pw.println(isUsingNcm() ? "NCM" : "RNDIS"); } |
