Merge "Nat-related commands porting" am: 3d2b099dc0
am: 218b5f6dc0
Change-Id: I625a74e38e78fa216f0d5a92342a7ba0fe58874f
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user