关于RK3588 Android 12 自定义4G路由(以太网共享)

话不多说直接上补丁:

packages/modules/Connectivity/...目录下
//这里是能自定义IP补丁
diff --git a/Tethering/src/com/android/networkstack/tethering/PrivateAddressCoordinator.java b/Tethering/src/com/android/networkstack/tethering/PrivateAddressCoordinator.java
index 4f616cdff..e1d370b9d 100644
--- a/Tethering/src/com/android/networkstack/tethering/PrivateAddressCoordinator.java
+++ b/Tethering/src/com/android/networkstack/tethering/PrivateAddressCoordinator.java
@@ -50,7 +50,9 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Random;
 import java.util.Set;
-
+import android.util.Log;
+import android.os.SystemProperties;
+import java.net.UnknownHostException;
 /**
  * This class coordinate IP addresses conflict problem.
  *
@@ -125,7 +127,7 @@ public class PrivateAddressCoordinator {
         final ArrayList<IpPrefix> list = new ArrayList<>();
         for (LinkAddress address : linkAddresses) {
             if (!address.isIpv4()) continue;
-
+Log.i("myz","===PrivateAddressCoordinator.java=getIpv4Prefixes()==");
             list.add(asIpPrefix(address));
         }
 
@@ -186,6 +188,7 @@ public class PrivateAddressCoordinator {
             final LinkAddress newAddress = chooseDownstreamAddress(prefixRange);
             if (newAddress != null) {
                 mDownstreams.add(ipServer);
+				Log.i("myz","====PrivateAddressCoordinator.java===requestDownstreamAddress()=");
                 mCachedAddresses.put(ipServer.interfaceType(), newAddress);
                 return newAddress;
             }
@@ -280,16 +283,33 @@ public class PrivateAddressCoordinator {
 
     private LinkAddress getLinkAddress(final IpPrefix prefix, final int subAddress) {
         if (prefix == null) return null;
-
-        final InetAddress address = intToInet4AddressHTH(getPrefixBaseAddress(prefix) | subAddress);
+			Log.i("myz","====PrivateAddressCoordinator.java===getLinkAddress= subAddress11 = "+subAddress);
+        InetAddress address = intToInet4AddressHTH(getPrefixBaseAddress(prefix) | subAddress);
+		try {
+			String ChangeIp = SystemProperties.get("persist.tether.default.ipway", "192.168.20.1");
+			address=InetAddress.getByName(ChangeIp);
+			  } catch (UnknownHostException e) {
+                throw new IllegalStateException("Invalid address, shouldn't happen.", e);
+            }
+		Log.i("myz","====PrivateAddressCoordinator.java===getLinkAddress= subAddress222 = "+address.toString());
         return new LinkAddress(address, PREFIX_LENGTH);
     }
 
     private IpPrefix findAvailablePrefixFromRange(final int start, final int end,
             final int baseAddress, final int prefixRangeMask) {
+	Log.i("myz","===PrivateAddressCoordinator.java ==findAvailablePrefixFromRange()--start:"+start+"--end:"+end+"--baseAddress:"+baseAddress+"--prefixRangeMask:"+prefixRangeMask);
         int newSubPrefix = start;
-        while (newSubPrefix < end) {
-            final InetAddress address = intToInet4AddressHTH(baseAddress | newSubPrefix);
+		
+      // while (newSubPrefix < end) {
+			Log.i("myz","===PrivateAddressCoordinator.java ==findAvailablePrefixFromRange()=========");
+            InetAddress address = intToInet4AddressHTH(baseAddress | newSubPrefix);
+			try {
+			String ChangeIp = SystemProperties.get("persist.tether.default.ipway", "192.168.20.1");
+			address=InetAddress.getByName(ChangeIp);
+			  } catch (UnknownHostException e) {
+                throw new IllegalStateException("Invalid address, shouldn't happen.", e);
+            }
+			Log.i("myz","===PrivateAddressCoordinator.java ==findAvailablePrefixFromRange()=======address1111=="+address.toString());
             final IpPrefix prefix = new IpPrefix(address, PREFIX_LENGTH);
 
             final IpPrefix conflictPrefix = getConflictPrefix(prefix);
@@ -297,7 +317,7 @@ public class PrivateAddressCoordinator {
             if (conflictPrefix == null) return prefix;
 
             newSubPrefix = getNextSubPrefix(conflictPrefix, prefixRangeMask);
-        }
+      //  }
 
         return null;
     }

这里是设置的地方:

diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5e4a2e6c43..ac8b0df624 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13785,4 +13785,14 @@
    <!--add by lbb start,support backlight image-->	
    <string name="backlight_image">Backage Image</string>
    <!--add by lbb start,support backlight image-->
+   <!-- 4G Route begin -->
+    <string name="g4_route_mode">4G Route</string>
+    <string name="g4_route_mode_open">Open</string>
+    <string name="g4_route_mode_close">Close</string>
+    <string name="g4_route_ip">4G Route Gateway</string>
+    <string name="g4_route_mask">4G Route Mask</string>
+    <string name="g4_route_mask_value">255.255.255.0</string>
+    <string name="g4_route_ip_value">192.168.20.1</string>
+    <string name="input_route_ip_title">Input Route Gateway</string>
+    <!-- 4G Route end -->
xml文件:
+	<SwitchPreference
+	        android:key="g4_route"
+	        android:title="@string/g4_route_mode"
+	        android:summaryOff="@string/g4_route_mode_close"
+	        android:summaryOn="@string/g4_route_mode_open"
+	        android:persistent="false" 
+		/>
+   <Preference
+        android:key="g4_route_ip"
+	android:persistent="false"
+        android:summary="@string/g4_route_ip_value"
+        android:title="@string/g4_route_ip" 
+	android:dependency="g4_route"/>
+
 </PreferenceScreen>

diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 1a21b5582a..189cde0eff 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -65,7 +65,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicReference;
-
+import android.util.Log;
 /*
  * Displays preferences for Tethering.
  */
