proto/infra -> dc/proto

This cleans up proto/!

Change-Id: I3e280c16deef7ad0b01e6e409062831581ec863e
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 {