diff --git a/rpc/cloudagent/network/logicalnetwork/moc_cloudagent_logicalnetwork.proto b/rpc/cloudagent/network/logicalnetwork/moc_cloudagent_logicalnetwork.proto index e3e4df20..19861186 100644 --- a/rpc/cloudagent/network/logicalnetwork/moc_cloudagent_logicalnetwork.proto +++ b/rpc/cloudagent/network/logicalnetwork/moc_cloudagent_logicalnetwork.proto @@ -63,5 +63,43 @@ service LogicalNetworkAgent { // Prechecks whether the system is able to create specified logical networks (but does not actually create them). rpc Precheck(LogicalNetworkPrecheckRequest) returns (LogicalNetworkPrecheckResponse) {} + + // Replaces the registeredIPAddresses list on each referenced subnet + // (subnet-scoped full-replace) and applies the resulting add / remove + // delta to the IPAM bitmap. + // + // This RPC is independent of spec Update: it does not run Validate or + // validateUpdate, does not touch ProvisionState, and does not fan out + // to nodeagents. + rpc UpdateRegisteredIPs(LogicalNetworkIPUpdateRequest) returns (LogicalNetworkIPUpdateResponse) {} +} + +message LogicalNetworkIPUpdateRequest { + // Identifies the target LNET. + string LocationName = 1; + string Name = 2; + + // Desired registered-IP list for each subnet. Each list replaces + // the stored list across every pool in that subnet. MOC routes each + // IP to the correct pool by range internally. + repeated LogicalSubnetIPUpdate IPUpdates = 3; +} + +message LogicalSubnetIPUpdate { + string SubnetName = 1; + repeated string RegisteredIPAddresses = 2; +} + +message LogicalNetworkIPUpdateResponse { + // One list of persisted IPs for each subnet (full-replace semantics). + // Only trustworthy when the gRPC status is OK. + repeated LogicalSubnetIPUpdate PersistedIPs = 1; + + // IP-level failures. May be non-empty even when the gRPC status is OK + // (partial success). + repeated IPAddressUpdateFailure Failures = 2; + + // Overall error summary. Empty when the gRPC status is OK. + string Error = 3; } diff --git a/rpc/cloudagent/network/moc_cloudagent_logicalnetwork.pb.go b/rpc/cloudagent/network/moc_cloudagent_logicalnetwork.pb.go index 6693d636..5fde8d18 100644 --- a/rpc/cloudagent/network/moc_cloudagent_logicalnetwork.pb.go +++ b/rpc/cloudagent/network/moc_cloudagent_logicalnetwork.pb.go @@ -438,6 +438,170 @@ func (m *LogicalSubnet) GetNetworkSecurityGroupRef() *common.NetworkSecurityGrou return nil } +type LogicalNetworkIPUpdateRequest struct { + // Identifies the target LNET. + LocationName string `protobuf:"bytes,1,opt,name=LocationName,proto3" json:"LocationName,omitempty"` + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` + // Desired registered-IP list for each subnet (subnet-scoped full-replace). + // MOC routes each IP to the correct pool by range internally. + IPUpdates []*LogicalSubnetIPUpdate `protobuf:"bytes,3,rep,name=IPUpdates,proto3" json:"IPUpdates,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogicalNetworkIPUpdateRequest) Reset() { *m = LogicalNetworkIPUpdateRequest{} } +func (m *LogicalNetworkIPUpdateRequest) String() string { return proto.CompactTextString(m) } +func (*LogicalNetworkIPUpdateRequest) ProtoMessage() {} +func (*LogicalNetworkIPUpdateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_37e4212e5c247b0a, []int{6} +} + +func (m *LogicalNetworkIPUpdateRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogicalNetworkIPUpdateRequest.Unmarshal(m, b) +} +func (m *LogicalNetworkIPUpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogicalNetworkIPUpdateRequest.Marshal(b, m, deterministic) +} +func (m *LogicalNetworkIPUpdateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogicalNetworkIPUpdateRequest.Merge(m, src) +} +func (m *LogicalNetworkIPUpdateRequest) XXX_Size() int { + return xxx_messageInfo_LogicalNetworkIPUpdateRequest.Size(m) +} +func (m *LogicalNetworkIPUpdateRequest) XXX_DiscardUnknown() { + xxx_messageInfo_LogicalNetworkIPUpdateRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_LogicalNetworkIPUpdateRequest proto.InternalMessageInfo + +func (m *LogicalNetworkIPUpdateRequest) GetLocationName() string { + if m != nil { + return m.LocationName + } + return "" +} + +func (m *LogicalNetworkIPUpdateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *LogicalNetworkIPUpdateRequest) GetIPUpdates() []*LogicalSubnetIPUpdate { + if m != nil { + return m.IPUpdates + } + return nil +} + +type LogicalSubnetIPUpdate struct { + SubnetName string `protobuf:"bytes,1,opt,name=SubnetName,proto3" json:"SubnetName,omitempty"` + RegisteredIPAddresses []string `protobuf:"bytes,2,rep,name=RegisteredIPAddresses,proto3" json:"RegisteredIPAddresses,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogicalSubnetIPUpdate) Reset() { *m = LogicalSubnetIPUpdate{} } +func (m *LogicalSubnetIPUpdate) String() string { return proto.CompactTextString(m) } +func (*LogicalSubnetIPUpdate) ProtoMessage() {} +func (*LogicalSubnetIPUpdate) Descriptor() ([]byte, []int) { + return fileDescriptor_37e4212e5c247b0a, []int{7} +} + +func (m *LogicalSubnetIPUpdate) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogicalSubnetIPUpdate.Unmarshal(m, b) +} +func (m *LogicalSubnetIPUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogicalSubnetIPUpdate.Marshal(b, m, deterministic) +} +func (m *LogicalSubnetIPUpdate) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogicalSubnetIPUpdate.Merge(m, src) +} +func (m *LogicalSubnetIPUpdate) XXX_Size() int { + return xxx_messageInfo_LogicalSubnetIPUpdate.Size(m) +} +func (m *LogicalSubnetIPUpdate) XXX_DiscardUnknown() { + xxx_messageInfo_LogicalSubnetIPUpdate.DiscardUnknown(m) +} + +var xxx_messageInfo_LogicalSubnetIPUpdate proto.InternalMessageInfo + +func (m *LogicalSubnetIPUpdate) GetSubnetName() string { + if m != nil { + return m.SubnetName + } + return "" +} + +func (m *LogicalSubnetIPUpdate) GetRegisteredIPAddresses() []string { + if m != nil { + return m.RegisteredIPAddresses + } + return nil +} + +type LogicalNetworkIPUpdateResponse struct { + // One list of persisted IPs for each subnet (full-replace + // semantics). Only trustworthy when the gRPC status is OK. + PersistedIPs []*LogicalSubnetIPUpdate `protobuf:"bytes,1,rep,name=PersistedIPs,proto3" json:"PersistedIPs,omitempty"` + // IP-level failures. May be non-empty even on gRPC OK (partial success). + Failures []*common.IPAddressUpdateFailure `protobuf:"bytes,2,rep,name=Failures,proto3" json:"Failures,omitempty"` + // Overall error summary, empty on gRPC OK. + Error string `protobuf:"bytes,3,opt,name=Error,proto3" json:"Error,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogicalNetworkIPUpdateResponse) Reset() { *m = LogicalNetworkIPUpdateResponse{} } +func (m *LogicalNetworkIPUpdateResponse) String() string { return proto.CompactTextString(m) } +func (*LogicalNetworkIPUpdateResponse) ProtoMessage() {} +func (*LogicalNetworkIPUpdateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_37e4212e5c247b0a, []int{8} +} + +func (m *LogicalNetworkIPUpdateResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogicalNetworkIPUpdateResponse.Unmarshal(m, b) +} +func (m *LogicalNetworkIPUpdateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogicalNetworkIPUpdateResponse.Marshal(b, m, deterministic) +} +func (m *LogicalNetworkIPUpdateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogicalNetworkIPUpdateResponse.Merge(m, src) +} +func (m *LogicalNetworkIPUpdateResponse) XXX_Size() int { + return xxx_messageInfo_LogicalNetworkIPUpdateResponse.Size(m) +} +func (m *LogicalNetworkIPUpdateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_LogicalNetworkIPUpdateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_LogicalNetworkIPUpdateResponse proto.InternalMessageInfo + +func (m *LogicalNetworkIPUpdateResponse) GetPersistedIPs() []*LogicalSubnetIPUpdate { + if m != nil { + return m.PersistedIPs + } + return nil +} + +func (m *LogicalNetworkIPUpdateResponse) GetFailures() []*common.IPAddressUpdateFailure { + if m != nil { + return m.Failures + } + return nil +} + +func (m *LogicalNetworkIPUpdateResponse) GetError() string { + if m != nil { + return m.Error + } + return "" +} + func init() { proto.RegisterType((*LogicalNetworkRequest)(nil), "moc.cloudagent.network.LogicalNetworkRequest") proto.RegisterType((*LogicalNetworkResponse)(nil), "moc.cloudagent.network.LogicalNetworkResponse") @@ -445,6 +609,9 @@ func init() { proto.RegisterType((*LogicalNetworkPrecheckResponse)(nil), "moc.cloudagent.network.LogicalNetworkPrecheckResponse") proto.RegisterType((*LogicalNetwork)(nil), "moc.cloudagent.network.LogicalNetwork") proto.RegisterType((*LogicalSubnet)(nil), "moc.cloudagent.network.LogicalSubnet") + proto.RegisterType((*LogicalNetworkIPUpdateRequest)(nil), "moc.cloudagent.network.LogicalNetworkIPUpdateRequest") + proto.RegisterType((*LogicalSubnetIPUpdate)(nil), "moc.cloudagent.network.LogicalSubnetIPUpdate") + proto.RegisterType((*LogicalNetworkIPUpdateResponse)(nil), "moc.cloudagent.network.LogicalNetworkIPUpdateResponse") } func init() { @@ -452,53 +619,63 @@ func init() { } var fileDescriptor_37e4212e5c247b0a = []byte{ - // 735 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x54, 0xdd, 0x6e, 0xe3, 0x44, - 0x14, 0xc6, 0x49, 0x36, 0x3f, 0x27, 0x24, 0xa0, 0x01, 0xb6, 0x56, 0xc4, 0x56, 0x91, 0x97, 0x5d, - 0xe5, 0x06, 0x5b, 0x84, 0xbf, 0x4b, 0xd4, 0x88, 0x05, 0xad, 0x04, 0x25, 0x9a, 0xae, 0xf6, 0x02, - 0x21, 0x55, 0x93, 0xf1, 0x24, 0x1d, 0x6a, 0x7b, 0xdc, 0x99, 0x71, 0x4b, 0xe1, 0x05, 0xb8, 0xe5, - 0x09, 0x78, 0x01, 0x2e, 0xe1, 0xf1, 0x90, 0x90, 0x4f, 0xc6, 0x69, 0x1c, 0x5a, 0x48, 0x2f, 0x7a, - 0x65, 0xfb, 0x7c, 0xdf, 0xf9, 0xce, 0x39, 0xdf, 0x8c, 0x0f, 0x3c, 0x4d, 0x15, 0x3f, 0xe5, 0x89, - 0x2a, 0x62, 0xb6, 0x12, 0x99, 0x3d, 0x4d, 0xd4, 0x4a, 0x72, 0x96, 0x64, 0xc2, 0x5e, 0x29, 0x7d, - 0x1e, 0xe6, 0x5a, 0x59, 0x45, 0x1e, 0xa7, 0x8a, 0x87, 0x37, 0xa4, 0xd0, 0xa1, 0xa3, 0xc3, 0x95, - 0x52, 0xab, 0x44, 0x44, 0xc8, 0x5a, 0x14, 0xcb, 0xe8, 0x4a, 0xb3, 0x3c, 0x17, 0xda, 0xac, 0xf3, - 0x46, 0x07, 0x28, 0xae, 0xd2, 0x54, 0x65, 0xee, 0xe1, 0x80, 0xc3, 0x2d, 0xc0, 0x89, 0x6d, 0xe3, - 0xc1, 0xef, 0x1e, 0xbc, 0xf7, 0xcd, 0xba, 0x93, 0xe3, 0x35, 0x4c, 0xc5, 0x45, 0x21, 0x8c, 0x25, - 0x73, 0x78, 0xab, 0x0e, 0x18, 0xdf, 0x1b, 0x37, 0x27, 0xfd, 0xe9, 0xf3, 0xf0, 0xf6, 0x26, 0xc3, - 0x1d, 0x9d, 0xdd, 0x74, 0xf2, 0x09, 0x0c, 0xbe, 0xcb, 0x85, 0x66, 0x56, 0xaa, 0xec, 0xd5, 0x75, - 0x2e, 0xfc, 0xc6, 0xd8, 0x9b, 0x0c, 0xa7, 0x43, 0xd4, 0xdb, 0x20, 0xb4, 0x4e, 0x0a, 0xfe, 0xf4, - 0xe0, 0xf1, 0x6e, 0x87, 0x26, 0x57, 0x99, 0x11, 0x0f, 0xd0, 0xe2, 0x14, 0xda, 0x54, 0x98, 0x22, - 0xb1, 0xd8, 0x5b, 0x7f, 0x3a, 0x0a, 0xd7, 0xc6, 0x87, 0x95, 0xf1, 0xe1, 0x4c, 0xa9, 0xe4, 0x35, - 0x4b, 0x0a, 0x41, 0x1d, 0x93, 0xbc, 0x0b, 0x8f, 0x5e, 0x68, 0xad, 0xb4, 0xdf, 0x1c, 0x7b, 0x93, - 0x1e, 0x5d, 0x7f, 0x04, 0x17, 0xf0, 0xa4, 0x2e, 0x3e, 0xd7, 0x82, 0x9f, 0x09, 0xfe, 0x70, 0xfe, - 0x06, 0x3f, 0xc2, 0xe1, 0x5d, 0x25, 0x9d, 0x61, 0x37, 0xe3, 0x79, 0xf7, 0x1f, 0xaf, 0xb1, 0x3d, - 0xde, 0x6f, 0x4d, 0x18, 0xd6, 0x8b, 0x11, 0x02, 0xad, 0x8c, 0xa5, 0x02, 0xa5, 0x7b, 0x14, 0xdf, - 0xc9, 0x10, 0x1a, 0x32, 0x76, 0x99, 0x0d, 0x19, 0x93, 0x2f, 0xa0, 0x63, 0x8a, 0x45, 0x26, 0xac, - 0xf1, 0x9b, 0x38, 0xec, 0xb3, 0xff, 0x19, 0xf6, 0x04, 0xd9, 0xb4, 0xca, 0x22, 0x33, 0x78, 0xdf, - 0x31, 0x5e, 0x4b, 0x6d, 0x0b, 0x96, 0xc8, 0x9f, 0xf1, 0xaa, 0xbc, 0xc8, 0xd8, 0x22, 0x11, 0xb1, - 0xdf, 0x1a, 0x7b, 0x93, 0x2e, 0xfd, 0x4f, 0x0e, 0x79, 0x0a, 0x6d, 0x63, 0x99, 0x2d, 0x8c, 0xff, - 0x08, 0x5d, 0xe8, 0x63, 0x0f, 0x27, 0x18, 0xa2, 0x0e, 0x22, 0x01, 0xbc, 0x99, 0x28, 0x8e, 0x79, - 0xc7, 0xe5, 0x54, 0x6d, 0x9c, 0xa1, 0x16, 0x23, 0xcf, 0xa1, 0x9f, 0x32, 0x3e, 0x57, 0x2a, 0x41, - 0x4a, 0xa7, 0xa4, 0xcc, 0x5a, 0xbf, 0xfe, 0xe5, 0x7b, 0x74, 0x1b, 0x20, 0x4f, 0xa0, 0x65, 0xd9, - 0xca, 0xf8, 0x5d, 0x2c, 0xd7, 0xc3, 0x72, 0xaf, 0xd8, 0xca, 0x50, 0x0c, 0x93, 0xaf, 0xe0, 0x6d, - 0x16, 0x5f, 0xb2, 0x8c, 0x8b, 0x78, 0xae, 0x12, 0xc9, 0xa5, 0x30, 0x7e, 0x0f, 0xdd, 0x19, 0x21, - 0xf5, 0xc8, 0x81, 0xd5, 0xa9, 0x96, 0x9c, 0x6b, 0xfa, 0xaf, 0x9c, 0xe0, 0x8f, 0x26, 0x0c, 0x6a, - 0xb6, 0xed, 0x75, 0x24, 0x1f, 0xc0, 0x80, 0xc5, 0xb1, 0x16, 0xc6, 0xcc, 0xb5, 0x58, 0xca, 0x9f, - 0xdc, 0x35, 0xae, 0x07, 0x49, 0x00, 0x6d, 0xad, 0x0a, 0x2b, 0x8c, 0xdf, 0xc2, 0xce, 0x00, 0x3b, - 0xa3, 0x65, 0x88, 0x3a, 0x84, 0x7c, 0x0e, 0xc0, 0x92, 0xca, 0x20, 0xf4, 0x76, 0x38, 0x3d, 0x40, - 0xde, 0xcb, 0xf9, 0xd1, 0x06, 0xf8, 0x56, 0xd8, 0x33, 0x15, 0xd3, 0x2d, 0x6a, 0xd9, 0xe6, 0x65, - 0xc2, 0x32, 0xf4, 0x78, 0x40, 0xf1, 0x9d, 0x3c, 0x83, 0x8e, 0xcc, 0x4b, 0x07, 0x8d, 0xdf, 0xc1, - 0x8a, 0x7d, 0xa7, 0x54, 0xc6, 0x68, 0x85, 0x91, 0x31, 0x34, 0xe3, 0xac, 0x72, 0xb6, 0x8b, 0x94, - 0x2f, 0x33, 0xe3, 0x0e, 0xa1, 0x84, 0xc8, 0x08, 0xba, 0xd2, 0xcc, 0x8b, 0x45, 0x22, 0xb9, 0xdf, - 0xc3, 0xdb, 0xb1, 0xf9, 0xde, 0x1c, 0x0c, 0xdc, 0x7e, 0x30, 0x3f, 0xc0, 0x81, 0xbb, 0x48, 0x27, - 0x82, 0x17, 0x5a, 0xda, 0xeb, 0xaf, 0xb5, 0x2a, 0x72, 0x2a, 0x96, 0x7e, 0x1f, 0x33, 0x02, 0xcc, - 0x38, 0xbe, 0x9d, 0x23, 0xb4, 0xc8, 0xb8, 0xa0, 0x77, 0x49, 0x4c, 0xff, 0xf6, 0xe0, 0x9d, 0xfa, - 0x2f, 0x74, 0x54, 0xfe, 0x01, 0x44, 0x42, 0xfb, 0x65, 0x76, 0xa9, 0xce, 0x05, 0xf9, 0x70, 0xcf, - 0x4d, 0xb0, 0xde, 0x28, 0xa3, 0x70, 0x5f, 0xfa, 0x7a, 0x1b, 0x04, 0x6f, 0x90, 0x5f, 0xa0, 0x5b, - 0xed, 0x08, 0xf2, 0xe9, 0x7e, 0xd9, 0x3b, 0x6b, 0x6c, 0xf4, 0xd9, 0x7d, 0xd3, 0xaa, 0xe2, 0xb3, - 0x8f, 0xbe, 0x8f, 0x56, 0xd2, 0x9e, 0x15, 0x8b, 0x90, 0xab, 0x34, 0x4a, 0x25, 0xd7, 0xca, 0xa8, - 0xa5, 0x8d, 0x52, 0xc5, 0x23, 0x9d, 0xf3, 0xe8, 0x46, 0x33, 0x72, 0x9a, 0x8b, 0x36, 0xee, 0xa9, - 0x8f, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xce, 0x6d, 0x63, 0x28, 0x4c, 0x07, 0x00, 0x00, + // 889 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xdd, 0x8e, 0xdb, 0x44, + 0x14, 0xae, 0x93, 0x34, 0x3f, 0x27, 0xbb, 0x01, 0x4d, 0x69, 0xd7, 0x0a, 0x74, 0x15, 0xb9, 0xb4, + 0xca, 0x4d, 0x1d, 0x11, 0x0a, 0xbd, 0x44, 0xbb, 0xa2, 0xad, 0x22, 0x95, 0xc5, 0xcc, 0x96, 0x5e, + 0x20, 0xa4, 0x6a, 0x62, 0xcf, 0x66, 0x87, 0x3a, 0x1e, 0x77, 0x66, 0xbc, 0x65, 0xe1, 0xbe, 0xe2, + 0x96, 0x27, 0x80, 0x07, 0xe0, 0x12, 0x5e, 0x80, 0x27, 0x43, 0x3e, 0x1e, 0x3b, 0x71, 0x48, 0x21, + 0x7b, 0xd1, 0xab, 0x38, 0xe7, 0xfb, 0xce, 0xdf, 0x77, 0x8e, 0x8f, 0xe1, 0xce, 0x52, 0x86, 0x2f, + 0xc2, 0x58, 0x66, 0x11, 0x5b, 0xf0, 0xc4, 0xbc, 0x88, 0xe5, 0x42, 0x84, 0x2c, 0x4e, 0xb8, 0x79, + 0x2d, 0xd5, 0x4b, 0x3f, 0x55, 0xd2, 0x48, 0x72, 0x6b, 0x29, 0x43, 0x7f, 0x45, 0xf2, 0x2d, 0x3a, + 0x3c, 0x5c, 0x48, 0xb9, 0x88, 0xf9, 0x04, 0x59, 0xf3, 0xec, 0x6c, 0xf2, 0x5a, 0xb1, 0x34, 0xe5, + 0x4a, 0x17, 0x7e, 0xc3, 0x03, 0x0c, 0x2e, 0x97, 0x4b, 0x99, 0xd8, 0x1f, 0x0b, 0x1c, 0xae, 0x01, + 0x36, 0xd8, 0x3a, 0xee, 0xfd, 0xe6, 0xc0, 0xcd, 0xa7, 0x45, 0x25, 0x27, 0x05, 0x4c, 0xf9, 0xab, + 0x8c, 0x6b, 0x43, 0x02, 0x78, 0xaf, 0x0e, 0x68, 0xd7, 0x19, 0x35, 0xc7, 0xfd, 0xe9, 0x3d, 0x7f, + 0x7b, 0x91, 0xfe, 0x46, 0x9c, 0x4d, 0x77, 0xf2, 0x00, 0xf6, 0xbf, 0x4e, 0xb9, 0x62, 0x46, 0xc8, + 0xe4, 0xd9, 0x65, 0xca, 0xdd, 0xc6, 0xc8, 0x19, 0x0f, 0xa6, 0x03, 0x8c, 0x57, 0x21, 0xb4, 0x4e, + 0xf2, 0xfe, 0x74, 0xe0, 0xd6, 0x66, 0x85, 0x3a, 0x95, 0x89, 0xe6, 0xef, 0xa0, 0xc4, 0x29, 0xb4, + 0x29, 0xd7, 0x59, 0x6c, 0xb0, 0xb6, 0xfe, 0x74, 0xe8, 0x17, 0xc2, 0xfb, 0xa5, 0xf0, 0xfe, 0xb1, + 0x94, 0xf1, 0x73, 0x16, 0x67, 0x9c, 0x5a, 0x26, 0xf9, 0x00, 0xae, 0x3f, 0x52, 0x4a, 0x2a, 0xb7, + 0x39, 0x72, 0xc6, 0x3d, 0x5a, 0xfc, 0xf1, 0x5e, 0xc1, 0xed, 0x7a, 0xf0, 0x40, 0xf1, 0xf0, 0x9c, + 0x87, 0xef, 0x4e, 0x5f, 0xef, 0x07, 0x38, 0x7c, 0x5b, 0x4a, 0x2b, 0xd8, 0xaa, 0x3d, 0xe7, 0xea, + 0xed, 0x35, 0xd6, 0xdb, 0xfb, 0xb5, 0x09, 0x83, 0x7a, 0x32, 0x42, 0xa0, 0x95, 0xb0, 0x25, 0xc7, + 0xd0, 0x3d, 0x8a, 0xcf, 0x64, 0x00, 0x0d, 0x11, 0x59, 0xcf, 0x86, 0x88, 0xc8, 0x17, 0xd0, 0xd1, + 0xd9, 0x3c, 0xe1, 0x46, 0xbb, 0x4d, 0x6c, 0xf6, 0xee, 0xff, 0x34, 0x7b, 0x8a, 0x6c, 0x5a, 0x7a, + 0x91, 0x63, 0xf8, 0xc8, 0x32, 0x9e, 0x0b, 0x65, 0x32, 0x16, 0x8b, 0x9f, 0x70, 0x55, 0x1e, 0x25, + 0x6c, 0x1e, 0xf3, 0xc8, 0x6d, 0x8d, 0x9c, 0x71, 0x97, 0xfe, 0x27, 0x87, 0xdc, 0x81, 0xb6, 0x36, + 0xcc, 0x64, 0xda, 0xbd, 0x8e, 0x2a, 0xf4, 0xb1, 0x86, 0x53, 0x34, 0x51, 0x0b, 0x11, 0x0f, 0xf6, + 0x62, 0x19, 0xa2, 0xdf, 0x49, 0xde, 0x55, 0x1b, 0x7b, 0xa8, 0xd9, 0xc8, 0x3d, 0xe8, 0x2f, 0x59, + 0x18, 0x48, 0x19, 0x23, 0xa5, 0x93, 0x53, 0x8e, 0x5b, 0xbf, 0xfc, 0xe5, 0x3a, 0x74, 0x1d, 0x20, + 0xb7, 0xa1, 0x65, 0xd8, 0x42, 0xbb, 0x5d, 0x4c, 0xd7, 0xc3, 0x74, 0xcf, 0xd8, 0x42, 0x53, 0x34, + 0x93, 0xc7, 0xf0, 0x3e, 0x8b, 0x2e, 0x58, 0x12, 0xf2, 0x28, 0x90, 0xb1, 0x08, 0x05, 0xd7, 0x6e, + 0x0f, 0xd5, 0x19, 0x22, 0xf5, 0xc8, 0x82, 0xe5, 0x54, 0x73, 0xce, 0x25, 0xfd, 0x97, 0x8f, 0xf7, + 0x47, 0x13, 0xf6, 0x6b, 0xb2, 0xed, 0x34, 0x92, 0x8f, 0x61, 0x9f, 0x45, 0x91, 0xe2, 0x5a, 0x07, + 0x8a, 0x9f, 0x89, 0x1f, 0xed, 0x1a, 0xd7, 0x8d, 0xc4, 0x83, 0xb6, 0x92, 0x99, 0xe1, 0xda, 0x6d, + 0x61, 0x65, 0x80, 0x95, 0xd1, 0xdc, 0x44, 0x2d, 0x42, 0x1e, 0x02, 0xb0, 0xb8, 0x14, 0x08, 0xb5, + 0x1d, 0x4c, 0x0f, 0x90, 0x37, 0x0b, 0x8e, 0x2a, 0xe0, 0x2b, 0x6e, 0xce, 0x65, 0x44, 0xd7, 0xa8, + 0x79, 0x99, 0x17, 0x31, 0x4b, 0x50, 0xe3, 0x7d, 0x8a, 0xcf, 0xe4, 0x2e, 0x74, 0x44, 0x9a, 0x2b, + 0xa8, 0xdd, 0x0e, 0x66, 0xec, 0xdb, 0x48, 0xb9, 0x8d, 0x96, 0x18, 0x19, 0x41, 0x33, 0x4a, 0x4a, + 0x65, 0xbb, 0x48, 0xf9, 0x32, 0xd1, 0x76, 0x08, 0x39, 0x44, 0x86, 0xd0, 0x15, 0x3a, 0xc8, 0xe6, + 0xb1, 0x08, 0xdd, 0x1e, 0x6e, 0x47, 0xf5, 0xbf, 0x1a, 0x0c, 0x6c, 0x1f, 0xcc, 0xf7, 0x70, 0x60, + 0x17, 0xe9, 0x94, 0x87, 0x99, 0x12, 0xe6, 0xf2, 0x89, 0x92, 0x59, 0x4a, 0xf9, 0x99, 0xdb, 0x47, + 0x0f, 0x0f, 0x3d, 0x4e, 0xb6, 0x73, 0xb8, 0xe2, 0x49, 0xc8, 0xe9, 0xdb, 0x42, 0x78, 0xbf, 0x3b, + 0x9b, 0x27, 0x62, 0x16, 0x7c, 0x9b, 0x46, 0xcc, 0xf0, 0xf2, 0x44, 0x78, 0xb0, 0xf7, 0x74, 0x7d, + 0x07, 0x8b, 0x31, 0xd6, 0x6c, 0xb9, 0x76, 0x88, 0x15, 0x03, 0xc5, 0x67, 0xf2, 0x04, 0x3a, 0xa7, + 0xb5, 0xb7, 0xec, 0xfe, 0x4e, 0x6f, 0x59, 0x95, 0xbe, 0xf4, 0xf6, 0x58, 0xf5, 0x71, 0xa8, 0x33, + 0xaa, 0xac, 0xce, 0x5a, 0xd6, 0x07, 0x70, 0x93, 0xf2, 0x85, 0xd0, 0x86, 0x2b, 0x1e, 0xcd, 0x82, + 0xa3, 0x62, 0x7f, 0xb8, 0x76, 0x1b, 0xa3, 0xe6, 0xb8, 0x47, 0xb7, 0x83, 0xde, 0xdf, 0xce, 0xe6, + 0xd5, 0x5a, 0xa9, 0x60, 0xaf, 0xd6, 0x37, 0xb0, 0x17, 0x70, 0xa5, 0x73, 0xe7, 0x68, 0x16, 0x94, + 0x67, 0xf2, 0x8a, 0x3d, 0xd5, 0x42, 0x90, 0x87, 0xd0, 0x7d, 0xcc, 0x44, 0x9c, 0x29, 0x5b, 0x5e, + 0x7f, 0xfa, 0x61, 0xb9, 0xa8, 0x45, 0x65, 0x85, 0x97, 0xe5, 0xd0, 0x8a, 0xbc, 0xfd, 0xd8, 0x4f, + 0xdf, 0x34, 0xe1, 0x46, 0xbd, 0x89, 0xa3, 0xbc, 0x24, 0x22, 0xa0, 0x3d, 0x4b, 0x2e, 0xe4, 0x4b, + 0x4e, 0xee, 0xef, 0x78, 0xd4, 0x8b, 0xc9, 0x0f, 0xfd, 0x5d, 0xe9, 0x85, 0x44, 0xde, 0x35, 0xf2, + 0x33, 0x74, 0xcb, 0x73, 0x4f, 0x3e, 0xdb, 0xcd, 0x7b, 0xe3, 0x8b, 0x34, 0xfc, 0xfc, 0xaa, 0x6e, + 0x55, 0xf2, 0x37, 0x0e, 0xdc, 0x28, 0x87, 0xb6, 0x1a, 0xb2, 0xde, 0xb5, 0x90, 0x8d, 0xbd, 0xdf, + 0xb5, 0x90, 0xcd, 0x45, 0xf1, 0xae, 0x1d, 0x7f, 0xf2, 0xdd, 0x64, 0x21, 0xcc, 0x79, 0x36, 0xf7, + 0x43, 0xb9, 0x9c, 0x2c, 0x45, 0xa8, 0xa4, 0x96, 0x67, 0x66, 0xb2, 0x94, 0xe1, 0x44, 0xa5, 0xe1, + 0x64, 0x15, 0x73, 0x62, 0x63, 0xce, 0xdb, 0xf8, 0xed, 0xfb, 0xf4, 0x9f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xea, 0xd2, 0xdf, 0x11, 0xa0, 0x09, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -516,6 +693,12 @@ type LogicalNetworkAgentClient interface { Invoke(ctx context.Context, in *LogicalNetworkRequest, opts ...grpc.CallOption) (*LogicalNetworkResponse, error) // Prechecks whether the system is able to create specified logical networks (but does not actually create them). Precheck(ctx context.Context, in *LogicalNetworkPrecheckRequest, opts ...grpc.CallOption) (*LogicalNetworkPrecheckResponse, error) + // Replaces the registeredIPAddresses list on each referenced subnet with + // the supplied list (subnet-scoped full-replace) and applies the + // corresponding add/remove delta to the IPAM bitmap. Independent from + // spec Update(): does not run Validate/validateUpdate, does not touch + // ProvisionState, and does not fan out to nodeagents. + UpdateRegisteredIPs(ctx context.Context, in *LogicalNetworkIPUpdateRequest, opts ...grpc.CallOption) (*LogicalNetworkIPUpdateResponse, error) } type logicalNetworkAgentClient struct { @@ -544,11 +727,26 @@ func (c *logicalNetworkAgentClient) Precheck(ctx context.Context, in *LogicalNet return out, nil } +func (c *logicalNetworkAgentClient) UpdateRegisteredIPs(ctx context.Context, in *LogicalNetworkIPUpdateRequest, opts ...grpc.CallOption) (*LogicalNetworkIPUpdateResponse, error) { + out := new(LogicalNetworkIPUpdateResponse) + err := c.cc.Invoke(ctx, "/moc.cloudagent.network.LogicalNetworkAgent/UpdateRegisteredIPs", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // LogicalNetworkAgentServer is the server API for LogicalNetworkAgent service. type LogicalNetworkAgentServer interface { Invoke(context.Context, *LogicalNetworkRequest) (*LogicalNetworkResponse, error) // Prechecks whether the system is able to create specified logical networks (but does not actually create them). Precheck(context.Context, *LogicalNetworkPrecheckRequest) (*LogicalNetworkPrecheckResponse, error) + // Replaces the registeredIPAddresses list on each referenced subnet with + // the supplied list (subnet-scoped full-replace) and applies the + // corresponding add/remove delta to the IPAM bitmap. Independent from + // spec Update(): does not run Validate/validateUpdate, does not touch + // ProvisionState, and does not fan out to nodeagents. + UpdateRegisteredIPs(context.Context, *LogicalNetworkIPUpdateRequest) (*LogicalNetworkIPUpdateResponse, error) } // UnimplementedLogicalNetworkAgentServer can be embedded to have forward compatible implementations. @@ -561,6 +759,9 @@ func (*UnimplementedLogicalNetworkAgentServer) Invoke(ctx context.Context, req * func (*UnimplementedLogicalNetworkAgentServer) Precheck(ctx context.Context, req *LogicalNetworkPrecheckRequest) (*LogicalNetworkPrecheckResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Precheck not implemented") } +func (*UnimplementedLogicalNetworkAgentServer) UpdateRegisteredIPs(ctx context.Context, req *LogicalNetworkIPUpdateRequest) (*LogicalNetworkIPUpdateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateRegisteredIPs not implemented") +} func RegisterLogicalNetworkAgentServer(s *grpc.Server, srv LogicalNetworkAgentServer) { s.RegisterService(&_LogicalNetworkAgent_serviceDesc, srv) @@ -602,6 +803,24 @@ func _LogicalNetworkAgent_Precheck_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _LogicalNetworkAgent_UpdateRegisteredIPs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LogicalNetworkIPUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicalNetworkAgentServer).UpdateRegisteredIPs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/moc.cloudagent.network.LogicalNetworkAgent/UpdateRegisteredIPs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicalNetworkAgentServer).UpdateRegisteredIPs(ctx, req.(*LogicalNetworkIPUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _LogicalNetworkAgent_serviceDesc = grpc.ServiceDesc{ ServiceName: "moc.cloudagent.network.LogicalNetworkAgent", HandlerType: (*LogicalNetworkAgentServer)(nil), @@ -614,6 +833,10 @@ var _LogicalNetworkAgent_serviceDesc = grpc.ServiceDesc{ MethodName: "Precheck", Handler: _LogicalNetworkAgent_Precheck_Handler, }, + { + MethodName: "UpdateRegisteredIPs", + Handler: _LogicalNetworkAgent_UpdateRegisteredIPs_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "moc_cloudagent_logicalnetwork.proto", diff --git a/rpc/cloudagent/network/moc_cloudagent_virtualnetwork.pb.go b/rpc/cloudagent/network/moc_cloudagent_virtualnetwork.pb.go index 212d761a..1408983e 100644 --- a/rpc/cloudagent/network/moc_cloudagent_virtualnetwork.pb.go +++ b/rpc/cloudagent/network/moc_cloudagent_virtualnetwork.pb.go @@ -555,6 +555,170 @@ func (m *Ipam) GetSubnets() []*Subnet { return nil } +type VirtualNetworkIPUpdateRequest struct { + // Identifies the target VNET. + GroupName string `protobuf:"bytes,1,opt,name=GroupName,proto3" json:"GroupName,omitempty"` + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` + // Desired registered-IP list for each subnet (subnet-scoped full-replace). + // MOC routes each IP to the correct pool by range internally. + IPUpdates []*VirtualSubnetIPUpdate `protobuf:"bytes,3,rep,name=IPUpdates,proto3" json:"IPUpdates,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VirtualNetworkIPUpdateRequest) Reset() { *m = VirtualNetworkIPUpdateRequest{} } +func (m *VirtualNetworkIPUpdateRequest) String() string { return proto.CompactTextString(m) } +func (*VirtualNetworkIPUpdateRequest) ProtoMessage() {} +func (*VirtualNetworkIPUpdateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_65af3e74534f0214, []int{7} +} + +func (m *VirtualNetworkIPUpdateRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VirtualNetworkIPUpdateRequest.Unmarshal(m, b) +} +func (m *VirtualNetworkIPUpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VirtualNetworkIPUpdateRequest.Marshal(b, m, deterministic) +} +func (m *VirtualNetworkIPUpdateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_VirtualNetworkIPUpdateRequest.Merge(m, src) +} +func (m *VirtualNetworkIPUpdateRequest) XXX_Size() int { + return xxx_messageInfo_VirtualNetworkIPUpdateRequest.Size(m) +} +func (m *VirtualNetworkIPUpdateRequest) XXX_DiscardUnknown() { + xxx_messageInfo_VirtualNetworkIPUpdateRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_VirtualNetworkIPUpdateRequest proto.InternalMessageInfo + +func (m *VirtualNetworkIPUpdateRequest) GetGroupName() string { + if m != nil { + return m.GroupName + } + return "" +} + +func (m *VirtualNetworkIPUpdateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *VirtualNetworkIPUpdateRequest) GetIPUpdates() []*VirtualSubnetIPUpdate { + if m != nil { + return m.IPUpdates + } + return nil +} + +type VirtualSubnetIPUpdate struct { + SubnetName string `protobuf:"bytes,1,opt,name=SubnetName,proto3" json:"SubnetName,omitempty"` + RegisteredIPAddresses []string `protobuf:"bytes,2,rep,name=RegisteredIPAddresses,proto3" json:"RegisteredIPAddresses,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VirtualSubnetIPUpdate) Reset() { *m = VirtualSubnetIPUpdate{} } +func (m *VirtualSubnetIPUpdate) String() string { return proto.CompactTextString(m) } +func (*VirtualSubnetIPUpdate) ProtoMessage() {} +func (*VirtualSubnetIPUpdate) Descriptor() ([]byte, []int) { + return fileDescriptor_65af3e74534f0214, []int{8} +} + +func (m *VirtualSubnetIPUpdate) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VirtualSubnetIPUpdate.Unmarshal(m, b) +} +func (m *VirtualSubnetIPUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VirtualSubnetIPUpdate.Marshal(b, m, deterministic) +} +func (m *VirtualSubnetIPUpdate) XXX_Merge(src proto.Message) { + xxx_messageInfo_VirtualSubnetIPUpdate.Merge(m, src) +} +func (m *VirtualSubnetIPUpdate) XXX_Size() int { + return xxx_messageInfo_VirtualSubnetIPUpdate.Size(m) +} +func (m *VirtualSubnetIPUpdate) XXX_DiscardUnknown() { + xxx_messageInfo_VirtualSubnetIPUpdate.DiscardUnknown(m) +} + +var xxx_messageInfo_VirtualSubnetIPUpdate proto.InternalMessageInfo + +func (m *VirtualSubnetIPUpdate) GetSubnetName() string { + if m != nil { + return m.SubnetName + } + return "" +} + +func (m *VirtualSubnetIPUpdate) GetRegisteredIPAddresses() []string { + if m != nil { + return m.RegisteredIPAddresses + } + return nil +} + +type VirtualNetworkIPUpdateResponse struct { + // One list of persisted IPs for each subnet (full-replace + // semantics). Only trustworthy when the gRPC status is OK. + PersistedIPs []*VirtualSubnetIPUpdate `protobuf:"bytes,1,rep,name=PersistedIPs,proto3" json:"PersistedIPs,omitempty"` + // IP-level failures. May be non-empty even on gRPC OK (partial success). + Failures []*common.IPAddressUpdateFailure `protobuf:"bytes,2,rep,name=Failures,proto3" json:"Failures,omitempty"` + // Overall error summary, empty on gRPC OK. + Error string `protobuf:"bytes,3,opt,name=Error,proto3" json:"Error,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VirtualNetworkIPUpdateResponse) Reset() { *m = VirtualNetworkIPUpdateResponse{} } +func (m *VirtualNetworkIPUpdateResponse) String() string { return proto.CompactTextString(m) } +func (*VirtualNetworkIPUpdateResponse) ProtoMessage() {} +func (*VirtualNetworkIPUpdateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_65af3e74534f0214, []int{9} +} + +func (m *VirtualNetworkIPUpdateResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VirtualNetworkIPUpdateResponse.Unmarshal(m, b) +} +func (m *VirtualNetworkIPUpdateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VirtualNetworkIPUpdateResponse.Marshal(b, m, deterministic) +} +func (m *VirtualNetworkIPUpdateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_VirtualNetworkIPUpdateResponse.Merge(m, src) +} +func (m *VirtualNetworkIPUpdateResponse) XXX_Size() int { + return xxx_messageInfo_VirtualNetworkIPUpdateResponse.Size(m) +} +func (m *VirtualNetworkIPUpdateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_VirtualNetworkIPUpdateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_VirtualNetworkIPUpdateResponse proto.InternalMessageInfo + +func (m *VirtualNetworkIPUpdateResponse) GetPersistedIPs() []*VirtualSubnetIPUpdate { + if m != nil { + return m.PersistedIPs + } + return nil +} + +func (m *VirtualNetworkIPUpdateResponse) GetFailures() []*common.IPAddressUpdateFailure { + if m != nil { + return m.Failures + } + return nil +} + +func (m *VirtualNetworkIPUpdateResponse) GetError() string { + if m != nil { + return m.Error + } + return "" +} + func init() { proto.RegisterEnum("moc.cloudagent.network.VirtualNetworkType", VirtualNetworkType_name, VirtualNetworkType_value) proto.RegisterType((*VirtualNetworkRequest)(nil), "moc.cloudagent.network.VirtualNetworkRequest") @@ -564,6 +728,9 @@ func init() { proto.RegisterType((*VirtualNetwork)(nil), "moc.cloudagent.network.VirtualNetwork") proto.RegisterType((*Subnet)(nil), "moc.cloudagent.network.Subnet") proto.RegisterType((*Ipam)(nil), "moc.cloudagent.network.Ipam") + proto.RegisterType((*VirtualNetworkIPUpdateRequest)(nil), "moc.cloudagent.network.VirtualNetworkIPUpdateRequest") + proto.RegisterType((*VirtualSubnetIPUpdate)(nil), "moc.cloudagent.network.VirtualSubnetIPUpdate") + proto.RegisterType((*VirtualNetworkIPUpdateResponse)(nil), "moc.cloudagent.network.VirtualNetworkIPUpdateResponse") } func init() { @@ -571,62 +738,72 @@ func init() { } var fileDescriptor_65af3e74534f0214 = []byte{ - // 875 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x54, 0xdd, 0x6e, 0xe3, 0x44, - 0x14, 0x5e, 0x27, 0x69, 0x7e, 0x8e, 0xdb, 0xd4, 0x1a, 0xd8, 0xad, 0x15, 0xb1, 0x55, 0xe4, 0x15, - 0xab, 0xb2, 0x12, 0x8e, 0x08, 0xbf, 0x37, 0x20, 0xb5, 0x80, 0x50, 0x56, 0x6c, 0x37, 0x9a, 0x46, - 0xbd, 0x40, 0x48, 0xab, 0xa9, 0x3d, 0x49, 0xcd, 0xda, 0x33, 0xee, 0xcc, 0x38, 0xab, 0x8a, 0x17, - 0x80, 0xf7, 0x81, 0x97, 0xe0, 0x15, 0x78, 0x0c, 0xae, 0x91, 0xd0, 0x1c, 0x3b, 0xbf, 0x6c, 0xa5, - 0xf4, 0x62, 0xaf, 0xec, 0x99, 0xef, 0x3b, 0xbf, 0xdf, 0x99, 0x03, 0x4f, 0x32, 0x19, 0xbd, 0x8a, - 0x52, 0x59, 0xc4, 0x6c, 0xc6, 0x85, 0x79, 0x35, 0x4f, 0x94, 0x29, 0x58, 0x2a, 0xb8, 0x79, 0x23, - 0xd5, 0xeb, 0x30, 0x57, 0xd2, 0x48, 0xf2, 0x28, 0x93, 0x51, 0xb8, 0x22, 0x85, 0x15, 0xda, 0x3b, - 0x9e, 0x49, 0x39, 0x4b, 0xf9, 0x00, 0x59, 0x57, 0xc5, 0x74, 0xf0, 0x46, 0xb1, 0x3c, 0xe7, 0x4a, - 0x97, 0x76, 0xbd, 0x23, 0x74, 0x2e, 0xb3, 0x4c, 0x8a, 0xea, 0x53, 0x01, 0xc7, 0x6b, 0x40, 0xe5, - 0x6c, 0x1d, 0x0f, 0xfe, 0x72, 0xe0, 0xe1, 0x65, 0x99, 0xc9, 0x79, 0x09, 0x53, 0x7e, 0x53, 0x70, - 0x6d, 0xc8, 0x18, 0x0e, 0x37, 0x01, 0xed, 0x3b, 0xfd, 0xfa, 0x89, 0x3b, 0x7c, 0x1a, 0xbe, 0x3d, - 0xc9, 0x70, 0xcb, 0xcf, 0xb6, 0x39, 0xf9, 0x0c, 0x0e, 0x5e, 0xe6, 0x5c, 0x31, 0x93, 0x48, 0x31, - 0xb9, 0xcd, 0xb9, 0x5f, 0xeb, 0x3b, 0x27, 0xdd, 0x61, 0x17, 0xfd, 0x2d, 0x11, 0xba, 0x49, 0x22, - 0x1f, 0x41, 0x6b, 0xce, 0x95, 0x4e, 0xa4, 0xf0, 0xeb, 0x7d, 0xe7, 0xc4, 0x1d, 0x1e, 0x22, 0xff, - 0x34, 0x4f, 0x2e, 0xcb, 0x6b, 0xba, 0xc0, 0x83, 0x3f, 0x1c, 0x78, 0xb4, 0x5d, 0x8c, 0xce, 0xa5, - 0xd0, 0xfc, 0x1d, 0x54, 0x33, 0x84, 0x26, 0xe5, 0xba, 0x48, 0x0d, 0x96, 0xe1, 0x0e, 0x7b, 0x61, - 0xa9, 0x51, 0xb8, 0xd0, 0x28, 0x3c, 0x93, 0x32, 0xbd, 0x64, 0x69, 0xc1, 0x69, 0xc5, 0x24, 0xef, - 0xc3, 0xde, 0xf7, 0x4a, 0x49, 0x85, 0x95, 0x74, 0x68, 0x79, 0x08, 0x6e, 0xe0, 0xf1, 0xa6, 0xf3, - 0xb1, 0xe2, 0xd1, 0x35, 0x8f, 0xde, 0x9d, 0x14, 0xc1, 0x2f, 0x70, 0x7c, 0x57, 0xc8, 0xaa, 0x61, - 0xab, 0xf2, 0x9c, 0xfb, 0x97, 0x57, 0x5b, 0x2f, 0xef, 0x9f, 0x3a, 0x74, 0x37, 0x83, 0x11, 0x02, - 0x0d, 0xc1, 0x32, 0x8e, 0xae, 0x3b, 0x14, 0xff, 0x49, 0x17, 0x6a, 0x49, 0x5c, 0x59, 0xd6, 0x92, - 0x98, 0x7c, 0x05, 0x2d, 0x5d, 0x5c, 0x09, 0x6e, 0xb4, 0x5f, 0xc7, 0x62, 0x8f, 0xef, 0x2a, 0xf6, - 0x02, 0x69, 0x74, 0x41, 0x27, 0x7d, 0xa8, 0xc7, 0x42, 0xfb, 0x0d, 0xcc, 0xbb, 0x8d, 0x56, 0xdf, - 0x09, 0x7d, 0xd6, 0xf8, 0xed, 0x4f, 0xdf, 0xa1, 0x16, 0x22, 0xdf, 0x40, 0xc3, 0xd8, 0x01, 0xdc, - 0xc3, 0x01, 0x7c, 0xb6, 0x5b, 0x17, 0xed, 0x34, 0x52, 0xb4, 0x23, 0x3d, 0x68, 0x0b, 0x19, 0xf3, - 0xe9, 0x4d, 0x2c, 0xfc, 0x26, 0x66, 0xbc, 0x3c, 0x93, 0x0f, 0xa0, 0x33, 0x53, 0xb2, 0xc8, 0xcf, - 0x6d, 0x81, 0x2d, 0x04, 0x57, 0x17, 0xe4, 0x09, 0x34, 0xb5, 0x61, 0xa6, 0xd0, 0x7e, 0x1b, 0xd3, - 0x73, 0x31, 0xf6, 0x05, 0x5e, 0xd1, 0x0a, 0x22, 0x01, 0xec, 0xa7, 0x32, 0xc2, 0x27, 0x80, 0x5e, - 0x3a, 0xe8, 0x65, 0xe3, 0x8e, 0x3c, 0x05, 0x37, 0x63, 0xd1, 0x58, 0xca, 0x14, 0x29, 0x60, 0x29, - 0x55, 0x89, 0xeb, 0x00, 0x79, 0x0c, 0x0d, 0xc3, 0x66, 0xda, 0xdf, 0xc7, 0x70, 0x1d, 0x0c, 0x37, - 0x61, 0x33, 0x4d, 0xf1, 0x9a, 0x7c, 0x0d, 0xdd, 0x54, 0xce, 0x92, 0x68, 0x59, 0xa5, 0x7f, 0x80, - 0xc4, 0x87, 0x48, 0x5c, 0xbe, 0xa2, 0x29, 0x57, 0x5c, 0x44, 0x9c, 0x6e, 0x91, 0xad, 0x90, 0x51, - 0x12, 0x2b, 0xbf, 0xdb, 0xaf, 0x5b, 0x21, 0xed, 0xff, 0xf3, 0x46, 0xdb, 0xf5, 0xf6, 0x83, 0xbf, - 0x6b, 0xd0, 0x2c, 0x85, 0xd9, 0x49, 0xed, 0x85, 0xa3, 0xf2, 0x61, 0xe0, 0x3f, 0x09, 0xa0, 0xa9, - 0x64, 0x61, 0xb8, 0x95, 0xd2, 0x0e, 0x00, 0x60, 0x4e, 0xd4, 0x5e, 0xd1, 0x0a, 0x21, 0x5f, 0x02, - 0xb0, 0x74, 0xd1, 0x98, 0x4a, 0xcf, 0x23, 0xe4, 0x8d, 0xc6, 0xa7, 0x4b, 0xe0, 0x05, 0x37, 0xd7, - 0x32, 0xa6, 0x6b, 0x54, 0x1b, 0x70, 0x9e, 0xb2, 0x52, 0xbe, 0x03, 0x8a, 0xff, 0xe4, 0x43, 0x68, - 0x25, 0x79, 0x2e, 0x65, 0xaa, 0xfd, 0x16, 0x46, 0x74, 0x2b, 0x4f, 0xb6, 0x9b, 0x74, 0x81, 0x91, - 0x9f, 0xe1, 0xa8, 0x9a, 0x10, 0xcd, 0xa3, 0x42, 0x25, 0xe6, 0x16, 0xf5, 0x55, 0x7c, 0x8a, 0x4a, - 0xb9, 0xc3, 0x60, 0xbd, 0x79, 0x17, 0x15, 0xe7, 0x07, 0xcb, 0x59, 0x75, 0xf2, 0x2e, 0x17, 0x4b, - 0xc1, 0xe0, 0xad, 0x82, 0x3d, 0x6f, 0xb4, 0xdb, 0x5e, 0x27, 0x98, 0x40, 0x63, 0x94, 0xb3, 0xcc, - 0x56, 0x81, 0x83, 0x5c, 0xb5, 0x16, 0x87, 0x73, 0xed, 0xe1, 0xd4, 0xee, 0xf5, 0x70, 0x9e, 0xfd, - 0xee, 0x00, 0xf9, 0xff, 0xcc, 0x93, 0x16, 0xd4, 0xcf, 0x4f, 0x27, 0xde, 0x03, 0x72, 0x08, 0xee, - 0x44, 0x31, 0xa1, 0x73, 0xa6, 0xb8, 0x30, 0x9e, 0x43, 0xf6, 0xa1, 0xfd, 0xe3, 0xf0, 0x4c, 0x25, - 0xf1, 0x8c, 0x7b, 0xb5, 0xf2, 0x34, 0x29, 0x84, 0xe0, 0xa9, 0x57, 0xb7, 0x56, 0xa3, 0x6f, 0x2f, - 0xbc, 0x06, 0x71, 0xa1, 0x35, 0x56, 0xc9, 0x9c, 0x19, 0xee, 0xed, 0xd9, 0xc3, 0xcb, 0x39, 0x57, - 0x29, 0xbb, 0xf5, 0x9a, 0xd6, 0x60, 0x24, 0x0c, 0x57, 0x82, 0xa5, 0x5e, 0xcb, 0x9e, 0x5e, 0x24, - 0x76, 0x63, 0xf0, 0xd8, 0x6b, 0x0f, 0xff, 0x75, 0xe0, 0xbd, 0xcd, 0x5c, 0x4e, 0x6d, 0xee, 0x24, - 0x81, 0xe6, 0x48, 0xcc, 0xe5, 0x6b, 0x4e, 0x3e, 0xde, 0x71, 0xf9, 0x95, 0x4b, 0xb4, 0x17, 0xee, - 0x4a, 0x2f, 0x17, 0x60, 0xf0, 0x80, 0xfc, 0x0a, 0xed, 0xc5, 0x5a, 0x24, 0x9f, 0xef, 0x66, 0xbd, - 0xb5, 0xb9, 0x7b, 0x5f, 0xdc, 0xd7, 0x6c, 0x11, 0xfc, 0xec, 0x93, 0x9f, 0x06, 0xb3, 0xc4, 0x5c, - 0x17, 0x57, 0x61, 0x24, 0xb3, 0x41, 0x96, 0x44, 0x4a, 0x6a, 0x39, 0x35, 0x83, 0x4c, 0x46, 0x03, - 0x95, 0x47, 0x83, 0x95, 0xcf, 0x41, 0xe5, 0xf3, 0xaa, 0x89, 0xab, 0xf9, 0xd3, 0xff, 0x02, 0x00, - 0x00, 0xff, 0xff, 0x96, 0x88, 0x02, 0x94, 0x6a, 0x08, 0x00, 0x00, + // 1033 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xdb, 0x6e, 0x1b, 0x45, + 0x18, 0xee, 0xda, 0x8e, 0x0f, 0xbf, 0x13, 0x67, 0x35, 0x25, 0xcd, 0xca, 0xb4, 0x51, 0xb4, 0x15, + 0x55, 0xa8, 0x54, 0x5b, 0x98, 0x42, 0xb9, 0x01, 0x29, 0xe1, 0x10, 0xb9, 0xa2, 0xa9, 0x99, 0x98, + 0x5c, 0x20, 0xa4, 0x6a, 0xb2, 0x3b, 0x76, 0x96, 0xee, 0xee, 0x6c, 0x66, 0x66, 0x5d, 0x45, 0xdc, + 0x57, 0xf0, 0x0a, 0x3c, 0x07, 0xbc, 0x00, 0x97, 0xbc, 0x02, 0x8f, 0xc1, 0x0b, 0xa0, 0xf9, 0xf7, + 0xe0, 0x03, 0x89, 0x70, 0x2e, 0x7a, 0xb5, 0x3b, 0xf3, 0x7d, 0xff, 0xf1, 0xfb, 0x67, 0x06, 0x1e, + 0x46, 0xc2, 0x7b, 0xe5, 0x85, 0x22, 0xf5, 0xd9, 0x94, 0xc7, 0xfa, 0xd5, 0x2c, 0x90, 0x3a, 0x65, + 0x61, 0xcc, 0xf5, 0x1b, 0x21, 0x5f, 0xf7, 0x12, 0x29, 0xb4, 0x20, 0xf7, 0x22, 0xe1, 0xf5, 0xe6, + 0xa4, 0x5e, 0x8e, 0x76, 0xf7, 0xa6, 0x42, 0x4c, 0x43, 0xde, 0x47, 0xd6, 0x79, 0x3a, 0xe9, 0xbf, + 0x91, 0x2c, 0x49, 0xb8, 0x54, 0x99, 0x5d, 0x77, 0x17, 0x9d, 0x8b, 0x28, 0x12, 0x71, 0xfe, 0xc9, + 0x81, 0xbd, 0x05, 0x20, 0x77, 0xb6, 0x88, 0xbb, 0x7f, 0x59, 0xb0, 0x73, 0x96, 0x65, 0x72, 0x92, + 0xc1, 0x94, 0x5f, 0xa6, 0x5c, 0x69, 0x32, 0x82, 0xed, 0x65, 0x40, 0x39, 0xd6, 0x7e, 0xf5, 0xa0, + 0x3d, 0x78, 0xd4, 0xbb, 0x3e, 0xc9, 0xde, 0x8a, 0x9f, 0x55, 0x73, 0xf2, 0x14, 0xb6, 0x5e, 0x26, + 0x5c, 0x32, 0x1d, 0x88, 0x78, 0x7c, 0x95, 0x70, 0xa7, 0xb2, 0x6f, 0x1d, 0x74, 0x06, 0x1d, 0xf4, + 0x57, 0x22, 0x74, 0x99, 0x44, 0x3e, 0x84, 0xc6, 0x8c, 0x4b, 0x15, 0x88, 0xd8, 0xa9, 0xee, 0x5b, + 0x07, 0xed, 0xc1, 0x36, 0xf2, 0x0f, 0x93, 0xe0, 0x2c, 0xdb, 0xa6, 0x05, 0xee, 0xfe, 0x6e, 0xc1, + 0xbd, 0xd5, 0x62, 0x54, 0x22, 0x62, 0xc5, 0xdf, 0x41, 0x35, 0x03, 0xa8, 0x53, 0xae, 0xd2, 0x50, + 0x63, 0x19, 0xed, 0x41, 0xb7, 0x97, 0x69, 0xd4, 0x2b, 0x34, 0xea, 0x1d, 0x09, 0x11, 0x9e, 0xb1, + 0x30, 0xe5, 0x34, 0x67, 0x92, 0xf7, 0x60, 0xe3, 0x6b, 0x29, 0x85, 0xc4, 0x4a, 0x5a, 0x34, 0x5b, + 0xb8, 0x97, 0xf0, 0x60, 0xd9, 0xf9, 0x48, 0x72, 0xef, 0x82, 0x7b, 0xef, 0x4e, 0x0a, 0xf7, 0x27, + 0xd8, 0xbb, 0x29, 0x64, 0xde, 0xb0, 0x79, 0x79, 0xd6, 0xed, 0xcb, 0xab, 0x2c, 0x96, 0xf7, 0x4f, + 0x15, 0x3a, 0xcb, 0xc1, 0x08, 0x81, 0x5a, 0xcc, 0x22, 0x8e, 0xae, 0x5b, 0x14, 0xff, 0x49, 0x07, + 0x2a, 0x81, 0x9f, 0x5b, 0x56, 0x02, 0x9f, 0x7c, 0x06, 0x0d, 0x95, 0x9e, 0xc7, 0x5c, 0x2b, 0xa7, + 0x8a, 0xc5, 0xee, 0xdd, 0x54, 0xec, 0x29, 0xd2, 0x68, 0x41, 0x27, 0xfb, 0x50, 0xf5, 0x63, 0xe5, + 0xd4, 0x30, 0xef, 0x26, 0x5a, 0x7d, 0x15, 0xab, 0xa3, 0xda, 0x2f, 0x7f, 0x38, 0x16, 0x35, 0x10, + 0xf9, 0x02, 0x6a, 0xda, 0x0c, 0xe0, 0x06, 0x0e, 0xe0, 0xe3, 0xf5, 0xba, 0x68, 0xa6, 0x91, 0xa2, + 0x1d, 0xe9, 0x42, 0x33, 0x16, 0x3e, 0x9f, 0x5c, 0xfa, 0xb1, 0x53, 0xc7, 0x8c, 0xcb, 0x35, 0xb9, + 0x0f, 0xad, 0xa9, 0x14, 0x69, 0x72, 0x62, 0x0a, 0x6c, 0x20, 0x38, 0xdf, 0x20, 0x0f, 0xa1, 0xae, + 0x34, 0xd3, 0xa9, 0x72, 0x9a, 0x98, 0x5e, 0x1b, 0x63, 0x9f, 0xe2, 0x16, 0xcd, 0x21, 0xe2, 0xc2, + 0x66, 0x28, 0x3c, 0x3c, 0x02, 0xe8, 0xa5, 0x85, 0x5e, 0x96, 0xf6, 0xc8, 0x23, 0x68, 0x47, 0xcc, + 0x1b, 0x09, 0x11, 0x22, 0x05, 0x0c, 0x25, 0x2f, 0x71, 0x11, 0x20, 0x0f, 0xa0, 0xa6, 0xd9, 0x54, + 0x39, 0x9b, 0x18, 0xae, 0x85, 0xe1, 0xc6, 0x6c, 0xaa, 0x28, 0x6e, 0x93, 0xcf, 0xa1, 0x13, 0x8a, + 0x69, 0xe0, 0x95, 0x55, 0x3a, 0x5b, 0x48, 0xdc, 0x41, 0x62, 0x79, 0x8a, 0x26, 0x5c, 0xf2, 0xd8, + 0xe3, 0x74, 0x85, 0x6c, 0x84, 0xf4, 0x02, 0x5f, 0x3a, 0x9d, 0xfd, 0xaa, 0x11, 0xd2, 0xfc, 0x3f, + 0xaf, 0x35, 0xdb, 0xf6, 0xa6, 0xfb, 0x77, 0x05, 0xea, 0x99, 0x30, 0x6b, 0xa9, 0x5d, 0x38, 0xca, + 0x0e, 0x06, 0xfe, 0x13, 0x17, 0xea, 0x52, 0xa4, 0x9a, 0x1b, 0x29, 0xcd, 0x00, 0x00, 0xe6, 0x44, + 0xcd, 0x16, 0xcd, 0x11, 0xf2, 0x0c, 0x80, 0x85, 0x45, 0x63, 0x72, 0x3d, 0x77, 0x91, 0x37, 0x1c, + 0x1d, 0x96, 0xc0, 0x0b, 0xae, 0x2f, 0x84, 0x4f, 0x17, 0xa8, 0x26, 0xe0, 0x2c, 0x64, 0x99, 0x7c, + 0x5b, 0x14, 0xff, 0xc9, 0x07, 0xd0, 0x08, 0x92, 0x44, 0x88, 0x50, 0x39, 0x0d, 0x8c, 0xd8, 0xce, + 0x3d, 0x99, 0x6e, 0xd2, 0x02, 0x23, 0x3f, 0xc2, 0x6e, 0x3e, 0x21, 0x8a, 0x7b, 0xa9, 0x0c, 0xf4, + 0x15, 0xea, 0x2b, 0xf9, 0x04, 0x95, 0x6a, 0x0f, 0xdc, 0xc5, 0xe6, 0x9d, 0xe6, 0x9c, 0x63, 0xc3, + 0x99, 0x77, 0xf2, 0x26, 0x17, 0xa5, 0x60, 0x70, 0xad, 0x60, 0xcf, 0x6b, 0xcd, 0xa6, 0xdd, 0x72, + 0xc7, 0x50, 0x1b, 0x26, 0x2c, 0x32, 0x55, 0xe0, 0x20, 0xe7, 0xad, 0xc5, 0xe1, 0x5c, 0x38, 0x38, + 0x95, 0x5b, 0x1d, 0x1c, 0xf7, 0x37, 0x6b, 0xf5, 0x26, 0x1a, 0x8e, 0xbe, 0x4f, 0x7c, 0xa6, 0x79, + 0x71, 0x13, 0xdd, 0x87, 0xd6, 0x71, 0x39, 0xdc, 0x59, 0xd0, 0xf9, 0x86, 0xc9, 0x06, 0x81, 0x4c, + 0x56, 0xfc, 0x27, 0xc7, 0xd0, 0x38, 0x5d, 0x3a, 0xc6, 0x4f, 0xfe, 0xe7, 0xb4, 0x65, 0xec, 0x32, + 0x70, 0x61, 0xed, 0xb2, 0xf2, 0xa1, 0x5a, 0x66, 0x94, 0x51, 0xad, 0x85, 0xa8, 0x4f, 0x61, 0x87, + 0xf2, 0x69, 0xa0, 0x34, 0x97, 0xdc, 0x1f, 0x8e, 0x0e, 0x7d, 0x5f, 0x72, 0xa5, 0x78, 0xd6, 0x91, + 0x16, 0xbd, 0x1e, 0x74, 0xff, 0xb4, 0x56, 0xaf, 0xc5, 0x79, 0xfd, 0xf9, 0xb5, 0xf8, 0x1d, 0x6c, + 0x8e, 0xcc, 0x6b, 0xa3, 0xb4, 0x31, 0x2d, 0xee, 0xe1, 0x5b, 0xd6, 0xb4, 0xe4, 0x82, 0x3c, 0x83, + 0xe6, 0x37, 0x2c, 0x08, 0x53, 0xc9, 0x0b, 0xc1, 0xde, 0x2f, 0x06, 0x38, 0xcb, 0x2c, 0xb3, 0xca, + 0x39, 0xb4, 0x24, 0x5f, 0xff, 0x9a, 0x3c, 0xfe, 0xd5, 0x02, 0xf2, 0xdf, 0x8b, 0x8b, 0x34, 0xa0, + 0x7a, 0x72, 0x38, 0xb6, 0xef, 0x90, 0x6d, 0x68, 0x8f, 0x25, 0x8b, 0x55, 0xc2, 0x24, 0x8f, 0xb5, + 0x6d, 0x91, 0x4d, 0x68, 0x7e, 0x3b, 0x38, 0x92, 0x81, 0x3f, 0xe5, 0x76, 0x25, 0x5b, 0x8d, 0xd3, + 0x38, 0xe6, 0xa1, 0x5d, 0x35, 0x56, 0xc3, 0x2f, 0x4f, 0xed, 0x1a, 0x69, 0x43, 0x63, 0x24, 0x83, + 0x19, 0xd3, 0xdc, 0xde, 0x30, 0x8b, 0x97, 0x33, 0x2e, 0x43, 0x76, 0x65, 0xd7, 0x8d, 0xc1, 0x30, + 0xd6, 0x5c, 0xc6, 0x2c, 0xb4, 0x1b, 0x66, 0xf5, 0x22, 0x30, 0x79, 0x70, 0xdf, 0x6e, 0x0e, 0xde, + 0x56, 0xe1, 0xee, 0x72, 0x2e, 0x87, 0xa6, 0x3d, 0x24, 0x80, 0xfa, 0x30, 0x9e, 0x89, 0xd7, 0x9c, + 0x3c, 0x59, 0xf3, 0x05, 0xcb, 0xe6, 0xaf, 0xdb, 0x5b, 0x97, 0x9e, 0xc9, 0xe5, 0xde, 0x21, 0x3f, + 0x43, 0xb3, 0x78, 0xdb, 0xc8, 0x27, 0xeb, 0x59, 0xaf, 0x3c, 0xbf, 0xdd, 0x4f, 0x6f, 0x6b, 0x56, + 0x06, 0x7f, 0x6b, 0xc1, 0xdd, 0x62, 0x80, 0xe6, 0x03, 0xa7, 0xd6, 0x4d, 0x64, 0xe5, 0xf4, 0xad, + 0x9b, 0xc8, 0xea, 0xd0, 0xba, 0x77, 0x8e, 0x3e, 0xfa, 0xa1, 0x3f, 0x0d, 0xf4, 0x45, 0x7a, 0xde, + 0xf3, 0x44, 0xd4, 0x8f, 0x02, 0x4f, 0x0a, 0x25, 0x26, 0xba, 0x1f, 0x09, 0xaf, 0x2f, 0x13, 0xaf, + 0x3f, 0xf7, 0xd9, 0xcf, 0x7d, 0x9e, 0xd7, 0xf1, 0xa1, 0xff, 0xf8, 0xdf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x5a, 0xa7, 0xe6, 0x51, 0xb8, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -644,6 +821,12 @@ type VirtualNetworkAgentClient interface { Invoke(ctx context.Context, in *VirtualNetworkRequest, opts ...grpc.CallOption) (*VirtualNetworkResponse, error) // Prechecks whether the system is able to create specified virtual networks (but does not actually create them). Precheck(ctx context.Context, in *VirtualNetworkPrecheckRequest, opts ...grpc.CallOption) (*VirtualNetworkPrecheckResponse, error) + // Replaces the registeredIPAddresses list on each referenced subnet with + // the supplied list (subnet-scoped full-replace) and applies the + // corresponding add/remove delta to the IPAM bitmap. Independent from + // spec Update(): does not run Validate/validateUpdate, does not touch + // ProvisionState, and does not fan out to nodeagents. + UpdateRegisteredIPs(ctx context.Context, in *VirtualNetworkIPUpdateRequest, opts ...grpc.CallOption) (*VirtualNetworkIPUpdateResponse, error) } type virtualNetworkAgentClient struct { @@ -672,11 +855,26 @@ func (c *virtualNetworkAgentClient) Precheck(ctx context.Context, in *VirtualNet return out, nil } +func (c *virtualNetworkAgentClient) UpdateRegisteredIPs(ctx context.Context, in *VirtualNetworkIPUpdateRequest, opts ...grpc.CallOption) (*VirtualNetworkIPUpdateResponse, error) { + out := new(VirtualNetworkIPUpdateResponse) + err := c.cc.Invoke(ctx, "/moc.cloudagent.network.VirtualNetworkAgent/UpdateRegisteredIPs", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // VirtualNetworkAgentServer is the server API for VirtualNetworkAgent service. type VirtualNetworkAgentServer interface { Invoke(context.Context, *VirtualNetworkRequest) (*VirtualNetworkResponse, error) // Prechecks whether the system is able to create specified virtual networks (but does not actually create them). Precheck(context.Context, *VirtualNetworkPrecheckRequest) (*VirtualNetworkPrecheckResponse, error) + // Replaces the registeredIPAddresses list on each referenced subnet with + // the supplied list (subnet-scoped full-replace) and applies the + // corresponding add/remove delta to the IPAM bitmap. Independent from + // spec Update(): does not run Validate/validateUpdate, does not touch + // ProvisionState, and does not fan out to nodeagents. + UpdateRegisteredIPs(context.Context, *VirtualNetworkIPUpdateRequest) (*VirtualNetworkIPUpdateResponse, error) } // UnimplementedVirtualNetworkAgentServer can be embedded to have forward compatible implementations. @@ -689,6 +887,9 @@ func (*UnimplementedVirtualNetworkAgentServer) Invoke(ctx context.Context, req * func (*UnimplementedVirtualNetworkAgentServer) Precheck(ctx context.Context, req *VirtualNetworkPrecheckRequest) (*VirtualNetworkPrecheckResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Precheck not implemented") } +func (*UnimplementedVirtualNetworkAgentServer) UpdateRegisteredIPs(ctx context.Context, req *VirtualNetworkIPUpdateRequest) (*VirtualNetworkIPUpdateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateRegisteredIPs not implemented") +} func RegisterVirtualNetworkAgentServer(s *grpc.Server, srv VirtualNetworkAgentServer) { s.RegisterService(&_VirtualNetworkAgent_serviceDesc, srv) @@ -730,6 +931,24 @@ func _VirtualNetworkAgent_Precheck_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _VirtualNetworkAgent_UpdateRegisteredIPs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VirtualNetworkIPUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VirtualNetworkAgentServer).UpdateRegisteredIPs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/moc.cloudagent.network.VirtualNetworkAgent/UpdateRegisteredIPs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VirtualNetworkAgentServer).UpdateRegisteredIPs(ctx, req.(*VirtualNetworkIPUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _VirtualNetworkAgent_serviceDesc = grpc.ServiceDesc{ ServiceName: "moc.cloudagent.network.VirtualNetworkAgent", HandlerType: (*VirtualNetworkAgentServer)(nil), @@ -742,6 +961,10 @@ var _VirtualNetworkAgent_serviceDesc = grpc.ServiceDesc{ MethodName: "Precheck", Handler: _VirtualNetworkAgent_Precheck_Handler, }, + { + MethodName: "UpdateRegisteredIPs", + Handler: _VirtualNetworkAgent_UpdateRegisteredIPs_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "moc_cloudagent_virtualnetwork.proto", diff --git a/rpc/cloudagent/network/virtualnetwork/moc_cloudagent_virtualnetwork.proto b/rpc/cloudagent/network/virtualnetwork/moc_cloudagent_virtualnetwork.proto index 019f9afc..caf8b764 100644 --- a/rpc/cloudagent/network/virtualnetwork/moc_cloudagent_virtualnetwork.proto +++ b/rpc/cloudagent/network/virtualnetwork/moc_cloudagent_virtualnetwork.proto @@ -85,5 +85,43 @@ service VirtualNetworkAgent { // Prechecks whether the system is able to create specified virtual networks (but does not actually create them). rpc Precheck(VirtualNetworkPrecheckRequest) returns (VirtualNetworkPrecheckResponse) {} + + // Replaces the registeredIPAddresses list on each referenced subnet + // (subnet-scoped full-replace) and applies the resulting add / remove + // delta to the IPAM bitmap. + // + // This RPC is independent of spec Update: it does not run Validate or + // validateUpdate, does not touch ProvisionState, and does not fan out + // to nodeagents. + rpc UpdateRegisteredIPs(VirtualNetworkIPUpdateRequest) returns (VirtualNetworkIPUpdateResponse) {} +} + +message VirtualNetworkIPUpdateRequest { + // Identifies the target VNET. + string GroupName = 1; + string Name = 2; + + // Desired registered-IP list for each subnet. Each list replaces + // the stored list across every pool in that subnet. MOC routes each + // IP to the correct pool by range internally. + repeated VirtualSubnetIPUpdate IPUpdates = 3; +} + +message VirtualSubnetIPUpdate { + string SubnetName = 1; + repeated string RegisteredIPAddresses = 2; +} + +message VirtualNetworkIPUpdateResponse { + // One list of persisted IPs for each subnet (full-replace semantics). + // Only trustworthy when the gRPC status is OK. + repeated VirtualSubnetIPUpdate PersistedIPs = 1; + + // IP-level failures. May be non-empty even when the gRPC status is OK + // (partial success). + repeated IPAddressUpdateFailure Failures = 2; + + // Overall error summary. Empty when the gRPC status is OK. + string Error = 3; } diff --git a/rpc/common/moc_common_networkcommon.pb.go b/rpc/common/moc_common_networkcommon.pb.go index 04a4dd06..aebd75b4 100644 --- a/rpc/common/moc_common_networkcommon.pb.go +++ b/rpc/common/moc_common_networkcommon.pb.go @@ -5,8 +5,9 @@ package common import ( fmt "fmt" - proto "github.com/golang/protobuf/proto" math "math" + + proto "github.com/golang/protobuf/proto" ) // Reference imports to suppress errors if they are not otherwise used. @@ -160,6 +161,47 @@ func (IPVersion) EnumDescriptor() ([]byte, []int) { return fileDescriptor_ba09ae1dfdbe03d2, []int{4} } +type IPUpdateErrorCode int32 + +const ( + IPUpdateErrorCode_IP_UPDATE_UNKNOWN IPUpdateErrorCode = 0 + IPUpdateErrorCode_IP_UPDATE_INVALID_FORMAT IPUpdateErrorCode = 1 + IPUpdateErrorCode_IP_UPDATE_OUT_OF_RANGE IPUpdateErrorCode = 2 + IPUpdateErrorCode_IP_UPDATE_SUBNET_NOT_FOUND IPUpdateErrorCode = 3 + IPUpdateErrorCode_IP_UPDATE_ALREADY_ALLOCATED IPUpdateErrorCode = 4 + // LoadBalancer, or system reservation (gateway / network / + // broadcast / DNS) and is not currently in the registered + // list - registering it would create a single-bit bitmap + // co-occupancy that breaks refcount on later release. + IPUpdateErrorCode_IP_UPDATE_NO_POOLS_IN_SUBNET IPUpdateErrorCode = 5 +) + +var IPUpdateErrorCode_name = map[int32]string{ + 0: "IP_UPDATE_UNKNOWN", + 1: "IP_UPDATE_INVALID_FORMAT", + 2: "IP_UPDATE_OUT_OF_RANGE", + 3: "IP_UPDATE_SUBNET_NOT_FOUND", + 4: "IP_UPDATE_ALREADY_ALLOCATED", + 5: "IP_UPDATE_NO_POOLS_IN_SUBNET", +} + +var IPUpdateErrorCode_value = map[string]int32{ + "IP_UPDATE_UNKNOWN": 0, + "IP_UPDATE_INVALID_FORMAT": 1, + "IP_UPDATE_OUT_OF_RANGE": 2, + "IP_UPDATE_SUBNET_NOT_FOUND": 3, + "IP_UPDATE_ALREADY_ALLOCATED": 4, + "IP_UPDATE_NO_POOLS_IN_SUBNET": 5, +} + +func (x IPUpdateErrorCode) String() string { + return proto.EnumName(IPUpdateErrorCode_name, int32(x)) +} + +func (IPUpdateErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_ba09ae1dfdbe03d2, []int{5} +} + type NetworkPolicyType int32 const ( @@ -183,7 +225,7 @@ func (x NetworkPolicyType) String() string { } func (NetworkPolicyType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{5} + return fileDescriptor_ba09ae1dfdbe03d2, []int{6} } type Dns struct { @@ -297,15 +339,24 @@ func (m *IPPoolInfo) GetAvailable() string { } type IPPool struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Type IPPoolType `protobuf:"varint,2,opt,name=type,proto3,enum=moc.IPPoolType" json:"type,omitempty"` - Start string `protobuf:"bytes,3,opt,name=start,proto3" json:"start,omitempty"` - End string `protobuf:"bytes,4,opt,name=end,proto3" json:"end,omitempty"` - Info *IPPoolInfo `protobuf:"bytes,5,opt,name=info,proto3" json:"info,omitempty"` - Tags *Tags `protobuf:"bytes,6,opt,name=tags,proto3" json:"tags,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Type IPPoolType `protobuf:"varint,2,opt,name=type,proto3,enum=moc.IPPoolType" json:"type,omitempty"` + Start string `protobuf:"bytes,3,opt,name=start,proto3" json:"start,omitempty"` + End string `protobuf:"bytes,4,opt,name=end,proto3" json:"end,omitempty"` + Info *IPPoolInfo `protobuf:"bytes,5,opt,name=info,proto3" json:"info,omitempty"` + Tags *Tags `protobuf:"bytes,6,opt,name=tags,proto3" json:"tags,omitempty"` + // IPs explicitly registered as allocated outside of MOC (e.g., by the + // IPAM operator). Reserved in the IPAM bitmap during + // InitSubnet and on UpdateRegisteredIPs runtime updates so MOC will not + // hand them out to AKS workloads. Field is IPAM-layer only and never + // fanned out to nodeagents. + // Stored on each pool internally but exposed at the subnet level in the + // UpdateRegisteredIPs API - MOC routes each IP to the correct pool + // by range. + RegisteredIPAddresses []string `protobuf:"bytes,7,rep,name=registeredIPAddresses,proto3" json:"registeredIPAddresses,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *IPPool) Reset() { *m = IPPool{} } @@ -375,6 +426,78 @@ func (m *IPPool) GetTags() *Tags { return nil } +func (m *IPPool) GetRegisteredIPAddresses() []string { + if m != nil { + return m.RegisteredIPAddresses + } + return nil +} + +// IPAddressUpdateFailure is the single-IP failure record returned by +// UpdateRegisteredIPs RPCs. Shared between Logical and Virtual Network flows. +type IPAddressUpdateFailure struct { + SubnetName string `protobuf:"bytes,1,opt,name=SubnetName,proto3" json:"SubnetName,omitempty"` + IPAddress string `protobuf:"bytes,2,opt,name=IPAddress,proto3" json:"IPAddress,omitempty"` + Code IPUpdateErrorCode `protobuf:"varint,3,opt,name=Code,proto3,enum=moc.IPUpdateErrorCode" json:"Code,omitempty"` + Error string `protobuf:"bytes,4,opt,name=Error,proto3" json:"Error,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *IPAddressUpdateFailure) Reset() { *m = IPAddressUpdateFailure{} } +func (m *IPAddressUpdateFailure) String() string { return proto.CompactTextString(m) } +func (*IPAddressUpdateFailure) ProtoMessage() {} +func (*IPAddressUpdateFailure) Descriptor() ([]byte, []int) { + return fileDescriptor_ba09ae1dfdbe03d2, []int{3} +} + +func (m *IPAddressUpdateFailure) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_IPAddressUpdateFailure.Unmarshal(m, b) +} +func (m *IPAddressUpdateFailure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_IPAddressUpdateFailure.Marshal(b, m, deterministic) +} +func (m *IPAddressUpdateFailure) XXX_Merge(src proto.Message) { + xxx_messageInfo_IPAddressUpdateFailure.Merge(m, src) +} +func (m *IPAddressUpdateFailure) XXX_Size() int { + return xxx_messageInfo_IPAddressUpdateFailure.Size(m) +} +func (m *IPAddressUpdateFailure) XXX_DiscardUnknown() { + xxx_messageInfo_IPAddressUpdateFailure.DiscardUnknown(m) +} + +var xxx_messageInfo_IPAddressUpdateFailure proto.InternalMessageInfo + +func (m *IPAddressUpdateFailure) GetSubnetName() string { + if m != nil { + return m.SubnetName + } + return "" +} + +func (m *IPAddressUpdateFailure) GetIPAddress() string { + if m != nil { + return m.IPAddress + } + return "" +} + +func (m *IPAddressUpdateFailure) GetCode() IPUpdateErrorCode { + if m != nil { + return m.Code + } + return IPUpdateErrorCode_IP_UPDATE_UNKNOWN +} + +func (m *IPAddressUpdateFailure) GetError() string { + if m != nil { + return m.Error + } + return "" +} + type Route struct { NextHop string `protobuf:"bytes,1,opt,name=nextHop,proto3" json:"nextHop,omitempty"` DestinationPrefix string `protobuf:"bytes,2,opt,name=destinationPrefix,proto3" json:"destinationPrefix,omitempty"` @@ -388,7 +511,7 @@ func (m *Route) Reset() { *m = Route{} } func (m *Route) String() string { return proto.CompactTextString(m) } func (*Route) ProtoMessage() {} func (*Route) Descriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{3} + return fileDescriptor_ba09ae1dfdbe03d2, []int{4} } func (m *Route) XXX_Unmarshal(b []byte) error { @@ -442,7 +565,7 @@ func (m *ResourceReference) Reset() { *m = ResourceReference{} } func (m *ResourceReference) String() string { return proto.CompactTextString(m) } func (*ResourceReference) ProtoMessage() {} func (*ResourceReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{4} + return fileDescriptor_ba09ae1dfdbe03d2, []int{5} } func (m *ResourceReference) XXX_Unmarshal(b []byte) error { @@ -481,7 +604,7 @@ func (m *NetworkSecurityGroupReference) Reset() { *m = NetworkSecurityGr func (m *NetworkSecurityGroupReference) String() string { return proto.CompactTextString(m) } func (*NetworkSecurityGroupReference) ProtoMessage() {} func (*NetworkSecurityGroupReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{5} + return fileDescriptor_ba09ae1dfdbe03d2, []int{6} } func (m *NetworkSecurityGroupReference) XXX_Unmarshal(b []byte) error { @@ -521,7 +644,7 @@ func (m *NetworkReference) Reset() { *m = NetworkReference{} } func (m *NetworkReference) String() string { return proto.CompactTextString(m) } func (*NetworkReference) ProtoMessage() {} func (*NetworkReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{6} + return fileDescriptor_ba09ae1dfdbe03d2, []int{7} } func (m *NetworkReference) XXX_Unmarshal(b []byte) error { @@ -568,7 +691,7 @@ func (m *SubnetReference) Reset() { *m = SubnetReference{} } func (m *SubnetReference) String() string { return proto.CompactTextString(m) } func (*SubnetReference) ProtoMessage() {} func (*SubnetReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{7} + return fileDescriptor_ba09ae1dfdbe03d2, []int{8} } func (m *SubnetReference) XXX_Unmarshal(b []byte) error { @@ -614,7 +737,7 @@ func (m *PublicIPAddressReference) Reset() { *m = PublicIPAddressReferen func (m *PublicIPAddressReference) String() string { return proto.CompactTextString(m) } func (*PublicIPAddressReference) ProtoMessage() {} func (*PublicIPAddressReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{8} + return fileDescriptor_ba09ae1dfdbe03d2, []int{9} } func (m *PublicIPAddressReference) XXX_Unmarshal(b []byte) error { @@ -654,7 +777,7 @@ func (m *AdvancedNetworkPolicy) Reset() { *m = AdvancedNetworkPolicy{} } func (m *AdvancedNetworkPolicy) String() string { return proto.CompactTextString(m) } func (*AdvancedNetworkPolicy) ProtoMessage() {} func (*AdvancedNetworkPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{9} + return fileDescriptor_ba09ae1dfdbe03d2, []int{10} } func (m *AdvancedNetworkPolicy) XXX_Unmarshal(b []byte) error { @@ -700,7 +823,7 @@ func (m *ProbeReference) Reset() { *m = ProbeReference{} } func (m *ProbeReference) String() string { return proto.CompactTextString(m) } func (*ProbeReference) ProtoMessage() {} func (*ProbeReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{10} + return fileDescriptor_ba09ae1dfdbe03d2, []int{11} } func (m *ProbeReference) XXX_Unmarshal(b []byte) error { @@ -739,7 +862,7 @@ func (m *FrontendIPConfigurationReference) Reset() { *m = FrontendIPConf func (m *FrontendIPConfigurationReference) String() string { return proto.CompactTextString(m) } func (*FrontendIPConfigurationReference) ProtoMessage() {} func (*FrontendIPConfigurationReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{11} + return fileDescriptor_ba09ae1dfdbe03d2, []int{12} } func (m *FrontendIPConfigurationReference) XXX_Unmarshal(b []byte) error { @@ -778,7 +901,7 @@ func (m *LoadBalancerReference) Reset() { *m = LoadBalancerReference{} } func (m *LoadBalancerReference) String() string { return proto.CompactTextString(m) } func (*LoadBalancerReference) ProtoMessage() {} func (*LoadBalancerReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{12} + return fileDescriptor_ba09ae1dfdbe03d2, []int{13} } func (m *LoadBalancerReference) XXX_Unmarshal(b []byte) error { @@ -818,7 +941,7 @@ func (m *BackendAddressPoolReference) Reset() { *m = BackendAddressPoolR func (m *BackendAddressPoolReference) String() string { return proto.CompactTextString(m) } func (*BackendAddressPoolReference) ProtoMessage() {} func (*BackendAddressPoolReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ba09ae1dfdbe03d2, []int{13} + return fileDescriptor_ba09ae1dfdbe03d2, []int{14} } func (m *BackendAddressPoolReference) XXX_Unmarshal(b []byte) error { @@ -859,10 +982,12 @@ func init() { proto.RegisterEnum("moc.IPPoolType", IPPoolType_name, IPPoolType_value) proto.RegisterEnum("moc.NetworkType", NetworkType_name, NetworkType_value) proto.RegisterEnum("moc.IPVersion", IPVersion_name, IPVersion_value) + proto.RegisterEnum("moc.IPUpdateErrorCode", IPUpdateErrorCode_name, IPUpdateErrorCode_value) proto.RegisterEnum("moc.NetworkPolicyType", NetworkPolicyType_name, NetworkPolicyType_value) proto.RegisterType((*Dns)(nil), "moc.Dns") proto.RegisterType((*IPPoolInfo)(nil), "moc.IPPoolInfo") proto.RegisterType((*IPPool)(nil), "moc.IPPool") + proto.RegisterType((*IPAddressUpdateFailure)(nil), "moc.IPAddressUpdateFailure") proto.RegisterType((*Route)(nil), "moc.Route") proto.RegisterType((*ResourceReference)(nil), "moc.ResourceReference") proto.RegisterType((*NetworkSecurityGroupReference)(nil), "moc.NetworkSecurityGroupReference") @@ -879,56 +1004,69 @@ func init() { func init() { proto.RegisterFile("moc_common_networkcommon.proto", fileDescriptor_ba09ae1dfdbe03d2) } var fileDescriptor_ba09ae1dfdbe03d2 = []byte{ - // 812 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x51, 0x6f, 0xe3, 0x44, - 0x10, 0xae, 0xe3, 0x34, 0x6d, 0x26, 0xba, 0xeb, 0x76, 0xa1, 0xc5, 0x3a, 0x38, 0x28, 0x3e, 0x21, - 0x4a, 0x84, 0x1a, 0xa9, 0x9c, 0x4e, 0x08, 0x09, 0xa4, 0xf4, 0xd2, 0x1e, 0x86, 0x5c, 0xce, 0x38, - 0x69, 0x10, 0x08, 0x54, 0x6d, 0xd6, 0x9b, 0x74, 0x75, 0xf6, 0xae, 0xb5, 0x5e, 0x87, 0x8b, 0xc4, - 0x03, 0x7f, 0x84, 0x9f, 0xc0, 0x7f, 0x44, 0xbb, 0x76, 0x88, 0xef, 0xda, 0x07, 0x1e, 0xf2, 0x36, - 0x33, 0xfb, 0x7d, 0xdf, 0xce, 0x7c, 0x1e, 0xdb, 0xf0, 0x71, 0x2a, 0xe9, 0x0d, 0x95, 0x69, 0x2a, - 0xc5, 0x8d, 0x60, 0xfa, 0x0f, 0xa9, 0x5e, 0x97, 0xd9, 0x59, 0xa6, 0xa4, 0x96, 0xd8, 0x4d, 0x25, - 0x7d, 0xf4, 0x41, 0x0d, 0x54, 0x3f, 0xf5, 0x39, 0xb8, 0x03, 0x91, 0x63, 0x0f, 0xf6, 0x72, 0xa6, - 0x96, 0x4c, 0xe5, 0x9e, 0x73, 0xe2, 0x9e, 0xb6, 0xa3, 0x75, 0x8a, 0x8f, 0xa1, 0x15, 0xcb, 0x94, - 0x70, 0xe1, 0x35, 0x4e, 0x9c, 0xd3, 0x76, 0x54, 0x65, 0xa6, 0x9e, 0x33, 0xa2, 0xe8, 0xad, 0xe7, - 0x5a, 0x42, 0x95, 0x19, 0x25, 0x99, 0x69, 0x2e, 0x45, 0xee, 0x35, 0x4b, 0xa5, 0x2a, 0xf5, 0xbf, - 0x03, 0x08, 0xc2, 0x50, 0xca, 0x24, 0x10, 0x73, 0x89, 0x31, 0x34, 0x8b, 0x9c, 0xc5, 0x9e, 0x63, - 0x55, 0x6d, 0x8c, 0x3f, 0x82, 0x36, 0x59, 0x12, 0x9e, 0x90, 0x59, 0xc2, 0xaa, 0xeb, 0x36, 0x05, - 0xff, 0x1f, 0x07, 0x5a, 0xa5, 0x80, 0x21, 0x0b, 0x92, 0xb2, 0x35, 0xd9, 0xc4, 0xf8, 0x09, 0x34, - 0xf5, 0x2a, 0x2b, 0x79, 0x0f, 0xcf, 0x0f, 0xce, 0x52, 0x49, 0xcf, 0x4a, 0xf8, 0x64, 0x95, 0xb1, - 0xc8, 0x1e, 0xe2, 0xf7, 0x61, 0x37, 0xd7, 0x44, 0x69, 0xcf, 0xb5, 0xcc, 0x32, 0xc1, 0x08, 0x5c, - 0x26, 0x62, 0xaf, 0x69, 0x6b, 0x26, 0x34, 0x62, 0x5c, 0xcc, 0xa5, 0xb7, 0x7b, 0xe2, 0x9c, 0x76, - 0xde, 0x12, 0x33, 0xcd, 0x47, 0xf6, 0x10, 0x3f, 0x86, 0xa6, 0x26, 0x8b, 0xdc, 0x6b, 0x59, 0x50, - 0xdb, 0x82, 0x26, 0x64, 0x91, 0x47, 0xb6, 0xec, 0x2f, 0x60, 0x37, 0x92, 0x85, 0x66, 0xc6, 0x12, - 0xc1, 0xde, 0xe8, 0xef, 0x65, 0x56, 0x35, 0xbc, 0x4e, 0xf1, 0x97, 0x70, 0x18, 0xb3, 0x5c, 0x73, - 0x41, 0x8c, 0x45, 0xa1, 0x62, 0x73, 0xfe, 0xa6, 0x1a, 0xfc, 0xee, 0x81, 0xb1, 0x3c, 0x65, 0x5a, - 0x71, 0x6a, 0xbb, 0x7f, 0x10, 0x55, 0x99, 0xff, 0x39, 0x1c, 0x46, 0x2c, 0x97, 0x85, 0xa2, 0x2c, - 0x62, 0x73, 0xa6, 0x98, 0xa0, 0xec, 0x3e, 0x8b, 0xfc, 0x5f, 0xe0, 0xf1, 0xa8, 0xdc, 0x90, 0x31, - 0xa3, 0x85, 0xe2, 0x7a, 0xf5, 0x42, 0xc9, 0x22, 0xdb, 0x90, 0xbe, 0x86, 0x8e, 0xda, 0x28, 0x59, - 0x6e, 0xe7, 0xfc, 0xd8, 0x0e, 0x76, 0xe7, 0x86, 0xa8, 0x0e, 0xf5, 0xff, 0x72, 0x00, 0x55, 0xda, - 0x5b, 0x90, 0xc3, 0xe7, 0xd0, 0xa9, 0x76, 0x79, 0xb2, 0x79, 0xa6, 0xc8, 0x32, 0x47, 0x9b, 0x7a, - 0x54, 0x07, 0xf9, 0x7f, 0xc2, 0xc1, 0xb8, 0x98, 0x09, 0xa6, 0x37, 0x0d, 0xf4, 0x8c, 0xf3, 0x16, - 0x51, 0x5d, 0x7e, 0x54, 0x97, 0xd8, 0xdc, 0xbd, 0x46, 0xbd, 0xdb, 0x71, 0xe3, 0xff, 0x1b, 0x30, - 0x01, 0x2f, 0x2c, 0x66, 0x09, 0xa7, 0x41, 0xd8, 0x8f, 0x63, 0xc5, 0xf2, 0x7c, 0x1b, 0xb6, 0xfe, - 0x0e, 0x47, 0xfd, 0x78, 0x49, 0x04, 0x65, 0x71, 0xd5, 0x74, 0x28, 0x13, 0x4e, 0x57, 0xb8, 0x5b, - 0x6d, 0xbb, 0x63, 0x9d, 0x39, 0xae, 0x8f, 0x55, 0x22, 0x6a, 0x4b, 0xef, 0xc1, 0x1e, 0x13, 0xe6, - 0x15, 0x8a, 0xed, 0x40, 0xfb, 0xd1, 0x3a, 0xf5, 0x7f, 0x80, 0x87, 0xa1, 0x92, 0x33, 0xb6, 0x8d, - 0x56, 0x7f, 0x83, 0x93, 0x2b, 0x25, 0x85, 0x66, 0x22, 0x0e, 0xc2, 0xe7, 0x52, 0xcc, 0xf9, 0xa2, - 0x50, 0x76, 0x7d, 0xb7, 0xa1, 0xfe, 0x13, 0x1c, 0x0d, 0x25, 0x89, 0x2f, 0x48, 0x62, 0xcc, 0x50, - 0xdb, 0x90, 0xfc, 0xdb, 0x81, 0x0f, 0x2f, 0x08, 0x7d, 0xcd, 0x44, 0x5c, 0x3d, 0x31, 0xf3, 0x7e, - 0x6f, 0x63, 0x7b, 0x07, 0x70, 0x90, 0xbc, 0xdd, 0x6c, 0xb5, 0x49, 0x8f, 0x2c, 0xfb, 0xde, 0x41, - 0xa2, 0x77, 0x29, 0xdd, 0x6f, 0x61, 0x3f, 0x34, 0xdf, 0x68, 0x2a, 0x13, 0xbc, 0x07, 0x6e, 0x3f, - 0x49, 0xd0, 0x8e, 0x09, 0x26, 0x34, 0x43, 0x8e, 0x09, 0xae, 0xe3, 0x0c, 0x35, 0x30, 0x40, 0x2b, - 0xa0, 0x69, 0xb6, 0x7c, 0x8a, 0xdc, 0xff, 0xe2, 0x67, 0xa8, 0xd9, 0xfd, 0x06, 0x70, 0x10, 0xf6, - 0x93, 0x44, 0x52, 0xfb, 0x10, 0x5e, 0x32, 0x7d, 0x2b, 0x63, 0xdc, 0x81, 0xbd, 0x40, 0x2c, 0x49, - 0xc2, 0x63, 0xb4, 0x63, 0x92, 0xc1, 0x4a, 0x90, 0x94, 0x53, 0xe4, 0x18, 0xee, 0x58, 0x13, 0xcd, - 0x29, 0x6a, 0x74, 0x3f, 0x5d, 0x7f, 0xaa, 0xcd, 0x16, 0xe1, 0x16, 0x34, 0xa6, 0x2f, 0x4b, 0xf8, - 0xb4, 0x2c, 0x23, 0xa7, 0x7b, 0x05, 0x9d, 0xda, 0x9b, 0x88, 0xdf, 0x83, 0x83, 0x69, 0x10, 0x4d, - 0xae, 0xfb, 0xc3, 0x9b, 0xd1, 0xe5, 0xe4, 0xe7, 0x57, 0xd1, 0x8f, 0x68, 0xc7, 0x14, 0x87, 0xaf, - 0x5e, 0x04, 0xcf, 0x6b, 0x45, 0x07, 0x3f, 0x80, 0xf6, 0xf5, 0x68, 0x70, 0x79, 0x15, 0x8c, 0x2e, - 0x07, 0xa8, 0xd1, 0xfd, 0x04, 0xda, 0x41, 0x38, 0x65, 0x2a, 0xe7, 0x52, 0xe0, 0x7d, 0x68, 0x06, - 0xe1, 0xf2, 0x29, 0xda, 0xa9, 0xa2, 0x67, 0xc8, 0xe9, 0x7e, 0x01, 0x87, 0x77, 0x16, 0xdb, 0x8e, - 0x31, 0x9a, 0xf6, 0x87, 0xc1, 0xa0, 0xf4, 0x64, 0x3c, 0x18, 0x21, 0xe7, 0xe2, 0xb3, 0x5f, 0x9f, - 0x2c, 0xb8, 0xbe, 0x2d, 0x66, 0x67, 0x54, 0xa6, 0xbd, 0x94, 0x53, 0x25, 0x73, 0x39, 0xd7, 0xbd, - 0x54, 0xd2, 0x9e, 0xca, 0x68, 0xaf, 0xfc, 0xf3, 0xcd, 0x5a, 0xf6, 0xd7, 0xf7, 0xd5, 0xbf, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x54, 0x0a, 0xfa, 0xbf, 0x3a, 0x07, 0x00, 0x00, + // 1013 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0x5f, 0x6f, 0xe3, 0x44, + 0x10, 0xaf, 0x93, 0x34, 0xbd, 0x4e, 0x74, 0xd7, 0xed, 0x42, 0x8b, 0xd5, 0xeb, 0xf5, 0x4a, 0x4e, + 0x88, 0x12, 0xa1, 0x56, 0x2a, 0xd5, 0x09, 0x21, 0x81, 0xe4, 0x36, 0x49, 0x31, 0x97, 0xda, 0xc6, + 0x71, 0x7a, 0x3a, 0x04, 0xb2, 0x9c, 0xf5, 0x26, 0xb5, 0xce, 0xde, 0xb5, 0xd6, 0x4e, 0xb8, 0x4a, + 0x3c, 0xf0, 0x31, 0x78, 0xe1, 0xf3, 0xf0, 0x41, 0xf8, 0x22, 0x68, 0xd7, 0x4e, 0x9d, 0x5e, 0xfb, + 0xc0, 0x43, 0xde, 0x66, 0x7e, 0x33, 0xf3, 0xdb, 0xf9, 0xb7, 0x6b, 0xc3, 0x41, 0xc2, 0x89, 0x4f, + 0x78, 0x92, 0x70, 0xe6, 0x33, 0x9a, 0xff, 0xce, 0xc5, 0xfb, 0x42, 0x3b, 0x4e, 0x05, 0xcf, 0x39, + 0xae, 0x27, 0x9c, 0xec, 0x7d, 0xb6, 0xe4, 0xb4, 0x6c, 0x6d, 0x47, 0x50, 0xef, 0xb2, 0x0c, 0xeb, + 0xb0, 0x91, 0x51, 0x31, 0xa7, 0x22, 0xd3, 0xb5, 0xc3, 0xfa, 0xd1, 0xa6, 0xbb, 0x50, 0xf1, 0x2e, + 0x34, 0x43, 0x9e, 0x04, 0x11, 0xd3, 0x6b, 0x87, 0xda, 0xd1, 0xa6, 0x5b, 0x6a, 0x12, 0xcf, 0x68, + 0x20, 0xc8, 0x8d, 0x5e, 0x57, 0x01, 0xa5, 0x26, 0x99, 0x78, 0x9a, 0x47, 0x9c, 0x65, 0x7a, 0xa3, + 0x60, 0x2a, 0xd5, 0xf6, 0x0f, 0x00, 0xa6, 0xe3, 0x70, 0x1e, 0x9b, 0x6c, 0xc2, 0x31, 0x86, 0xc6, + 0x2c, 0xa3, 0xa1, 0xae, 0x29, 0x56, 0x25, 0xe3, 0x7d, 0xd8, 0x0c, 0xe6, 0x41, 0x14, 0x07, 0xe3, + 0x98, 0x96, 0xc7, 0x55, 0x40, 0xfb, 0x5f, 0x0d, 0x9a, 0x05, 0x81, 0x0c, 0x66, 0x41, 0x42, 0x17, + 0xc1, 0x52, 0xc6, 0xaf, 0xa0, 0x91, 0xdf, 0xa6, 0x45, 0xdc, 0xb3, 0xd3, 0xad, 0xe3, 0x84, 0x93, + 0xe3, 0xc2, 0xdd, 0xbb, 0x4d, 0xa9, 0xab, 0x8c, 0xf8, 0x53, 0x58, 0xcf, 0xf2, 0x40, 0xe4, 0x7a, + 0x5d, 0x45, 0x16, 0x0a, 0x46, 0x50, 0xa7, 0x2c, 0xd4, 0x1b, 0x0a, 0x93, 0xa2, 0x24, 0x8b, 0xd8, + 0x84, 0xeb, 0xeb, 0x87, 0xda, 0x51, 0xeb, 0x1e, 0x99, 0x4c, 0xde, 0x55, 0x46, 0xfc, 0x02, 0x1a, + 0x79, 0x30, 0xcd, 0xf4, 0xa6, 0x72, 0xda, 0x54, 0x4e, 0x5e, 0x30, 0xcd, 0x5c, 0x05, 0xe3, 0x33, + 0xd8, 0x11, 0x74, 0x1a, 0x65, 0x39, 0x15, 0x34, 0x34, 0x1d, 0x23, 0x0c, 0x05, 0xcd, 0x32, 0x9a, + 0xe9, 0x1b, 0xaa, 0x2f, 0x8f, 0x1b, 0xdb, 0x7f, 0x69, 0xb0, 0x7b, 0xa7, 0x8f, 0xd2, 0x30, 0xc8, + 0x69, 0x3f, 0x88, 0xe2, 0x99, 0xa0, 0xf8, 0x00, 0x60, 0x38, 0x1b, 0x33, 0x9a, 0x5b, 0x55, 0xed, + 0x4b, 0x88, 0x6c, 0xdf, 0x5d, 0xe4, 0xa2, 0x7d, 0x77, 0x00, 0xee, 0x40, 0xe3, 0x82, 0x87, 0x54, + 0x55, 0xfe, 0xec, 0x74, 0xb7, 0x2c, 0xa9, 0x38, 0xa1, 0x27, 0x04, 0x17, 0xd2, 0xea, 0x2a, 0x1f, + 0xd9, 0x26, 0x05, 0x95, 0x2d, 0x29, 0x94, 0xf6, 0x14, 0xd6, 0x5d, 0x3e, 0xcb, 0xa9, 0x9c, 0x31, + 0xa3, 0x1f, 0xf2, 0x1f, 0x79, 0x5a, 0x66, 0xb1, 0x50, 0xf1, 0xd7, 0xb0, 0x1d, 0xd2, 0x2c, 0x8f, + 0x58, 0x20, 0x67, 0xee, 0x08, 0x3a, 0x89, 0x3e, 0x94, 0xa9, 0x3c, 0x34, 0xc8, 0x1d, 0x4a, 0x68, + 0x2e, 0x22, 0xa2, 0x92, 0x7a, 0xea, 0x96, 0x5a, 0xfb, 0x4b, 0xd8, 0x76, 0x69, 0xc6, 0x67, 0x82, + 0x50, 0x97, 0x4e, 0xa8, 0xa0, 0x8c, 0xd0, 0xc7, 0x66, 0xde, 0x7e, 0x07, 0x2f, 0xac, 0x62, 0xe5, + 0x87, 0x94, 0xcc, 0x44, 0x94, 0xdf, 0x5e, 0x0a, 0x3e, 0x4b, 0xab, 0xa0, 0x6f, 0xa1, 0x25, 0x2a, + 0x26, 0x15, 0xdb, 0x2a, 0x6b, 0x7f, 0x70, 0x82, 0xbb, 0xec, 0xda, 0xfe, 0x53, 0x03, 0x54, 0x72, + 0xaf, 0x80, 0x0e, 0x9f, 0x42, 0xab, 0xbc, 0x9c, 0x5e, 0xb5, 0xa4, 0x48, 0x45, 0x5a, 0x15, 0xee, + 0x2e, 0x3b, 0xb5, 0xff, 0x80, 0xad, 0x62, 0xba, 0x55, 0x02, 0x27, 0xb2, 0xf3, 0xca, 0xa3, 0x3c, + 0x7c, 0x67, 0x99, 0xa2, 0x3a, 0x7b, 0xe1, 0xf5, 0x71, 0xc6, 0xb5, 0xff, 0xdf, 0x00, 0x0f, 0x74, + 0x67, 0x36, 0x8e, 0x23, 0x72, 0xb7, 0x42, 0xab, 0x68, 0xeb, 0x6f, 0xb0, 0x63, 0x84, 0xf3, 0x80, + 0x11, 0x1a, 0x96, 0x49, 0x3b, 0x3c, 0x8e, 0xc8, 0xad, 0x5c, 0x4f, 0x75, 0x7d, 0xb5, 0xa5, 0xf5, + 0xbc, 0xe7, 0xb1, 0x74, 0x8b, 0x75, 0xd8, 0xa0, 0x4c, 0xbe, 0x09, 0xa1, 0x2a, 0xe8, 0x89, 0xbb, + 0x50, 0xdb, 0x3f, 0xc1, 0x33, 0x47, 0xf0, 0x31, 0x5d, 0x45, 0xaa, 0xbf, 0xc2, 0x61, 0x5f, 0x70, + 0x96, 0x53, 0x16, 0x9a, 0xce, 0x05, 0x67, 0x93, 0x68, 0x3a, 0x13, 0x6a, 0x7d, 0x57, 0xc1, 0xfe, + 0x33, 0xec, 0x0c, 0x78, 0x10, 0x9e, 0x07, 0xb1, 0x6c, 0x86, 0x58, 0x05, 0xe5, 0xdf, 0x1a, 0x3c, + 0x3f, 0x0f, 0xc8, 0x7b, 0xca, 0xc2, 0x72, 0x62, 0xf2, 0xc1, 0x5a, 0xc5, 0xf6, 0x76, 0x61, 0x2b, + 0xbe, 0x9f, 0x6c, 0xb9, 0x49, 0x7b, 0x2a, 0xfa, 0xd1, 0x42, 0xdc, 0x8f, 0x43, 0x3a, 0xdf, 0xc3, + 0x13, 0x47, 0x7e, 0x74, 0x08, 0x8f, 0xf1, 0x06, 0xd4, 0x8d, 0x38, 0x46, 0x6b, 0x52, 0xf0, 0x48, + 0x8a, 0x34, 0x29, 0x8c, 0xc2, 0x14, 0xd5, 0x30, 0x40, 0xd3, 0x24, 0x49, 0x3a, 0x3f, 0x43, 0xf5, + 0x3b, 0xf9, 0x35, 0x6a, 0x74, 0xbe, 0x03, 0x6c, 0x3a, 0x46, 0x1c, 0x73, 0xa2, 0x86, 0x70, 0x45, + 0xf3, 0x1b, 0x1e, 0xe2, 0x16, 0x6c, 0x98, 0x6c, 0x1e, 0xc4, 0x51, 0x88, 0xd6, 0xa4, 0xd2, 0xbd, + 0x65, 0x41, 0x12, 0x11, 0xa4, 0xc9, 0xd8, 0x61, 0x1e, 0xe4, 0x11, 0x41, 0xb5, 0xce, 0xe7, 0x8b, + 0x6f, 0x8f, 0xdc, 0x22, 0xdc, 0x84, 0xda, 0xf5, 0x55, 0xe1, 0x7e, 0x5d, 0xc0, 0x48, 0xeb, 0xf4, + 0xa1, 0xb5, 0x74, 0x13, 0xf1, 0x27, 0xb0, 0x75, 0x6d, 0xba, 0xde, 0xc8, 0x18, 0xf8, 0x56, 0xcf, + 0x7b, 0x6b, 0xbb, 0x6f, 0xd0, 0x9a, 0x04, 0x07, 0xf6, 0xa5, 0x79, 0xb1, 0x04, 0x6a, 0xf8, 0x29, + 0x6c, 0x8e, 0xac, 0x6e, 0xaf, 0x6f, 0x5a, 0xbd, 0x2e, 0xaa, 0x75, 0x5e, 0xca, 0x57, 0xf8, 0x9a, + 0x8a, 0x2c, 0xe2, 0x0c, 0x3f, 0x81, 0x86, 0xe9, 0xcc, 0xcf, 0xd0, 0x5a, 0x29, 0xbd, 0x46, 0x5a, + 0xe7, 0x1f, 0x0d, 0xb6, 0x1f, 0x3c, 0xbc, 0x78, 0x47, 0x82, 0xfe, 0xc8, 0xe9, 0x1a, 0x5e, 0xcf, + 0x1f, 0x59, 0x6f, 0x2c, 0xfb, 0xad, 0x85, 0xd6, 0xf0, 0x3e, 0xe8, 0x15, 0x6c, 0x5a, 0xd7, 0xc6, + 0xc0, 0xec, 0xfa, 0x7d, 0xdb, 0xbd, 0x32, 0x3c, 0xa4, 0xe1, 0x3d, 0xf9, 0xad, 0x58, 0x58, 0xed, + 0x91, 0xe7, 0xdb, 0x7d, 0xdf, 0x35, 0xac, 0xcb, 0x1e, 0xaa, 0xe1, 0x03, 0xd8, 0xab, 0x6c, 0xc3, + 0xd1, 0xb9, 0xd5, 0xf3, 0x7c, 0xcb, 0xf6, 0xfc, 0xbe, 0x3d, 0xb2, 0xba, 0xa8, 0x8e, 0x5f, 0xc2, + 0xf3, 0xca, 0x6e, 0x0c, 0xdc, 0x9e, 0xd1, 0x7d, 0xe7, 0x1b, 0x83, 0x81, 0x7d, 0x61, 0x78, 0xbd, + 0x2e, 0x6a, 0xe0, 0x43, 0xd8, 0xaf, 0x1c, 0x2c, 0xdb, 0x77, 0x6c, 0x7b, 0x30, 0xf4, 0x4d, 0xab, + 0x24, 0x43, 0xeb, 0x9d, 0xaf, 0x60, 0xfb, 0xc1, 0x15, 0x55, 0x03, 0x29, 0xf2, 0x2c, 0xa6, 0x3b, + 0xec, 0x5a, 0x48, 0x3b, 0xff, 0xe2, 0x97, 0x57, 0xd3, 0x28, 0xbf, 0x99, 0x8d, 0x8f, 0x09, 0x4f, + 0x4e, 0x92, 0x88, 0x08, 0x9e, 0xf1, 0x49, 0x7e, 0x92, 0x70, 0x72, 0x22, 0x52, 0x72, 0x52, 0xfc, + 0x94, 0x8c, 0x9b, 0xea, 0xaf, 0xe4, 0x9b, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x07, 0x44, 0xa4, + 0x0e, 0xd5, 0x08, 0x00, 0x00, } diff --git a/rpc/common/moc_common_networkcommon.proto b/rpc/common/moc_common_networkcommon.proto index 593b7c80..bf4db7a3 100644 --- a/rpc/common/moc_common_networkcommon.proto +++ b/rpc/common/moc_common_networkcommon.proto @@ -56,6 +56,43 @@ message IPPool { string end = 4; IPPoolInfo info = 5; Tags tags = 6; + repeated string registeredIPAddresses = 7; +} + +// IPAddressUpdateFailure is the single-IP failure record returned by +// UpdateRegisteredIPs. Shared between the LogicalNetwork and VirtualNetwork +// flows. +message IPAddressUpdateFailure { + string SubnetName = 1; + string IPAddress = 2; + IPUpdateErrorCode Code = 3; + string Error = 4; +} + +enum IPUpdateErrorCode { + IP_UPDATE_UNKNOWN = 0; + + // Malformed IP literal (parse failure). + IP_UPDATE_INVALID_FORMAT = 1; + + // IP does not fall within any pool's [Start, End] range on this subnet. + IP_UPDATE_OUT_OF_RANGE = 2; + + // Subnet name in the request is not present on the stored network spec. + IP_UPDATE_SUBNET_NOT_FOUND = 3; + + // The IPAM bitmap bit is already set by another owner - a NIC, a + // LoadBalancer, or a system reservation (gateway / network / + // broadcast / DNS) - and the IP is not currently in the registered + // list. Registering it would create two owners for one bitmap bit; + // a later release would then clear the bit out from under the real + // owner. + IP_UPDATE_ALREADY_ALLOCATED = 4; + + // Subnet exists in the network spec but declares no IPPools. + // registeredIPAddresses needs at least one pool to route each IP into, + // and without pools there is no IPAM bitmap to reserve against. + IP_UPDATE_NO_POOLS_IN_SUBNET = 5; } message Route {