@@ -102,7 +102,7 @@ public class TetherSettings extends RestrictedSettingsFragment
     private AtomicReference<BluetoothPan> mBluetoothPan = new AtomicReference<>();
 
     private Handler mHandler = new Handler();
-    private OnStartTetheringCallback mStartTetheringCallback;
+    public OnStartTetheringCallback mStartTetheringCallback;
     private ConnectivityManager mCm;
     private EthernetManager mEm;
     private TetheringEventCallback mTetheringEventCallback;
@@ -508,7 +508,7 @@ public class TetherSettings extends RestrictedSettingsFragment
         }
     }
 
-    private void startTethering(int choice) {
+    public void startTethering(int choice) {
         if (choice == TETHERING_BLUETOOTH) {
             // Turn on Bluetooth first.
             BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
@@ -611,11 +611,11 @@ public class TetherSettings extends RestrictedSettingsFragment
                 }
     };
 
-    private static final class OnStartTetheringCallback extends
+    public static final class OnStartTetheringCallback extends
             ConnectivityManager.OnStartTetheringCallback {
         final WeakReference<TetherSettings> mTetherSettings;
 
-        OnStartTetheringCallback(TetherSettings settings) {
+      public  OnStartTetheringCallback(TetherSettings settings) {
             mTetherSettings = new WeakReference<>(settings);
         }
 
@@ -637,7 +637,7 @@ public class TetherSettings extends RestrictedSettingsFragment
         }
     }
 
-    private final class TetheringEventCallback implements TetheringManager.TetheringEventCallback {
+    public final class TetheringEventCallback implements TetheringManager.TetheringEventCallback {
         @Override
         public void onTetheredInterfacesChanged(List<String> interfaces) {
             Log.d(TAG, "onTetheredInterfacesChanged() interfaces : " + interfaces.toString());
diff --git a/src/com/android/settings/ethernet/EthernetSettings.java b/src/com/android/settings/ethernet/EthernetSettings.java
index 143e4762b0..0e649bb3f5 100644
--- a/src/com/android/settings/ethernet/EthernetSettings.java
+++ b/src/com/android/settings/ethernet/EthernetSettings.java
@@ -99,6 +99,24 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 
 
 import com.android.settings.ethernet.ethernet_static_ip_dialog;
+ 
+import java.io.DataOutputStream;
+import java.nio.charset.Charset;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.EditText;
+import android.telephony.TelephonyManager;
+import android.net.wifi.WifiManager;
+import java.lang.reflect.Method;
+import android.annotation.SuppressLint;
+import static android.net.TetheringManager.TETHERING_ETHERNET;
+import com.android.settings.TetherSettings;
+import android.net.ConnectivityManager;
+import android.content.DialogInterface;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.os.PowerManager;
+/*4G Route end */
 
 public class EthernetSettings extends SettingsPreferenceFragment
         implements DialogInterface.OnClickListener, Preference.OnPreferenceChangeListener {
@@ -145,7 +163,17 @@ public class EthernetSettings extends SettingsPreferenceFragment
 
     private static final String FILE = "/sys/class/net/eth0/flags";
     private static final int MSG_GET_ETHERNET_STATE = 0;
-
+	
+	/** 4g roue begin */
+ 	private static final String KEY_4G_ROUTE = "g4_route";
+    private static final String KEY_4G_ROUTE_IP = "g4_route_ip";
+	private SwitchPreference m4GRouteCheckBox;
+	Preference m4GRouteIp = null; 
+	private TetherSettings mTetherSettings;
+	private TetherSettings.OnStartTetheringCallback mStartTetheringCallback;
+	private ConnectivityManager mCm;
+	/** 4g roue end */
+	
     private Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
@@ -247,7 +275,13 @@ public class EthernetSettings extends SettingsPreferenceFragment
         addPreferencesFromResource(R.xml.ethernet_settings);
 
         mContext = this.getActivity().getApplicationContext();
-        mEthManager = (EthernetManager) getSystemService(Context.ETHERNET_SERVICE);
+		/** 4G Route begin */
+	    m4GRouteIp = (Preference) findPreference(KEY_4G_ROUTE_IP);
+		m4GRouteIp.setSummary(SystemProperties.get("persist.tether.default.ipway"));
+		//getPreferenceScreen().removePreference(m4GRouteIp);
+		mStartTetheringCallback = new TetherSettings.OnStartTetheringCallback(mTetherSettings);
+		/** 4G Route end */
+        mEthManager = (EthernetManager) getSystemService(mContext.ETHERNET_SERVICE);
 
         if (mEthManager == null) {
             Log.e(TAG, "get ethernet manager failed");
@@ -259,11 +293,16 @@ public class EthernetSettings extends SettingsPreferenceFragment
         if (ifaces.length > 0) {
             mIfaceName = ifaces[0];//"eth0";
         }
+		String mode_a = SystemProperties.get("persist.net.ethernet.mode");			
+		if(!mode_a.equals("normal")){
+			mIfaceName = "eth0";
+		}
         if (null == mIfaceName) {
             Log.e(TAG, "get ethernet ifaceName failed");
             Toast.makeText(mContext, R.string.disabled_feature, Toast.LENGTH_SHORT).show();
             finish();
         }
+		mCm = (ConnectivityManager) getSystemService(mContext.CONNECTIVITY_SERVICE);
     }
 
     private Inet4Address getIPv4Address(String text) {
@@ -284,12 +323,20 @@ public class EthernetSettings extends SettingsPreferenceFragment
             mkeyEthMode = (ListPreference) findPreference(KEY_ETH_MODE);
             mkeyEthMode.setOnPreferenceChangeListener(this);
         }
-    /*
-        if (mEthCheckBox== null) {
-            mEthCheckBox = (SwitchPreference) findPreference("ethernet");
-            mEthCheckBox.setOnPreferenceChangeListener(this);
-        }
-    */
+    	
+
+		
+		/** 4G Route begin */
+		if (m4GRouteCheckBox == null) {
+			m4GRouteCheckBox = (SwitchPreference) findPreference(KEY_4G_ROUTE);
+            m4GRouteCheckBox.setOnPreferenceChangeListener(this);
+			Log.i("myz","==onResume()=");
+			//getPreferenceScreen().removePreference(m4GRouteCheckBox);
+		}
+		/** 4G Route end */
+		
+		/*add by lrm end,surport for ethernet switch button and show eth mac address. 2021-06-12*/
+    
         //handleEtherStateChange(1 == getEthernetCarrierState(mIfaceName)? EthernetManager.ETHER_STATE_CONNECTED/*mEthManager.getEthernetConnectState()*/);
         refreshUI();
         log("resume");
@@ -337,7 +384,6 @@ public class EthernetSettings extends SettingsPreferenceFragment
 
     private void refreshUI() {
 
-        //    setStringSummary(KEY_ETH_HW_ADDRESS,mEthHwAddress);
 
         setStringSummary(KEY_ETH_IP_ADDRESS, mEthIpAddress);
         setStringSummary(KEY_ETH_NET_MASK, mEthNetmask);
@@ -360,14 +406,22 @@ public class EthernetSettings extends SettingsPreferenceFragment
                 mkeyEthMode.setValue("StaticIP");
                 mkeyEthMode.setSummary(R.string.usestatic);
             }
-/*            int isEnable = mEthManager.getEthernetIfaceState();
-            if(isEnable == ETHER_IFACE_STATE_UP) {
-                mEthCheckBox.setChecked(true);
-            }else{
-                mEthCheckBox.setChecked(false);
-            }
-*/
-        }
+		
+
+        }
+			/** 4G Route begin */
+		if (m4GRouteCheckBox != null) {
+			String mode = SystemProperties.get("persist.net.ethernet.mode");
+			if (mode.equals("normal")) {
+				m4GRouteCheckBox.setChecked(false);  
+				Log.i("myz","==updateCheckbox()===normal===");	
+			} else {
+				m4GRouteCheckBox.setChecked(true);  
+					Log.i("myz","==updateCheckbox()======");				 
+			}
+		}
+		/** 4G Route end */
+		
     }
 
     @Override
@@ -391,7 +445,107 @@ public class EthernetSettings extends SettingsPreferenceFragment
         }
         return true;
     }
