Преглед изворни кода

优化修改切换网络的部分代码

niujiuru пре 1 месец
родитељ
комит
a1f6961fd2
4 измењених фајлова са 40 додато и 19 уклоњено
  1. 2 2
      air720u/air720u.c
  2. 19 4
      air720u/eth2net.go
  3. 17 2
      netmgrd/eth0net.go
  4. 2 11
      netmgrd/netmgrd.go

+ 2 - 2
air720u/air720u.c

@@ -85,7 +85,7 @@ static int comio_doCmd(SATCmdTrans *pTrans/*要执行的指令(IN&OUT)*/, int ti
   sw_heap_free(pAtCmdStr); // 释放AT指令字符串内存
   if(ret == atCmdLen)
   {
-    sw_log_debug("[%s] %s send a cmd(%d bytes): %s", MODULE_NAME, log_prefix, pTrans->cmd.len, pTrans->cmd.data);
+    sw_log_trace("[%s] %s send a cmd(%d bytes): %s", MODULE_NAME, log_prefix, pTrans->cmd.len, pTrans->cmd.data);
   }
   else
   {
@@ -125,7 +125,7 @@ static int comio_data_recv_proc(unsigned long wParam/*传递打开的串口句
     if((now-enteredSilentTime) < R_SILENT_TIMEOUT) { goto ret_p3; } // 等待静默期结束(延期多接收一会数据, 避免"内容"在"ATOK"或"ATER"之后)
     memcpy(pTrans->ack.data, pRecvBuf, nRecvBytes);
     pTrans->ack.ret = nRecvBytes; pTrans->ack.data[pTrans->ack.ret] = '\0'; bPrintRecvBuf = false;
-    sw_log_debug("[%s] %s received a cmd ack(%d bytes): %s", MODULE_NAME, log_prefix, pTrans->ack.ret, pTrans->ack.data);
+    sw_log_trace("[%s] %s received a cmd ack(%d bytes): %s", MODULE_NAME, log_prefix, pTrans->ack.ret, pTrans->ack.data);
     goto ret_p1;
   }
   else if((now-enteredWaitAckTime) >= pTrans->timeout)

+ 19 - 4
air720u/eth2net.go

@@ -45,7 +45,7 @@ func disableEthBut2() error {
 }
 
 // 启动"eth2"网口, 使其变可用
-func EnableEth2() error {
+func enableEth2() error {
 	cmd := exec.Command("ip", "link", "set", "dev", "eth2", "up")
 	cmd.Stdout = baseapp.Logger.WriterLevel(logrus.DebugLevel)
 	cmd.Stderr = baseapp.Logger.WriterLevel(logrus.ErrorLevel)
@@ -57,7 +57,7 @@ func EnableEth2() error {
 
 // 启动DHCP客户端, 请求IP地址
 func dialupEth2() error {
-	if err := EnableEth2(); err != nil {
+	if err := enableEth2(); err != nil {
 		return err
 	}
 
@@ -226,8 +226,23 @@ func monitorEth2Udhcpc(exitCh <-chan struct{}) {
 	} // for end
 }
 
+func isInterfaceUp(name string) (bool, error) {
+	link, err := netlink.LinkByName(name)
+	if err != nil {
+		return false, err
+	}
+	return link.Attrs().Flags&net.FlagUp != 0, nil
+}
+
 func IsEth2CableConnected() (bool, error) {
-	if data, err := os.ReadFile("/sys/class/net/eth2/carrier"); err == nil {
+	if up, _ := isInterfaceUp("eth2"); !up { // 管理状态
+		err := enableEth2()
+		if err != nil {
+			return false, err
+		}
+	}
+
+	if data, err := os.ReadFile("/sys/class/net/eth2/carrier"); err == nil { // 物理状态
 		return strings.TrimSpace(string(data)) == "1", nil
 	}
 
@@ -235,5 +250,5 @@ func IsEth2CableConnected() (bool, error) {
 	if err != nil {
 		return false, err
 	}
-	return link.Attrs().OperState == netlink.OperUp, nil
+	return link.Attrs().OperState == netlink.OperUp, nil // 操作状态
 }

+ 17 - 2
netmgrd/eth0net.go

@@ -181,8 +181,23 @@ func monitorEth0Udhcpc(exitCh <-chan struct{}) {
 	} // for end
 }
 
+func isInterfaceUp(name string) (bool, error) {
+	link, err := netlink.LinkByName(name)
+	if err != nil {
+		return false, err
+	}
+	return link.Attrs().Flags&net.FlagUp != 0, nil
+}
+
 func isEth0CableConnected() (bool, error) {
-	if data, err := os.ReadFile("/sys/class/net/eth0/carrier"); err == nil {
+	if up, _ := isInterfaceUp("eth0"); !up { // 管理状态
+		err := enableEth0()
+		if err != nil {
+			return false, err
+		}
+	}
+
+	if data, err := os.ReadFile("/sys/class/net/eth0/carrier"); err == nil { // 物理状态
 		return strings.TrimSpace(string(data)) == "1", nil
 	}
 
@@ -190,5 +205,5 @@ func isEth0CableConnected() (bool, error) {
 	if err != nil {
 		return false, err
 	}
-	return link.Attrs().OperState == netlink.OperUp, nil
+	return link.Attrs().OperState == netlink.OperUp, nil // 操作状态
 }

+ 2 - 11
netmgrd/netmgrd.go

@@ -55,7 +55,7 @@ func serviceRun() {
 			// 3.1 切换网络-看情况
 			eth0CableOK, _ := isEth0CableConnected()
 			if (eth0CableOK && curNetType != NetEth) || (!eth0CableOK && curNetType != NetLTE) {
-				baseapp.Logger.Warnf("[%s] 网络环境变化, 正在尝试切换网络...", MODULE_NAME)
+				baseapp.Logger.Warnf("[%s] 网络环境发生变化, 正在切换网络...", MODULE_NAME)
 				openNetwork()
 			}
 
@@ -93,7 +93,7 @@ func serviceRun() {
 			}
 
 			if offlineDuration() >= (time.Duration(60) * time.Second) {
-				baseapp.Logger.Warnf("[%s] 网络长时间断开, 正在重新连接...", MODULE_NAME)
+				baseapp.Logger.Warnf("[%s] 网络长时间断开, 正在重新连接...", MODULE_NAME)
 				openNetwork()
 				offlineStartTs.Store(time.Now().UnixNano()) // 重置离线开始时间
 			}
@@ -224,11 +224,6 @@ func openNetwork() {
 	}
 
 	tryOpenLTE := func() bool {
-		err := modem.EnableEth2()
-		if err != nil {
-			baseapp.Logger.Errorf("[%s] 启用\"eth2\"网卡时发生错误: %v!!", MODULE_NAME, err)
-			return false
-		}
 		if eth2CableOK, _ := modem.IsEth2CableConnected(); eth2CableOK {
 			if modem.OpenEth2Net() {
 				return true
@@ -243,10 +238,6 @@ func openNetwork() {
 
 	if tryOpenLTE() {
 		curNetType = NetLTE
-		err := enableEth0() // 重新启用"eth0", 否则无法监听拔插网线
-		if err != nil {
-			baseapp.Logger.Errorf("[%s] 启用\"eth0\"网卡时发生错误: %v!!", MODULE_NAME, err)
-		}
 		baseapp.Logger.Infof("[%s] ✅ 蜂窝网络已连接", MODULE_NAME)
 		return
 	}