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

adding fix to netclient for extra interfaces

afeiszli пре 4 година
родитељ
комит
4efd41b8de
2 измењених фајлова са 20 додато и 45 уклоњено
  1. 1 0
      models/network.go
  2. 19 45
      netclient/wireguard/kernel.go

+ 1 - 0
models/network.go

@@ -36,6 +36,7 @@ type Network struct {
 	IsIPv6         string       `json:"isipv6" bson:"isipv6"`
 	IsGRPCHub         string       `json:"isgrpchub" bson:"isgrpchub"`
 	LocalRange          string      `json:"localrange" bson:"localrange" validate:"omitempty,cidr"`
+	NextAvailableIP         string       `json:"nextavailableip" bson:"nextavailableip"`
 	//can't have min=1 with omitempty
 	DefaultCheckInInterval int32 `json:"checkininterval,omitempty" bson:"checkininterval,omitempty" validate:"omitempty,numeric,min=2,max=100000"`
 }

+ 19 - 45
netclient/wireguard/kernel.go

@@ -53,40 +53,27 @@ func InitGRPCWireguard(client models.IntClient) error {
                 return errors.New("no address to configure")
         }
         cmdIPDevLinkAdd := exec.Command("ip","link", "add", "dev", ifacename, "type",  "wireguard" )
+        cmdIPDevLinkDel := exec.Command("ip","link", "del", "dev", ifacename )
 	cmdIPAddrAdd := exec.Command("ip", "address", "add", "dev", ifacename, client.Address+"/24")
 	cmdIPAddr6Add := exec.Command("ip", "address", "add", "dev", ifacename, client.Address6+"/64")
-	currentiface, err := net.InterfaceByName(ifacename)
-        if err != nil {
-                err = cmdIPDevLinkAdd.Run()
-	        if  err  !=  nil && !strings.Contains(err.Error(), "exists") {
-	                log.Println("Error creating interface")
-	        }
-        }
-        match := false
-        match6 := false
-        addrs, _ := currentiface.Addrs()
-
-	//Add IPv4Address (make into separate function)
-        for _, a := range addrs {
-                if strings.Contains(a.String(), client.Address){
-                        match = true
-                }
-                if strings.Contains(a.String(), client.Address6){
-                        match6 = true
-                }
-        }
-        if !match && client.Address != "" {
+	_ = cmdIPDevLinkDel.Run()
+	err = cmdIPDevLinkAdd.Run()
+	if  err  !=  nil {
+	        log.Println("Error creating interface")
+		log.Println(err)
+	}
+        if client.Address != "" {
 		err = cmdIPAddrAdd.Run()
 	        if  err  !=  nil {
 	                log.Println("Error adding ipv4 address")
-		fmt.Println(err)
+			log.Println(err)
 	        }
         }
-        if !match6 && client.Address6 !=""{
+        if client.Address6 !=""{
                 err = cmdIPAddr6Add.Run()
                 if  err  !=  nil {
                         log.Println("Error adding ipv6 address")
-                fmt.Println(err)
+			log.Println(err)
                 }
         }
 	var peers []wgtypes.PeerConfig
@@ -200,6 +187,7 @@ func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
                 Stdout: os.Stdout,
                 Stderr: os.Stdout,
         }
+        cmdIPDevLinkDel := exec.Command("ip","link", "del", "dev", ifacename )
         cmdIPAddrAdd := &exec.Cmd {
                 Path: ipExec,
                 Args: []string{ ipExec, "address", "add", "dev", ifacename, node.Address+"/24"},
@@ -207,30 +195,16 @@ func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
                 Stderr: os.Stdout,
         }
 
-         currentiface, err := net.InterfaceByName(ifacename)
-
-
-        if err != nil {
-		err = cmdIPDevLinkAdd.Run()
-	if  err  !=  nil && !strings.Contains(err.Error(), "exists") {
-		fmt.Println("Error creating interface")
-		//fmt.Println(err.Error())
-		//return err
-	}
+	_ = cmdIPDevLinkDel.Run()
+	err = cmdIPDevLinkAdd.Run()
+	if  err  !=  nil  {
+		log.Println("Error creating interface")
+		log.Println(err.Error())
 	}
-	match := false
-	addrs, _ := currentiface.Addrs()
-	for _, a := range addrs {
-		if strings.Contains(a.String(), node.Address){
-			match = true
-		}
-	}
-	if !match {
         err = cmdIPAddrAdd.Run()
         if  err  !=  nil {
-		fmt.Println("Error adding address")
-                //return err
-        }
+		log.Println("Error adding address")
+		log.Println(err.Error())
 	}
 	var nodeport int
 	nodeport = int(node.Listenport)