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" )