diff --git a/dc/m6220-proxy/BUILD.bazel b/dc/m6220-proxy/BUILD.bazel
index 50fa692..1d737b5 100644
--- a/dc/m6220-proxy/BUILD.bazel
+++ b/dc/m6220-proxy/BUILD.bazel
@@ -10,8 +10,8 @@
     visibility = ["//visibility:private"],
     deps = [
         "//dc/m6220-proxy/proto:go_default_library",
+        "//dc/proto:go_default_library",
         "//go/mirko:go_default_library",
-        "//proto/infra:go_default_library",
         "@com_github_golang_glog//:go_default_library",
         "@com_github_ziutek_telnet//:go_default_library",
         "@org_golang_google_grpc//codes:go_default_library",
diff --git a/dc/m6220-proxy/main.go b/dc/m6220-proxy/main.go
index 6fd972d..f4c348b 100644
--- a/dc/m6220-proxy/main.go
+++ b/dc/m6220-proxy/main.go
@@ -15,7 +15,7 @@
 	"google.golang.org/grpc/status"
 
 	pb "code.hackerspace.pl/hscloud/dc/m6220-proxy/proto"
-	ipb "code.hackerspace.pl/hscloud/proto/infra"
+	dpb "code.hackerspace.pl/hscloud/dc/proto"
 )
 
 var (
@@ -70,7 +70,7 @@
 	return res, nil
 }
 
