没有合适的资源?快使用搜索试试~ 我知道了~
rk3568 android11 双以太网(一个外网一个内网)(csdn)————程序.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 8 下载量 111 浏览量
2021-12-03
11:03:30
上传
评论 3
收藏 142KB PDF 举报
温馨提示
试读
16页
rk3568 android11 双以太网(一个外网一个内网)(csdn)————程序
资源推荐
资源详情
资源评论
1、
frameworks/opt/net/ethernet/java/com/android/server/ethernet/Ethernet
Tracker.java
diff --git a/java/com/android/server/ethernet/EthernetTracker.java
b/java/com/android/server/ethernet/EthernetTracker.java
old mode 100644
new mode 100755
index be0dcc9..b16455f
--- a/java/com/android/server/ethernet/EthernetTracker.java
+++ b/java/com/android/server/ethernet/EthernetTracker.java
@@ -44,6 +44,10 @@ import
com.android.internal.util.IndentingPrintWriter;
import com.android.server.net.BaseNetworkObserver;
import java.io.FileDescriptor;
+import java.io.File;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
@@ -90,6 +94,10 @@ final class EthernetTracker {
private final Handler mHandler;
private final EthernetNetworkFactory mFactory;
private final EthernetConfigStore mConfigStore;
+ private static String mIface = "";
+ private static String mIface_1 = "eth0";
+ private static String mIface_2 = "eth1";
+ private EthernetNetworkFactoryExt mEthernetNetworkFactoryExt;
private final RemoteCallbackList<IEthernetServiceListener>
mListeners =
new RemoteCallbackList<>();
@@ -133,6 +141,7 @@ final class EthernetTracker {
NetworkCapabilities nc = createNetworkCapabilities(true /*
clear default capabilities */);
mFactory = new EthernetNetworkFactory(handler, context, nc);
mFactory.register();
+ mEthernetNetworkFactoryExt = new
EthernetNetworkFactoryExt();
}
void start() {
@@ -343,6 +352,8 @@ final class EthernetTracker {
}
private void updateInterfaceState(String iface, boolean up) {
+ if (!mIface.equals(iface))
+ return ;
final int mode = getInterfaceMode(iface);
final boolean factoryLinkStateUpdated = (mode ==
INTERFACE_MODE_CLIENT)
&& mFactory.updateInterfaceLinkState(iface, up);
@@ -410,6 +421,7 @@ final class EthernetTracker {
}
addInterface(iface);
+ mEthernetNetworkFactoryExt.start(mContext, mNMService);
}
private void trackAvailableInterfaces() {
@@ -431,17 +443,51 @@ final class EthernetTracker {
if (DBG) {
Log.i(TAG, "interfaceLinkStateChanged, iface: " +
iface + ", up: " + up);
}
+ if (getEthernetCarrierState(mIface_1) == 1 && up) {
+ if (getEthernetCarrierState(mIface_2) == 1 &&
mIface_1.equals(iface)) {
+ mHandler.post(() ->
updateInterfaceState(mIface_2, false));
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException ignore) {
+ }
+ mHandler.post(() ->
mEthernetNetworkFactoryExt.interfaceLinkStateChanged(mIface_2,
true));
+ }
+ mIface = mIface_1;
+ }
+ if(getEthernetCarrierState(mIface_1) == 0 && !up) {
+ if (getEthernetCarrierState(mIface_2) == 1 &&
mIface_1.equals(iface)) {
+ mHandler.post(() ->
updateInterfaceState(mIface_1, false));
+ mHandler.post(() ->
mEthernetNetworkFactoryExt.interfaceLinkStateChanged(mIface_2,
false));
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException ignore) {
+ }
+ }
+ if (getEthernetCarrierState(mIface_2) == 1) {
+ mIface = mIface_2;
+ mHandler.post(() ->
updateInterfaceState(mIface_2, true));
+ return ;
+ }
+ }
+ if (getEthernetCarrierState(mIface_1) == 0 &&
getEthernetCarrierState(mIface_2) == 1 && up)
+ mIface = mIface_2;
+
mHandler.post(() -> updateInterfaceState(iface, up));
+ if (getEthernetCarrierState(mIface_1) == 1) {
+ mHandler.post(() ->
mEthernetNetworkFactoryExt.interfaceLinkStateChanged(iface, up));
+ }
}
@Override
public void interfaceAdded(String iface) {
mHandler.post(() -> maybeTrackInterface(iface));
+ mHandler.post(() ->
mEthernetNetworkFactoryExt.interfaceAdded(iface));
}
@Override
public void interfaceRemoved(String iface) {
mHandler.post(() -> stopTrackingInterface(iface));
+ mHandler.post(() ->
mEthernetNetworkFactoryExt.interfaceRemoved(iface));
}
}
@@ -639,6 +685,36 @@ final class EthernetTracker {
Log.d(TAG, "Interface match regexp set to '" + mIfaceMatch +
"'");
}
+ private String ReadFromFile(File file) {
+ if((file != null) && file.exists()) {
+ try {
+ FileInputStream fin= new FileInputStream(file);
+ BufferedReader reader= new BufferedReader(new
InputStreamReader(fin));
+ String flag = reader.readLine();
+ fin.close();
+ return flag;
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ }
+ return null;
+ }
+
+ public int getEthernetCarrierState(String ifname) {
+ if(ifname != "") {
+ try {
+ File file = new File("/sys/class/net/" + ifname +
"/carrier");
+ String carrier = ReadFromFile(file);
+ return Integer.parseInt(carrier);
+ } catch(Exception e) {
+ e.printStackTrace();
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+ }
+
private void postAndWaitForRunnable(Runnable r) {
mHandler.runWithScissors(r, 2000L /* timeout */);
}
2、
frameworks/opt/net/ethernet/java/com/android/server/ethernet/Ethernet
NetworkFactoryExt.java
/*
* Copyright (C) 2014 The Android Open Source Project
*
剩余15页未读,继续阅读
一诺网络技术
- 粉丝: 0
- 资源: 2万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页