|
@@ -16,12 +16,13 @@ import (
|
|
|
const MODULE_NAME = "NetworkManager"
|
|
const MODULE_NAME = "NetworkManager"
|
|
|
|
|
|
|
|
var (
|
|
var (
|
|
|
- isOnline atomic.Bool // 标记是否联网
|
|
|
|
|
- offlineStartTime time.Time // 离线开始时间
|
|
|
|
|
- enableTimeSync atomic.Bool /// 是否启用时间同步(默认启用)
|
|
|
|
|
- isSyncNTPTimeOK atomic.Bool /// 标记本地时间是否已同步成功
|
|
|
|
|
- lastSyncNTPTime time.Time /// 记录同步网络时间成功的时间
|
|
|
|
|
- curNetType atomic.Int32 /// 当前的网络类型: 有线、蜂窝
|
|
|
|
|
|
|
+ eth0LinkDegraded atomic.Bool // 当eth0网卡无法上网时标记降级
|
|
|
|
|
+ isOnline atomic.Bool // 标记是否联网: true 或 false
|
|
|
|
|
+ offlineStartTime time.Time // 离线开始时间, 不依赖系统时钟
|
|
|
|
|
+ enableTimeSync atomic.Bool // 是否启用时间同步(默认: 启用)
|
|
|
|
|
+ isSyncNTPTimeOK atomic.Bool // 标记系统的时间是否已同步成功
|
|
|
|
|
+ lastSyncNTPTime time.Time // 记录同步时间, 为下次同步准备
|
|
|
|
|
+ curNetType atomic.Int32 // 当前联网类型: "有线"、"蜂窝"
|
|
|
mu1 sync.Mutex
|
|
mu1 sync.Mutex
|
|
|
isRunning1 bool
|
|
isRunning1 bool
|
|
|
exitCh1 chan struct{}
|
|
exitCh1 chan struct{}
|
|
@@ -65,7 +66,7 @@ func SetTimeSyncEnabled(enable bool) {
|
|
|
|
|
|
|
|
const (
|
|
const (
|
|
|
interval1 = time.Duration(1) * time.Second
|
|
interval1 = time.Duration(1) * time.Second
|
|
|
- interval2 = time.Duration(5) * time.Second
|
|
|
|
|
|
|
+ interval2 = time.Duration(3) * time.Second
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
func ModuleInit() {
|
|
func ModuleInit() {
|
|
@@ -86,11 +87,15 @@ func serviceRun() {
|
|
|
case <-t.C:
|
|
case <-t.C:
|
|
|
// 3.1 切换网络-看情况
|
|
// 3.1 切换网络-看情况
|
|
|
eth0CableOK, _ := isEth0CableConnected()
|
|
eth0CableOK, _ := isEth0CableConnected()
|
|
|
- if eth0CableOK && getNetType() != NetEth { // 有线插入 && 当前不是有线
|
|
|
|
|
- baseapp.Logger.Warnf("[%s] 检测到有线接入,正在尝试切换到有线网络...", MODULE_NAME)
|
|
|
|
|
|
|
+ if !eth0CableOK { // 检测到eth0的网线拔出后, 恢复到降级前状态, 进入下一轮
|
|
|
|
|
+ eth0LinkDegraded.CompareAndSwap(true, false)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if eth0CableOK && getNetType() != NetEth && !eth0LinkDegraded.Load() { /////////// 有线插入 && 当前不是有线 && 有线还未降级
|
|
|
|
|
+ baseapp.Logger.Warnf("[%s] 检测到有线插入,正在尝试切换到有线网络...", MODULE_NAME)
|
|
|
openNetwork()
|
|
openNetwork()
|
|
|
- } else if !eth0CableOK && getNetType() == NetEth { // 有线拔出 && 当前还是有线
|
|
|
|
|
- baseapp.Logger.Warnf("[%s] 检测到有线断开,正在尝试切换到蜂窝网络...", MODULE_NAME)
|
|
|
|
|
|
|
+ } else if (!eth0CableOK || eth0LinkDegraded.Load()) && getNetType() == NetEth { // (有线拔出 || 有线已降级) && 当前还是有线
|
|
|
|
|
+ baseapp.Logger.Warnf("[%s] 检测到有线断网,正在尝试切换到蜂窝网络...", MODULE_NAME)
|
|
|
openNetwork()
|
|
openNetwork()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -143,6 +148,13 @@ func serviceRun() {
|
|
|
isOnline.Store(false)
|
|
isOnline.Store(false)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if time.Since(offlineStartTime) >= (time.Duration(20)*time.Second) &&
|
|
|
|
|
+ getNetType() == NetEth && !eth0LinkDegraded.Load() { // eth0 无法联网时
|
|
|
|
|
+ baseapp.Logger.Warnf("[%s] 通过eth0无法联网, 将网卡等级降级!", MODULE_NAME)
|
|
|
|
|
+ eth0LinkDegraded.Store(true) // 标记eth0网卡降级, 并设置静态IP地址,运维用
|
|
|
|
|
+ SetupEth0ForManagement("192.168.80.1/24")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if time.Since(offlineStartTime) >= (time.Duration(60) * time.Second) {
|
|
if time.Since(offlineStartTime) >= (time.Duration(60) * time.Second) {
|
|
|
baseapp.Logger.Warnf("[%s] 网络长时间的断开, 尝试重新激活...", MODULE_NAME)
|
|
baseapp.Logger.Warnf("[%s] 网络长时间的断开, 尝试重新激活...", MODULE_NAME)
|
|
|
switch curModemType {
|
|
switch curModemType {
|
|
@@ -271,13 +283,10 @@ func openNetwork() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
eth0CableOK, _ := isEth0CableConnected()
|
|
eth0CableOK, _ := isEth0CableConnected()
|
|
|
- if eth0CableOK && openEth0Net() {
|
|
|
|
|
|
|
+ if eth0CableOK && !eth0LinkDegraded.Load() { // 有线插入 && 有线未降级
|
|
|
|
|
+ _ = openEth0Net()
|
|
|
setNetType(NetEth)
|
|
setNetType(NetEth)
|
|
|
- baseapp.Logger.Infof("[%s] ✅ 有线网络已连接", MODULE_NAME)
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if getNetType() == NetLTE && IsInetAvailable() { // 当前已是蜂窝网络且联网正常
|
|
|
|
|
|
|
+ baseapp.Logger.Infof("[%s] ✅ 有线网络已激活", MODULE_NAME)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -302,7 +311,7 @@ func openNetwork() {
|
|
|
|
|
|
|
|
if start4GNetwork() {
|
|
if start4GNetwork() {
|
|
|
setNetType(NetLTE)
|
|
setNetType(NetLTE)
|
|
|
- baseapp.Logger.Infof("[%s] ✅ 蜂窝网络已连接(%s)", MODULE_NAME, curModemType.String())
|
|
|
|
|
|
|
+ baseapp.Logger.Infof("[%s] ✅ 蜂窝网络已激活(%s)", MODULE_NAME, curModemType.String())
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|