diff --git a/go.mod b/go.mod index f5a6fa0d..f87baca0 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.8.3 go.uber.org/multierr v1.11.0 - google.golang.org/grpc v1.79.3 + google.golang.org/grpc v1.59.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -21,8 +21,8 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect golang.org/x/net v0.48.0 // indirect golang.org/x/sys v0.39.0 // indirect - golang.org/x/text v0.33.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516 // indirect + golang.org/x/text v0.37.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/go.sum b/go.sum index 8440453b..0ae95281 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,8 @@ -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= @@ -16,8 +12,6 @@ github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= @@ -33,18 +27,6 @@ github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gt github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= -go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= -go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= -go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= -go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= -go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= -go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= -go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= -go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= @@ -87,8 +69,8 @@ golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= -golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= -golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -104,12 +86,10 @@ golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516 h1:sNrWoksmOyF5bvJUcnmbeAmQi8baNhqg5IWaI3llQqU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60 h1:seT2EwLWM78plQ7wcDfuWBc/4FAEAXDDiaSol4ku4qo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= diff --git a/rpc/cloudagent/network/logicalnetwork/moc_cloudagent_logicalnetwork.proto b/rpc/cloudagent/network/logicalnetwork/moc_cloudagent_logicalnetwork.proto index e3e4df20..7bdd7ec1 100644 --- a/rpc/cloudagent/network/logicalnetwork/moc_cloudagent_logicalnetwork.proto +++ b/rpc/cloudagent/network/logicalnetwork/moc_cloudagent_logicalnetwork.proto @@ -63,5 +63,44 @@ 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. Per-IP validation/allocation failures (e.g., IP + // already taken, IP outside CIDR). These are returned alongside + // PersistedIPs as normal "partial success" outcomes; the gRPC status + // is still OK in this case. Whole-batch / infrastructure failures + // (e.g. store persistence) are reported via the gRPC status code + // instead and do not populate this list. + repeated IPAddressUpdateFailure Failures = 2; } diff --git a/rpc/cloudagent/network/moc_cloudagent_logicalnetwork.pb.go b/rpc/cloudagent/network/moc_cloudagent_logicalnetwork.pb.go index 6693d636..a08d58aa 100644 --- a/rpc/cloudagent/network/moc_cloudagent_logicalnetwork.pb.go +++ b/rpc/cloudagent/network/moc_cloudagent_logicalnetwork.pb.go @@ -438,6 +438,167 @@ 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. Each list replaces + // the stored list across every pool in that subnet. 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. Per-IP validation/allocation failures (e.g., IP + // already taken, IP outside CIDR). These are returned alongside + // PersistedIPs as normal "partial success" outcomes; the gRPC status + // is still OK in this case. Whole-batch / infrastructure failures + // (e.g. store persistence) are reported via the gRPC status code + // instead and do not populate this list. + Failures []*common.IPAddressUpdateFailure `protobuf:"bytes,2,rep,name=Failures,proto3" json:"Failures,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 init() { proto.RegisterType((*LogicalNetworkRequest)(nil), "moc.cloudagent.network.LogicalNetworkRequest") proto.RegisterType((*LogicalNetworkResponse)(nil), "moc.cloudagent.network.LogicalNetworkResponse") @@ -445,6 +606,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 +616,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, + // 890 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x41, 0x8f, 0xdb, 0x44, + 0x14, 0xae, 0x93, 0x34, 0x9b, 0xbc, 0xec, 0x06, 0x34, 0xa5, 0x5d, 0x2b, 0xd0, 0x55, 0xe4, 0xd2, + 0x2a, 0x97, 0x3a, 0x22, 0x14, 0x7a, 0x44, 0xbb, 0xa2, 0x45, 0x11, 0x65, 0x31, 0xb3, 0xa5, 0x07, + 0x84, 0x54, 0x4d, 0xec, 0xd9, 0xec, 0x50, 0xdb, 0xe3, 0xce, 0x8c, 0xb7, 0x2c, 0xdc, 0x2b, 0xae, + 0xfc, 0x02, 0x2e, 0x1c, 0x7b, 0x84, 0xff, 0x87, 0xfc, 0x3c, 0x4e, 0x62, 0xb3, 0x85, 0xec, 0xa1, + 0xa7, 0x38, 0xef, 0xfb, 0xde, 0x9b, 0xef, 0x7d, 0xef, 0x79, 0x0c, 0x77, 0x12, 0x19, 0x3e, 0x0f, + 0x63, 0x99, 0x47, 0x6c, 0xc9, 0x53, 0xf3, 0x3c, 0x96, 0x4b, 0x11, 0xb2, 0x38, 0xe5, 0xe6, 0x95, + 0x54, 0x2f, 0xfc, 0x4c, 0x49, 0x23, 0xc9, 0xad, 0x44, 0x86, 0xfe, 0x9a, 0xe4, 0x5b, 0x74, 0x74, + 0xb0, 0x94, 0x72, 0x19, 0xf3, 0x29, 0xb2, 0x16, 0xf9, 0xe9, 0xf4, 0x95, 0x62, 0x59, 0xc6, 0x95, + 0x2e, 0xf3, 0x46, 0xfb, 0x58, 0x5c, 0x26, 0x89, 0x4c, 0xed, 0x8f, 0x05, 0x0e, 0x36, 0x00, 0x5b, + 0x6c, 0x13, 0xf7, 0xfe, 0x70, 0xe0, 0xe6, 0x93, 0x52, 0xc9, 0x71, 0x09, 0x53, 0xfe, 0x32, 0xe7, + 0xda, 0x90, 0x00, 0xde, 0xab, 0x03, 0xda, 0x75, 0xc6, 0xed, 0xc9, 0x60, 0x76, 0xcf, 0xbf, 0x5c, + 0xa4, 0xdf, 0xa8, 0xd3, 0x4c, 0x27, 0x0f, 0x60, 0xef, 0xdb, 0x8c, 0x2b, 0x66, 0x84, 0x4c, 0x9f, + 0x5e, 0x64, 0xdc, 0x6d, 0x8d, 0x9d, 0xc9, 0x70, 0x36, 0xc4, 0x7a, 0x2b, 0x84, 0xd6, 0x49, 0xde, + 0x5f, 0x0e, 0xdc, 0x6a, 0x2a, 0xd4, 0x99, 0x4c, 0x35, 0x7f, 0x07, 0x12, 0x67, 0xd0, 0xa5, 0x5c, + 0xe7, 0xb1, 0x41, 0x6d, 0x83, 0xd9, 0xc8, 0x2f, 0x8d, 0xf7, 0x2b, 0xe3, 0xfd, 0x23, 0x29, 0xe3, + 0x67, 0x2c, 0xce, 0x39, 0xb5, 0x4c, 0xf2, 0x01, 0x5c, 0x7f, 0xa4, 0x94, 0x54, 0x6e, 0x7b, 0xec, + 0x4c, 0xfa, 0xb4, 0xfc, 0xe3, 0xbd, 0x84, 0xdb, 0xf5, 0xe2, 0x81, 0xe2, 0xe1, 0x19, 0x0f, 0xdf, + 0x9d, 0xbf, 0xde, 0x4f, 0x70, 0xf0, 0xb6, 0x23, 0xad, 0x61, 0xeb, 0xf6, 0x9c, 0xab, 0xb7, 0xd7, + 0xda, 0x6c, 0xef, 0xf7, 0x36, 0x0c, 0xeb, 0x87, 0x11, 0x02, 0x9d, 0x94, 0x25, 0x1c, 0x4b, 0xf7, + 0x29, 0x3e, 0x93, 0x21, 0xb4, 0x44, 0x64, 0x33, 0x5b, 0x22, 0x22, 0x5f, 0xc0, 0x8e, 0xce, 0x17, + 0x29, 0x37, 0xda, 0x6d, 0x63, 0xb3, 0x77, 0xff, 0xa7, 0xd9, 0x13, 0x64, 0xd3, 0x2a, 0x8b, 0x1c, + 0xc1, 0x47, 0x96, 0xf1, 0x4c, 0x28, 0x93, 0xb3, 0x58, 0xfc, 0x82, 0xab, 0xf2, 0x28, 0x65, 0x8b, + 0x98, 0x47, 0x6e, 0x67, 0xec, 0x4c, 0x7a, 0xf4, 0x3f, 0x39, 0xe4, 0x0e, 0x74, 0xb5, 0x61, 0x26, + 0xd7, 0xee, 0x75, 0x74, 0x61, 0x80, 0x1a, 0x4e, 0x30, 0x44, 0x2d, 0x44, 0x3c, 0xd8, 0x8d, 0x65, + 0x88, 0x79, 0xc7, 0x45, 0x57, 0x5d, 0xec, 0xa1, 0x16, 0x23, 0xf7, 0x60, 0x90, 0xb0, 0x30, 0x90, + 0x32, 0x46, 0xca, 0x4e, 0x41, 0x39, 0xea, 0xfc, 0xf6, 0xb7, 0xeb, 0xd0, 0x4d, 0x80, 0xdc, 0x86, + 0x8e, 0x61, 0x4b, 0xed, 0xf6, 0xf0, 0xb8, 0x3e, 0x1e, 0xf7, 0x94, 0x2d, 0x35, 0xc5, 0x30, 0x79, + 0x0c, 0xef, 0xb3, 0xe8, 0x9c, 0xa5, 0x21, 0x8f, 0x02, 0x19, 0x8b, 0x50, 0x70, 0xed, 0xf6, 0xd1, + 0x9d, 0x11, 0x52, 0x0f, 0x2d, 0x58, 0x4d, 0xb5, 0xe0, 0x5c, 0xd0, 0x7f, 0xe5, 0x78, 0x6f, 0xda, + 0xb0, 0x57, 0xb3, 0x6d, 0xab, 0x91, 0x7c, 0x0c, 0x7b, 0x2c, 0x8a, 0x14, 0xd7, 0x3a, 0x50, 0xfc, + 0x54, 0xfc, 0x6c, 0xd7, 0xb8, 0x1e, 0x24, 0x1e, 0x74, 0x95, 0xcc, 0x0d, 0xd7, 0x6e, 0x07, 0x95, + 0x01, 0x2a, 0xa3, 0x45, 0x88, 0x5a, 0x84, 0x3c, 0x04, 0x60, 0x71, 0x65, 0x10, 0x7a, 0x3b, 0x9c, + 0xed, 0x23, 0x6f, 0x1e, 0x1c, 0xae, 0x80, 0x6f, 0xb8, 0x39, 0x93, 0x11, 0xdd, 0xa0, 0x16, 0x32, + 0xcf, 0x63, 0x96, 0xa2, 0xc7, 0x7b, 0x14, 0x9f, 0xc9, 0x5d, 0xd8, 0x11, 0x59, 0xe1, 0xa0, 0x76, + 0x77, 0xf0, 0xc4, 0x81, 0xad, 0x54, 0xc4, 0x68, 0x85, 0x91, 0x31, 0xb4, 0xa3, 0xb4, 0x72, 0xb6, + 0x87, 0x94, 0x2f, 0x53, 0x6d, 0x87, 0x50, 0x40, 0x64, 0x04, 0x3d, 0xa1, 0x83, 0x7c, 0x11, 0x8b, + 0xd0, 0xed, 0xe3, 0x76, 0xac, 0xfe, 0xaf, 0x06, 0x03, 0x97, 0x0f, 0xe6, 0x47, 0xd8, 0xb7, 0x8b, + 0x74, 0xc2, 0xc3, 0x5c, 0x09, 0x73, 0xf1, 0x95, 0x92, 0x79, 0x46, 0xf9, 0xa9, 0x3b, 0xc0, 0x0c, + 0x0f, 0x33, 0x8e, 0x2f, 0xe7, 0x70, 0xc5, 0xd3, 0x90, 0xd3, 0xb7, 0x95, 0xf0, 0xfe, 0x74, 0x9a, + 0x57, 0xc4, 0x3c, 0xf8, 0x3e, 0x8b, 0x98, 0xe1, 0xd5, 0x15, 0xe1, 0xc1, 0xee, 0x93, 0xcd, 0x1d, + 0x2c, 0xc7, 0x58, 0x8b, 0x15, 0xde, 0x21, 0x56, 0x0e, 0x14, 0x9f, 0xc9, 0xd7, 0xd0, 0xaf, 0x4a, + 0x55, 0xef, 0xd9, 0xfd, 0xad, 0xde, 0xb3, 0x95, 0x80, 0x75, 0xbe, 0x97, 0xac, 0x3e, 0x10, 0x75, + 0x0e, 0x39, 0x00, 0x28, 0x23, 0x1b, 0xda, 0x36, 0x22, 0xe4, 0x01, 0xdc, 0xa4, 0x7c, 0x29, 0xb4, + 0xe1, 0x8a, 0x47, 0xf3, 0xe0, 0xb0, 0xdc, 0x27, 0xae, 0xdd, 0xd6, 0xb8, 0x3d, 0xe9, 0xd3, 0xcb, + 0x41, 0xef, 0x8d, 0xd3, 0xbc, 0xc5, 0xd6, 0xae, 0xd8, 0x5b, 0xec, 0x3b, 0xd8, 0x0d, 0xb8, 0xd2, + 0x45, 0x72, 0x34, 0x0f, 0xaa, 0x6b, 0xf3, 0x8a, 0x1d, 0xd6, 0x4a, 0x90, 0x87, 0xd0, 0x7b, 0xcc, + 0x44, 0x9c, 0x2b, 0x2b, 0x6f, 0x30, 0xfb, 0xb0, 0x5a, 0xdc, 0x52, 0x59, 0x99, 0x65, 0x39, 0x74, + 0x45, 0x9e, 0xbd, 0x6e, 0xc3, 0x8d, 0xba, 0xdc, 0xc3, 0xe2, 0x70, 0x22, 0xa0, 0x3b, 0x4f, 0xcf, + 0xe5, 0x0b, 0x4e, 0xee, 0x6f, 0x79, 0x9d, 0x97, 0x33, 0x1f, 0xf9, 0xdb, 0xd2, 0x4b, 0x33, 0xbc, + 0x6b, 0xe4, 0x57, 0xe8, 0x55, 0x17, 0x3d, 0xf9, 0x6c, 0xbb, 0xec, 0xc6, 0xb7, 0x68, 0xf4, 0xf9, + 0x55, 0xd3, 0x56, 0x87, 0xbf, 0x76, 0xe0, 0x46, 0x35, 0x9e, 0xf5, 0x38, 0xf5, 0xb6, 0x42, 0x1a, + 0x1b, 0xbf, 0xad, 0x90, 0xe6, 0x4a, 0x78, 0xd7, 0x8e, 0x3e, 0xf9, 0x61, 0xba, 0x14, 0xe6, 0x2c, + 0x5f, 0xf8, 0xa1, 0x4c, 0xa6, 0x89, 0x08, 0x95, 0xd4, 0xf2, 0xd4, 0x4c, 0x13, 0x19, 0x4e, 0x55, + 0x16, 0x4e, 0xd7, 0x35, 0xa7, 0xb6, 0xe6, 0xa2, 0x8b, 0x5f, 0xbd, 0x4f, 0xff, 0x09, 0x00, 0x00, + 0xff, 0xff, 0xef, 0xd9, 0x1c, 0x28, 0x9a, 0x09, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -516,6 +690,14 @@ 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 + // (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. + UpdateRegisteredIPs(ctx context.Context, in *LogicalNetworkIPUpdateRequest, opts ...grpc.CallOption) (*LogicalNetworkIPUpdateResponse, error) } type logicalNetworkAgentClient struct { @@ -544,11 +726,28 @@ 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 + // (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. + UpdateRegisteredIPs(context.Context, *LogicalNetworkIPUpdateRequest) (*LogicalNetworkIPUpdateResponse, error) } // UnimplementedLogicalNetworkAgentServer can be embedded to have forward compatible implementations. @@ -561,6 +760,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 +804,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 +834,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..e6fe6c4f 100644 --- a/rpc/cloudagent/network/moc_cloudagent_virtualnetwork.pb.go +++ b/rpc/cloudagent/network/moc_cloudagent_virtualnetwork.pb.go @@ -555,6 +555,181 @@ 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. Each list replaces + // the stored list across every pool in that subnet. MOC routes each + // IP to the correct pool by range internally. + IPUpdates []*VirtualSubnetIPUpdate `protobuf:"bytes,3,rep,name=IPUpdates,proto3" json:"IPUpdates,omitempty"` + // Wire API version. nil/v1 follows the cluster-wide migration + // shim (see shouldRouteVnetToLnet). Setting Major>=2 opts the + // caller out of the LNET migration shim, so registered-IP writes + // land on the VNET provider even when the cluster has + // disableLogicalNetworkMigration=false. Mirrors the Version field + // on VirtualNetworkRequest. + Version *common.ApiVersion `protobuf:"bytes,4,opt,name=version,proto3" json:"version,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 +} + +func (m *VirtualNetworkIPUpdateRequest) GetVersion() *common.ApiVersion { + if m != nil { + return m.Version + } + 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. Per-IP validation/allocation failures (e.g., IP + // already taken, IP outside CIDR). These are returned alongside + // PersistedIPs as normal "partial success" outcomes; the gRPC status + // is still OK in this case. Whole-batch / infrastructure failures + // (e.g. store persistence) are reported via the gRPC status code + // instead and do not populate this list. + Failures []*common.IPAddressUpdateFailure `protobuf:"bytes,2,rep,name=Failures,proto3" json:"Failures,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 init() { proto.RegisterEnum("moc.cloudagent.network.VirtualNetworkType", VirtualNetworkType_name, VirtualNetworkType_value) proto.RegisterType((*VirtualNetworkRequest)(nil), "moc.cloudagent.network.VirtualNetworkRequest") @@ -564,6 +739,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 +749,73 @@ 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, + // 1042 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 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, 0x50, 0xb9, 0xd0, 0xd4, 0x4c, 0x4c, + 0x2e, 0x10, 0x52, 0xb5, 0xd9, 0x1d, 0x3b, 0x4b, 0x77, 0x67, 0x36, 0x33, 0xb3, 0xae, 0x22, 0xee, + 0x2b, 0x78, 0x17, 0x2e, 0xe1, 0x21, 0xe0, 0x15, 0x78, 0x0c, 0x5e, 0x00, 0xcd, 0xbf, 0x07, 0x1f, + 0x48, 0x54, 0xe7, 0xa2, 0x57, 0xde, 0x99, 0xef, 0xfb, 0x8f, 0xdf, 0x3f, 0x33, 0x86, 0xfb, 0xb1, + 0xf0, 0x5f, 0xfa, 0x91, 0x48, 0x03, 0x6f, 0xca, 0xb8, 0x7e, 0x39, 0x0b, 0xa5, 0x4e, 0xbd, 0x88, + 0x33, 0xfd, 0x5a, 0xc8, 0x57, 0xbd, 0x44, 0x0a, 0x2d, 0xc8, 0x9d, 0x58, 0xf8, 0xbd, 0x39, 0xa9, + 0x97, 0xa3, 0xdd, 0xbd, 0xa9, 0x10, 0xd3, 0x88, 0xf5, 0x91, 0x75, 0x96, 0x4e, 0xfa, 0xaf, 0xa5, + 0x97, 0x24, 0x4c, 0xaa, 0xcc, 0xae, 0xbb, 0x8b, 0xce, 0x45, 0x1c, 0x0b, 0x9e, 0xff, 0xe4, 0xc0, + 0xde, 0x02, 0x90, 0x3b, 0x5b, 0xc4, 0xdd, 0xbf, 0x2d, 0xd8, 0x39, 0xcd, 0x32, 0x39, 0xce, 0x60, + 0xca, 0x2e, 0x52, 0xa6, 0x34, 0x19, 0xc1, 0xf6, 0x32, 0xa0, 0x1c, 0x6b, 0xbf, 0x7a, 0xd0, 0x1e, + 0x3c, 0xe8, 0x5d, 0x9d, 0x64, 0x6f, 0xc5, 0xcf, 0xaa, 0x39, 0x79, 0x0c, 0x5b, 0x2f, 0x12, 0x26, + 0x3d, 0x1d, 0x0a, 0x3e, 0xbe, 0x4c, 0x98, 0x53, 0xd9, 0xb7, 0x0e, 0x3a, 0x83, 0x0e, 0xfa, 0x2b, + 0x11, 0xba, 0x4c, 0x22, 0x1f, 0x42, 0x63, 0xc6, 0xa4, 0x0a, 0x05, 0x77, 0xaa, 0xfb, 0xd6, 0x41, + 0x7b, 0xb0, 0x8d, 0xfc, 0xc3, 0x24, 0x3c, 0xcd, 0xb6, 0x69, 0x81, 0xbb, 0x7f, 0x58, 0x70, 0x67, + 0xb5, 0x18, 0x95, 0x08, 0xae, 0xd8, 0x3b, 0xa8, 0x66, 0x00, 0x75, 0xca, 0x54, 0x1a, 0x69, 0x2c, + 0xa3, 0x3d, 0xe8, 0xf6, 0x32, 0x8d, 0x7a, 0x85, 0x46, 0xbd, 0x23, 0x21, 0xa2, 0x53, 0x2f, 0x4a, + 0x19, 0xcd, 0x99, 0xe4, 0x3d, 0xd8, 0xf8, 0x5a, 0x4a, 0x21, 0xb1, 0x92, 0x16, 0xcd, 0x16, 0xee, + 0x05, 0xdc, 0x5b, 0x76, 0x3e, 0x92, 0xcc, 0x3f, 0x67, 0xfe, 0xbb, 0x93, 0xc2, 0xfd, 0x19, 0xf6, + 0xae, 0x0b, 0x99, 0x37, 0x6c, 0x5e, 0x9e, 0x75, 0xf3, 0xf2, 0x2a, 0x8b, 0xe5, 0xfd, 0x5b, 0x85, + 0xce, 0x72, 0x30, 0x42, 0xa0, 0xc6, 0xbd, 0x98, 0xa1, 0xeb, 0x16, 0xc5, 0x6f, 0xd2, 0x81, 0x4a, + 0x18, 0xe4, 0x96, 0x95, 0x30, 0x20, 0x9f, 0x41, 0x43, 0xa5, 0x67, 0x9c, 0x69, 0xe5, 0x54, 0xb1, + 0xd8, 0xbd, 0xeb, 0x8a, 0x3d, 0x41, 0x1a, 0x2d, 0xe8, 0x64, 0x1f, 0xaa, 0x01, 0x57, 0x4e, 0x0d, + 0xf3, 0x6e, 0xa2, 0xd5, 0x57, 0x5c, 0x1d, 0xd5, 0x7e, 0xfd, 0xd3, 0xb1, 0xa8, 0x81, 0xc8, 0x17, + 0x50, 0xd3, 0x66, 0x00, 0x37, 0x70, 0x00, 0x1f, 0xae, 0xd7, 0x45, 0x33, 0x8d, 0x14, 0xed, 0x48, + 0x17, 0x9a, 0x5c, 0x04, 0x6c, 0x72, 0x11, 0x70, 0xa7, 0x8e, 0x19, 0x97, 0x6b, 0x72, 0x17, 0x5a, + 0x53, 0x29, 0xd2, 0xe4, 0xd8, 0x14, 0xd8, 0x40, 0x70, 0xbe, 0x41, 0xee, 0x43, 0x5d, 0x69, 0x4f, + 0xa7, 0xca, 0x69, 0x62, 0x7a, 0x6d, 0x8c, 0x7d, 0x82, 0x5b, 0x34, 0x87, 0x88, 0x0b, 0x9b, 0x91, + 0xf0, 0xf1, 0x08, 0xa0, 0x97, 0x16, 0x7a, 0x59, 0xda, 0x23, 0x0f, 0xa0, 0x1d, 0x7b, 0xfe, 0x48, + 0x88, 0x08, 0x29, 0x60, 0x28, 0x79, 0x89, 0x8b, 0x00, 0xb9, 0x07, 0x35, 0xed, 0x4d, 0x95, 0xb3, + 0x89, 0xe1, 0x5a, 0x18, 0x6e, 0xec, 0x4d, 0x15, 0xc5, 0x6d, 0xf2, 0x39, 0x74, 0x22, 0x31, 0x0d, + 0xfd, 0xb2, 0x4a, 0x67, 0x0b, 0x89, 0x3b, 0x48, 0x2c, 0x4f, 0xd1, 0x84, 0x49, 0xc6, 0x7d, 0x46, + 0x57, 0xc8, 0x46, 0x48, 0x3f, 0x0c, 0xa4, 0xd3, 0xd9, 0xaf, 0x1a, 0x21, 0xcd, 0xf7, 0xb3, 0x5a, + 0xb3, 0x6d, 0x6f, 0xba, 0xff, 0x54, 0xa0, 0x9e, 0x09, 0xb3, 0x96, 0xda, 0x85, 0xa3, 0xec, 0x60, + 0xe0, 0x37, 0x71, 0xa1, 0x2e, 0x45, 0xaa, 0x99, 0x91, 0xd2, 0x0c, 0x00, 0x60, 0x4e, 0xd4, 0x6c, + 0xd1, 0x1c, 0x21, 0x4f, 0x00, 0xbc, 0xa8, 0x68, 0x4c, 0xae, 0xe7, 0x2e, 0xf2, 0x86, 0xa3, 0xc3, + 0x12, 0x78, 0xce, 0xf4, 0xb9, 0x08, 0xe8, 0x02, 0xd5, 0x04, 0x9c, 0x45, 0x5e, 0x26, 0xdf, 0x16, + 0xc5, 0x6f, 0xf2, 0x01, 0x34, 0xc2, 0x24, 0x11, 0x22, 0x52, 0x4e, 0x03, 0x23, 0xb6, 0x73, 0x4f, + 0xa6, 0x9b, 0xb4, 0xc0, 0xc8, 0x4f, 0xb0, 0x9b, 0x4f, 0x88, 0x62, 0x7e, 0x2a, 0x43, 0x7d, 0x89, + 0xfa, 0x4a, 0x36, 0x41, 0xa5, 0xda, 0x03, 0x77, 0xb1, 0x79, 0x27, 0x39, 0xe7, 0xa9, 0xe1, 0xcc, + 0x3b, 0x79, 0x9d, 0x8b, 0x52, 0x30, 0xb8, 0x52, 0xb0, 0x67, 0xb5, 0x66, 0xd3, 0x6e, 0xb9, 0x63, + 0xa8, 0x0d, 0x13, 0x2f, 0x36, 0x55, 0xe0, 0x20, 0xe7, 0xad, 0xc5, 0xe1, 0x5c, 0x38, 0x38, 0x95, + 0x1b, 0x1d, 0x1c, 0xf7, 0x2f, 0x6b, 0xf5, 0x26, 0x1a, 0x8e, 0x7e, 0x48, 0x02, 0x4f, 0xb3, 0xe2, + 0x26, 0xba, 0x0b, 0xad, 0xa7, 0xe5, 0x70, 0x67, 0x41, 0xe7, 0x1b, 0x26, 0x1b, 0x04, 0x32, 0x59, + 0xf1, 0x9b, 0x7c, 0x0b, 0xad, 0xc2, 0x49, 0x71, 0x90, 0x1f, 0xbd, 0xe5, 0xbc, 0x65, 0x69, 0x95, + 0xa1, 0xe7, 0xf6, 0x8b, 0x6f, 0x41, 0xed, 0x2d, 0x6f, 0x41, 0x5c, 0xbe, 0x6b, 0xcb, 0xee, 0xc8, + 0x1e, 0x40, 0xb6, 0xb3, 0x50, 0xc3, 0xc2, 0x0e, 0x79, 0x0c, 0x3b, 0x94, 0x4d, 0x43, 0xa5, 0x99, + 0x64, 0xc1, 0x70, 0x74, 0x18, 0x04, 0x92, 0x29, 0xc5, 0xb2, 0x66, 0xb6, 0xe8, 0xd5, 0xa0, 0xfb, + 0xbb, 0xb5, 0x7a, 0xa3, 0xce, 0x5b, 0x97, 0xdf, 0xa8, 0xdf, 0xc3, 0xe6, 0xc8, 0x24, 0xa7, 0xb4, + 0x31, 0x2d, 0xae, 0xf0, 0x1b, 0x36, 0x63, 0xc9, 0x05, 0x79, 0x02, 0xcd, 0x6f, 0xbc, 0x30, 0x4a, + 0x25, 0x2b, 0xb4, 0x7e, 0xbf, 0x98, 0xfd, 0x2c, 0xb3, 0xcc, 0x2a, 0xe7, 0xd0, 0x92, 0xfc, 0xf0, + 0x37, 0x0b, 0xc8, 0xff, 0x6f, 0x37, 0xd2, 0x80, 0xea, 0xf1, 0xe1, 0xd8, 0xbe, 0x45, 0xb6, 0xa1, + 0x3d, 0x96, 0x1e, 0x57, 0x89, 0x27, 0x19, 0xd7, 0xb6, 0x45, 0x36, 0xa1, 0xf9, 0xdd, 0xe0, 0x48, + 0x86, 0xc1, 0x94, 0xd9, 0x95, 0x6c, 0x35, 0x4e, 0x39, 0x67, 0x91, 0x5d, 0x35, 0x56, 0xc3, 0x2f, + 0x4f, 0xec, 0x1a, 0x69, 0x43, 0x63, 0x24, 0xc3, 0x99, 0xa7, 0x99, 0xbd, 0x61, 0x16, 0x2f, 0x66, + 0x4c, 0x46, 0xde, 0xa5, 0x5d, 0x37, 0x06, 0x43, 0xae, 0x99, 0xe4, 0x5e, 0x64, 0x37, 0xcc, 0xea, + 0x79, 0x68, 0xde, 0x06, 0x16, 0xd8, 0xcd, 0xc1, 0x9b, 0x2a, 0xdc, 0x5e, 0xce, 0xe5, 0xd0, 0x34, + 0x82, 0x84, 0x50, 0x1f, 0xf2, 0x99, 0x78, 0xc5, 0xc8, 0xa3, 0x35, 0x9f, 0xb9, 0x6c, 0x48, 0xbb, + 0xbd, 0x75, 0xe9, 0x99, 0x30, 0xee, 0x2d, 0xf2, 0x0b, 0x34, 0x8b, 0x07, 0x90, 0x7c, 0xb2, 0x9e, + 0xf5, 0xca, 0x1b, 0xdd, 0xfd, 0xf4, 0xa6, 0x66, 0x65, 0xf0, 0x37, 0x16, 0xdc, 0x2e, 0x46, 0x65, + 0x3e, 0x5a, 0x6a, 0xdd, 0x44, 0x56, 0x8e, 0xe8, 0xba, 0x89, 0xac, 0x8e, 0xa7, 0x7b, 0xeb, 0xe8, + 0xa3, 0x1f, 0xfb, 0xd3, 0x50, 0x9f, 0xa7, 0x67, 0x3d, 0x5f, 0xc4, 0xfd, 0x38, 0xf4, 0xa5, 0x50, + 0x62, 0xa2, 0xfb, 0xb1, 0xf0, 0xfb, 0x32, 0xf1, 0xfb, 0x73, 0x9f, 0xfd, 0xdc, 0xe7, 0x59, 0x1d, + 0xff, 0x0d, 0x7c, 0xfc, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa8, 0x34, 0x77, 0xe3, 0xdd, 0x0a, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -644,6 +833,14 @@ 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 + // (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. + UpdateRegisteredIPs(ctx context.Context, in *VirtualNetworkIPUpdateRequest, opts ...grpc.CallOption) (*VirtualNetworkIPUpdateResponse, error) } type virtualNetworkAgentClient struct { @@ -672,11 +869,28 @@ 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 + // (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. + UpdateRegisteredIPs(context.Context, *VirtualNetworkIPUpdateRequest) (*VirtualNetworkIPUpdateResponse, error) } // UnimplementedVirtualNetworkAgentServer can be embedded to have forward compatible implementations. @@ -689,6 +903,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 +947,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 +977,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..966e45a3 100644 --- a/rpc/cloudagent/network/virtualnetwork/moc_cloudagent_virtualnetwork.proto +++ b/rpc/cloudagent/network/virtualnetwork/moc_cloudagent_virtualnetwork.proto @@ -85,5 +85,52 @@ 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; + + // Wire API version. nil/v1 follows the cluster-wide migration + // shim (see shouldRouteVnetToLnet). Setting Major>=2 opts the + // caller out of the LNET migration shim, so registered-IP writes + // land on the VNET provider even when the cluster has + // disableLogicalNetworkMigration=false. Mirrors the Version field + // on VirtualNetworkRequest. + ApiVersion version = 4; +} + +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. Per-IP validation/allocation failures (e.g., IP + // already taken, IP outside CIDR). These are returned alongside + // PersistedIPs as normal "partial success" outcomes; the gRPC status + // is still OK in this case. Whole-batch / infrastructure failures + // (e.g. store persistence) are reported via the gRPC status code + // instead and do not populate this list. + repeated IPAddressUpdateFailure Failures = 2; } diff --git a/rpc/common/moc_common_networkcommon.pb.go b/rpc/common/moc_common_networkcommon.pb.go index 04a4dd06..bc4b59c9 100644 --- a/rpc/common/moc_common_networkcommon.pb.go +++ b/rpc/common/moc_common_networkcommon.pb.go @@ -160,6 +160,55 @@ func (IPVersion) EnumDescriptor() ([]byte, []int) { return fileDescriptor_ba09ae1dfdbe03d2, []int{4} } +type IPUpdateErrorCode int32 + +const ( + IPUpdateErrorCode_IP_UPDATE_UNKNOWN IPUpdateErrorCode = 0 + // Malformed IP literal (parse failure). + IPUpdateErrorCode_IP_UPDATE_INVALID_FORMAT IPUpdateErrorCode = 1 + // IP does not fall within any pool's [Start, End] range on this subnet. + IPUpdateErrorCode_IP_UPDATE_OUT_OF_RANGE IPUpdateErrorCode = 2 + // Subnet name in the request is not present on the stored network spec. + IPUpdateErrorCode_IP_UPDATE_SUBNET_NOT_FOUND IPUpdateErrorCode = 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. + IPUpdateErrorCode_IP_UPDATE_ALREADY_ALLOCATED IPUpdateErrorCode = 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. + 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 +232,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 +346,16 @@ 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"` + 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 +425,79 @@ 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. Shared between the LogicalNetwork and VirtualNetwork +// 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 {