Browse Source

update logic for determing when to check for free port

Matthew R. Kasun 3 years ago
parent
commit
c7151f0b01

+ 2 - 2
netclient/functions/localport.go

@@ -23,7 +23,7 @@ func GetLocalListenPort(ifacename string) (int32, error) {
 	defer client.Close()
 	device, err := client.Device(ifacename)
 	if err != nil {
-		logger.Log(0, "failed to parse interface")
+		logger.Log(0, "failed to parse interface", ifacename)
 		return 0, err
 	}
 	return int32(device.ListenPort), nil
@@ -35,7 +35,7 @@ func UpdateLocalListenPort(nodeCfg *config.ClientConfig) error {
 	ifacename := getRealIface(nodeCfg.Node.Interface, nodeCfg.Node.Address)
 	localPort, err := GetLocalListenPort(ifacename)
 	if err != nil {
-		logger.Log(1, "error encountered checking local listen port: ", err.Error())
+		logger.Log(1, "error encountered checking local listen port: ", ifacename, err.Error())
 	} else if nodeCfg.Node.LocalListenPort != localPort && localPort != 0 {
 		logger.Log(1, "local port has changed from ", strconv.Itoa(int(nodeCfg.Node.LocalListenPort)), " to ", strconv.Itoa(int(localPort)))
 		nodeCfg.Node.LocalListenPort = localPort

+ 1 - 1
netclient/functions/localport_freebsd.go

@@ -34,7 +34,7 @@ func UpdateLocalListenPort(nodeCfg *config.ClientConfig) error {
 	var err error
 	localPort, err := GetLocalListenPort(nodeCfg.Node.Interface)
 	if err != nil {
-		logger.Log(1, "error encountered checking local listen port: ", err.Error())
+		logger.Log(1, "error encountered checking local listen port for interface : ",nodeCfg.Node.Interface err.Error())
 	} else if nodeCfg.Node.LocalListenPort != localPort && localPort != 0 {
 		logger.Log(1, "local port has changed from ", strconv.Itoa(int(nodeCfg.Node.LocalListenPort)), " to ", strconv.Itoa(int(localPort)))
 		nodeCfg.Node.LocalListenPort = localPort

+ 10 - 5
netclient/functions/mqhandlers.go

@@ -106,12 +106,17 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
 	file := ncutils.GetNetclientPathSpecific() + nodeCfg.Node.Interface + ".conf"
 
 	if ifaceDelta { // if a change caused an ifacedelta we need to notify the server to update the peers
-		err = ncutils.ModPort(&newNode)
-		if err != nil {
-			logger.Log(0, "error modifying node port on", newNode.Name, "-", err.Error())
-			return
+		if newNode.ListenPort != nodeCfg.Node.LocalListenPort {
+			if err := wireguard.RemoveConf(newNode.Interface, false); err != nil {
+				logger.Log(0, "error remove interface", newNode.Interface, err.Error())
+			}
+			err = ncutils.ModPort(&newNode)
+			if err != nil {
+				logger.Log(0, "error modifying node port on", newNode.Name, "-", err.Error())
+				return
+			}
+			informPortChange(&newNode)
 		}
-		informPortChange(&newNode)
 		if err := wireguard.UpdateWgInterface(file, privateKey, nameserver, newNode); err != nil {
 			logger.Log(0, "error updating wireguard config "+err.Error())
 			return

+ 4 - 1
netclient/functions/pull.go

@@ -62,7 +62,10 @@ func Pull(network string, iface bool) (*models.Node, error) {
 			logger.Log(0, "unable to update server config: "+err.Error())
 		}
 	}
-	if nodeGET.Node.ListenPort != cfg.Node.ListenPort {
+	if nodeGET.Node.ListenPort != cfg.Node.LocalListenPort {
+		if err := wireguard.RemoveConf(resNode.Interface, false); err != nil {
+			logger.Log(0, "error remove interface", resNode.Interface, err.Error())
+		}
 		err = ncutils.ModPort(&resNode)
 		if err != nil {
 			return nil, err

+ 1 - 1
netclient/wireguard/common.go

@@ -548,7 +548,7 @@ func GetDevicePeers(iface string) ([]wgtypes.Peer, error) {
 		defer client.Close()
 		device, err := client.Device(iface)
 		if err != nil {
-			logger.Log(0, "failed to parse interface")
+			logger.Log(0, "failed to parse interface", iface)
 			return nil, err
 		}
 		return device.Peers, nil