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

Commit 02459a7b authored by Sagar Regmi's avatar Sagar Regmi Committed by Steve Kondik
Browse files

server: clear forwarding rules when tethering is disabled

Since disabling NAT needs tethered iface's address info,
but sometimes the iface goes down before disabling NAT, this fix
just caches the iface's address.

Change-Id: Ie3f14093e8673c34821a3c86d1470c7dda3f3a42
CRs-fixed: 672354
parent 16cac923
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -177,6 +177,9 @@ public class NetworkManagementService extends INetworkManagementService.Stub
    private HashMap<String, Long> mActiveQuotas = Maps.newHashMap();
    /** Set of interfaces with active alerts. */
    private HashMap<String, Long> mActiveAlerts = Maps.newHashMap();

    /** Set of interfaces with interfaceAddress. */
    private HashMap<String, NetworkInterface> mCachedAddressForNat = Maps.newHashMap();
    /** Set of UIDs with active reject rules. */
    private SparseBooleanArray mUidRejectOnQuota = new SparseBooleanArray();

@@ -1040,9 +1043,16 @@ public class NetworkManagementService extends INetworkManagementService.Stub
    private void modifyNat(String action, String internalInterface, String externalInterface)
            throws SocketException {
        final Command cmd = new Command("nat", action, internalInterface, externalInterface);
        boolean enabled = action.equals("enable");
        NetworkInterface internalNetworkInterface = null;
        if (enabled) {
            internalNetworkInterface = NetworkInterface.getByName(internalInterface);
            mCachedAddressForNat.put(internalInterface, internalNetworkInterface);
        } else {
            internalNetworkInterface = mCachedAddressForNat.get(internalInterface);
            mCachedAddressForNat.remove(internalInterface);
        }

        final NetworkInterface internalNetworkInterface = NetworkInterface.getByName(
                internalInterface);
        if (internalNetworkInterface == null) {
            cmd.appendArg("0");
        } else {