|
@@ -16,7 +16,7 @@ import (
|
|
|
const MODULE_NAME = "NetworkManager"
|
|
const MODULE_NAME = "NetworkManager"
|
|
|
|
|
|
|
|
var (
|
|
var (
|
|
|
- eth0LinkDegraded atomic.Bool // 当eth0网卡无法上网时标记降级
|
|
|
|
|
|
|
+ eth0NetDegraded atomic.Bool // 当eth0网卡无法上网时标记降级
|
|
|
isOnline atomic.Bool // 标记是否联网: true 或 false
|
|
isOnline atomic.Bool // 标记是否联网: true 或 false
|
|
|
offlineStartTime time.Time // 离线开始时间, 不依赖系统时钟
|
|
offlineStartTime time.Time // 离线开始时间, 不依赖系统时钟
|
|
|
enableTimeSync atomic.Bool // 是否启用时间同步(默认: 启用)
|
|
enableTimeSync atomic.Bool // 是否启用时间同步(默认: 启用)
|
|
@@ -88,22 +88,22 @@ func serviceRun() {
|
|
|
case <-t.C:
|
|
case <-t.C:
|
|
|
// 3.1 切换网络-看情况
|
|
// 3.1 切换网络-看情况
|
|
|
eth0CableOK, _ := isEth0CableConnected()
|
|
eth0CableOK, _ := isEth0CableConnected()
|
|
|
- if !eth0CableOK || getNetType() == NetNone { // 检测到eth0的网线拔出或没有可用的上网连接时, 清除降级标记, 开始新一轮的联网尝试/
|
|
|
|
|
- eth0LinkDegraded.CompareAndSwap(true, false)
|
|
|
|
|
|
|
+ if (!eth0CableOK || getNetType() == NetNone) && eth0NetDegraded.CompareAndSwap(true, false) {
|
|
|
baseapp.Logger.Infof("[%s] eth0网线已拔出或当前无可用网络, 清除有线网络降级标志, 恢复正常联网尝试", MODULE_NAME)
|
|
baseapp.Logger.Infof("[%s] eth0网线已拔出或当前无可用网络, 清除有线网络降级标志, 恢复正常联网尝试", MODULE_NAME)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if eth0CableOK && getNetType() != NetEth && !eth0LinkDegraded.Load() { /////////// 有线插入 && 当前不是有线 && 有线还未降级
|
|
|
|
|
|
|
+ if eth0CableOK && getNetType() != NetEth && !eth0NetDegraded.Load() { //////////// 有线插入 && 当前不是有线 && 有线还未降级
|
|
|
baseapp.Logger.Warnf("[%s] 检测到有线插入,正在尝试切换到有线网络...", MODULE_NAME)
|
|
baseapp.Logger.Warnf("[%s] 检测到有线插入,正在尝试切换到有线网络...", MODULE_NAME)
|
|
|
openNetwork()
|
|
openNetwork()
|
|
|
- } else if (!eth0CableOK || eth0LinkDegraded.Load()) && getNetType() == NetEth { // (有线拔出 || 有线已降级) && 当前还是有线
|
|
|
|
|
|
|
+ } else if (!eth0CableOK || eth0NetDegraded.Load()) && getNetType() == NetEth { /// (有线拔出 || 有线已降级) && 当前还是有线
|
|
|
baseapp.Logger.Warnf("[%s] 检测到有线断网,正在尝试切换到蜂窝网络...", MODULE_NAME)
|
|
baseapp.Logger.Warnf("[%s] 检测到有线断网,正在尝试切换到蜂窝网络...", MODULE_NAME)
|
|
|
openNetwork()
|
|
openNetwork()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 3.2, 联网检测-看结果
|
|
// 3.2, 联网检测-看结果
|
|
|
dnsOK, pingOK, tcpOK, httpOK, httpTime := CheckNetwork()
|
|
dnsOK, pingOK, tcpOK, httpOK, httpTime := CheckNetwork()
|
|
|
- baseapp.Logger.Infof("[%s] 联网类型: %s; 检测结果: DNS OK=%v, PING OK=%v, TCP OK=%v, HTTP OK=%v", MODULE_NAME, getNetType().String(), dnsOK, pingOK, tcpOK, httpOK)
|
|
|
|
|
|
|
+ baseapp.Logger.Infof("[%s] 联网类型: %s; 检测结果: DNS OK=%v, PING OK=%v, TCP OK=%v, HTTP OK=%v",
|
|
|
|
|
+ MODULE_NAME, getNetType().String(), dnsOK, pingOK, tcpOK, httpOK)
|
|
|
|
|
|
|
|
// 3.3, 联网成功-在线时
|
|
// 3.3, 联网成功-在线时
|
|
|
netOK := tcpOK || httpOK
|
|
netOK := tcpOK || httpOK
|
|
@@ -151,9 +151,9 @@ func serviceRun() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if time.Since(offlineStartTime) >= (time.Duration(20)*time.Second) &&
|
|
if time.Since(offlineStartTime) >= (time.Duration(20)*time.Second) &&
|
|
|
- getNetType() == NetEth && !eth0LinkDegraded.Load() { // eth0无法联网
|
|
|
|
|
|
|
+ getNetType() == NetEth && !eth0NetDegraded.Load() { // eth0无法联网/
|
|
|
|
|
|
|
|
- eth0LinkDegraded.Store(true) /////////////// 开始设置eth0网卡降级使用
|
|
|
|
|
|
|
+ eth0NetDegraded.Store(true) /////////////// 开始设置eth0网卡降级使用/
|
|
|
|
|
|
|
|
offlineDur := time.Since(offlineStartTime).Round(time.Second)
|
|
offlineDur := time.Since(offlineStartTime).Round(time.Second)
|
|
|
baseapp.Logger.Warnf(
|
|
baseapp.Logger.Warnf(
|
|
@@ -276,7 +276,7 @@ func closeEth0Net() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
close(exitCh1)
|
|
close(exitCh1)
|
|
|
- wg1.Wait() // 等待守护"eth0"网卡上的 "udhcpc"后台服务进程的携程退出
|
|
|
|
|
|
|
+ wg1.Wait() // 等待守护"eth0"上的 "udhcpc"后台服务进程的携程退出
|
|
|
|
|
|
|
|
bExists, _ := udhcpcEth0Exists()
|
|
bExists, _ := udhcpcEth0Exists()
|
|
|
if bExists {
|
|
if bExists {
|
|
@@ -297,7 +297,7 @@ func openNetwork() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
eth0CableOK, _ := isEth0CableConnected()
|
|
eth0CableOK, _ := isEth0CableConnected()
|
|
|
- if eth0CableOK && !eth0LinkDegraded.Load() { // 有线插入 && 有线未降级
|
|
|
|
|
|
|
+ if eth0CableOK && !eth0NetDegraded.Load() { // 有线插入 && 有线未降级
|
|
|
_ = openEth0Net()
|
|
_ = openEth0Net()
|
|
|
setNetType(NetEth)
|
|
setNetType(NetEth)
|
|
|
baseapp.Logger.Infof("[%s] ✅ 有线网络已激活", MODULE_NAME)
|
|
baseapp.Logger.Infof("[%s] ✅ 有线网络已激活", MODULE_NAME)
|