diff --git a/doc/index.html b/doc/index.html
index 70506971..bf884c78 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -17511,7 +17511,7 @@
| mac |
string |
- |
+ optional |
MAC address of the port. |
diff --git a/go/metalstack/api/v2/switch.pb.go b/go/metalstack/api/v2/switch.pb.go
index a7f2562f..64b9798e 100644
--- a/go/metalstack/api/v2/switch.pb.go
+++ b/go/metalstack/api/v2/switch.pb.go
@@ -500,7 +500,7 @@ type SwitchNic struct {
// Identifier of the port.
Identifier string `protobuf:"bytes,2,opt,name=identifier,proto3" json:"identifier,omitempty"`
// MAC address of the port.
- Mac string `protobuf:"bytes,3,opt,name=mac,proto3" json:"mac,omitempty"`
+ Mac *string `protobuf:"bytes,3,opt,name=mac,proto3,oneof" json:"mac,omitempty"`
// VRF name if the port is bound in one.
Vrf *string `protobuf:"bytes,4,opt,name=vrf,proto3,oneof" json:"vrf,omitempty"`
// NicState describes the current state of the switch port.
@@ -558,8 +558,8 @@ func (x *SwitchNic) GetIdentifier() string {
}
func (x *SwitchNic) GetMac() string {
- if x != nil {
- return x.Mac
+ if x != nil && x.Mac != nil {
+ return *x.Mac
}
return ""
}
@@ -1236,18 +1236,19 @@ const file_metalstack_api_v2_switch_proto_rawDesc = "" +
"\bSwitchOS\x12C\n" +
"\x06vendor\x18\x01 \x01(\x0e2!.metalstack.api.v2.SwitchOSVendorB\b\xbaH\x05\x82\x01\x02\x10\x01R\x06vendor\x12%\n" +
"\aversion\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\aversion\x129\n" +
- "\x12metal_core_version\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x10metalCoreVersion\"\x9c\x03\n" +
+ "\x12metal_core_version\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x10metalCoreVersion\"\xa9\x03\n" +
"\tSwitchNic\x12\x1f\n" +
"\x04name\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12+\n" +
"\n" +
"identifier\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\n" +
- "identifier\x12\x1d\n" +
- "\x03mac\x18\x03 \x01(\tB\v\xbaH\br\x06\xb8\xb3\xae\xb1\x02\x01R\x03mac\x12\"\n" +
- "\x03vrf\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x03vrf\x88\x01\x01\x126\n" +
- "\x05state\x18\x05 \x01(\v2\x1b.metalstack.api.v2.NicStateH\x01R\x05state\x88\x01\x01\x12@\n" +
+ "identifier\x12\"\n" +
+ "\x03mac\x18\x03 \x01(\tB\v\xbaH\br\x06\xb8\xb3\xae\xb1\x02\x01H\x00R\x03mac\x88\x01\x01\x12\"\n" +
+ "\x03vrf\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x03vrf\x88\x01\x01\x126\n" +
+ "\x05state\x18\x05 \x01(\v2\x1b.metalstack.api.v2.NicStateH\x02R\x05state\x88\x01\x01\x12@\n" +
"\n" +
- "bgp_filter\x18\x06 \x01(\v2\x1c.metalstack.api.v2.BGPFilterH\x02R\tbgpFilter\x88\x01\x01\x12P\n" +
- "\x0ebgp_port_state\x18\a \x01(\v2%.metalstack.api.v2.SwitchBGPPortStateH\x03R\fbgpPortState\x88\x01\x01B\x06\n" +
+ "bgp_filter\x18\x06 \x01(\v2\x1c.metalstack.api.v2.BGPFilterH\x03R\tbgpFilter\x88\x01\x01\x12P\n" +
+ "\x0ebgp_port_state\x18\a \x01(\v2%.metalstack.api.v2.SwitchBGPPortStateH\x04R\fbgpPortState\x88\x01\x01B\x06\n" +
+ "\x04_macB\x06\n" +
"\x04_vrfB\b\n" +
"\x06_stateB\r\n" +
"\v_bgp_filterB\x11\n" +
diff --git a/go/tests/validation/switch_test.go b/go/tests/validation/switch_test.go
index 778b224f..57d19fc1 100644
--- a/go/tests/validation/switch_test.go
+++ b/go/tests/validation/switch_test.go
@@ -13,7 +13,7 @@ func TestValidateSwitch(t *testing.T) {
msg: &apiv2.SwitchNic{
Name: "eth0",
Identifier: "swp1",
- Mac: "abc",
+ Mac: new("abc"),
Vrf: new("10"),
},
wantErr: true,
@@ -24,7 +24,7 @@ func TestValidateSwitch(t *testing.T) {
msg: &apiv2.SwitchNic{
Name: "eth0",
Identifier: "swp1",
- Mac: "00:80:41:ae:fd:7e",
+ Mac: new("00:80:41:ae:fd:7e"),
Vrf: new("10"),
},
wantErr: false,
@@ -34,7 +34,7 @@ func TestValidateSwitch(t *testing.T) {
msg: &apiv2.SwitchNic{
Name: "eth0",
Identifier: "swp1",
- Mac: "00:80:41:AE:FD:7E",
+ Mac: new("00:80:41:AE:FD:7E"),
Vrf: new("10"),
},
wantErr: false,
diff --git a/js/metalstack/api/v2/switch_pb.d.ts b/js/metalstack/api/v2/switch_pb.d.ts
index eeac5162..64b9e049 100644
--- a/js/metalstack/api/v2/switch_pb.d.ts
+++ b/js/metalstack/api/v2/switch_pb.d.ts
@@ -160,9 +160,9 @@ export type SwitchNic = Message<"metalstack.api.v2.SwitchNic"> & {
/**
* MAC address of the port.
*
- * @generated from field: string mac = 3;
+ * @generated from field: optional string mac = 3;
*/
- mac: string;
+ mac?: string | undefined;
/**
* VRF name if the port is bound in one.
*
diff --git a/js/metalstack/api/v2/switch_pb.js b/js/metalstack/api/v2/switch_pb.js
index b24a7b84..bc0ff514 100644
--- a/js/metalstack/api/v2/switch_pb.js
+++ b/js/metalstack/api/v2/switch_pb.js
@@ -10,7 +10,7 @@ import { file_metalstack_api_v2_predefined_rules } from "./predefined_rules_pb";
/**
* Describes the file metalstack/api/v2/switch.proto.
*/
-export const file_metalstack_api_v2_switch = /*@__PURE__*/ fileDesc("Ch5tZXRhbHN0YWNrL2FwaS92Mi9zd2l0Y2gucHJvdG8SEW1ldGFsc3RhY2suYXBpLnYyIsIFCgZTd2l0Y2gSGQoCaWQYASABKAlCDbpICnIIwLOusQIBaAESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEh4KBHJhY2sYBCABKAlCC7pICHIGwLOusQIBSACIAQESHgoEcm9vbRgFIAEoCUILukgIcgbAs66xAgFIAYgBARIeCglwYXJ0aXRpb24YBiABKAlCC7pICHIG0LOusQIBEkQKDHJlcGxhY2VfbW9kZRgHIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFJlcGxhY2VNb2RlQgi6SAWCAQIQARIeCg1tYW5hZ2VtZW50X2lwGAggASgJQge6SARyAnABEigKD21hbmFnZW1lbnRfdXNlchgJIAEoCUIKukgHcgUQAhiAAUgCiAEBEigKD2NvbnNvbGVfY29tbWFuZBgKIAEoCUIKukgHcgUQAhiAAUgDiAEBEioKBG5pY3MYCyADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMSJwoCb3MYDCABKAsyGy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hPUxJBChNtYWNoaW5lX2Nvbm5lY3Rpb25zGA0gAygLMiQubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUNvbm5lY3Rpb24SMAoJbGFzdF9zeW5jGA4gASgLMh0ubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoU3luYxI2Cg9sYXN0X3N5bmNfZXJyb3IYDyABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hTeW5jQgcKBV9yYWNrQgcKBV9yb29tQhIKEF9tYW5hZ2VtZW50X3VzZXJCEgoQX2NvbnNvbGVfY29tbWFuZCKOAQoIU3dpdGNoT1MSOwoGdmVuZG9yGAEgASgOMiEubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1NWZW5kb3JCCLpIBYIBAhABEhwKB3ZlcnNpb24YAiABKAlCC7pICHIGwLOusQIBEicKEm1ldGFsX2NvcmVfdmVyc2lvbhgDIAEoCUILukgIcgbAs66xAgEi4AIKCVN3aXRjaE5pYxIZCgRuYW1lGAEgASgJQgu6SAhyBsCzrrECARIfCgppZGVudGlmaWVyGAIgASgJQgu6SAhyBsCzrrECARIYCgNtYWMYAyABKAlCC7pICHIGuLOusQIBEh0KA3ZyZhgEIAEoCUILukgIcgbAs66xAgFIAIgBARIvCgVzdGF0ZRgFIAEoCzIbLm1ldGFsc3RhY2suYXBpLnYyLk5pY1N0YXRlSAGIAQESNQoKYmdwX2ZpbHRlchgGIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLkJHUEZpbHRlckgCiAEBEkIKDmJncF9wb3J0X3N0YXRlGAcgASgLMiUubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoQkdQUG9ydFN0YXRlSAOIAQFCBgoEX3ZyZkIICgZfc3RhdGVCDQoLX2JncF9maWx0ZXJCEQoPX2JncF9wb3J0X3N0YXRlIkcKCUJHUEZpbHRlchIbCgVjaWRycxgBIAMoCUIMukgJkgEGuKSzsQIBEh0KBHZuaXMYAiADKAlCD7pIDJIBCSIHcgUQAhiAASKpAgoSU3dpdGNoQkdQUG9ydFN0YXRlEh0KCG5laWdoYm9yGAEgASgJQgu6SAhyBsCzrrECARIfCgpwZWVyX2dyb3VwGAIgASgJQgu6SAhyBsCzrrECARIdCgh2cmZfbmFtZRgDIAEoCUILukgIcgbAs66xAgESOAoJYmdwX3N0YXRlGAQgASgOMhsubWV0YWxzdGFjay5hcGkudjIuQkdQU3RhdGVCCLpIBYIBAhABEjwKGGJncF90aW1lcl91cF9lc3RhYmxpc2hlZBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoTc2VudF9wcmVmaXhfY291bnRlchgGIAEoBBIfChdhY2NlcHRlZF9wcmVmaXhfY291bnRlchgHIAEoBCKaAQoITmljU3RhdGUSQwoHZGVzaXJlZBgBIAEoDjIjLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFBvcnRTdGF0dXNCCLpIBYIBAhABSACIAQESPQoGYWN0dWFsGAIgASgOMiMubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoUG9ydFN0YXR1c0IIukgFggECEAFCCgoIX2Rlc2lyZWQiUgoRTWFjaGluZUNvbm5lY3Rpb24SEgoKbWFjaGluZV9pZBgBIAEoCRIpCgNuaWMYAiABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMiuQIKC1N3aXRjaFF1ZXJ5Eh4KAmlkGAEgASgJQg26SApyCMCzrrECAWgBSACIAQESIwoJcGFydGl0aW9uGAIgASgJQgu6SAhyBtCzrrECAUgBiAEBEh4KBHJhY2sYAyABKAlCC7pICHIGwLOusQIBSAKIAQESHgoEcm9vbRgEIAEoCUILukgIcgbAs66xAgFIA4gBARIxCgJvcxgFIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE9TUXVlcnlIBIgBARIrChRjb25uZWN0ZWRfbWFjaGluZV9pZBgGIAEoCUIIukgFcgOwAQFIBYgBAUIFCgNfaWRCDAoKX3BhcnRpdGlvbkIHCgVfcmFja0IHCgVfcm9vbUIFCgNfb3NCFwoVX2Nvbm5lY3RlZF9tYWNoaW5lX2lkIosBCg1Td2l0Y2hPU1F1ZXJ5EkAKBnZlbmRvchgBIAEoDjIhLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE9TVmVuZG9yQgi6SAWCAQIQAUgAiAEBEiEKB3ZlcnNpb24YAiABKAlCC7pICHIGwLOusQIBSAGIAQFCCQoHX3ZlbmRvckIKCghfdmVyc2lvbiKBAQoKU3dpdGNoU3luYxIoCgR0aW1lGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCghkdXJhdGlvbhgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhISCgVlcnJvchgDIAEoCUgAiAEBQggKBl9lcnJvciJ/ChJTd2l0Y2hXaXRoTWFjaGluZXMSCgoCaWQYASABKAkSEQoJcGFydGl0aW9uGAIgASgJEgwKBHJhY2sYAyABKAkSPAoLY29ubmVjdGlvbnMYBCADKAsyJy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWNXaXRoTWFjaGluZSKaAQoUU3dpdGNoTmljV2l0aE1hY2hpbmUSKQoDbmljGAEgASgLMhwubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljEisKB21hY2hpbmUYAiABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lEioKA2ZydRgDIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlUqiQIKCEJHUFN0YXRlEhkKFUJHUF9TVEFURV9VTlNQRUNJRklFRBAAEhwKDkJHUF9TVEFURV9JRExFEAEaCIKyGQRJZGxlEiIKEUJHUF9TVEFURV9DT05ORUNUEAIaC4KyGQdDb25uZWN0EiAKEEJHUF9TVEFURV9BQ1RJVkUQAxoKgrIZBkFjdGl2ZRIlChNCR1BfU1RBVEVfT1BFTl9TRU5UEAQaDIKyGQhPcGVuU2VudBIrChZCR1BfU1RBVEVfT1BFTl9DT05GSVJNEAUaD4KyGQtPcGVuQ29uZmlybRIqChVCR1BfU1RBVEVfRVNUQUJMSVNIRUQQBhoPgrIZC0VzdGFibGlzaGVkKqIBChFTd2l0Y2hSZXBsYWNlTW9kZRIpCh9TV0lUQ0hfUkVQTEFDRV9NT0RFX1VOU1BFQ0lGSUVEEAAaBIKyGQASLAobU1dJVENIX1JFUExBQ0VfTU9ERV9SRVBMQUNFEAEaC4KyGQdyZXBsYWNlEjQKH1NXSVRDSF9SRVBMQUNFX01PREVfT1BFUkFUSU9OQUwQAhoPgrIZC29wZXJhdGlvbmFsKoQBCg5Td2l0Y2hPU1ZlbmRvchIgChxTV0lUQ0hfT1NfVkVORE9SX1VOU1BFQ0lGSUVEEAASKQoYU1dJVENIX09TX1ZFTkRPUl9DVU1VTFVTEAEaC4KyGQdDdW11bHVzEiUKFlNXSVRDSF9PU19WRU5ET1JfU09OSUMQAhoJgrIZBVNPTmlDKq0BChBTd2l0Y2hQb3J0U3RhdHVzEiIKHlNXSVRDSF9QT1JUX1NUQVRVU19VTlNQRUNJRklFRBAAEiEKFVNXSVRDSF9QT1JUX1NUQVRVU19VUBABGgaCshkCdXASJQoXU1dJVENIX1BPUlRfU1RBVFVTX0RPV04QAhoIgrIZBGRvd24SKwoaU1dJVENIX1BPUlRfU1RBVFVTX1VOS05PV04QAxoLgrIZB3Vua25vd25CwQEKFWNvbS5tZXRhbHN0YWNrLmFwaS52MkILU3dpdGNoUHJvdG9QAVo1Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hcGkvdjI7YXBpdjKiAgNNQViqAhFNZXRhbHN0YWNrLkFwaS5WMsoCEU1ldGFsc3RhY2tcQXBpXFYy4gIdTWV0YWxzdGFja1xBcGlcVjJcR1BCTWV0YWRhdGHqAhNNZXRhbHN0YWNrOjpBcGk6OlYyYgZwcm90bzM", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_machine, file_metalstack_api_v2_predefined_rules]);
+export const file_metalstack_api_v2_switch = /*@__PURE__*/ fileDesc("Ch5tZXRhbHN0YWNrL2FwaS92Mi9zd2l0Y2gucHJvdG8SEW1ldGFsc3RhY2suYXBpLnYyIsIFCgZTd2l0Y2gSGQoCaWQYASABKAlCDbpICnIIwLOusQIBaAESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEh4KBHJhY2sYBCABKAlCC7pICHIGwLOusQIBSACIAQESHgoEcm9vbRgFIAEoCUILukgIcgbAs66xAgFIAYgBARIeCglwYXJ0aXRpb24YBiABKAlCC7pICHIG0LOusQIBEkQKDHJlcGxhY2VfbW9kZRgHIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFJlcGxhY2VNb2RlQgi6SAWCAQIQARIeCg1tYW5hZ2VtZW50X2lwGAggASgJQge6SARyAnABEigKD21hbmFnZW1lbnRfdXNlchgJIAEoCUIKukgHcgUQAhiAAUgCiAEBEigKD2NvbnNvbGVfY29tbWFuZBgKIAEoCUIKukgHcgUQAhiAAUgDiAEBEioKBG5pY3MYCyADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMSJwoCb3MYDCABKAsyGy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hPUxJBChNtYWNoaW5lX2Nvbm5lY3Rpb25zGA0gAygLMiQubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUNvbm5lY3Rpb24SMAoJbGFzdF9zeW5jGA4gASgLMh0ubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoU3luYxI2Cg9sYXN0X3N5bmNfZXJyb3IYDyABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hTeW5jQgcKBV9yYWNrQgcKBV9yb29tQhIKEF9tYW5hZ2VtZW50X3VzZXJCEgoQX2NvbnNvbGVfY29tbWFuZCKOAQoIU3dpdGNoT1MSOwoGdmVuZG9yGAEgASgOMiEubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1NWZW5kb3JCCLpIBYIBAhABEhwKB3ZlcnNpb24YAiABKAlCC7pICHIGwLOusQIBEicKEm1ldGFsX2NvcmVfdmVyc2lvbhgDIAEoCUILukgIcgbAs66xAgEi7QIKCVN3aXRjaE5pYxIZCgRuYW1lGAEgASgJQgu6SAhyBsCzrrECARIfCgppZGVudGlmaWVyGAIgASgJQgu6SAhyBsCzrrECARIdCgNtYWMYAyABKAlCC7pICHIGuLOusQIBSACIAQESHQoDdnJmGAQgASgJQgu6SAhyBsCzrrECAUgBiAEBEi8KBXN0YXRlGAUgASgLMhsubWV0YWxzdGFjay5hcGkudjIuTmljU3RhdGVIAogBARI1CgpiZ3BfZmlsdGVyGAYgASgLMhwubWV0YWxzdGFjay5hcGkudjIuQkdQRmlsdGVySAOIAQESQgoOYmdwX3BvcnRfc3RhdGUYByABKAsyJS5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hCR1BQb3J0U3RhdGVIBIgBAUIGCgRfbWFjQgYKBF92cmZCCAoGX3N0YXRlQg0KC19iZ3BfZmlsdGVyQhEKD19iZ3BfcG9ydF9zdGF0ZSJHCglCR1BGaWx0ZXISGwoFY2lkcnMYASADKAlCDLpICZIBBriks7ECARIdCgR2bmlzGAIgAygJQg+6SAySAQkiB3IFEAIYgAEiqQIKElN3aXRjaEJHUFBvcnRTdGF0ZRIdCghuZWlnaGJvchgBIAEoCUILukgIcgbAs66xAgESHwoKcGVlcl9ncm91cBgCIAEoCUILukgIcgbAs66xAgESHQoIdnJmX25hbWUYAyABKAlCC7pICHIGwLOusQIBEjgKCWJncF9zdGF0ZRgEIAEoDjIbLm1ldGFsc3RhY2suYXBpLnYyLkJHUFN0YXRlQgi6SAWCAQIQARI8ChhiZ3BfdGltZXJfdXBfZXN0YWJsaXNoZWQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhsKE3NlbnRfcHJlZml4X2NvdW50ZXIYBiABKAQSHwoXYWNjZXB0ZWRfcHJlZml4X2NvdW50ZXIYByABKAQimgEKCE5pY1N0YXRlEkMKB2Rlc2lyZWQYASABKA4yIy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hQb3J0U3RhdHVzQgi6SAWCAQIQAUgAiAEBEj0KBmFjdHVhbBgCIAEoDjIjLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFBvcnRTdGF0dXNCCLpIBYIBAhABQgoKCF9kZXNpcmVkIlIKEU1hY2hpbmVDb25uZWN0aW9uEhIKCm1hY2hpbmVfaWQYASABKAkSKQoDbmljGAIgASgLMhwubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljIrkCCgtTd2l0Y2hRdWVyeRIeCgJpZBgBIAEoCUINukgKcgjAs66xAgFoAUgAiAEBEiMKCXBhcnRpdGlvbhgCIAEoCUILukgIcgbQs66xAgFIAYgBARIeCgRyYWNrGAMgASgJQgu6SAhyBsCzrrECAUgCiAEBEh4KBHJvb20YBCABKAlCC7pICHIGwLOusQIBSAOIAQESMQoCb3MYBSABKAsyIC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hPU1F1ZXJ5SASIAQESKwoUY29ubmVjdGVkX21hY2hpbmVfaWQYBiABKAlCCLpIBXIDsAEBSAWIAQFCBQoDX2lkQgwKCl9wYXJ0aXRpb25CBwoFX3JhY2tCBwoFX3Jvb21CBQoDX29zQhcKFV9jb25uZWN0ZWRfbWFjaGluZV9pZCKLAQoNU3dpdGNoT1NRdWVyeRJACgZ2ZW5kb3IYASABKA4yIS5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hPU1ZlbmRvckIIukgFggECEAFIAIgBARIhCgd2ZXJzaW9uGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBQgkKB192ZW5kb3JCCgoIX3ZlcnNpb24igQEKClN3aXRjaFN5bmMSKAoEdGltZRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKwoIZHVyYXRpb24YAiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb24SEgoFZXJyb3IYAyABKAlIAIgBAUIICgZfZXJyb3IifwoSU3dpdGNoV2l0aE1hY2hpbmVzEgoKAmlkGAEgASgJEhEKCXBhcnRpdGlvbhgCIAEoCRIMCgRyYWNrGAMgASgJEjwKC2Nvbm5lY3Rpb25zGAQgAygLMicubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljV2l0aE1hY2hpbmUimgEKFFN3aXRjaE5pY1dpdGhNYWNoaW5lEikKA25pYxgBIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE5pYxIrCgdtYWNoaW5lGAIgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZRIqCgNmcnUYAyABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lRlJVKokCCghCR1BTdGF0ZRIZChVCR1BfU1RBVEVfVU5TUEVDSUZJRUQQABIcCg5CR1BfU1RBVEVfSURMRRABGgiCshkESWRsZRIiChFCR1BfU1RBVEVfQ09OTkVDVBACGguCshkHQ29ubmVjdBIgChBCR1BfU1RBVEVfQUNUSVZFEAMaCoKyGQZBY3RpdmUSJQoTQkdQX1NUQVRFX09QRU5fU0VOVBAEGgyCshkIT3BlblNlbnQSKwoWQkdQX1NUQVRFX09QRU5fQ09ORklSTRAFGg+CshkLT3BlbkNvbmZpcm0SKgoVQkdQX1NUQVRFX0VTVEFCTElTSEVEEAYaD4KyGQtFc3RhYmxpc2hlZCqiAQoRU3dpdGNoUmVwbGFjZU1vZGUSKQofU1dJVENIX1JFUExBQ0VfTU9ERV9VTlNQRUNJRklFRBAAGgSCshkAEiwKG1NXSVRDSF9SRVBMQUNFX01PREVfUkVQTEFDRRABGguCshkHcmVwbGFjZRI0Ch9TV0lUQ0hfUkVQTEFDRV9NT0RFX09QRVJBVElPTkFMEAIaD4KyGQtvcGVyYXRpb25hbCqEAQoOU3dpdGNoT1NWZW5kb3ISIAocU1dJVENIX09TX1ZFTkRPUl9VTlNQRUNJRklFRBAAEikKGFNXSVRDSF9PU19WRU5ET1JfQ1VNVUxVUxABGguCshkHQ3VtdWx1cxIlChZTV0lUQ0hfT1NfVkVORE9SX1NPTklDEAIaCYKyGQVTT05pQyqtAQoQU3dpdGNoUG9ydFN0YXR1cxIiCh5TV0lUQ0hfUE9SVF9TVEFUVVNfVU5TUEVDSUZJRUQQABIhChVTV0lUQ0hfUE9SVF9TVEFUVVNfVVAQARoGgrIZAnVwEiUKF1NXSVRDSF9QT1JUX1NUQVRVU19ET1dOEAIaCIKyGQRkb3duEisKGlNXSVRDSF9QT1JUX1NUQVRVU19VTktOT1dOEAMaC4KyGQd1bmtub3duQsEBChVjb20ubWV0YWxzdGFjay5hcGkudjJCC1N3aXRjaFByb3RvUAFaNWdpdGh1Yi5jb20vbWV0YWwtc3RhY2svYXBpL2dvL21ldGFsc3RhY2svYXBpL3YyO2FwaXYyogIDTUFYqgIRTWV0YWxzdGFjay5BcGkuVjLKAhFNZXRhbHN0YWNrXEFwaVxWMuICHU1ldGFsc3RhY2tcQXBpXFYyXEdQQk1ldGFkYXRh6gITTWV0YWxzdGFjazo6QXBpOjpWMmIGcHJvdG8z", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_machine, file_metalstack_api_v2_predefined_rules]);
/**
* Describes the message metalstack.api.v2.Switch.
* Use `create(SwitchSchema)` to create a new message.
diff --git a/js/metalstack/api/v2/switch_pb.ts b/js/metalstack/api/v2/switch_pb.ts
index e590d4fa..cfc5ba37 100644
--- a/js/metalstack/api/v2/switch_pb.ts
+++ b/js/metalstack/api/v2/switch_pb.ts
@@ -18,7 +18,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/api/v2/switch.proto.
*/
export const file_metalstack_api_v2_switch: GenFile = /*@__PURE__*/
- fileDesc("Ch5tZXRhbHN0YWNrL2FwaS92Mi9zd2l0Y2gucHJvdG8SEW1ldGFsc3RhY2suYXBpLnYyIsIFCgZTd2l0Y2gSGQoCaWQYASABKAlCDbpICnIIwLOusQIBaAESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEh4KBHJhY2sYBCABKAlCC7pICHIGwLOusQIBSACIAQESHgoEcm9vbRgFIAEoCUILukgIcgbAs66xAgFIAYgBARIeCglwYXJ0aXRpb24YBiABKAlCC7pICHIG0LOusQIBEkQKDHJlcGxhY2VfbW9kZRgHIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFJlcGxhY2VNb2RlQgi6SAWCAQIQARIeCg1tYW5hZ2VtZW50X2lwGAggASgJQge6SARyAnABEigKD21hbmFnZW1lbnRfdXNlchgJIAEoCUIKukgHcgUQAhiAAUgCiAEBEigKD2NvbnNvbGVfY29tbWFuZBgKIAEoCUIKukgHcgUQAhiAAUgDiAEBEioKBG5pY3MYCyADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMSJwoCb3MYDCABKAsyGy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hPUxJBChNtYWNoaW5lX2Nvbm5lY3Rpb25zGA0gAygLMiQubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUNvbm5lY3Rpb24SMAoJbGFzdF9zeW5jGA4gASgLMh0ubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoU3luYxI2Cg9sYXN0X3N5bmNfZXJyb3IYDyABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hTeW5jQgcKBV9yYWNrQgcKBV9yb29tQhIKEF9tYW5hZ2VtZW50X3VzZXJCEgoQX2NvbnNvbGVfY29tbWFuZCKOAQoIU3dpdGNoT1MSOwoGdmVuZG9yGAEgASgOMiEubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1NWZW5kb3JCCLpIBYIBAhABEhwKB3ZlcnNpb24YAiABKAlCC7pICHIGwLOusQIBEicKEm1ldGFsX2NvcmVfdmVyc2lvbhgDIAEoCUILukgIcgbAs66xAgEi4AIKCVN3aXRjaE5pYxIZCgRuYW1lGAEgASgJQgu6SAhyBsCzrrECARIfCgppZGVudGlmaWVyGAIgASgJQgu6SAhyBsCzrrECARIYCgNtYWMYAyABKAlCC7pICHIGuLOusQIBEh0KA3ZyZhgEIAEoCUILukgIcgbAs66xAgFIAIgBARIvCgVzdGF0ZRgFIAEoCzIbLm1ldGFsc3RhY2suYXBpLnYyLk5pY1N0YXRlSAGIAQESNQoKYmdwX2ZpbHRlchgGIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLkJHUEZpbHRlckgCiAEBEkIKDmJncF9wb3J0X3N0YXRlGAcgASgLMiUubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoQkdQUG9ydFN0YXRlSAOIAQFCBgoEX3ZyZkIICgZfc3RhdGVCDQoLX2JncF9maWx0ZXJCEQoPX2JncF9wb3J0X3N0YXRlIkcKCUJHUEZpbHRlchIbCgVjaWRycxgBIAMoCUIMukgJkgEGuKSzsQIBEh0KBHZuaXMYAiADKAlCD7pIDJIBCSIHcgUQAhiAASKpAgoSU3dpdGNoQkdQUG9ydFN0YXRlEh0KCG5laWdoYm9yGAEgASgJQgu6SAhyBsCzrrECARIfCgpwZWVyX2dyb3VwGAIgASgJQgu6SAhyBsCzrrECARIdCgh2cmZfbmFtZRgDIAEoCUILukgIcgbAs66xAgESOAoJYmdwX3N0YXRlGAQgASgOMhsubWV0YWxzdGFjay5hcGkudjIuQkdQU3RhdGVCCLpIBYIBAhABEjwKGGJncF90aW1lcl91cF9lc3RhYmxpc2hlZBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoTc2VudF9wcmVmaXhfY291bnRlchgGIAEoBBIfChdhY2NlcHRlZF9wcmVmaXhfY291bnRlchgHIAEoBCKaAQoITmljU3RhdGUSQwoHZGVzaXJlZBgBIAEoDjIjLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFBvcnRTdGF0dXNCCLpIBYIBAhABSACIAQESPQoGYWN0dWFsGAIgASgOMiMubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoUG9ydFN0YXR1c0IIukgFggECEAFCCgoIX2Rlc2lyZWQiUgoRTWFjaGluZUNvbm5lY3Rpb24SEgoKbWFjaGluZV9pZBgBIAEoCRIpCgNuaWMYAiABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMiuQIKC1N3aXRjaFF1ZXJ5Eh4KAmlkGAEgASgJQg26SApyCMCzrrECAWgBSACIAQESIwoJcGFydGl0aW9uGAIgASgJQgu6SAhyBtCzrrECAUgBiAEBEh4KBHJhY2sYAyABKAlCC7pICHIGwLOusQIBSAKIAQESHgoEcm9vbRgEIAEoCUILukgIcgbAs66xAgFIA4gBARIxCgJvcxgFIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE9TUXVlcnlIBIgBARIrChRjb25uZWN0ZWRfbWFjaGluZV9pZBgGIAEoCUIIukgFcgOwAQFIBYgBAUIFCgNfaWRCDAoKX3BhcnRpdGlvbkIHCgVfcmFja0IHCgVfcm9vbUIFCgNfb3NCFwoVX2Nvbm5lY3RlZF9tYWNoaW5lX2lkIosBCg1Td2l0Y2hPU1F1ZXJ5EkAKBnZlbmRvchgBIAEoDjIhLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE9TVmVuZG9yQgi6SAWCAQIQAUgAiAEBEiEKB3ZlcnNpb24YAiABKAlCC7pICHIGwLOusQIBSAGIAQFCCQoHX3ZlbmRvckIKCghfdmVyc2lvbiKBAQoKU3dpdGNoU3luYxIoCgR0aW1lGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCghkdXJhdGlvbhgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhISCgVlcnJvchgDIAEoCUgAiAEBQggKBl9lcnJvciJ/ChJTd2l0Y2hXaXRoTWFjaGluZXMSCgoCaWQYASABKAkSEQoJcGFydGl0aW9uGAIgASgJEgwKBHJhY2sYAyABKAkSPAoLY29ubmVjdGlvbnMYBCADKAsyJy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWNXaXRoTWFjaGluZSKaAQoUU3dpdGNoTmljV2l0aE1hY2hpbmUSKQoDbmljGAEgASgLMhwubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljEisKB21hY2hpbmUYAiABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lEioKA2ZydRgDIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlUqiQIKCEJHUFN0YXRlEhkKFUJHUF9TVEFURV9VTlNQRUNJRklFRBAAEhwKDkJHUF9TVEFURV9JRExFEAEaCIKyGQRJZGxlEiIKEUJHUF9TVEFURV9DT05ORUNUEAIaC4KyGQdDb25uZWN0EiAKEEJHUF9TVEFURV9BQ1RJVkUQAxoKgrIZBkFjdGl2ZRIlChNCR1BfU1RBVEVfT1BFTl9TRU5UEAQaDIKyGQhPcGVuU2VudBIrChZCR1BfU1RBVEVfT1BFTl9DT05GSVJNEAUaD4KyGQtPcGVuQ29uZmlybRIqChVCR1BfU1RBVEVfRVNUQUJMSVNIRUQQBhoPgrIZC0VzdGFibGlzaGVkKqIBChFTd2l0Y2hSZXBsYWNlTW9kZRIpCh9TV0lUQ0hfUkVQTEFDRV9NT0RFX1VOU1BFQ0lGSUVEEAAaBIKyGQASLAobU1dJVENIX1JFUExBQ0VfTU9ERV9SRVBMQUNFEAEaC4KyGQdyZXBsYWNlEjQKH1NXSVRDSF9SRVBMQUNFX01PREVfT1BFUkFUSU9OQUwQAhoPgrIZC29wZXJhdGlvbmFsKoQBCg5Td2l0Y2hPU1ZlbmRvchIgChxTV0lUQ0hfT1NfVkVORE9SX1VOU1BFQ0lGSUVEEAASKQoYU1dJVENIX09TX1ZFTkRPUl9DVU1VTFVTEAEaC4KyGQdDdW11bHVzEiUKFlNXSVRDSF9PU19WRU5ET1JfU09OSUMQAhoJgrIZBVNPTmlDKq0BChBTd2l0Y2hQb3J0U3RhdHVzEiIKHlNXSVRDSF9QT1JUX1NUQVRVU19VTlNQRUNJRklFRBAAEiEKFVNXSVRDSF9QT1JUX1NUQVRVU19VUBABGgaCshkCdXASJQoXU1dJVENIX1BPUlRfU1RBVFVTX0RPV04QAhoIgrIZBGRvd24SKwoaU1dJVENIX1BPUlRfU1RBVFVTX1VOS05PV04QAxoLgrIZB3Vua25vd25CwQEKFWNvbS5tZXRhbHN0YWNrLmFwaS52MkILU3dpdGNoUHJvdG9QAVo1Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hcGkvdjI7YXBpdjKiAgNNQViqAhFNZXRhbHN0YWNrLkFwaS5WMsoCEU1ldGFsc3RhY2tcQXBpXFYy4gIdTWV0YWxzdGFja1xBcGlcVjJcR1BCTWV0YWRhdGHqAhNNZXRhbHN0YWNrOjpBcGk6OlYyYgZwcm90bzM", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_machine, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("Ch5tZXRhbHN0YWNrL2FwaS92Mi9zd2l0Y2gucHJvdG8SEW1ldGFsc3RhY2suYXBpLnYyIsIFCgZTd2l0Y2gSGQoCaWQYASABKAlCDbpICnIIwLOusQIBaAESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEh4KBHJhY2sYBCABKAlCC7pICHIGwLOusQIBSACIAQESHgoEcm9vbRgFIAEoCUILukgIcgbAs66xAgFIAYgBARIeCglwYXJ0aXRpb24YBiABKAlCC7pICHIG0LOusQIBEkQKDHJlcGxhY2VfbW9kZRgHIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFJlcGxhY2VNb2RlQgi6SAWCAQIQARIeCg1tYW5hZ2VtZW50X2lwGAggASgJQge6SARyAnABEigKD21hbmFnZW1lbnRfdXNlchgJIAEoCUIKukgHcgUQAhiAAUgCiAEBEigKD2NvbnNvbGVfY29tbWFuZBgKIAEoCUIKukgHcgUQAhiAAUgDiAEBEioKBG5pY3MYCyADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMSJwoCb3MYDCABKAsyGy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hPUxJBChNtYWNoaW5lX2Nvbm5lY3Rpb25zGA0gAygLMiQubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUNvbm5lY3Rpb24SMAoJbGFzdF9zeW5jGA4gASgLMh0ubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoU3luYxI2Cg9sYXN0X3N5bmNfZXJyb3IYDyABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hTeW5jQgcKBV9yYWNrQgcKBV9yb29tQhIKEF9tYW5hZ2VtZW50X3VzZXJCEgoQX2NvbnNvbGVfY29tbWFuZCKOAQoIU3dpdGNoT1MSOwoGdmVuZG9yGAEgASgOMiEubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1NWZW5kb3JCCLpIBYIBAhABEhwKB3ZlcnNpb24YAiABKAlCC7pICHIGwLOusQIBEicKEm1ldGFsX2NvcmVfdmVyc2lvbhgDIAEoCUILukgIcgbAs66xAgEi7QIKCVN3aXRjaE5pYxIZCgRuYW1lGAEgASgJQgu6SAhyBsCzrrECARIfCgppZGVudGlmaWVyGAIgASgJQgu6SAhyBsCzrrECARIdCgNtYWMYAyABKAlCC7pICHIGuLOusQIBSACIAQESHQoDdnJmGAQgASgJQgu6SAhyBsCzrrECAUgBiAEBEi8KBXN0YXRlGAUgASgLMhsubWV0YWxzdGFjay5hcGkudjIuTmljU3RhdGVIAogBARI1CgpiZ3BfZmlsdGVyGAYgASgLMhwubWV0YWxzdGFjay5hcGkudjIuQkdQRmlsdGVySAOIAQESQgoOYmdwX3BvcnRfc3RhdGUYByABKAsyJS5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hCR1BQb3J0U3RhdGVIBIgBAUIGCgRfbWFjQgYKBF92cmZCCAoGX3N0YXRlQg0KC19iZ3BfZmlsdGVyQhEKD19iZ3BfcG9ydF9zdGF0ZSJHCglCR1BGaWx0ZXISGwoFY2lkcnMYASADKAlCDLpICZIBBriks7ECARIdCgR2bmlzGAIgAygJQg+6SAySAQkiB3IFEAIYgAEiqQIKElN3aXRjaEJHUFBvcnRTdGF0ZRIdCghuZWlnaGJvchgBIAEoCUILukgIcgbAs66xAgESHwoKcGVlcl9ncm91cBgCIAEoCUILukgIcgbAs66xAgESHQoIdnJmX25hbWUYAyABKAlCC7pICHIGwLOusQIBEjgKCWJncF9zdGF0ZRgEIAEoDjIbLm1ldGFsc3RhY2suYXBpLnYyLkJHUFN0YXRlQgi6SAWCAQIQARI8ChhiZ3BfdGltZXJfdXBfZXN0YWJsaXNoZWQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhsKE3NlbnRfcHJlZml4X2NvdW50ZXIYBiABKAQSHwoXYWNjZXB0ZWRfcHJlZml4X2NvdW50ZXIYByABKAQimgEKCE5pY1N0YXRlEkMKB2Rlc2lyZWQYASABKA4yIy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hQb3J0U3RhdHVzQgi6SAWCAQIQAUgAiAEBEj0KBmFjdHVhbBgCIAEoDjIjLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFBvcnRTdGF0dXNCCLpIBYIBAhABQgoKCF9kZXNpcmVkIlIKEU1hY2hpbmVDb25uZWN0aW9uEhIKCm1hY2hpbmVfaWQYASABKAkSKQoDbmljGAIgASgLMhwubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljIrkCCgtTd2l0Y2hRdWVyeRIeCgJpZBgBIAEoCUINukgKcgjAs66xAgFoAUgAiAEBEiMKCXBhcnRpdGlvbhgCIAEoCUILukgIcgbQs66xAgFIAYgBARIeCgRyYWNrGAMgASgJQgu6SAhyBsCzrrECAUgCiAEBEh4KBHJvb20YBCABKAlCC7pICHIGwLOusQIBSAOIAQESMQoCb3MYBSABKAsyIC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hPU1F1ZXJ5SASIAQESKwoUY29ubmVjdGVkX21hY2hpbmVfaWQYBiABKAlCCLpIBXIDsAEBSAWIAQFCBQoDX2lkQgwKCl9wYXJ0aXRpb25CBwoFX3JhY2tCBwoFX3Jvb21CBQoDX29zQhcKFV9jb25uZWN0ZWRfbWFjaGluZV9pZCKLAQoNU3dpdGNoT1NRdWVyeRJACgZ2ZW5kb3IYASABKA4yIS5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hPU1ZlbmRvckIIukgFggECEAFIAIgBARIhCgd2ZXJzaW9uGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBQgkKB192ZW5kb3JCCgoIX3ZlcnNpb24igQEKClN3aXRjaFN5bmMSKAoEdGltZRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKwoIZHVyYXRpb24YAiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb24SEgoFZXJyb3IYAyABKAlIAIgBAUIICgZfZXJyb3IifwoSU3dpdGNoV2l0aE1hY2hpbmVzEgoKAmlkGAEgASgJEhEKCXBhcnRpdGlvbhgCIAEoCRIMCgRyYWNrGAMgASgJEjwKC2Nvbm5lY3Rpb25zGAQgAygLMicubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljV2l0aE1hY2hpbmUimgEKFFN3aXRjaE5pY1dpdGhNYWNoaW5lEikKA25pYxgBIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE5pYxIrCgdtYWNoaW5lGAIgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZRIqCgNmcnUYAyABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lRlJVKokCCghCR1BTdGF0ZRIZChVCR1BfU1RBVEVfVU5TUEVDSUZJRUQQABIcCg5CR1BfU1RBVEVfSURMRRABGgiCshkESWRsZRIiChFCR1BfU1RBVEVfQ09OTkVDVBACGguCshkHQ29ubmVjdBIgChBCR1BfU1RBVEVfQUNUSVZFEAMaCoKyGQZBY3RpdmUSJQoTQkdQX1NUQVRFX09QRU5fU0VOVBAEGgyCshkIT3BlblNlbnQSKwoWQkdQX1NUQVRFX09QRU5fQ09ORklSTRAFGg+CshkLT3BlbkNvbmZpcm0SKgoVQkdQX1NUQVRFX0VTVEFCTElTSEVEEAYaD4KyGQtFc3RhYmxpc2hlZCqiAQoRU3dpdGNoUmVwbGFjZU1vZGUSKQofU1dJVENIX1JFUExBQ0VfTU9ERV9VTlNQRUNJRklFRBAAGgSCshkAEiwKG1NXSVRDSF9SRVBMQUNFX01PREVfUkVQTEFDRRABGguCshkHcmVwbGFjZRI0Ch9TV0lUQ0hfUkVQTEFDRV9NT0RFX09QRVJBVElPTkFMEAIaD4KyGQtvcGVyYXRpb25hbCqEAQoOU3dpdGNoT1NWZW5kb3ISIAocU1dJVENIX09TX1ZFTkRPUl9VTlNQRUNJRklFRBAAEikKGFNXSVRDSF9PU19WRU5ET1JfQ1VNVUxVUxABGguCshkHQ3VtdWx1cxIlChZTV0lUQ0hfT1NfVkVORE9SX1NPTklDEAIaCYKyGQVTT05pQyqtAQoQU3dpdGNoUG9ydFN0YXR1cxIiCh5TV0lUQ0hfUE9SVF9TVEFUVVNfVU5TUEVDSUZJRUQQABIhChVTV0lUQ0hfUE9SVF9TVEFUVVNfVVAQARoGgrIZAnVwEiUKF1NXSVRDSF9QT1JUX1NUQVRVU19ET1dOEAIaCIKyGQRkb3duEisKGlNXSVRDSF9QT1JUX1NUQVRVU19VTktOT1dOEAMaC4KyGQd1bmtub3duQsEBChVjb20ubWV0YWxzdGFjay5hcGkudjJCC1N3aXRjaFByb3RvUAFaNWdpdGh1Yi5jb20vbWV0YWwtc3RhY2svYXBpL2dvL21ldGFsc3RhY2svYXBpL3YyO2FwaXYyogIDTUFYqgIRTWV0YWxzdGFjay5BcGkuVjLKAhFNZXRhbHN0YWNrXEFwaVxWMuICHU1ldGFsc3RhY2tcQXBpXFYyXEdQQk1ldGFkYXRh6gITTWV0YWxzdGFjazo6QXBpOjpWMmIGcHJvdG8z", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_machine, file_metalstack_api_v2_predefined_rules]);
/**
* Switch represents a network switch.
@@ -197,9 +197,9 @@ export type SwitchNic = Message<"metalstack.api.v2.SwitchNic"> & {
/**
* MAC address of the port.
*
- * @generated from field: string mac = 3;
+ * @generated from field: optional string mac = 3;
*/
- mac: string;
+ mac?: string | undefined;
/**
* VRF name if the port is bound in one.
diff --git a/proto/metalstack/api/v2/switch.proto b/proto/metalstack/api/v2/switch.proto
index a8b09fb0..6882cdb1 100644
--- a/proto/metalstack/api/v2/switch.proto
+++ b/proto/metalstack/api/v2/switch.proto
@@ -69,7 +69,7 @@ message SwitchNic {
// Identifier of the port.
string identifier = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// MAC address of the port.
- string mac = 3 [(buf.validate.field).string.(macaddress) = true];
+ optional string mac = 3 [(buf.validate.field).string.(macaddress) = true];
// VRF name if the port is bound in one.
optional string vrf = 4 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// NicState describes the current state of the switch port.
diff --git a/python/metalstack/api/v2/switch_pb2.py b/python/metalstack/api/v2/switch_pb2.py
index e8acbd5d..c78b3c33 100644
--- a/python/metalstack/api/v2/switch_pb2.py
+++ b/python/metalstack/api/v2/switch_pb2.py
@@ -30,7 +30,7 @@
from metalstack.api.v2 import predefined_rules_pb2 as metalstack_dot_api_dot_v2_dot_predefined__rules__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emetalstack/api/v2/switch.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/machine.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xe2\x06\n\x06Switch\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12$\n\x04rack\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04rack\x88\x01\x01\x12$\n\x04room\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04room\x88\x01\x01\x12)\n\tpartition\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\tpartition\x12Q\n\x0creplace_mode\x18\x07 \x01(\x0e\x32$.metalstack.api.v2.SwitchReplaceModeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0breplaceMode\x12,\n\rmanagement_ip\x18\x08 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x0cmanagementIp\x12\x38\n\x0fmanagement_user\x18\t \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x02R\x0emanagementUser\x88\x01\x01\x12\x38\n\x0f\x63onsole_command\x18\n \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x03R\x0e\x63onsoleCommand\x88\x01\x01\x12\x30\n\x04nics\x18\x0b \x03(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x04nics\x12+\n\x02os\x18\x0c \x01(\x0b\x32\x1b.metalstack.api.v2.SwitchOSR\x02os\x12U\n\x13machine_connections\x18\r \x03(\x0b\x32$.metalstack.api.v2.MachineConnectionR\x12machineConnections\x12:\n\tlast_sync\x18\x0e \x01(\x0b\x32\x1d.metalstack.api.v2.SwitchSyncR\x08lastSync\x12\x45\n\x0flast_sync_error\x18\x0f \x01(\x0b\x32\x1d.metalstack.api.v2.SwitchSyncR\rlastSyncErrorB\x07\n\x05_rackB\x07\n\x05_roomB\x12\n\x10_management_userB\x12\n\x10_console_command\"\xb1\x01\n\x08SwitchOS\x12\x43\n\x06vendor\x18\x01 \x01(\x0e\x32!.metalstack.api.v2.SwitchOSVendorB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06vendor\x12%\n\x07version\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07version\x12\x39\n\x12metal_core_version\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x10metalCoreVersion\"\x9c\x03\n\tSwitchNic\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12+\n\nidentifier\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\nidentifier\x12\x1d\n\x03mac\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xb8\xb3\xae\xb1\x02\x01R\x03mac\x12\"\n\x03vrf\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x03vrf\x88\x01\x01\x12\x36\n\x05state\x18\x05 \x01(\x0b\x32\x1b.metalstack.api.v2.NicStateH\x01R\x05state\x88\x01\x01\x12@\n\nbgp_filter\x18\x06 \x01(\x0b\x32\x1c.metalstack.api.v2.BGPFilterH\x02R\tbgpFilter\x88\x01\x01\x12P\n\x0e\x62gp_port_state\x18\x07 \x01(\x0b\x32%.metalstack.api.v2.SwitchBGPPortStateH\x03R\x0c\x62gpPortState\x88\x01\x01\x42\x06\n\x04_vrfB\x08\n\x06_stateB\r\n\x0b_bgp_filterB\x11\n\x0f_bgp_port_state\"T\n\tBGPFilter\x12\"\n\x05\x63idrs\x18\x01 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x05\x63idrs\x12#\n\x04vnis\x18\x02 \x03(\tB\x0f\xbaH\x0c\x92\x01\t\"\x07r\x05\x10\x02\x18\x80\x01R\x04vnis\"\x92\x03\n\x12SwitchBGPPortState\x12\'\n\x08neighbor\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08neighbor\x12*\n\npeer_group\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\tpeerGroup\x12&\n\x08vrf_name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07vrfName\x12\x42\n\tbgp_state\x18\x04 \x01(\x0e\x32\x1b.metalstack.api.v2.BGPStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x08\x62gpState\x12S\n\x18\x62gp_timer_up_established\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x15\x62gpTimerUpEstablished\x12.\n\x13sent_prefix_counter\x18\x06 \x01(\x04R\x11sentPrefixCounter\x12\x36\n\x17\x61\x63\x63\x65pted_prefix_counter\x18\x07 \x01(\x04R\x15\x61\x63\x63\x65ptedPrefixCounter\"\xab\x01\n\x08NicState\x12L\n\x07\x64\x65sired\x18\x01 \x01(\x0e\x32#.metalstack.api.v2.SwitchPortStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x07\x64\x65sired\x88\x01\x01\x12\x45\n\x06\x61\x63tual\x18\x02 \x01(\x0e\x32#.metalstack.api.v2.SwitchPortStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06\x61\x63tualB\n\n\x08_desired\"b\n\x11MachineConnection\x12\x1d\n\nmachine_id\x18\x01 \x01(\tR\tmachineId\x12.\n\x03nic\x18\x02 \x01(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x03nic\"\xec\x02\n\x0bSwitchQuery\x12\"\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12.\n\tpartition\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x01R\tpartition\x88\x01\x01\x12$\n\x04rack\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x02R\x04rack\x88\x01\x01\x12$\n\x04room\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04room\x88\x01\x01\x12\x35\n\x02os\x18\x05 \x01(\x0b\x32 .metalstack.api.v2.SwitchOSQueryH\x04R\x02os\x88\x01\x01\x12?\n\x14\x63onnected_machine_id\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x05R\x12\x63onnectedMachineId\x88\x01\x01\x42\x05\n\x03_idB\x0c\n\n_partitionB\x07\n\x05_rackB\x07\n\x05_roomB\x05\n\x03_osB\x17\n\x15_connected_machine_id\"\x9c\x01\n\rSwitchOSQuery\x12H\n\x06vendor\x18\x01 \x01(\x0e\x32!.metalstack.api.v2.SwitchOSVendorB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x06vendor\x88\x01\x01\x12*\n\x07version\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x07version\x88\x01\x01\x42\t\n\x07_vendorB\n\n\x08_version\"\x98\x01\n\nSwitchSync\x12.\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04time\x12\x35\n\x08\x64uration\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationR\x08\x64uration\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x00R\x05\x65rror\x88\x01\x01\x42\x08\n\x06_error\"\xa1\x01\n\x12SwitchWithMachines\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1c\n\tpartition\x18\x02 \x01(\tR\tpartition\x12\x12\n\x04rack\x18\x03 \x01(\tR\x04rack\x12I\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.metalstack.api.v2.SwitchNicWithMachineR\x0b\x63onnections\"\xad\x01\n\x14SwitchNicWithMachine\x12.\n\x03nic\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x03nic\x12\x34\n\x07machine\x18\x02 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\x12/\n\x03\x66ru\x18\x03 \x01(\x0b\x32\x1d.metalstack.api.v2.MachineFRUR\x03\x66ru*\x89\x02\n\x08\x42GPState\x12\x19\n\x15\x42GP_STATE_UNSPECIFIED\x10\x00\x12\x1c\n\x0e\x42GP_STATE_IDLE\x10\x01\x1a\x08\x82\xb2\x19\x04Idle\x12\"\n\x11\x42GP_STATE_CONNECT\x10\x02\x1a\x0b\x82\xb2\x19\x07\x43onnect\x12 \n\x10\x42GP_STATE_ACTIVE\x10\x03\x1a\n\x82\xb2\x19\x06\x41\x63tive\x12%\n\x13\x42GP_STATE_OPEN_SENT\x10\x04\x1a\x0c\x82\xb2\x19\x08OpenSent\x12+\n\x16\x42GP_STATE_OPEN_CONFIRM\x10\x05\x1a\x0f\x82\xb2\x19\x0bOpenConfirm\x12*\n\x15\x42GP_STATE_ESTABLISHED\x10\x06\x1a\x0f\x82\xb2\x19\x0b\x45stablished*\xa2\x01\n\x11SwitchReplaceMode\x12)\n\x1fSWITCH_REPLACE_MODE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12,\n\x1bSWITCH_REPLACE_MODE_REPLACE\x10\x01\x1a\x0b\x82\xb2\x19\x07replace\x12\x34\n\x1fSWITCH_REPLACE_MODE_OPERATIONAL\x10\x02\x1a\x0f\x82\xb2\x19\x0boperational*\x84\x01\n\x0eSwitchOSVendor\x12 \n\x1cSWITCH_OS_VENDOR_UNSPECIFIED\x10\x00\x12)\n\x18SWITCH_OS_VENDOR_CUMULUS\x10\x01\x1a\x0b\x82\xb2\x19\x07\x43umulus\x12%\n\x16SWITCH_OS_VENDOR_SONIC\x10\x02\x1a\t\x82\xb2\x19\x05SONiC*\xad\x01\n\x10SwitchPortStatus\x12\"\n\x1eSWITCH_PORT_STATUS_UNSPECIFIED\x10\x00\x12!\n\x15SWITCH_PORT_STATUS_UP\x10\x01\x1a\x06\x82\xb2\x19\x02up\x12%\n\x17SWITCH_PORT_STATUS_DOWN\x10\x02\x1a\x08\x82\xb2\x19\x04\x64own\x12+\n\x1aSWITCH_PORT_STATUS_UNKNOWN\x10\x03\x1a\x0b\x82\xb2\x19\x07unknownB\xc1\x01\n\x15\x63om.metalstack.api.v2B\x0bSwitchProtoP\x01Z5github.com/metal-stack/api/go/metalstack/api/v2;apiv2\xa2\x02\x03MAX\xaa\x02\x11Metalstack.Api.V2\xca\x02\x11Metalstack\\Api\\V2\xe2\x02\x1dMetalstack\\Api\\V2\\GPBMetadata\xea\x02\x13Metalstack::Api::V2b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emetalstack/api/v2/switch.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/machine.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xe2\x06\n\x06Switch\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12$\n\x04rack\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04rack\x88\x01\x01\x12$\n\x04room\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04room\x88\x01\x01\x12)\n\tpartition\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\tpartition\x12Q\n\x0creplace_mode\x18\x07 \x01(\x0e\x32$.metalstack.api.v2.SwitchReplaceModeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0breplaceMode\x12,\n\rmanagement_ip\x18\x08 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x0cmanagementIp\x12\x38\n\x0fmanagement_user\x18\t \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x02R\x0emanagementUser\x88\x01\x01\x12\x38\n\x0f\x63onsole_command\x18\n \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x03R\x0e\x63onsoleCommand\x88\x01\x01\x12\x30\n\x04nics\x18\x0b \x03(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x04nics\x12+\n\x02os\x18\x0c \x01(\x0b\x32\x1b.metalstack.api.v2.SwitchOSR\x02os\x12U\n\x13machine_connections\x18\r \x03(\x0b\x32$.metalstack.api.v2.MachineConnectionR\x12machineConnections\x12:\n\tlast_sync\x18\x0e \x01(\x0b\x32\x1d.metalstack.api.v2.SwitchSyncR\x08lastSync\x12\x45\n\x0flast_sync_error\x18\x0f \x01(\x0b\x32\x1d.metalstack.api.v2.SwitchSyncR\rlastSyncErrorB\x07\n\x05_rackB\x07\n\x05_roomB\x12\n\x10_management_userB\x12\n\x10_console_command\"\xb1\x01\n\x08SwitchOS\x12\x43\n\x06vendor\x18\x01 \x01(\x0e\x32!.metalstack.api.v2.SwitchOSVendorB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06vendor\x12%\n\x07version\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07version\x12\x39\n\x12metal_core_version\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x10metalCoreVersion\"\xa9\x03\n\tSwitchNic\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12+\n\nidentifier\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\nidentifier\x12\"\n\x03mac\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xb8\xb3\xae\xb1\x02\x01H\x00R\x03mac\x88\x01\x01\x12\"\n\x03vrf\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x03vrf\x88\x01\x01\x12\x36\n\x05state\x18\x05 \x01(\x0b\x32\x1b.metalstack.api.v2.NicStateH\x02R\x05state\x88\x01\x01\x12@\n\nbgp_filter\x18\x06 \x01(\x0b\x32\x1c.metalstack.api.v2.BGPFilterH\x03R\tbgpFilter\x88\x01\x01\x12P\n\x0e\x62gp_port_state\x18\x07 \x01(\x0b\x32%.metalstack.api.v2.SwitchBGPPortStateH\x04R\x0c\x62gpPortState\x88\x01\x01\x42\x06\n\x04_macB\x06\n\x04_vrfB\x08\n\x06_stateB\r\n\x0b_bgp_filterB\x11\n\x0f_bgp_port_state\"T\n\tBGPFilter\x12\"\n\x05\x63idrs\x18\x01 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x05\x63idrs\x12#\n\x04vnis\x18\x02 \x03(\tB\x0f\xbaH\x0c\x92\x01\t\"\x07r\x05\x10\x02\x18\x80\x01R\x04vnis\"\x92\x03\n\x12SwitchBGPPortState\x12\'\n\x08neighbor\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08neighbor\x12*\n\npeer_group\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\tpeerGroup\x12&\n\x08vrf_name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07vrfName\x12\x42\n\tbgp_state\x18\x04 \x01(\x0e\x32\x1b.metalstack.api.v2.BGPStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x08\x62gpState\x12S\n\x18\x62gp_timer_up_established\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x15\x62gpTimerUpEstablished\x12.\n\x13sent_prefix_counter\x18\x06 \x01(\x04R\x11sentPrefixCounter\x12\x36\n\x17\x61\x63\x63\x65pted_prefix_counter\x18\x07 \x01(\x04R\x15\x61\x63\x63\x65ptedPrefixCounter\"\xab\x01\n\x08NicState\x12L\n\x07\x64\x65sired\x18\x01 \x01(\x0e\x32#.metalstack.api.v2.SwitchPortStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x07\x64\x65sired\x88\x01\x01\x12\x45\n\x06\x61\x63tual\x18\x02 \x01(\x0e\x32#.metalstack.api.v2.SwitchPortStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06\x61\x63tualB\n\n\x08_desired\"b\n\x11MachineConnection\x12\x1d\n\nmachine_id\x18\x01 \x01(\tR\tmachineId\x12.\n\x03nic\x18\x02 \x01(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x03nic\"\xec\x02\n\x0bSwitchQuery\x12\"\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12.\n\tpartition\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x01R\tpartition\x88\x01\x01\x12$\n\x04rack\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x02R\x04rack\x88\x01\x01\x12$\n\x04room\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04room\x88\x01\x01\x12\x35\n\x02os\x18\x05 \x01(\x0b\x32 .metalstack.api.v2.SwitchOSQueryH\x04R\x02os\x88\x01\x01\x12?\n\x14\x63onnected_machine_id\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x05R\x12\x63onnectedMachineId\x88\x01\x01\x42\x05\n\x03_idB\x0c\n\n_partitionB\x07\n\x05_rackB\x07\n\x05_roomB\x05\n\x03_osB\x17\n\x15_connected_machine_id\"\x9c\x01\n\rSwitchOSQuery\x12H\n\x06vendor\x18\x01 \x01(\x0e\x32!.metalstack.api.v2.SwitchOSVendorB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x06vendor\x88\x01\x01\x12*\n\x07version\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x07version\x88\x01\x01\x42\t\n\x07_vendorB\n\n\x08_version\"\x98\x01\n\nSwitchSync\x12.\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04time\x12\x35\n\x08\x64uration\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationR\x08\x64uration\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x00R\x05\x65rror\x88\x01\x01\x42\x08\n\x06_error\"\xa1\x01\n\x12SwitchWithMachines\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1c\n\tpartition\x18\x02 \x01(\tR\tpartition\x12\x12\n\x04rack\x18\x03 \x01(\tR\x04rack\x12I\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.metalstack.api.v2.SwitchNicWithMachineR\x0b\x63onnections\"\xad\x01\n\x14SwitchNicWithMachine\x12.\n\x03nic\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x03nic\x12\x34\n\x07machine\x18\x02 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\x12/\n\x03\x66ru\x18\x03 \x01(\x0b\x32\x1d.metalstack.api.v2.MachineFRUR\x03\x66ru*\x89\x02\n\x08\x42GPState\x12\x19\n\x15\x42GP_STATE_UNSPECIFIED\x10\x00\x12\x1c\n\x0e\x42GP_STATE_IDLE\x10\x01\x1a\x08\x82\xb2\x19\x04Idle\x12\"\n\x11\x42GP_STATE_CONNECT\x10\x02\x1a\x0b\x82\xb2\x19\x07\x43onnect\x12 \n\x10\x42GP_STATE_ACTIVE\x10\x03\x1a\n\x82\xb2\x19\x06\x41\x63tive\x12%\n\x13\x42GP_STATE_OPEN_SENT\x10\x04\x1a\x0c\x82\xb2\x19\x08OpenSent\x12+\n\x16\x42GP_STATE_OPEN_CONFIRM\x10\x05\x1a\x0f\x82\xb2\x19\x0bOpenConfirm\x12*\n\x15\x42GP_STATE_ESTABLISHED\x10\x06\x1a\x0f\x82\xb2\x19\x0b\x45stablished*\xa2\x01\n\x11SwitchReplaceMode\x12)\n\x1fSWITCH_REPLACE_MODE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12,\n\x1bSWITCH_REPLACE_MODE_REPLACE\x10\x01\x1a\x0b\x82\xb2\x19\x07replace\x12\x34\n\x1fSWITCH_REPLACE_MODE_OPERATIONAL\x10\x02\x1a\x0f\x82\xb2\x19\x0boperational*\x84\x01\n\x0eSwitchOSVendor\x12 \n\x1cSWITCH_OS_VENDOR_UNSPECIFIED\x10\x00\x12)\n\x18SWITCH_OS_VENDOR_CUMULUS\x10\x01\x1a\x0b\x82\xb2\x19\x07\x43umulus\x12%\n\x16SWITCH_OS_VENDOR_SONIC\x10\x02\x1a\t\x82\xb2\x19\x05SONiC*\xad\x01\n\x10SwitchPortStatus\x12\"\n\x1eSWITCH_PORT_STATUS_UNSPECIFIED\x10\x00\x12!\n\x15SWITCH_PORT_STATUS_UP\x10\x01\x1a\x06\x82\xb2\x19\x02up\x12%\n\x17SWITCH_PORT_STATUS_DOWN\x10\x02\x1a\x08\x82\xb2\x19\x04\x64own\x12+\n\x1aSWITCH_PORT_STATUS_UNKNOWN\x10\x03\x1a\x0b\x82\xb2\x19\x07unknownB\xc1\x01\n\x15\x63om.metalstack.api.v2B\x0bSwitchProtoP\x01Z5github.com/metal-stack/api/go/metalstack/api/v2;apiv2\xa2\x02\x03MAX\xaa\x02\x11Metalstack.Api.V2\xca\x02\x11Metalstack\\Api\\V2\xe2\x02\x1dMetalstack\\Api\\V2\\GPBMetadata\xea\x02\x13Metalstack::Api::V2b\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -128,36 +128,36 @@
_globals['_SWITCHOSQUERY'].fields_by_name['vendor']._serialized_options = b'\272H\005\202\001\002\020\001'
_globals['_SWITCHOSQUERY'].fields_by_name['version']._loaded_options = None
_globals['_SWITCHOSQUERY'].fields_by_name['version']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
- _globals['_BGPSTATE']._serialized_start=3505
- _globals['_BGPSTATE']._serialized_end=3770
- _globals['_SWITCHREPLACEMODE']._serialized_start=3773
- _globals['_SWITCHREPLACEMODE']._serialized_end=3935
- _globals['_SWITCHOSVENDOR']._serialized_start=3938
- _globals['_SWITCHOSVENDOR']._serialized_end=4070
- _globals['_SWITCHPORTSTATUS']._serialized_start=4073
- _globals['_SWITCHPORTSTATUS']._serialized_end=4246
+ _globals['_BGPSTATE']._serialized_start=3518
+ _globals['_BGPSTATE']._serialized_end=3783
+ _globals['_SWITCHREPLACEMODE']._serialized_start=3786
+ _globals['_SWITCHREPLACEMODE']._serialized_end=3948
+ _globals['_SWITCHOSVENDOR']._serialized_start=3951
+ _globals['_SWITCHOSVENDOR']._serialized_end=4083
+ _globals['_SWITCHPORTSTATUS']._serialized_start=4086
+ _globals['_SWITCHPORTSTATUS']._serialized_end=4259
_globals['_SWITCH']._serialized_start=255
_globals['_SWITCH']._serialized_end=1121
_globals['_SWITCHOS']._serialized_start=1124
_globals['_SWITCHOS']._serialized_end=1301
_globals['_SWITCHNIC']._serialized_start=1304
- _globals['_SWITCHNIC']._serialized_end=1716
- _globals['_BGPFILTER']._serialized_start=1718
- _globals['_BGPFILTER']._serialized_end=1802
- _globals['_SWITCHBGPPORTSTATE']._serialized_start=1805
- _globals['_SWITCHBGPPORTSTATE']._serialized_end=2207
- _globals['_NICSTATE']._serialized_start=2210
- _globals['_NICSTATE']._serialized_end=2381
- _globals['_MACHINECONNECTION']._serialized_start=2383
- _globals['_MACHINECONNECTION']._serialized_end=2481
- _globals['_SWITCHQUERY']._serialized_start=2484
- _globals['_SWITCHQUERY']._serialized_end=2848
- _globals['_SWITCHOSQUERY']._serialized_start=2851
- _globals['_SWITCHOSQUERY']._serialized_end=3007
- _globals['_SWITCHSYNC']._serialized_start=3010
- _globals['_SWITCHSYNC']._serialized_end=3162
- _globals['_SWITCHWITHMACHINES']._serialized_start=3165
- _globals['_SWITCHWITHMACHINES']._serialized_end=3326
- _globals['_SWITCHNICWITHMACHINE']._serialized_start=3329
- _globals['_SWITCHNICWITHMACHINE']._serialized_end=3502
+ _globals['_SWITCHNIC']._serialized_end=1729
+ _globals['_BGPFILTER']._serialized_start=1731
+ _globals['_BGPFILTER']._serialized_end=1815
+ _globals['_SWITCHBGPPORTSTATE']._serialized_start=1818
+ _globals['_SWITCHBGPPORTSTATE']._serialized_end=2220
+ _globals['_NICSTATE']._serialized_start=2223
+ _globals['_NICSTATE']._serialized_end=2394
+ _globals['_MACHINECONNECTION']._serialized_start=2396
+ _globals['_MACHINECONNECTION']._serialized_end=2494
+ _globals['_SWITCHQUERY']._serialized_start=2497
+ _globals['_SWITCHQUERY']._serialized_end=2861
+ _globals['_SWITCHOSQUERY']._serialized_start=2864
+ _globals['_SWITCHOSQUERY']._serialized_end=3020
+ _globals['_SWITCHSYNC']._serialized_start=3023
+ _globals['_SWITCHSYNC']._serialized_end=3175
+ _globals['_SWITCHWITHMACHINES']._serialized_start=3178
+ _globals['_SWITCHWITHMACHINES']._serialized_end=3339
+ _globals['_SWITCHNICWITHMACHINE']._serialized_start=3342
+ _globals['_SWITCHNICWITHMACHINE']._serialized_end=3515
# @@protoc_insertion_point(module_scope)