|
|
@@ -3,6 +3,7 @@ package camera
|
|
|
import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
+ "net"
|
|
|
"os"
|
|
|
"os/exec"
|
|
|
"syscall"
|
|
|
@@ -79,19 +80,47 @@ func PingOnce(host string, timeoutSec int) error {
|
|
|
return cmd.Run()
|
|
|
}
|
|
|
|
|
|
-func ModuleInit(supportsGigeCamera bool, eth1CIDR, gigeCameraIP string) bool {
|
|
|
+func cidrEqualSemantic(a, b string) (bool, error) {
|
|
|
+ _, na, err := net.ParseCIDR(a)
|
|
|
+ if err != nil {
|
|
|
+ return false, err
|
|
|
+ }
|
|
|
+ _, nb, err := net.ParseCIDR(b)
|
|
|
+ if err != nil {
|
|
|
+ return false, err
|
|
|
+ }
|
|
|
+
|
|
|
+ onesA, bitsA := na.Mask.Size()
|
|
|
+ onesB, bitsB := nb.Mask.Size()
|
|
|
+
|
|
|
+ return na.IP.Equal(nb.IP) && onesA == onesB && bitsA == bitsB, nil
|
|
|
+}
|
|
|
+
|
|
|
+func ModuleInit(supportsGigeCamera bool, eth1CIDR, gigeCameraCIDR string) bool {
|
|
|
var err error
|
|
|
+ var gigeCameraIP net.IP
|
|
|
|
|
|
if !supportsGigeCamera {
|
|
|
goto initOK
|
|
|
}
|
|
|
|
|
|
+ if equal, err := cidrEqualSemantic(eth1CIDR, gigeCameraCIDR); !equal {
|
|
|
+ baseapp.Logger.Errorf("[%s] 网口相机初始化失败: 设备与主机网段不匹配: %v!!", MODULE_NAME, err)
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
if err := SetupEth1ForGigeCamera(eth1CIDR); err != nil {
|
|
|
baseapp.Logger.Errorf("[%s] 网口相机初始化失败: 设置\"eth1\"地址失败: %v!!", MODULE_NAME, err)
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
- err = PingOnce(gigeCameraIP, 1)
|
|
|
+ gigeCameraIP, _, err = net.ParseCIDR(gigeCameraCIDR)
|
|
|
+ if err != nil {
|
|
|
+ baseapp.Logger.Errorf("[%s] 网口相机初始化失败: 解析网口-相机地址失败: %v!!", MODULE_NAME, err)
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ err = PingOnce(gigeCameraIP.String(), 1)
|
|
|
if err == nil {
|
|
|
goto initOK
|
|
|
}
|
|
|
@@ -107,7 +136,7 @@ func ModuleInit(supportsGigeCamera bool, eth1CIDR, gigeCameraIP string) bool {
|
|
|
if baseapp.IsExit1() {
|
|
|
return false
|
|
|
}
|
|
|
- err = PingOnce(gigeCameraIP, 1)
|
|
|
+ err = PingOnce(gigeCameraIP.String(), 1)
|
|
|
if err == nil {
|
|
|
break
|
|
|
}
|