-
+	/*add by lrm start,surport for ethernet switch button and show eth mac address. 2021-06-12*/
+    @Override
+    public boolean onPreferenceTreeClick(Preference preference) {
+ 
+		/** 4G Route begin */
+		if (preference == m4GRouteCheckBox) {
+			boolean newState = m4GRouteCheckBox.isChecked();
+			handleClickRoute(newState);
+			Log.i("myz","==onPreferenceTreeClick()======");				 
+        } 
+		if (preference == m4GRouteIp) {
+			showCustomizeDialog();
+		}
+		/** 4G Route end */
+        return super.onPreferenceTreeClick(preference);
+    } 
+	/*add by lrm end,surport for ethernet switch button and show eth mac address. 2021-06-12*/
+	@SuppressLint("WrongConstant")
+ 	private void showCustomizeDialog() {
+        AlertDialog.Builder customizeDialog = new AlertDialog.Builder(getActivity());
+        final View dialogView = LayoutInflater.from(getActivity())
+                .inflate(R.layout.dialog_customize,null);
+        EditText edit_text = (EditText) dialogView.findViewById(R.id.edit_text);
+		edit_text.setHint(SystemProperties.get("persist.tether.default.ipway"));
+        customizeDialog.setTitle(getActivity().getResources().getString(R.string.input_route_ip_title));
+        customizeDialog.setView(dialogView);
+        customizeDialog.setCancelable(false);
+        customizeDialog.setPositiveButton(getActivity().getResources().getString(R.string.update_system_dialog_ok),
+                (dialog, which) -> {
+                    String inputIp = edit_text.getText().toString();
+                    Log.i("MainActivity", "mIsLegitimate: " + ipCheck(inputIp));
+					if (ipCheck(inputIp)) {
+						//SystemProperties.set("persist.tether.default.ipway", inputIp);
+						//m4GRouteIp.setSummary(inputIp);
+						/*mCm.stopTethering(TETHERING_ETHERNET);	
+						//mEthManager.setEthernetEnabled(false);						
+						try {
+							Thread.sleep(1000);
+						} catch (InterruptedException e) {
+							e.printStackTrace();
+						}
+						//mEthManager.setEthernetEnabled(true);
+						mCm.startTethering(TETHERING_ETHERNET, true, mStartTetheringCallback, null);
+						*/
+						showRebootDialog(inputIp);									
+					}
+                });
+        customizeDialog.setNegativeButton(getActivity().getResources().getString(R.string.update_system_dialog_cancel), (dialogInterface, i) -> {
+
+		});
+     customizeDialog.show();
+    }
+	
+	Dialog rebootDialog;
+    private void showRebootDialog(String inputIp) {
+		if (rebootDialog != null) {
+			rebootDialog.dismiss();
+		}
+		rebootDialog = new AlertDialog.Builder(getActivity())
+                    .setTitle(R.string.dlg_confirm_reboot_title)
+					.setMessage(R.string.dlg_confirm_reboot_text)
+                    .setPositiveButton(R.string.dlg_ok, new DialogInterface.OnClickListener() {
+                        @Override
+                        public void onClick(DialogInterface dialog, int which) {
+							SystemProperties.set("persist.tether.default.ipway", inputIp);
+	                        PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+	                        pm.reboot("resolution");					
+					}})
+                    .setNegativeButton(R.string.cancel, null).create();
+            rebootDialog.show();
+    }
+	
+	
+	
+	 public boolean ipCheck(String text) {
+        if (text != null && !text.isEmpty()) {
+            String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
+                    + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+                    + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+                    + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
+            if (text.matches(regex)) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+        return false;
+    }
+	
+	/** 4G Route begin */
+	private void handleClickRoute(boolean newState) {
+		SystemProperties.set("persist.net.ethernet.mode", newState ? "bridge" : "normal");
+		if(newState){
+		Log.i("myz","==handleClickRoute()======");	
+			mCm.startTethering(TETHERING_ETHERNET, true, mStartTetheringCallback, null);			
+		}else{
+			Log.i("myz","==handleClickRoute()======");	
+			mCm.stopTethering(TETHERING_ETHERNET);
+		}
+	}
+	
     //将子网掩码转换成ip子网掩码形式,比如输入32输出为255.255.255.255
     public String interMask2String(int prefixLength) {
         String netMask = null;
diff --git a/src/com/android/settings/receivers/OtaBroadcastReceiver.java b/src/com/android/settings/receivers/OtaBroadcastReceiver.java
index b051c73103..bbadc9497a 100755
--- a/src/com/android/settings/receivers/OtaBroadcastReceiver.java
+++ b/src/com/android/settings/receivers/OtaBroadcastReceiver.java
@@ -12,14 +12,16 @@ import android.provider.Settings;
 import android.provider.Settings;
 import java.io.File;
 import android.util.Log;
-
+import android.os.SystemProperties;
 // add by lbb, support for U disk update 2021,07,15
 import java.util.List;
 import java.lang.reflect.Method;
 import android.os.storage.StorageManager;
 import android.app.Activity;
-
-
+import com.android.settings.ethernet.EthernetSettings;
+import static android.net.TetheringManager.TETHERING_ETHERNET;
+import com.android.settings.TetherSettings;
+import android.net.ConnectivityManager;
 public class OtaBroadcastReceiver extends BroadcastReceiver {
 
 	private static final String TAG = "OtaBroadcastReceiver";
@@ -30,11 +32,17 @@ public class OtaBroadcastReceiver extends BroadcastReceiver {
 	private final static String BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
 	
 	private Context mContext;
+	private EthernetSettings mEthernetSetting;
+	private TetherSettings mTetherSettings;
+	private TetherSettings.OnStartTetheringCallback mStartTetheringCallback;
+	private ConnectivityManager mCm;
 	
 	@Override
 	public void onReceive(Context context, Intent intent) {
 		String action = intent.getAction();
 		mContext = context;
+		mStartTetheringCallback = new TetherSettings.OnStartTetheringCallback(mTetherSettings);
+		mCm = (ConnectivityManager) context.getSystemService(mContext.CONNECTIVITY_SERVICE);
 		// add by lbb start, get U disk path 2021,07,15
 		File USBupdateFile = new File(getUSBPath(context) + "/update.zip");
 		String USBPath = getUSBPath(context) + "/update.zip";
@@ -44,6 +52,18 @@ public class OtaBroadcastReceiver extends BroadcastReceiver {
 		Log.i(TAG, "----action: " + action);
 		if (BOOT_COMPLETED.equals(action)) {
 			// add by lrm start, Support to delete the upgrade package after the upgrade
+			String mode_1 = SystemProperties.get("persist.net.ethernet.mode");
+			if (mode_1.equals("normal")) {
+					mCm.stopTethering(TETHERING_ETHERNET);	
+				} else {
+		/*				mCm.stopTethering(TETHERING_ETHERNET);	
+						try {
+				            Thread.sleep(1000);
+				        } catch (InterruptedException e) {
+				            e.printStackTrace();
+				        }*/
+						mCm.startTethering(TETHERING_ETHERNET, true, mStartTetheringCallback, null);				 
+					}			
 			int update_state = Settings.System.getInt(mContext.getContentResolver(), "update_state", 0);
 			Log.i(TAG, "----update_state: " + update_state);
 			if (update_state == 1) {
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值