fixed duplicate interface issue

This commit is contained in:
afeiszli
2021-03-26 00:04:04 -04:00
parent 1b437c38d1
commit 9aa7970605
2 changed files with 65 additions and 12 deletions

View File

@@ -433,18 +433,35 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
Stdout: os.Stdout,
Stderr: os.Stdout,
}
err = cmdIPDevLinkAdd.Run()
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
}
}
match := false
addrs, _ := currentiface.Addrs()
for _, a := range addrs {
fmt.Println("Current address: " + a.String())
fmt.Println("node.Address: " + node.Address)
if strings.Contains(a.String(), node.Address){
match = true
}
}
if !match {
err = cmdIPAddrAdd.Run()
if err != nil {
fmt.Println("Error adding address")
//return err
}
}
var nodeport int
nodeport = int(node.Listenport)
@@ -476,7 +493,7 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
fmt.Println("Device does not exist: ")
fmt.Println(err)
} else {
log.Fatalf("Unknown config error: %v", err)
fmt.Printf("This is inconvenient: %v", err)
}
}
cmdIPLinkUp := &exec.Cmd {
@@ -601,6 +618,32 @@ func CheckIn() error {
fmt.Println("Node is in pending status. Waiting for Admin approval of node before making furtherupdates.")
return err
}
newinterface := getNode().Interface
readreq := &nodepb.ReadNodeReq{
Macaddress: node.Macaddress,
Group: node.Nodegroup,
}
readres, err := wcclient.ReadNode(ctx, readreq, grpc.Header(&header))
if err != nil {
fmt.Printf("Error: %v", err)
} else {
currentiface := readres.Node.Interface
ifaceupdate := newinterface != currentiface
fmt.Println("Is it time to update the interface? ")
fmt.Println(ifaceupdate)
if err != nil {
log.Printf("Error retrieving interface: %v", err)
}
if ifaceupdate {
err := DeleteInterface(currentiface)
if err != nil {
fmt.Println("ERROR DELETING INTERFACE: " + currentiface)
}
}
err = setWGConfig()
}
if checkinres.Checkinresponse.Needconfigupdate {
fmt.Println("Server has requested that node update config.")
fmt.Println("Updating config from remote server.")
@@ -628,28 +671,21 @@ func CheckIn() error {
fmt.Println("Node has requested to update remote config.")
fmt.Println("Posting local config to remote server.")
postnode := getNode()
currentinterface := postnode.Interface
req := &nodepb.UpdateNodeReq{
Node: &postnode,
}
res, err := wcclient.UpdateNode(ctx, req, grpc.Header(&header))
res, err := wcclient.UpdateNode(ctx, req, grpc.Header(&header))
if err != nil {
return err
log.Fatalf("Error: %v", err)
}
res.Node.Postchanges = "false"
newinterface := res.Node.Interface
err = modConfig(res.Node)
if err != nil {
return err
log.Fatalf("Error: %v", err)
}
if currentinterface != newinterface {
err := DeleteInterface(currentinterface)
if err != nil {
fmt.Println("ERROR DELETING INTERFACE: " + currentinterface)
}
}
err = setWGConfig()
if err != nil {
return err
@@ -681,6 +717,23 @@ func CheckIn() error {
}
return nil
}
func needInterfaceUpdate(ctx context.Context, mac string, group string, iface string) (bool, string, error) {
var header metadata.MD
req := &nodepb.ReadNodeReq{
Macaddress: mac,
Group: group,
}
readres, err := wcclient.ReadNode(ctx, req, grpc.Header(&header))
if err != nil {
return false, "", err
log.Fatalf("Error: %v", err)
}
oldiface := readres.Node.Interface
return iface != oldiface, oldiface, err
}
func getNode() nodepb.Node {
modcfg := config.Config
modcfg.ReadConfig()