-func (s *service) parseInterfaceStatus(res *ipb.GetPortsResponse, lines []string) error {
+func (s *service) parseInterfaceStatus(res *dpb.GetPortsResponse, lines []string) error {
 	if len(lines) < 4 {
 		return fmt.Errorf("need at least 4 lines of output, got %d", len(lines))
 	}
@@ -104,20 +104,20 @@
 		speedStr := parts[len(parts)-4]
 		stateStr := parts[len(parts)-2]
 
-		port := &ipb.SwitchPort{
+		port := &dpb.SwitchPort{
 			Name: portName,
 		}
 		if speedStr == "100" {
-			port.Speed = ipb.SwitchPort_SPEED_100M
+			port.Speed = dpb.SwitchPort_SPEED_100M
 		} else if speedStr == "1000" {
-			port.Speed = ipb.SwitchPort_SPEED_1G
+			port.Speed = dpb.SwitchPort_SPEED_1G
 		} else if speedStr == "10000" {
-			port.Speed = ipb.SwitchPort_SPEED_10G
+			port.Speed = dpb.SwitchPort_SPEED_10G
 		}
 		if stateStr == "Up" {
-			port.LinkState = ipb.SwitchPort_LINKSTATE_UP
+			port.LinkState = dpb.SwitchPort_LINKSTATE_UP
 		} else if stateStr == "Down" {
-			port.LinkState = ipb.SwitchPort_LINKSTATE_DOWN
+			port.LinkState = dpb.SwitchPort_LINKSTATE_DOWN
 		}
 
 		res.Ports = append(res.Ports, port)
@@ -126,7 +126,7 @@
 	return nil
 }
 
-func (s *service) parseInterfaceConfig(port *ipb.SwitchPort, lines []string) error {
+func (s *service) parseInterfaceConfig(port *dpb.SwitchPort, lines []string) error {
 	glog.Infof("%+v", port)
 	for _, line := range lines {
 		glog.Infof("%s: %q", port.Name, line)
@@ -137,23 +137,23 @@
 
 		if len(parts) >= 2 && parts[0] == "switchport" {
 			if parts[1] == "mode" {
-				if port.PortMode != ipb.SwitchPort_PORTMODE_INVALID {
+				if port.PortMode != dpb.SwitchPort_PORTMODE_INVALID {
 					return fmt.Errorf("redefinition of switchport mode")
 				}
 				if parts[2] == "access" {
-					port.PortMode = ipb.SwitchPort_PORTMODE_SWITCHPORT_UNTAGGED
+					port.PortMode = dpb.SwitchPort_PORTMODE_SWITCHPORT_UNTAGGED
 				} else if parts[2] == "trunk" {
-					port.PortMode = ipb.SwitchPort_PORTMODE_SWITCHPORT_TAGGED
+					port.PortMode = dpb.SwitchPort_PORTMODE_SWITCHPORT_TAGGED
 				} else if parts[2] == "general" {
-					port.PortMode = ipb.SwitchPort_PORTMODE_SWITCHPORT_GENERIC
+					port.PortMode = dpb.SwitchPort_PORTMODE_SWITCHPORT_GENERIC
 				} else {
-					port.PortMode = ipb.SwitchPort_PORTMODE_MANGLED
+					port.PortMode = dpb.SwitchPort_PORTMODE_MANGLED
 				}
 			}
 
 			if parts[1] == "access" {
-				if port.PortMode == ipb.SwitchPort_PORTMODE_INVALID {
-					port.PortMode = ipb.SwitchPort_PORTMODE_SWITCHPORT_UNTAGGED
+				if port.PortMode == dpb.SwitchPort_PORTMODE_INVALID {
+					port.PortMode = dpb.SwitchPort_PORTMODE_SWITCHPORT_UNTAGGED
 				}
 				if len(parts) > 3 && parts[2] == "vlan" {
 					vlan, err := strconv.Atoi(parts[3])
@@ -183,34 +183,34 @@
 			}
 			port.Mtu = int32(mtu)
 		} else if len(parts) >= 2 && parts[0] == "spanning-tree" && parts[1] == "portfast" {
-			port.SpanningTreeMode = ipb.SwitchPort_SPANNING_TREE_MODE_PORTFAST
+			port.SpanningTreeMode = dpb.SwitchPort_SPANNING_TREE_MODE_PORTFAST
 		}
 	}
 
 	// no mode -> access
-	if port.PortMode == ipb.SwitchPort_PORTMODE_INVALID {
-		port.PortMode = ipb.SwitchPort_PORTMODE_SWITCHPORT_UNTAGGED
+	if port.PortMode == dpb.SwitchPort_PORTMODE_INVALID {
+		port.PortMode = dpb.SwitchPort_PORTMODE_SWITCHPORT_UNTAGGED
 	}
 
 	// apply defaults
 	if port.Mtu == 0 {
 		port.Mtu = 1500
 	}
-	if port.SpanningTreeMode == ipb.SwitchPort_SPANNING_TREE_MODE_INVALID {
-		port.SpanningTreeMode = ipb.SwitchPort_SPANNING_TREE_MODE_AUTO_PORTFAST
+	if port.SpanningTreeMode == dpb.SwitchPort_SPANNING_TREE_MODE_INVALID {
+		port.SpanningTreeMode = dpb.SwitchPort_SPANNING_TREE_MODE_AUTO_PORTFAST
 	}
 
 	// sanitize
-	if port.PortMode == ipb.SwitchPort_PORTMODE_SWITCHPORT_UNTAGGED {
+	if port.PortMode == dpb.SwitchPort_PORTMODE_SWITCHPORT_UNTAGGED {
 		port.VlanTagged = []int32{}
 		port.Prefixes = []string{}
 		if port.VlanNative == 0 {
 			port.VlanNative = 1
 		}
-	} else if port.PortMode == ipb.SwitchPort_PORTMODE_SWITCHPORT_TAGGED {
+	} else if port.PortMode == dpb.SwitchPort_PORTMODE_SWITCHPORT_TAGGED {
 		port.VlanNative = 0
 		port.Prefixes = []string{}
-	} else if port.PortMode == ipb.SwitchPort_PORTMODE_SWITCHPORT_GENERIC {
+	} else if port.PortMode == dpb.SwitchPort_PORTMODE_SWITCHPORT_GENERIC {
 		port.Prefixes = []string{}
 		if port.VlanNative == 0 {
 			port.VlanNative = 1
@@ -219,13 +219,13 @@
 	return nil
 }
 
-func (s *service) GetPorts(ctx context.Context, req *ipb.GetPortsRequest) (*ipb.GetPortsResponse, error) {
+func (s *service) GetPorts(ctx context.Context, req *dpb.GetPortsRequest) (*dpb.GetPortsResponse, error) {
 	cli, err := s.connect()
 	if err != nil {
 		return nil, status.Error(codes.Unavailable, "could not connect to switch")
 	}
 	defer s.disconnect()
-	res := &ipb.GetPortsResponse{}
+	res := &dpb.GetPortsResponse{}
 
 	statusLines, _, err := cli.runCommand(ctx, "show interface status")
 	if err != nil {
@@ -267,7 +267,7 @@
 	}
 
 	pb.RegisterM6220ProxyServer(m.GRPC(), s)
-	ipb.RegisterSwitchControlServer(m.GRPC(), s)
+	dpb.RegisterSwitchControlServer(m.GRPC(), s)
 
 	if err := m.Serve(); err != nil {
 		glog.Exitf("Serve(): %v", err)
diff --git a/dc/proto/BUILD.bazel b/dc/proto/BUILD.bazel
new file mode 100644
index 0000000..cfee72e
--- /dev/null
+++ b/dc/proto/BUILD.bazel
@@ -0,0 +1,23 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+
+proto_library(
+    name = "proto_proto",
+    srcs = ["dc.proto"],
+    visibility = ["//visibility:public"],
+)
+
+go_proto_library(
+    name = "proto_go_proto",
+    compilers = ["@io_bazel_rules_go//proto:go_grpc"],
+    importpath = "code.hackerspace.pl/hscloud/dc/proto",
+    proto = ":proto_proto",
+    visibility = ["//visibility:public"],
+)
+
+go_library(
+    name = "go_default_library",
+    embed = [":proto_go_proto"],
+    importpath = "code.hackerspace.pl/hscloud/dc/proto",
+    visibility = ["//visibility:public"],
+)
diff --git a/dc/proto/dc.proto b/dc/proto/dc.proto
new file mode 100644
index 0000000..2b242ec
--- /dev/null
+++ b/dc/proto/dc.proto
@@ -0,0 +1,65 @@
+syntax = "proto3";
+package dc;
+option go_package = "code.hackerspace.pl/hscloud/dc/proto";
+
+message GetPortsRequest {
+};
+
+message SwitchPort {
+    enum Speed {
+        SPEED_INVALID = 0;
+        SPEED_100M = 1;
+        SPEED_1G = 2;
+        SPEED_10G = 3;
+    };
+    string name = 1;
+    Speed speed = 2;
+    enum LinkState {
+        LINKSTATE_INVALID = 0;
+        LINKSTATE_DOWN = 1;
+        LINKSTATE_UP = 2;
+    };
+    LinkState link_state = 3;
+    enum PortMode {
+        PORTMODE_INVALID = 0;
+        // Interface is bridged to a VLAN, untagged.
+        PORTMODE_SWITCHPORT_UNTAGGED = 1;
+        // Interfaces is bridged to several tagged 802.1q VLANs.
+        PORTMODE_SWITCHPORT_TAGGED = 2;
+        // Interface is in 'generic', both tagged 802.1q and untagged mode.
+        PORTMODE_SWITCHPORT_GENERIC = 3;
+        // Interface is routed, ie routes packets from a separate L3 network
+        // and the Switch is the default gateway for machines in this network.
+        PORTMODE_ROUTED = 4;
+        // Interface is in a configuration state that cannot be clearly stated
+        // in terms of this enum, and should be reconfigured.
+        PORTMODE_MANGLED = 5;
+    };
+    PortMode port_mode = 4;
+    // For PORTMODE_SWITCHPORT_UNTAGGED and PORTMODE_SWITCHPORT_GENERIC, the
+    // VLAN ID that this interface is natively bridged to.
+    int32 vlan_native = 5;
+    // For PORTMODE_SWITCHPORT_TAGGED and PORTMODE_SWITCHPORT_GENERIC, the VLAN
+    // IDs that the interface is bridged to using 802.1q tags.
+    repeated int32 vlan_tagged = 6;
+    // For PORTMODE_ROUTED
+    repeated string prefixes = 7;
+    // Interface MTU
+    int32 mtu = 8;
+    enum SpanningTreeMode {
+        SPANNING_TREE_MODE_INVALID = 0;
+        // Send STP BPDU, on timeout switch to Forwarding.
+        SPANNING_TREE_MODE_AUTO_PORTFAST = 1;
+        // Switch to Forwarding immediately on link up.
+        SPANNING_TREE_MODE_PORTFAST = 2;
+    };
+    SpanningTreeMode spanning_tree_mode = 9;
+};
+
+message GetPortsResponse {
+    repeated SwitchPort ports = 1;
+};
+
+service SwitchControl {
+    rpc GetPorts(GetPortsRequest) returns (GetPortsResponse);
+};
diff --git a/dc/topo/BUILD.bazel b/dc/topo/BUILD.bazel
index c10300c..83673e3 100644
--- a/dc/topo/BUILD.bazel
+++ b/dc/topo/BUILD.bazel
@@ -9,13 +9,13 @@
     importpath = "code.hackerspace.pl/hscloud/dc/topo",
     visibility = ["//visibility:private"],
     deps = [
+        "//dc/proto:go_default_library",
         "//dc/topo/assets:go_default_library",
         "//dc/topo/graph:go_default_library",
         "//dc/topo/proto:go_default_library",
         "//dc/topo/state:go_default_library",
         "//go/mirko:go_default_library",
         "//go/statusz:go_default_library",
-        "//proto/infra:go_default_library",
         "@com_github_digitalocean_go_netbox//netbox:go_default_library",
         "@com_github_digitalocean_go_netbox//netbox/client:go_default_library",
         "@com_github_golang_glog//:go_default_library",
diff --git a/dc/topo/service.go b/dc/topo/service.go
index 8919939..84eda5d 100644
--- a/dc/topo/service.go
+++ b/dc/topo/service.go
@@ -11,8 +11,8 @@
 
 	"code.hackerspace.pl/hscloud/go/mirko"
 	"code.hackerspace.pl/hscloud/go/statusz"
-	ipb "code.hackerspace.pl/hscloud/proto/infra"
 
+	dpb "code.hackerspace.pl/hscloud/dc/proto"
 	"code.hackerspace.pl/hscloud/dc/topo/assets"
 	"code.hackerspace.pl/hscloud/dc/topo/graph"
 	"code.hackerspace.pl/hscloud/dc/topo/state"
@@ -152,22 +152,22 @@
 		for _, po := range sw.Ports {
 			state := "INVALID"
 			switch po.Proto.LinkState {
-			case ipb.SwitchPort_LINKSTATE_DOWN:
+			case dpb.SwitchPort_LINKSTATE_DOWN:
 				state = "DOWN"
-			case ipb.SwitchPort_LINKSTATE_UP:
+			case dpb.SwitchPort_LINKSTATE_UP:
 				state = "UP"
 			}
 			mode := "INVALID"
 			switch po.Proto.PortMode {
-			case ipb.SwitchPort_PORTMODE_SWITCHPORT_UNTAGGED:
+			case dpb.SwitchPort_PORTMODE_SWITCHPORT_UNTAGGED:
 				mode = fmt.Sprintf("UNTAGGED (%d)", po.Proto.VlanNative)
-			case ipb.SwitchPort_PORTMODE_SWITCHPORT_TAGGED:
+			case dpb.SwitchPort_PORTMODE_SWITCHPORT_TAGGED:
 				mode = fmt.Sprintf("TAGGED (%v)", po.Proto.VlanTagged)
-			case ipb.SwitchPort_PORTMODE_SWITCHPORT_GENERIC:
+			case dpb.SwitchPort_PORTMODE_SWITCHPORT_GENERIC:
 				mode = "GENERIC"
-			case ipb.SwitchPort_PORTMODE_ROUTED:
+			case dpb.SwitchPort_PORTMODE_ROUTED:
 				mode = "ROUTED"
-			case ipb.SwitchPort_PORTMODE_MANGLED:
+			case dpb.SwitchPort_PORTMODE_MANGLED:
 				mode = "MANGLED"
 			}
 
diff --git a/dc/topo/state/BUILD.bazel b/dc/topo/state/BUILD.bazel
index 892e302..fefb3ef 100644
--- a/dc/topo/state/BUILD.bazel
+++ b/dc/topo/state/BUILD.bazel
@@ -6,9 +6,9 @@
     importpath = "code.hackerspace.pl/hscloud/dc/topo/state",
     visibility = ["//visibility:public"],
     deps = [
+        "//dc/proto:go_default_library",
         "//dc/topo/proto:go_default_library",
         "//go/pki:go_default_library",
-        "//proto/infra:go_default_library",
         "@org_golang_google_grpc//:go_default_library",
     ],
 )
diff --git a/dc/topo/state/state.go b/dc/topo/state/state.go
index 116a55a..e264827 100644
--- a/dc/topo/state/state.go
+++ b/dc/topo/state/state.go
@@ -7,24 +7,24 @@
 
 	"google.golang.org/grpc"
 
+	dpb "code.hackerspace.pl/hscloud/dc/proto"
 	"code.hackerspace.pl/hscloud/go/pki"
-	ipb "code.hackerspace.pl/hscloud/proto/infra"
 
 	pb "code.hackerspace.pl/hscloud/dc/topo/proto"
 )
 
 type SwitchportState struct {
-	Proto *ipb.SwitchPort
+	Proto *dpb.SwitchPort
 }
 
 type SwitchState struct {
 	Name  string
 	Ports []*SwitchportState
-	Stub  ipb.SwitchControlClient
+	Stub  dpb.SwitchControlClient
 }
 
 func (s *SwitchState) Fetch(ctx context.Context) error {
-	req := ipb.GetPortsRequest{}
+	req := dpb.GetPortsRequest{}
 	res, err := s.Stub.GetPorts(ctx, &req)
 	if err != nil {
 		return fmt.Errorf("GetPorts: %v", err)
@@ -65,7 +65,7 @@
 
 		s.Switches[sw.Name] = &SwitchState{
 			Name: sw.Name,
-			Stub: ipb.NewSwitchControlClient(conn),
+			Stub: dpb.NewSwitchControlClient(conn),
 		}
 		err := s.Switches[sw.Name].Fetch(ctx)
 		if err != nil {
