Merge "Nat-related commands porting" am: 3d2b099dc0

am: 218b5f6dc0

Change-Id: I625a74e38e78fa216f0d5a92342a7ba0fe58874f
This commit is contained in:
Luke Huang
2018-11-21 01:23:15 -08:00
committed by android-build-merger

View File

@@ -1323,40 +1323,12 @@ public class NetworkManagementService extends INetworkManagementService.Stub
modifyInterfaceForward(false, fromIface, toIface); modifyInterfaceForward(false, fromIface, toIface);
} }
private void modifyNat(String action, String internalInterface, String externalInterface)
throws SocketException {
final Command cmd = new Command("nat", action, internalInterface, externalInterface);
final NetworkInterface internalNetworkInterface = NetworkInterface.getByName(
internalInterface);
if (internalNetworkInterface == null) {
cmd.appendArg("0");
} else {
// Don't touch link-local routes, as link-local addresses aren't routable,
// kernel creates link-local routes on all interfaces automatically
List<InterfaceAddress> interfaceAddresses = excludeLinkLocal(
internalNetworkInterface.getInterfaceAddresses());
cmd.appendArg(interfaceAddresses.size());
for (InterfaceAddress ia : interfaceAddresses) {
InetAddress addr = NetworkUtils.getNetworkPart(
ia.getAddress(), ia.getNetworkPrefixLength());
cmd.appendArg(addr.getHostAddress() + "/" + ia.getNetworkPrefixLength());
}
}
try {
mConnector.execute(cmd);
} catch (NativeDaemonConnectorException e) {
throw e.rethrowAsParcelableException();
}
}
@Override @Override
public void enableNat(String internalInterface, String externalInterface) { public void enableNat(String internalInterface, String externalInterface) {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
try { try {
modifyNat("enable", internalInterface, externalInterface); mNetdService.tetherAddForward(internalInterface, externalInterface);
} catch (SocketException e) { } catch (RemoteException | ServiceSpecificException e) {
throw new IllegalStateException(e); throw new IllegalStateException(e);
} }
} }
@@ -1365,8 +1337,8 @@ public class NetworkManagementService extends INetworkManagementService.Stub
public void disableNat(String internalInterface, String externalInterface) { public void disableNat(String internalInterface, String externalInterface) {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
try { try {
modifyNat("disable", internalInterface, externalInterface); mNetdService.tetherRemoveForward(internalInterface, externalInterface);
} catch (SocketException e) { } catch (RemoteException | ServiceSpecificException e) {
throw new IllegalStateException(e); throw new IllegalStateException(e);
} }
} }