From 6c4f09f4cba6659cf6f50d518526665c0b7c4d3c Mon Sep 17 00:00:00 2001 From: Uriel Fanelli Date: Wed, 9 Aug 2023 19:38:57 +0200 Subject: [PATCH] Using Ping to explore the status --- interface.go | 22 ++++++++++------------ orchestrator.go | 15 ++++++++++----- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/interface.go b/interface.go index b30d444..e2d5c38 100644 --- a/interface.go +++ b/interface.go @@ -60,21 +60,17 @@ func (b *AbstractBridge) configureIpAndBridgeUp() { // other server brIp, brIpNet, err := net.ParseCIDR(b.BridgeIpCIDR) if err != nil { - log.Println(err.Error()) - } - - if doesIpExists(brIp.String()) { - log.Println("Cannot take this IP, it exists already: " + brIp.String()) - return + log.Println("Error parsing CIDR: ", err.Error()) } br, err := tenus.NewLinkFrom(b.ExistingInterface) if err != nil { - log.Println(err.Error()) + log.Println("Error creating Ethernet Alias: ", err.Error()) + log.Println("Problematic interface: ", b.ExistingInterface) } if err := br.SetLinkIp(brIp, brIpNet); err != nil { - log.Println(err.Error()) + log.Println("Error setting UP the IP: ", err.Error()) } } @@ -92,20 +88,22 @@ func (b *AbstractBridge) removeIPandBridgeInt() { br, err := tenus.NewLinkFrom(b.ExistingInterface) if err != nil { - log.Println(err.Error()) + log.Println("Error creating Ethernet Handle: ", err.Error()) + log.Println("Problematic interface: ", b.ExistingInterface) + } brIp, brIpNet, err := net.ParseCIDR(b.BridgeIpCIDR) if err != nil { - log.Println(err.Error()) + log.Println("Error parsing CIDR: ", err.Error()) } if err := br.UnsetLinkIp(brIp, brIpNet); err != nil { - log.Println(err.Error()) + log.Println("Error setting DOWN the IP: ", err.Error()) } } -func doesIpExists(bridgeip string) bool { +func isActive(bridgeip string) bool { pinger, err := ping.NewPinger(bridgeip) if err != nil { diff --git a/orchestrator.go b/orchestrator.go index d6789f3..b332530 100644 --- a/orchestrator.go +++ b/orchestrator.go @@ -3,6 +3,7 @@ package main import ( "fmt" "log" + "net" "slices" "sort" "strconv" @@ -84,22 +85,26 @@ func (b *AbstractBridge) HierarchyReLocator(entity AbstractMulticast) { entity.AddUniqueAndSort(brdNumber) } + brIp, _, err := net.ParseCIDR(b.BridgeIpCIDR) + if err != nil { + log.Println(err.Error()) + } + // finished feeding the new number // if Alpha: if entity.IsAlpha(b.hIerarchyNumber) { - if b.IsActive { + if isActive(brIp.String()) { log.Println("Still ALPHA. This is ok.") - b.IsActive = true // you never know. Better to reiterate. } else { log.Println("I'm the new ALPHA! Get out my path, losers!") b.configureIpAndBridgeUp() - b.IsActive = true + log.Println("Ip is active: ", isActive(brIp.String())) } } else { log.Println("GULP! There is a bigger one, better descalating") - if b.IsActive { + if isActive(brIp.String()) { b.removeIPandBridgeInt() - b.IsActive = false + } }