From dbc18bddc6cf2f78919160e685727d550e83360b Mon Sep 17 00:00:00 2001 From: Tim Beatham Date: Mon, 1 Jan 2024 23:55:50 +0000 Subject: [PATCH 1/4] 74-perform-dad - Performing DAD to check if IPv6 address present before adding outselves to mesh - Changing name from wgmesh to smegmesh --- cmd/api/main.go | 2 +- cmd/{wg-mesh => smegctl}/main.go | 32 +++++++++++------------ cmd/{wgmeshd => smegd}/main.go | 0 pkg/api/apiserver.go | 10 ++++---- pkg/automerge/automerge.go | 8 +++--- pkg/automerge/automerge_sync.go | 2 +- pkg/automerge/factory.go | 6 ++--- pkg/conn/connection.go | 2 +- pkg/conn/connectionmanager.go | 2 +- pkg/conn/connectionserver.go | 6 ++--- pkg/crdt/datastore.go | 8 +++--- pkg/crdt/factory.go | 6 ++--- pkg/crdt/two_phase_map.go | 2 +- pkg/crdt/two_phase_map_syncer.go | 2 +- pkg/crdt/vector_clock.go | 2 +- pkg/ctrlserver/ctrlserver.go | 20 +++++++-------- pkg/ctrlserver/ctrltypes.go | 10 ++++---- pkg/ctrlserver/stub.go | 8 +++--- pkg/dns/dns.go | 12 ++++----- pkg/dot/dot.go | 2 +- pkg/dot/wg.go | 2 +- pkg/ip/cga.go | 7 ++--- pkg/ip/types.go | 2 +- pkg/ip/ula.go | 2 +- pkg/ipc/ipc.go | 43 ++++++++++++++++++++----------- pkg/lib/rtnetlink.go | 2 +- pkg/mesh/config.go | 8 +++--- pkg/mesh/manager.go | 44 +++++++++++++++++++++++++------- pkg/mesh/manager_test.go | 8 +++--- pkg/mesh/route.go | 4 +-- pkg/mesh/stub_types.go | 4 +-- pkg/mesh/types.go | 2 +- pkg/query/query.go | 6 ++--- pkg/robin/requester.go | 10 ++++---- pkg/robin/requester_test.go | 8 +++--- pkg/robin/responder.go | 4 +-- pkg/robin/responder_test.go | 1 - pkg/route/route.go | 2 +- pkg/sync/syncer.go | 10 ++++---- pkg/sync/syncererror.go | 6 ++--- pkg/sync/syncrequester.go | 8 +++--- pkg/sync/syncscheduler.go | 4 +-- pkg/sync/syncservice.go | 6 ++--- pkg/timers/timers.go | 6 ++--- pkg/wg/wg.go | 4 +-- 45 files changed, 189 insertions(+), 156 deletions(-) rename cmd/{wg-mesh => smegctl}/main.go (91%) rename cmd/{wgmeshd => smegd}/main.go (100%) delete mode 100644 pkg/robin/responder_test.go diff --git a/cmd/api/main.go b/cmd/api/main.go index 19a2c0f..9eb7c8a 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -3,7 +3,7 @@ package main import ( "log" - "github.com/tim-beatham/wgmesh/pkg/api" + "github.com/tim-beatham/smegmesh/pkg/api" ) func main() { diff --git a/cmd/wg-mesh/main.go b/cmd/smegctl/main.go similarity index 91% rename from cmd/wg-mesh/main.go rename to cmd/smegctl/main.go index ab759d5..4cea7cc 100644 --- a/cmd/wg-mesh/main.go +++ b/cmd/smegctl/main.go @@ -6,10 +6,10 @@ import ( "os" "github.com/akamensky/argparse" - "github.com/tim-beatham/wgmesh/pkg/ctrlserver" - graph "github.com/tim-beatham/wgmesh/pkg/dot" - "github.com/tim-beatham/wgmesh/pkg/ipc" - logging "github.com/tim-beatham/wgmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/ctrlserver" + graph "github.com/tim-beatham/smegmesh/pkg/dot" + "github.com/tim-beatham/smegmesh/pkg/ipc" + logging "github.com/tim-beatham/smegmesh/pkg/log" ) const SockAddr = "/tmp/wgmesh_ipc.sock" @@ -22,7 +22,7 @@ type CreateMeshParams struct { AdvertiseDefault bool } -func createMesh(client *ipc.ClientIpc, args *ipc.NewMeshArgs) { +func createMesh(client *ipc.SmegmeshIpc, args *ipc.NewMeshArgs) { var reply string err := client.CreateMesh(args, &reply) @@ -34,7 +34,7 @@ func createMesh(client *ipc.ClientIpc, args *ipc.NewMeshArgs) { fmt.Println(reply) } -func listMeshes(client *ipc.ClientIpc) { +func listMeshes(client *ipc.SmegmeshIpc) { reply := new(ipc.ListMeshReply) err := client.ListMeshes(reply) @@ -49,7 +49,7 @@ func listMeshes(client *ipc.ClientIpc) { } } -func joinMesh(client *ipc.ClientIpc, args ipc.JoinMeshArgs) { +func joinMesh(client *ipc.SmegmeshIpc, args ipc.JoinMeshArgs) { var reply string err := client.JoinMesh(args, &reply) @@ -61,7 +61,7 @@ func joinMesh(client *ipc.ClientIpc, args ipc.JoinMeshArgs) { fmt.Println(reply) } -func leaveMesh(client *ipc.ClientIpc, meshId string) { +func leaveMesh(client *ipc.SmegmeshIpc, meshId string) { var reply string err := client.LeaveMesh(meshId, &reply) @@ -74,7 +74,7 @@ func leaveMesh(client *ipc.ClientIpc, meshId string) { fmt.Println(reply) } -func getGraph(client *ipc.ClientIpc) { +func getGraph(client *ipc.SmegmeshIpc) { listMeshesReply := new(ipc.ListMeshReply) err := client.ListMeshes(listMeshesReply) @@ -110,7 +110,7 @@ func getGraph(client *ipc.ClientIpc) { fmt.Println(dot) } -func queryMesh(client *ipc.ClientIpc, meshId, query string) { +func queryMesh(client *ipc.SmegmeshIpc, meshId, query string) { var reply string args := ipc.QueryMesh{ @@ -128,7 +128,7 @@ func queryMesh(client *ipc.ClientIpc, meshId, query string) { fmt.Println(reply) } -func putDescription(client *ipc.ClientIpc, meshId, description string) { +func putDescription(client *ipc.SmegmeshIpc, meshId, description string) { var reply string err := client.PutDescription(ipc.PutDescriptionArgs{ @@ -145,7 +145,7 @@ func putDescription(client *ipc.ClientIpc, meshId, description string) { } // putAlias: puts an alias for the node -func putAlias(client *ipc.ClientIpc, meshid, alias string) { +func putAlias(client *ipc.SmegmeshIpc, meshid, alias string) { var reply string err := client.PutAlias(ipc.PutAliasArgs{ @@ -161,7 +161,7 @@ func putAlias(client *ipc.ClientIpc, meshid, alias string) { fmt.Println(reply) } -func setService(client *ipc.ClientIpc, meshId, service, value string) { +func setService(client *ipc.SmegmeshIpc, meshId, service, value string) { var reply string err := client.PutService(ipc.PutServiceArgs{ @@ -178,7 +178,7 @@ func setService(client *ipc.ClientIpc, meshId, service, value string) { fmt.Println(reply) } -func deleteService(client *ipc.ClientIpc, meshId, service string) { +func deleteService(client *ipc.SmegmeshIpc, meshId, service string) { var reply string err := client.DeleteService(ipc.DeleteServiceArgs{ @@ -195,8 +195,8 @@ func deleteService(client *ipc.ClientIpc, meshId, service string) { } func main() { - parser := argparse.NewParser("wg-mesh", - "wg-mesh Manipulate WireGuard mesh networks") + parser := argparse.NewParser("smgctl", + "smegctl Manipulate WireGuard mesh networks") newMeshCmd := parser.NewCommand("new-mesh", "Create a new mesh") listMeshCmd := parser.NewCommand("list-meshes", "List meshes the node is connected to") diff --git a/cmd/wgmeshd/main.go b/cmd/smegd/main.go similarity index 100% rename from cmd/wgmeshd/main.go rename to cmd/smegd/main.go diff --git a/pkg/api/apiserver.go b/pkg/api/apiserver.go index 46f665d..fbe3a9a 100644 --- a/pkg/api/apiserver.go +++ b/pkg/api/apiserver.go @@ -5,10 +5,10 @@ import ( "net/http" "github.com/gin-gonic/gin" - "github.com/tim-beatham/wgmesh/pkg/ctrlserver" - "github.com/tim-beatham/wgmesh/pkg/ipc" - logging "github.com/tim-beatham/wgmesh/pkg/log" - "github.com/tim-beatham/wgmesh/pkg/what8words" + "github.com/tim-beatham/smegmesh/pkg/ctrlserver" + "github.com/tim-beatham/smegmesh/pkg/ipc" + logging "github.com/tim-beatham/smegmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/what8words" ) type ApiServer interface { @@ -18,7 +18,7 @@ type ApiServer interface { type SmegServer struct { router *gin.Engine - client *ipc.ClientIpc + client *ipc.SmegmeshIpc words *what8words.What8Words } diff --git a/pkg/automerge/automerge.go b/pkg/automerge/automerge.go index 11cadca..141d8e1 100644 --- a/pkg/automerge/automerge.go +++ b/pkg/automerge/automerge.go @@ -9,10 +9,10 @@ import ( "time" "github.com/automerge/automerge-go" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/lib" - logging "github.com/tim-beatham/wgmesh/pkg/log" - "github.com/tim-beatham/wgmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/lib" + logging "github.com/tim-beatham/smegmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/mesh" "golang.zx2c4.com/wireguard/wgctrl" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) diff --git a/pkg/automerge/automerge_sync.go b/pkg/automerge/automerge_sync.go index f1510e6..a0e05be 100644 --- a/pkg/automerge/automerge_sync.go +++ b/pkg/automerge/automerge_sync.go @@ -2,7 +2,7 @@ package automerge import ( "github.com/automerge/automerge-go" - logging "github.com/tim-beatham/wgmesh/pkg/log" + logging "github.com/tim-beatham/smegmesh/pkg/log" ) type AutomergeSync struct { diff --git a/pkg/automerge/factory.go b/pkg/automerge/factory.go index 7758268..d76b242 100644 --- a/pkg/automerge/factory.go +++ b/pkg/automerge/factory.go @@ -3,9 +3,9 @@ package automerge import ( "fmt" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/lib" - "github.com/tim-beatham/wgmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/mesh" ) type CrdtProviderFactory struct{} diff --git a/pkg/conn/connection.go b/pkg/conn/connection.go index c169d45..fceb6ad 100644 --- a/pkg/conn/connection.go +++ b/pkg/conn/connection.go @@ -6,7 +6,7 @@ import ( "crypto/tls" "errors" - logging "github.com/tim-beatham/wgmesh/pkg/log" + logging "github.com/tim-beatham/smegmesh/pkg/log" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) diff --git a/pkg/conn/connectionmanager.go b/pkg/conn/connectionmanager.go index 961e028..7e2b948 100644 --- a/pkg/conn/connectionmanager.go +++ b/pkg/conn/connectionmanager.go @@ -7,7 +7,7 @@ import ( "os" "sync" - logging "github.com/tim-beatham/wgmesh/pkg/log" + logging "github.com/tim-beatham/smegmesh/pkg/log" ) // ConnectionManager defines an interface for maintaining peer connections diff --git a/pkg/conn/connectionserver.go b/pkg/conn/connectionserver.go index 36f25ab..23cd44a 100644 --- a/pkg/conn/connectionserver.go +++ b/pkg/conn/connectionserver.go @@ -8,9 +8,9 @@ import ( "net" "os" - "github.com/tim-beatham/wgmesh/pkg/conf" - logging "github.com/tim-beatham/wgmesh/pkg/log" - "github.com/tim-beatham/wgmesh/pkg/rpc" + "github.com/tim-beatham/smegmesh/pkg/conf" + logging "github.com/tim-beatham/smegmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/rpc" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) diff --git a/pkg/crdt/datastore.go b/pkg/crdt/datastore.go index d5ef623..1c27a08 100644 --- a/pkg/crdt/datastore.go +++ b/pkg/crdt/datastore.go @@ -9,10 +9,10 @@ import ( "strings" "time" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/lib" - logging "github.com/tim-beatham/wgmesh/pkg/log" - "github.com/tim-beatham/wgmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/lib" + logging "github.com/tim-beatham/smegmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/mesh" "golang.zx2c4.com/wireguard/wgctrl" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) diff --git a/pkg/crdt/factory.go b/pkg/crdt/factory.go index 9cefe05..e4c8209 100644 --- a/pkg/crdt/factory.go +++ b/pkg/crdt/factory.go @@ -4,9 +4,9 @@ import ( "fmt" "hash/fnv" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/lib" - "github.com/tim-beatham/wgmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/mesh" ) type TwoPhaseMapFactory struct { diff --git a/pkg/crdt/two_phase_map.go b/pkg/crdt/two_phase_map.go index 88e8b24..b33c97d 100644 --- a/pkg/crdt/two_phase_map.go +++ b/pkg/crdt/two_phase_map.go @@ -3,7 +3,7 @@ package crdt import ( "cmp" - "github.com/tim-beatham/wgmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/lib" ) type TwoPhaseMap[K cmp.Ordered, D any] struct { diff --git a/pkg/crdt/two_phase_map_syncer.go b/pkg/crdt/two_phase_map_syncer.go index bf0421b..295b2cc 100644 --- a/pkg/crdt/two_phase_map_syncer.go +++ b/pkg/crdt/two_phase_map_syncer.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/gob" - logging "github.com/tim-beatham/wgmesh/pkg/log" + logging "github.com/tim-beatham/smegmesh/pkg/log" ) type SyncState int diff --git a/pkg/crdt/vector_clock.go b/pkg/crdt/vector_clock.go index 278a5c1..a1003ca 100644 --- a/pkg/crdt/vector_clock.go +++ b/pkg/crdt/vector_clock.go @@ -5,7 +5,7 @@ import ( "sync" "time" - "github.com/tim-beatham/wgmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/lib" ) type VectorBucket struct { diff --git a/pkg/ctrlserver/ctrlserver.go b/pkg/ctrlserver/ctrlserver.go index cb0c75f..2295001 100644 --- a/pkg/ctrlserver/ctrlserver.go +++ b/pkg/ctrlserver/ctrlserver.go @@ -1,16 +1,16 @@ package ctrlserver import ( - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/conn" - "github.com/tim-beatham/wgmesh/pkg/crdt" - "github.com/tim-beatham/wgmesh/pkg/ip" - "github.com/tim-beatham/wgmesh/pkg/lib" - logging "github.com/tim-beatham/wgmesh/pkg/log" - "github.com/tim-beatham/wgmesh/pkg/mesh" - "github.com/tim-beatham/wgmesh/pkg/query" - "github.com/tim-beatham/wgmesh/pkg/rpc" - "github.com/tim-beatham/wgmesh/pkg/wg" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/conn" + "github.com/tim-beatham/smegmesh/pkg/crdt" + "github.com/tim-beatham/smegmesh/pkg/ip" + "github.com/tim-beatham/smegmesh/pkg/lib" + logging "github.com/tim-beatham/smegmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/query" + "github.com/tim-beatham/smegmesh/pkg/rpc" + "github.com/tim-beatham/smegmesh/pkg/wg" "golang.zx2c4.com/wireguard/wgctrl" ) diff --git a/pkg/ctrlserver/ctrltypes.go b/pkg/ctrlserver/ctrltypes.go index 3cc6293..e864ba5 100644 --- a/pkg/ctrlserver/ctrltypes.go +++ b/pkg/ctrlserver/ctrltypes.go @@ -4,11 +4,11 @@ import ( "net" "time" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/conn" - "github.com/tim-beatham/wgmesh/pkg/lib" - "github.com/tim-beatham/wgmesh/pkg/mesh" - "github.com/tim-beatham/wgmesh/pkg/query" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/conn" + "github.com/tim-beatham/smegmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/query" "golang.zx2c4.com/wireguard/wgctrl" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) diff --git a/pkg/ctrlserver/stub.go b/pkg/ctrlserver/stub.go index d61da6b..669d5d0 100644 --- a/pkg/ctrlserver/stub.go +++ b/pkg/ctrlserver/stub.go @@ -1,10 +1,10 @@ package ctrlserver import ( - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/conn" - "github.com/tim-beatham/wgmesh/pkg/mesh" - "github.com/tim-beatham/wgmesh/pkg/query" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/conn" + "github.com/tim-beatham/smegmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/query" "golang.zx2c4.com/wireguard/wgctrl" ) diff --git a/pkg/dns/dns.go b/pkg/dns/dns.go index 2ebfb5a..49dbdc5 100644 --- a/pkg/dns/dns.go +++ b/pkg/dns/dns.go @@ -6,18 +6,16 @@ import ( "net" "github.com/miekg/dns" - "github.com/tim-beatham/wgmesh/pkg/ipc" - "github.com/tim-beatham/wgmesh/pkg/lib" - logging "github.com/tim-beatham/wgmesh/pkg/log" - "github.com/tim-beatham/wgmesh/pkg/query" + "github.com/tim-beatham/smegmesh/pkg/ipc" + "github.com/tim-beatham/smegmesh/pkg/lib" + logging "github.com/tim-beatham/smegmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/query" ) -const SockAddr = "/tmp/wgmesh_ipc.sock" - const MeshRegularExpression = `(?P.+)\.(?P.+)\.smeg\.` type DNSHandler struct { - client *ipc.ClientIpc + client *ipc.SmegmeshIpc server *dns.Server } diff --git a/pkg/dot/dot.go b/pkg/dot/dot.go index 8df6173..a6420aa 100644 --- a/pkg/dot/dot.go +++ b/pkg/dot/dot.go @@ -6,7 +6,7 @@ import ( "hash/fnv" "strings" - "github.com/tim-beatham/wgmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/lib" ) type GraphType string diff --git a/pkg/dot/wg.go b/pkg/dot/wg.go index d592047..fbeb015 100644 --- a/pkg/dot/wg.go +++ b/pkg/dot/wg.go @@ -4,7 +4,7 @@ import ( "fmt" "slices" - "github.com/tim-beatham/wgmesh/pkg/ctrlserver" + "github.com/tim-beatham/smegmesh/pkg/ctrlserver" ) // MeshGraphConverter converts a mesh to a graph diff --git a/pkg/ip/cga.go b/pkg/ip/cga.go index 69b59ab..90ae2a6 100644 --- a/pkg/ip/cga.go +++ b/pkg/ip/cga.go @@ -34,7 +34,7 @@ type CgaParameters struct { flag byte } -func NewCga(key wgtypes.Key, subnetPrefix [2 * InterfaceIdLen]byte) (*CgaParameters, error) { +func NewCga(key wgtypes.Key, collisionCount uint8, subnetPrefix [2 * InterfaceIdLen]byte) (*CgaParameters, error) { var params CgaParameters _, err := rand.Read(params.Modifier[:]) @@ -45,6 +45,7 @@ func NewCga(key wgtypes.Key, subnetPrefix [2 * InterfaceIdLen]byte) (*CgaParamet params.PublicKey = key params.SubnetPrefix = subnetPrefix + params.CollisionCount = collisionCount return ¶ms, nil } @@ -78,7 +79,6 @@ func (c *CgaParameters) generateHash1() []byte { byteVal[hash1Length-1] = c.CollisionCount hash := sha1.Sum(byteVal[:]) - return hash[:Hash1Prefix] } @@ -90,9 +90,6 @@ func clearBit(num, pos int) byte { } func (c *CgaParameters) generateInterface() []byte { - // TODO: On duplicate address detection increment collision. - // Also incorporate SEC - hash1 := c.generateHash1() var interfaceId []byte = make([]byte, InterfaceIdLen) diff --git a/pkg/ip/types.go b/pkg/ip/types.go index 55fe314..de34feb 100644 --- a/pkg/ip/types.go +++ b/pkg/ip/types.go @@ -7,5 +7,5 @@ import ( ) type IPAllocator interface { - GetIP(key wgtypes.Key, meshId string) (net.IP, error) + GetIP(key wgtypes.Key, meshId string, collisionCount int) (net.IP, error) } diff --git a/pkg/ip/ula.go b/pkg/ip/ula.go index 7e35b84..be05a54 100644 --- a/pkg/ip/ula.go +++ b/pkg/ip/ula.go @@ -39,7 +39,7 @@ func (u *ULABuilder) GetIPNet(meshId string) (*net.IPNet, error) { return net, nil } -func (u *ULABuilder) GetIP(key wgtypes.Key, meshId string) (net.IP, error) { +func (u *ULABuilder) GetIP(key wgtypes.Key, meshId string, collisionCount int) (net.IP, error) { ulaPrefix := getMeshPrefix(meshId) c, err := NewCga(key, ulaPrefix) diff --git a/pkg/ipc/ipc.go b/pkg/ipc/ipc.go index 895af93..48f12de 100644 --- a/pkg/ipc/ipc.go +++ b/pkg/ipc/ipc.go @@ -8,7 +8,7 @@ import ( ipcRpc "net/rpc" "os" - "github.com/tim-beatham/wgmesh/pkg/ctrlserver" + "github.com/tim-beatham/smegmesh/pkg/ctrlserver" ) const SockAddr = "/tmp/wgmesh_sock" @@ -94,63 +94,76 @@ type QueryMesh struct { Query string } -type ClientIpc struct { +type ClientIpc interface { + CreateMesh(args *NewMeshArgs, reply *string) error + ListMeshes(args *ListMeshReply, reply *string) error + JoinMesh(args JoinMeshArgs, reply *string) error + LeaveMesh(meshId string, reply *string) error + GetMesh(meshId string, reply *GetMeshReply) error + Query(query QueryMesh, reply *string) error + PutDescription(args PutDescriptionArgs, reply *string) error + PutAlias(args PutAliasArgs, reply *string) error + PutService(args PutServiceArgs, reply *string) error + DeleteService(args DeleteServiceArgs, reply *string) error +} + +type SmegmeshIpc struct { client *ipcRpc.Client } -func NewClientIpc() (*ClientIpc, error) { +func NewClientIpc() (*SmegmeshIpc, error) { client, err := ipcRpc.DialHTTP("unix", SockAddr) if err != nil { return nil, err } - return &ClientIpc{ + return &SmegmeshIpc{ client: client, }, nil } -func (c *ClientIpc) CreateMesh(args *NewMeshArgs, reply *string) error { +func (c *SmegmeshIpc) CreateMesh(args *NewMeshArgs, reply *string) error { return c.client.Call("IpcHandler.CreateMesh", args, reply) } -func (c *ClientIpc) ListMeshes(reply *ListMeshReply) error { +func (c *SmegmeshIpc) ListMeshes(reply *ListMeshReply) error { return c.client.Call("IpcHandler.ListMeshes", "", reply) } -func (c *ClientIpc) JoinMesh(args JoinMeshArgs, reply *string) error { +func (c *SmegmeshIpc) JoinMesh(args JoinMeshArgs, reply *string) error { return c.client.Call("IpcHandler.JoinMesh", &args, reply) } -func (c *ClientIpc) LeaveMesh(meshId string, reply *string) error { +func (c *SmegmeshIpc) LeaveMesh(meshId string, reply *string) error { return c.client.Call("IpcHandler.LeaveMesh", &meshId, reply) } -func (c *ClientIpc) GetMesh(meshId string, reply *GetMeshReply) error { +func (c *SmegmeshIpc) GetMesh(meshId string, reply *GetMeshReply) error { return c.client.Call("IpcHandler.GetMesh", &meshId, reply) } -func (c *ClientIpc) Query(query QueryMesh, reply *string) error { +func (c *SmegmeshIpc) Query(query QueryMesh, reply *string) error { return c.client.Call("IpcHandler.Query", &query, reply) } -func (c *ClientIpc) PutDescription(args PutDescriptionArgs, reply *string) error { +func (c *SmegmeshIpc) PutDescription(args PutDescriptionArgs, reply *string) error { return c.client.Call("IpcHandler.PutDescription", &args, reply) } -func (c *ClientIpc) PutAlias(args PutAliasArgs, reply *string) error { +func (c *SmegmeshIpc) PutAlias(args PutAliasArgs, reply *string) error { return c.client.Call("IpcHandler.PutAlias", &args, reply) } -func (c *ClientIpc) PutService(args PutServiceArgs, reply *string) error { +func (c *SmegmeshIpc) PutService(args PutServiceArgs, reply *string) error { return c.client.Call("IpcHandler.PutService", &args, reply) } -func (c *ClientIpc) DeleteService(args DeleteServiceArgs, reply *string) error { +func (c *SmegmeshIpc) DeleteService(args DeleteServiceArgs, reply *string) error { return c.client.Call("IpcHandler.DeleteService", &args, reply) } -func (c *ClientIpc) Close() error { +func (c *SmegmeshIpc) Close() error { return c.Close() } diff --git a/pkg/lib/rtnetlink.go b/pkg/lib/rtnetlink.go index d6d4c8d..de0f3c5 100644 --- a/pkg/lib/rtnetlink.go +++ b/pkg/lib/rtnetlink.go @@ -6,7 +6,7 @@ import ( "net" "github.com/jsimonetti/rtnetlink" - logging "github.com/tim-beatham/wgmesh/pkg/log" + logging "github.com/tim-beatham/smegmesh/pkg/log" "golang.org/x/sys/unix" ) diff --git a/pkg/mesh/config.go b/pkg/mesh/config.go index 9d37211..56869af 100644 --- a/pkg/mesh/config.go +++ b/pkg/mesh/config.go @@ -7,10 +7,10 @@ import ( "strings" "time" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/ip" - "github.com/tim-beatham/wgmesh/pkg/lib" - "github.com/tim-beatham/wgmesh/pkg/route" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/ip" + "github.com/tim-beatham/smegmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/route" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) diff --git a/pkg/mesh/manager.go b/pkg/mesh/manager.go index efd60c3..a8f49c0 100644 --- a/pkg/mesh/manager.go +++ b/pkg/mesh/manager.go @@ -3,13 +3,14 @@ package mesh import ( "errors" "fmt" + "net" "sync" - "github.com/tim-beatham/wgmesh/pkg/cmd" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/ip" - "github.com/tim-beatham/wgmesh/pkg/lib" - "github.com/tim-beatham/wgmesh/pkg/wg" + "github.com/tim-beatham/smegmesh/pkg/cmd" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/ip" + "github.com/tim-beatham/smegmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/wg" "golang.zx2c4.com/wireguard/wgctrl" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) @@ -285,15 +286,40 @@ func (s *MeshManagerImpl) AddSelf(params *AddSelfParams) error { pubKey := s.HostParameters.PrivateKey.PublicKey() - nodeIP, err := s.ipAllocator.GetIP(pubKey, params.MeshId) + collisionCount := 0 - if err != nil { - return err + var nodeIP *net.IPNet + + // Perform Duplicate Address Detection with the nodes + // that are already in the network + for { + nodeIP, err := s.ipAllocator.GetIP(pubKey, params.MeshId, collisionCount) + + if err != nil { + return err + } + + snapshot, err := mesh.GetMesh() + + if err != nil { + return err + } + + proposition := func(node MeshNode) bool { + ipNet := node.GetWgHost() + return ipNet.IP.Equal(nodeIP) + } + + if lib.Contains(lib.MapValues(snapshot.GetNodes()), proposition) { + collisionCount++ + } else { + break + } } node := s.nodeFactory.Build(&MeshNodeFactoryParams{ PublicKey: &pubKey, - NodeIP: nodeIP, + NodeIP: nodeIP.IP, WgPort: params.WgPort, Endpoint: params.Endpoint, MeshConfig: mesh.GetConfiguration(), diff --git a/pkg/mesh/manager_test.go b/pkg/mesh/manager_test.go index d621426..4a80f17 100644 --- a/pkg/mesh/manager_test.go +++ b/pkg/mesh/manager_test.go @@ -3,10 +3,10 @@ package mesh import ( "testing" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/ip" - "github.com/tim-beatham/wgmesh/pkg/lib" - "github.com/tim-beatham/wgmesh/pkg/wg" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/ip" + "github.com/tim-beatham/smegmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/wg" ) func getMeshConfiguration() *conf.DaemonConfiguration { diff --git a/pkg/mesh/route.go b/pkg/mesh/route.go index e33a349..bb24a63 100644 --- a/pkg/mesh/route.go +++ b/pkg/mesh/route.go @@ -3,8 +3,8 @@ package mesh import ( "net" - "github.com/tim-beatham/wgmesh/pkg/ip" - "github.com/tim-beatham/wgmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/ip" + "github.com/tim-beatham/smegmesh/pkg/lib" ) type RouteManager interface { diff --git a/pkg/mesh/stub_types.go b/pkg/mesh/stub_types.go index a49f55a..6c40bb1 100644 --- a/pkg/mesh/stub_types.go +++ b/pkg/mesh/stub_types.go @@ -5,8 +5,8 @@ import ( "net" "time" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/lib" "golang.zx2c4.com/wireguard/wgctrl" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) diff --git a/pkg/mesh/types.go b/pkg/mesh/types.go index 9f2417b..66cb5b7 100644 --- a/pkg/mesh/types.go +++ b/pkg/mesh/types.go @@ -6,7 +6,7 @@ import ( "net" "slices" - "github.com/tim-beatham/wgmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/conf" "golang.zx2c4.com/wireguard/wgctrl" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) diff --git a/pkg/query/query.go b/pkg/query/query.go index 95fdfbe..6eaf82f 100644 --- a/pkg/query/query.go +++ b/pkg/query/query.go @@ -6,9 +6,9 @@ import ( "strings" "github.com/jmespath/go-jmespath" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/lib" - "github.com/tim-beatham/wgmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/mesh" ) // Querier queries a data store for the given data diff --git a/pkg/robin/requester.go b/pkg/robin/requester.go index 795c649..7b0f474 100644 --- a/pkg/robin/requester.go +++ b/pkg/robin/requester.go @@ -7,11 +7,11 @@ import ( "strconv" "time" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/ctrlserver" - "github.com/tim-beatham/wgmesh/pkg/ipc" - "github.com/tim-beatham/wgmesh/pkg/mesh" - "github.com/tim-beatham/wgmesh/pkg/rpc" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/ctrlserver" + "github.com/tim-beatham/smegmesh/pkg/ipc" + "github.com/tim-beatham/smegmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/rpc" ) type IpcHandler struct { diff --git a/pkg/robin/requester_test.go b/pkg/robin/requester_test.go index 89a222c..71b19e2 100644 --- a/pkg/robin/requester_test.go +++ b/pkg/robin/requester_test.go @@ -3,10 +3,10 @@ package robin import ( "testing" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/ctrlserver" - "github.com/tim-beatham/wgmesh/pkg/ipc" - "github.com/tim-beatham/wgmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/ctrlserver" + "github.com/tim-beatham/smegmesh/pkg/ipc" + "github.com/tim-beatham/smegmesh/pkg/mesh" ) func getRequester() *IpcHandler { diff --git a/pkg/robin/responder.go b/pkg/robin/responder.go index 3257b36..fd71076 100644 --- a/pkg/robin/responder.go +++ b/pkg/robin/responder.go @@ -4,8 +4,8 @@ import ( "context" "errors" - "github.com/tim-beatham/wgmesh/pkg/ctrlserver" - "github.com/tim-beatham/wgmesh/pkg/rpc" + "github.com/tim-beatham/smegmesh/pkg/ctrlserver" + "github.com/tim-beatham/smegmesh/pkg/rpc" ) type WgRpc struct { diff --git a/pkg/robin/responder_test.go b/pkg/robin/responder_test.go deleted file mode 100644 index 31d6fa0..0000000 --- a/pkg/robin/responder_test.go +++ /dev/null @@ -1 +0,0 @@ -package robin diff --git a/pkg/route/route.go b/pkg/route/route.go index 11de7d7..44376ae 100644 --- a/pkg/route/route.go +++ b/pkg/route/route.go @@ -1,7 +1,7 @@ package route import ( - "github.com/tim-beatham/wgmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/lib" "golang.org/x/sys/unix" ) diff --git a/pkg/sync/syncer.go b/pkg/sync/syncer.go index f3b0c27..deefa6b 100644 --- a/pkg/sync/syncer.go +++ b/pkg/sync/syncer.go @@ -7,11 +7,11 @@ import ( "sync" "time" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/conn" - "github.com/tim-beatham/wgmesh/pkg/lib" - logging "github.com/tim-beatham/wgmesh/pkg/log" - "github.com/tim-beatham/wgmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/conn" + "github.com/tim-beatham/smegmesh/pkg/lib" + logging "github.com/tim-beatham/smegmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/mesh" ) // Syncer: picks random nodes from the meshs diff --git a/pkg/sync/syncererror.go b/pkg/sync/syncererror.go index 7dd1dc3..c3cad2a 100644 --- a/pkg/sync/syncererror.go +++ b/pkg/sync/syncererror.go @@ -1,9 +1,9 @@ package sync import ( - "github.com/tim-beatham/wgmesh/pkg/conn" - logging "github.com/tim-beatham/wgmesh/pkg/log" - "github.com/tim-beatham/wgmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/conn" + logging "github.com/tim-beatham/smegmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/mesh" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/pkg/sync/syncrequester.go b/pkg/sync/syncrequester.go index dc9e77e..c3ab02a 100644 --- a/pkg/sync/syncrequester.go +++ b/pkg/sync/syncrequester.go @@ -6,10 +6,10 @@ import ( "io" "time" - "github.com/tim-beatham/wgmesh/pkg/ctrlserver" - logging "github.com/tim-beatham/wgmesh/pkg/log" - "github.com/tim-beatham/wgmesh/pkg/mesh" - "github.com/tim-beatham/wgmesh/pkg/rpc" + "github.com/tim-beatham/smegmesh/pkg/ctrlserver" + logging "github.com/tim-beatham/smegmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/rpc" ) // SyncRequester: coordinates the syncing of meshes diff --git a/pkg/sync/syncscheduler.go b/pkg/sync/syncscheduler.go index 54d073a..5f80874 100644 --- a/pkg/sync/syncscheduler.go +++ b/pkg/sync/syncscheduler.go @@ -1,8 +1,8 @@ package sync import ( - "github.com/tim-beatham/wgmesh/pkg/ctrlserver" - "github.com/tim-beatham/wgmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/ctrlserver" + "github.com/tim-beatham/smegmesh/pkg/lib" ) // Run implements SyncScheduler. diff --git a/pkg/sync/syncservice.go b/pkg/sync/syncservice.go index 7d1033c..6fd0fa6 100644 --- a/pkg/sync/syncservice.go +++ b/pkg/sync/syncservice.go @@ -6,9 +6,9 @@ import ( "errors" "io" - "github.com/tim-beatham/wgmesh/pkg/ctrlserver" - "github.com/tim-beatham/wgmesh/pkg/mesh" - "github.com/tim-beatham/wgmesh/pkg/rpc" + "github.com/tim-beatham/smegmesh/pkg/ctrlserver" + "github.com/tim-beatham/smegmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/rpc" ) type SyncServiceImpl struct { diff --git a/pkg/timers/timers.go b/pkg/timers/timers.go index 3522775..390aa9d 100644 --- a/pkg/timers/timers.go +++ b/pkg/timers/timers.go @@ -1,9 +1,9 @@ package timer import ( - "github.com/tim-beatham/wgmesh/pkg/ctrlserver" - "github.com/tim-beatham/wgmesh/pkg/lib" - logging "github.com/tim-beatham/wgmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/ctrlserver" + "github.com/tim-beatham/smegmesh/pkg/lib" + logging "github.com/tim-beatham/smegmesh/pkg/log" ) func NewTimestampScheduler(ctrlServer *ctrlserver.MeshCtrlServer) lib.Timer { diff --git a/pkg/wg/wg.go b/pkg/wg/wg.go index 03022e0..3320e84 100644 --- a/pkg/wg/wg.go +++ b/pkg/wg/wg.go @@ -5,8 +5,8 @@ import ( "crypto/rand" "fmt" - "github.com/tim-beatham/wgmesh/pkg/lib" - logging "github.com/tim-beatham/wgmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/lib" + logging "github.com/tim-beatham/smegmesh/pkg/log" "golang.zx2c4.com/wireguard/wgctrl" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) From 8a498098559c7803353a3d7d20909a933ee35677 Mon Sep 17 00:00:00 2001 From: Tim Beatham Date: Mon, 1 Jan 2024 23:59:04 +0000 Subject: [PATCH 2/4] 74-perform-dad - Adding go.sum to fix errors --- go.mod | 4 ++-- go.sum | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 14210fb..0120d4c 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/tim-beatham/wgmesh +module github.com/tim-beatham/smegmesh go 1.21.3 @@ -11,11 +11,11 @@ require ( github.com/google/uuid v1.3.0 github.com/jmespath/go-jmespath v0.4.0 github.com/jsimonetti/rtnetlink v1.3.5 + github.com/lithammer/shortuuid v3.0.0+incompatible github.com/miekg/dns v1.1.57 github.com/sirupsen/logrus v1.9.3 golang.org/x/sys v0.14.0 golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6 - gonum.org/v1/gonum v0.14.0 google.golang.org/grpc v1.58.1 google.golang.org/protobuf v1.31.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 0b8e16c..9e80069 100644 --- a/go.sum +++ b/go.sum @@ -27,8 +27,6 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= -github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-playground/validator/v10 v10.16.0 h1:x+plE831WK4vaKHO/jpgUGsvLKIqRRkz6M78GuJAfGE= github.com/go-playground/validator/v10 v10.16.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= @@ -57,6 +55,8 @@ github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZX github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/lithammer/shortuuid v3.0.0+incompatible h1:NcD0xWW/MZYXEHa6ITy6kaXN5nwm/V115vj2YXfhS0w= +github.com/lithammer/shortuuid v3.0.0+incompatible/go.mod h1:FR74pbAuElzOUuenUHTK2Tciko1/vKuIKS9dSkDrA4w= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mdlayher/genetlink v1.3.2 h1:KdrNKe+CTu+IbZnm/GVUMXSqBBLqcGpRDa0xkQy56gw= @@ -123,8 +123,6 @@ golang.zx2c4.com/wireguard v0.0.0-20230704135630-469159ecf7d1 h1:EY138uSo1JYlDq+ golang.zx2c4.com/wireguard v0.0.0-20230704135630-469159ecf7d1/go.mod h1:tqur9LnfstdR9ep2LaJT4lFUl0EjlHtge+gAjmsHUG4= golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6 h1:CawjfCvYQH2OU3/TnxLx97WDSUDRABfT18pCOYwc2GE= golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6/go.mod h1:3rxYc4HtVcSG9gVaTs2GEBdehh+sYPOwKtyUWEOTb80= -gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= -gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= google.golang.org/grpc v1.58.1 h1:OL+Vz23DTtrrldqHK49FUOPHyY75rvFqJfXC84NYW58= From 90cfe820d2bf5efd40c1c67ddb06ca8a8f442d64 Mon Sep 17 00:00:00 2001 From: Tim Beatham Date: Tue, 2 Jan 2024 00:09:31 +0000 Subject: [PATCH 3/4] - Fixing errors with stale paths --- cmd/smegd/main.go | 16 ++++++++-------- pkg/automerge/automerge_test.go | 6 +++--- pkg/crdt/datastore_test.go | 6 +++--- pkg/crdt/g_map_test.go | 2 +- pkg/ip/types.go | 2 +- pkg/ip/ula.go | 4 ++-- pkg/mesh/manager.go | 2 +- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/cmd/smegd/main.go b/cmd/smegd/main.go index 226b2d7..a2cab84 100644 --- a/cmd/smegd/main.go +++ b/cmd/smegd/main.go @@ -6,14 +6,14 @@ import ( "os" "os/signal" - "github.com/tim-beatham/wgmesh/pkg/conf" - ctrlserver "github.com/tim-beatham/wgmesh/pkg/ctrlserver" - "github.com/tim-beatham/wgmesh/pkg/ipc" - logging "github.com/tim-beatham/wgmesh/pkg/log" - "github.com/tim-beatham/wgmesh/pkg/mesh" - "github.com/tim-beatham/wgmesh/pkg/robin" - "github.com/tim-beatham/wgmesh/pkg/sync" - timer "github.com/tim-beatham/wgmesh/pkg/timers" + "github.com/tim-beatham/smegmesh/pkg/conf" + ctrlserver "github.com/tim-beatham/smegmesh/pkg/ctrlserver" + "github.com/tim-beatham/smegmesh/pkg/ipc" + logging "github.com/tim-beatham/smegmesh/pkg/log" + "github.com/tim-beatham/smegmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/robin" + "github.com/tim-beatham/smegmesh/pkg/sync" + timer "github.com/tim-beatham/smegmesh/pkg/timers" "golang.zx2c4.com/wireguard/wgctrl" ) diff --git a/pkg/automerge/automerge_test.go b/pkg/automerge/automerge_test.go index 66eb1b4..6d88b3d 100644 --- a/pkg/automerge/automerge_test.go +++ b/pkg/automerge/automerge_test.go @@ -6,9 +6,9 @@ import ( "testing" "time" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/lib" - "github.com/tim-beatham/wgmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/mesh" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) diff --git a/pkg/crdt/datastore_test.go b/pkg/crdt/datastore_test.go index c86ec81..6d9459b 100644 --- a/pkg/crdt/datastore_test.go +++ b/pkg/crdt/datastore_test.go @@ -6,9 +6,9 @@ import ( "testing" "time" - "github.com/tim-beatham/wgmesh/pkg/conf" - "github.com/tim-beatham/wgmesh/pkg/lib" - "github.com/tim-beatham/wgmesh/pkg/mesh" + "github.com/tim-beatham/smegmesh/pkg/conf" + "github.com/tim-beatham/smegmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/mesh" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) diff --git a/pkg/crdt/g_map_test.go b/pkg/crdt/g_map_test.go index 4cd05aa..e2e1bd2 100644 --- a/pkg/crdt/g_map_test.go +++ b/pkg/crdt/g_map_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "github.com/tim-beatham/wgmesh/pkg/lib" + "github.com/tim-beatham/smegmesh/pkg/lib" ) func NewGmap() *GMap[string, bool] { diff --git a/pkg/ip/types.go b/pkg/ip/types.go index de34feb..2e36592 100644 --- a/pkg/ip/types.go +++ b/pkg/ip/types.go @@ -7,5 +7,5 @@ import ( ) type IPAllocator interface { - GetIP(key wgtypes.Key, meshId string, collisionCount int) (net.IP, error) + GetIP(key wgtypes.Key, meshId string, collisionCount uint8) (net.IP, error) } diff --git a/pkg/ip/ula.go b/pkg/ip/ula.go index be05a54..1e6e6be 100644 --- a/pkg/ip/ula.go +++ b/pkg/ip/ula.go @@ -39,10 +39,10 @@ func (u *ULABuilder) GetIPNet(meshId string) (*net.IPNet, error) { return net, nil } -func (u *ULABuilder) GetIP(key wgtypes.Key, meshId string, collisionCount int) (net.IP, error) { +func (u *ULABuilder) GetIP(key wgtypes.Key, meshId string, collisionCount uint8) (net.IP, error) { ulaPrefix := getMeshPrefix(meshId) - c, err := NewCga(key, ulaPrefix) + c, err := NewCga(key, collisionCount, ulaPrefix) if err != nil { return nil, err diff --git a/pkg/mesh/manager.go b/pkg/mesh/manager.go index a8f49c0..73cfbcc 100644 --- a/pkg/mesh/manager.go +++ b/pkg/mesh/manager.go @@ -286,7 +286,7 @@ func (s *MeshManagerImpl) AddSelf(params *AddSelfParams) error { pubKey := s.HostParameters.PrivateKey.PublicKey() - collisionCount := 0 + collisionCount := uint8(0) var nodeIP *net.IPNet From d0b1913796285492926fc0f5a5f396344f3f978f Mon Sep 17 00:00:00 2001 From: Tim Beatham Date: Tue, 2 Jan 2024 00:13:04 +0000 Subject: [PATCH 4/4] 74-perform-dad - Fixing nil pointer dereference --- pkg/mesh/manager.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/mesh/manager.go b/pkg/mesh/manager.go index 73cfbcc..226706f 100644 --- a/pkg/mesh/manager.go +++ b/pkg/mesh/manager.go @@ -288,12 +288,12 @@ func (s *MeshManagerImpl) AddSelf(params *AddSelfParams) error { collisionCount := uint8(0) - var nodeIP *net.IPNet + var nodeIP net.IP // Perform Duplicate Address Detection with the nodes // that are already in the network for { - nodeIP, err := s.ipAllocator.GetIP(pubKey, params.MeshId, collisionCount) + generatedIP, err := s.ipAllocator.GetIP(pubKey, params.MeshId, collisionCount) if err != nil { return err @@ -313,13 +313,14 @@ func (s *MeshManagerImpl) AddSelf(params *AddSelfParams) error { if lib.Contains(lib.MapValues(snapshot.GetNodes()), proposition) { collisionCount++ } else { + nodeIP = generatedIP break } } node := s.nodeFactory.Build(&MeshNodeFactoryParams{ PublicKey: &pubKey, - NodeIP: nodeIP.IP, + NodeIP: nodeIP, WgPort: params.WgPort, Endpoint: params.Endpoint, MeshConfig: mesh.GetConfiguration(),