m/node: move clusternet under network

Move the clusternet network side under the core/network umbrella and
rename it to overlay. Also split out types.go into the ipam package
to get the overlay package out of a lot of dependents which only import
it for the Prefixes type which should be part of the ipam package.

This is a clean move with no functional changes intended yet, these
will be stacked on top.

Change-Id: I6a6a6964af9d608f9ec3bf75b386c010cfff1df4
Reviewed-on: https://review.monogon.dev/c/monogon/+/4500
Tested-by: Jenkins CI
Reviewed-by: Jan Schär <jan@monogon.tech>
diff --git a/metropolis/node/core/roleserve/BUILD.bazel b/metropolis/node/core/roleserve/BUILD.bazel
index 72a4472..c753683 100644
--- a/metropolis/node/core/roleserve/BUILD.bazel
+++ b/metropolis/node/core/roleserve/BUILD.bazel
@@ -19,7 +19,6 @@
     visibility = ["//visibility:public"],
     deps = [
         "//metropolis/node",
-        "//metropolis/node/core/clusternet",
         "//metropolis/node/core/consensus",
         "//metropolis/node/core/curator",
         "//metropolis/node/core/curator/proto/api",
@@ -30,6 +29,8 @@
         "//metropolis/node/core/mgmt",
         "//metropolis/node/core/network",
         "//metropolis/node/core/network/hostsfile",
+        "//metropolis/node/core/network/ipam",
+        "//metropolis/node/core/network/overlay",
         "//metropolis/node/core/productinfo",
         "//metropolis/node/core/rpc",
         "//metropolis/node/core/rpc/resolver",
diff --git a/metropolis/node/core/roleserve/roleserve.go b/metropolis/node/core/roleserve/roleserve.go
index 4c1f610..ef84643 100644
--- a/metropolis/node/core/roleserve/roleserve.go
+++ b/metropolis/node/core/roleserve/roleserve.go
@@ -43,11 +43,11 @@
 	"crypto/ed25519"
 
 	common "source.monogon.dev/metropolis/node"
-	"source.monogon.dev/metropolis/node/core/clusternet"
 	"source.monogon.dev/metropolis/node/core/curator"
 	"source.monogon.dev/metropolis/node/core/identity"
 	"source.monogon.dev/metropolis/node/core/localstorage"
 	"source.monogon.dev/metropolis/node/core/network"
+	"source.monogon.dev/metropolis/node/core/network/ipam"
 	"source.monogon.dev/metropolis/node/core/rpc/resolver"
 	"source.monogon.dev/metropolis/node/core/update"
 	cpb "source.monogon.dev/metropolis/proto/common"
@@ -66,7 +66,7 @@
 	// Network is a handle to the network service, used by workloads.
 	Network *network.Service
 
-	PodNetwork *memory.Value[*clusternet.Prefixes]
+	PodNetwork *memory.Value[*ipam.Prefixes]
 
 	// resolver is the main, long-lived, authenticated cluster resolver that is used
 	// for all subsequent gRPC calls by the subordinates of the roleserver. It is
diff --git a/metropolis/node/core/roleserve/worker_clusternet.go b/metropolis/node/core/roleserve/worker_clusternet.go
index 3442030..8a3bb8f 100644
--- a/metropolis/node/core/roleserve/worker_clusternet.go
+++ b/metropolis/node/core/roleserve/worker_clusternet.go
@@ -7,9 +7,10 @@
 	"context"
 	"net"
 
-	"source.monogon.dev/metropolis/node/core/clusternet"
 	"source.monogon.dev/metropolis/node/core/localstorage"
 	"source.monogon.dev/metropolis/node/core/network"
+	"source.monogon.dev/metropolis/node/core/network/ipam"
+	"source.monogon.dev/metropolis/node/core/network/overlay"
 	"source.monogon.dev/osbase/event/memory"
 	"source.monogon.dev/osbase/supervisor"
 
@@ -22,7 +23,7 @@
 	// curatorConnection will be read
 	curatorConnection *memory.Value[*CuratorConnection]
 	// podNetwork will be read.
-	podNetwork *memory.Value[*clusternet.Prefixes]
+	podNetwork *memory.Value[*ipam.Prefixes]
 	network    *network.Service
 }
 
@@ -37,7 +38,7 @@
 	supervisor.Logger(ctx).Infof("Got curator connection, starting...")
 	cur := ipb.NewCuratorClient(cc.conn)
 
-	svc := clusternet.Service{
+	svc := overlay.Service{
 		Curator: cur,
 		ClusterNet: net.IPNet{
 			IP:   []byte{10, 192, 0, 0},
diff --git a/metropolis/node/core/roleserve/worker_kubernetes.go b/metropolis/node/core/roleserve/worker_kubernetes.go
index 2bbbba8..9cb2304 100644
--- a/metropolis/node/core/roleserve/worker_kubernetes.go
+++ b/metropolis/node/core/roleserve/worker_kubernetes.go
@@ -8,10 +8,10 @@
 	"fmt"
 	"net"
 
-	"source.monogon.dev/metropolis/node/core/clusternet"
 	"source.monogon.dev/metropolis/node/core/identity"
 	"source.monogon.dev/metropolis/node/core/localstorage"
 	"source.monogon.dev/metropolis/node/core/network"
+	"source.monogon.dev/metropolis/node/core/network/ipam"
 	"source.monogon.dev/metropolis/node/kubernetes"
 	"source.monogon.dev/metropolis/node/kubernetes/containerd"
 	kpki "source.monogon.dev/metropolis/node/kubernetes/pki"
@@ -40,7 +40,7 @@
 	localControlPlane *memory.Value[*localControlPlane]
 	curatorConnection *memory.Value[*CuratorConnection]
 	kubernetesStatus  *memory.Value[*KubernetesStatus]
-	podNetwork        *memory.Value[*clusternet.Prefixes]
+	podNetwork        *memory.Value[*ipam.Prefixes]
 }
 
 // kubernetesStartup is used internally to provide a reduced (as in MapReduce