moved telemetry check and generated comms CIDR better

This commit is contained in:
0xdcarns 2022-02-22 14:53:40 -05:00
parent 946b2ed12f
commit 324d2ba70c
4 changed files with 46 additions and 7 deletions

View file

@ -625,10 +625,6 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
func runUpdates(node *models.Node, ifaceDelta bool) {
go func() { // don't block http response
err := logic.TimerCheckpoint()
if err != nil {
logger.Log(3, "error occurred on timer,", err.Error())
}
// publish node update if not server
if err := mq.NodeUpdate(node); err != nil {
logger.Log(1, "error publishing node update to node", node.Name, node.ID, err.Error())

View file

@ -91,16 +91,22 @@ func NodeUpdate(node *models.Node) error {
// sendPeers - retrieve networks, send peer ports to all peers
func sendPeers() {
var force bool
peer_force_send++
if peer_force_send == 5 {
force = true
peer_force_send = 0
err := logic.TimerCheckpoint() // run telemetry & log dumps if 24 hours has passed..
if err != nil {
logger.Log(3, "error occurred on timer,", err.Error())
}
}
networks, err := logic.GetNetworks()
if err != nil {
logger.Log(1, "error retrieving networks for keepalive", err.Error())
}
for _, network := range networks {
serverNode, errN := logic.GetNetworkServerLeader(network.NetID)
if errN == nil {

View file

@ -2,14 +2,18 @@ package servercfg
import (
"errors"
"fmt"
"io"
"math/rand"
"net"
"net/http"
"os"
"strconv"
"strings"
"time"
"github.com/gravitl/netmaker/config"
"github.com/gravitl/netmaker/logger"
)
var (
@ -258,17 +262,19 @@ func GetMQPort() string {
// GetGRPCPort - gets the grpc port
func GetCommsCIDR() string {
netrange := "172.242.0.0/16"
netrange := "172.16.0.0/16"
if os.Getenv("COMMS_CIDR") != "" {
netrange = os.Getenv("COMMS_CIDR")
} else if config.Config.Server.CommsCIDR != "" {
netrange = config.Config.Server.CommsCIDR
} else { // make a random one, which should only affect initialize first time, unless db is removed
netrange = genNewCommsCIDR()
}
_, _, err := net.ParseCIDR(netrange)
if err == nil {
return netrange
}
return "172.242.0.0/16"
return "172.16.0.0/16"
}
// GetCommsID - gets the grpc port
@ -614,3 +620,34 @@ func GetRce() bool {
func GetDebug() bool {
return os.Getenv("DEBUG") == "on" || config.Config.Server.Debug == true
}
func genNewCommsCIDR() string {
currIfaces, err := net.Interfaces()
netrange := fmt.Sprintf("172.%d.0.0/16", genCommsByte())
if err == nil { // make sure chosen CIDR doesn't overlap with any local iface CIDRs
iter := 0
for i := 0; i < len(currIfaces); i++ {
if currentAddrs, err := currIfaces[i].Addrs(); err == nil {
for j := range currentAddrs {
if strings.Contains(currentAddrs[j].String(), netrange[0:7]) {
if iter > 20 { // if this hits, then the cidr should be specified
logger.FatalLog("could not find a suitable comms network on this server, please manually enter one")
}
netrange = fmt.Sprintf("172.%d.0.0/16", genCommsByte())
i = -1 // reset to loop back through
iter++ // track how many times you've iterated and not found one
break
}
}
}
}
}
return netrange
}
func genCommsByte() int {
const min = 1 << 4 // 16
const max = 1 << 5 // 32
rand.Seed(time.Now().UnixNano())
return rand.Intn(max-min) + min
}

View file

@ -29,13 +29,13 @@ func InitializeCommsNetwork() error {
_, err := logic.GetNetwork(COMMS_NETID)
if err != nil {
logger.Log(1, "comms net does not exist, creating")
var network models.Network
network.NetID = COMMS_NETID
network.AddressRange = servercfg.GetCommsCIDR()
network.IsPointToSite = "yes"
network.DefaultUDPHolePunch = "yes"
network.IsComms = "yes"
logger.Log(1, "comms net does not exist, creating with ID,", network.NetID, "and CIDR,", network.AddressRange)
return logic.CreateNetwork(network)
}
SyncServerNetwork(COMMS_NETID)