Add support for tracking network interfaces on routers and identities. Fixes #3082. Add network discover to router. Fixes #3083

This commit is contained in:
Paul Lorenz
2025-06-09 15:35:36 -04:00
parent d26a87e242
commit cc7eefaf24
38 changed files with 3068 additions and 1154 deletions
+183
View File
@@ -1,3 +1,186 @@
# Release 1.6.3
## What's New
* Router Network Interface Discovery
## Router Interface Discovery
Routers can now discover their network interfaces and publish this information to the
controller.
This feature will be used in the future to allow controller side configuration of
router link listeners and edge listeners.
### Update Router Configuration
There is new router configuration to manage this:
```
interfaceDiscovery:
# This feature is enabled by default, but can be disabled by setting this to true
disabled: false
# How often to poll for interface changes. Defaults to 1 minute
checkInterval: 1m
# How often to report the current set of interfaces, when nothing has changed.
# This is a failsafe reporting mechanism, in the very unlikely event that an
# earlier change report was lost or disregarded due to distributed controller
# eventual consistency
minReportInterval: 24h
```
### Update REST APIs
Network interfaces, where reported, can now be viewed on the following endpoints.
* routers
* edge-routers
* identities (if the router is an ER/T, with an associated identities)
At some point in the future, we expect to allow SDKs to also optionally report their
network interfaces as well. Those will be available via the `identities` REST API.
Example:
```
$ ziti fabric list routers 'name="edge-router-1"' -j | jq
{
"data": [
{
"_links": {
"self": {
"href": "./routers/oLvcT6VepI"
},
"terminators": {
"href": "./routers/oLvcT6VepI/terminators"
}
},
"createdAt": "2025-03-24T04:35:59.077Z",
"id": "oLvcT6VepI",
"tags": {},
"updatedAt": "2025-06-11T14:29:22.083Z",
"connected": false,
"cost": 0,
"disabled": false,
"fingerprint": "b7b03c55be77df0ec57e49d8fe2610e0b99fa61c",
"interfaces": [
{
"addresses": [
"192.168.3.29/24",
"aaaa::aaaa:aaaa:aaaa:aaaa/64"
],
"hardwareAddress": "aa:aa:aa:aa:aa:aa",
"index": 4,
"isBroadcast": true,
"isLoopback": false,
"isMulticast": true,
"isRunning": true,
"isUp": true,
"mtu": 1500,
"name": "wifi0"
},
{
"addresses": null,
"hardwareAddress": "aa:aa:aa:aa:aa:aa",
"index": 2,
"isBroadcast": true,
"isLoopback": false,
"isMulticast": true,
"isRunning": false,
"isUp": true,
"mtu": 1500,
"name": "eth1"
},
{
"addresses": [
"192.168.1.2/24",
"aaaa::aaaa:aaa:aaaa:aaaa/64"
],
"hardwareAddress": "aa:aa:aa:aa:aa:aa",
"index": 16,
"isBroadcast": true,
"isLoopback": false,
"isMulticast": true,
"isRunning": true,
"isUp": true,
"mtu": 1500,
"name": "eth0"
},
{
"addresses": [
"127.0.0.1/8",
"::1/128"
],
"hardwareAddress": "",
"index": 1,
"isBroadcast": false,
"isLoopback": true,
"isMulticast": false,
"isRunning": true,
"isUp": true,
"mtu": 65536,
"name": "lo"
}
],
"listenerAddresses": null,
"name": "edge-router-1",
"noTraversal": false
}
],
"meta": {
"filterableFields": [
"id",
"isSystem",
"name",
"fingerprint",
"cost",
"createdAt",
"updatedAt",
"tags",
"noTraversal",
"disabled",
"connected"
],
"pagination": {
"limit": 10,
"offset": 0,
"totalCount": 1
}
}
}
```
Note that addresses have been sanitized.
## Component Updates and Bug Fixes
* github.com/openziti/channel/v4: [v4.2.0 -> v4.2.5](https://github.com/openziti/channel/compare/v4.2.0...v4.2.5)
* github.com/openziti/edge-api: [v0.26.45 -> v0.26.46](https://github.com/openziti/edge-api/compare/v0.26.45...v0.26.46)
* [Issue #155](https://github.com/openziti/edge-api/issues/155) - Add network interface list to routers and identities
* github.com/openziti/foundation/v2: [v2.0.63 -> v2.0.66](https://github.com/openziti/foundation/compare/v2.0.63...v2.0.66)
* github.com/openziti/identity: [v1.0.101 -> v1.0.105](https://github.com/openziti/identity/compare/v1.0.101...v1.0.105)
* github.com/openziti/sdk-golang: [v1.1.1 -> v1.1.2](https://github.com/openziti/sdk-golang/compare/v1.1.1...v1.1.2)
* [Issue #742](https://github.com/openziti/sdk-golang/issues/742) - Additional CtrlId and GetDestinationType for inspect support
* [Issue #739](https://github.com/openziti/sdk-golang/issues/739) - go-jose v2.6.3 CVE-2025-27144 resolution
* [Issue #735](https://github.com/openziti/sdk-golang/issues/735) - Ensure Authenticate can't be called in parallel
* github.com/openziti/storage: [v0.4.11 -> v0.4.17](https://github.com/openziti/storage/compare/v0.4.11...v0.4.17)
* [Issue #106](https://github.com/openziti/storage/issues/106) - panic in TypedBucket.GetList
* github.com/openziti/transport/v2: [v2.0.171 -> v2.0.175](https://github.com/openziti/transport/compare/v2.0.171...v2.0.175)
* github.com/openziti/xweb/v2: [v2.3.2 -> v2.3.3](https://github.com/openziti/xweb/compare/v2.3.2...v2.3.3)
* github.com/openziti/ziti: [v1.6.2 -> v1.6.3](https://github.com/openziti/ziti/compare/v1.6.2...v1.6.3)
* [Issue #3082](https://github.com/openziti/ziti/issues/3082) - Add network interfaces to controller data model
* [Issue #3083](https://github.com/openziti/ziti/issues/3083) - Add optional network interface discovery to routers
* [Issue #2862](https://github.com/openziti/ziti/issues/2862) - Large scale data-flow test
* [Issue #3102](https://github.com/openziti/ziti/issues/3102) - Implement remote control for ziti-traffic-test/loop4
* [Issue #3098](https://github.com/openziti/ziti/issues/3098) - Implement circuit validation API and CLI
# Release 1.6.2
## What's New
+191 -68
View File
@@ -949,6 +949,7 @@ type Router struct {
NoTraversal bool `protobuf:"varint,5,opt,name=noTraversal,proto3" json:"noTraversal,omitempty"`
Disabled bool `protobuf:"varint,6,opt,name=disabled,proto3" json:"disabled,omitempty"`
Tags map[string]*TagValue `protobuf:"bytes,7,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
Interfaces []*Interface `protobuf:"bytes,8,rep,name=interfaces,proto3" json:"interfaces,omitempty"`
}
func (x *Router) Reset() {
@@ -1032,6 +1033,13 @@ func (x *Router) GetTags() map[string]*TagValue {
return nil
}
func (x *Router) GetInterfaces() []*Interface {
if x != nil {
return x.Interfaces
}
return nil
}
type Terminator struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1191,6 +1199,93 @@ func (x *Terminator) GetSourceCtrl() string {
return ""
}
type Interface struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
HardwareAddress string `protobuf:"bytes,2,opt,name=hardwareAddress,proto3" json:"hardwareAddress,omitempty"`
Mtu int64 `protobuf:"varint,3,opt,name=mtu,proto3" json:"mtu,omitempty"`
Index int64 `protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"`
Flags uint64 `protobuf:"varint,5,opt,name=flags,proto3" json:"flags,omitempty"`
Addresses []string `protobuf:"bytes,6,rep,name=addresses,proto3" json:"addresses,omitempty"`
}
func (x *Interface) Reset() {
*x = Interface{}
if protoimpl.UnsafeEnabled {
mi := &file_cmd_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Interface) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Interface) ProtoMessage() {}
func (x *Interface) ProtoReflect() protoreflect.Message {
mi := &file_cmd_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Interface.ProtoReflect.Descriptor instead.
func (*Interface) Descriptor() ([]byte, []int) {
return file_cmd_proto_rawDescGZIP(), []int{14}
}
func (x *Interface) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Interface) GetHardwareAddress() string {
if x != nil {
return x.HardwareAddress
}
return ""
}
func (x *Interface) GetMtu() int64 {
if x != nil {
return x.Mtu
}
return 0
}
func (x *Interface) GetIndex() int64 {
if x != nil {
return x.Index
}
return 0
}
func (x *Interface) GetFlags() uint64 {
if x != nil {
return x.Flags
}
return 0
}
func (x *Interface) GetAddresses() []string {
if x != nil {
return x.Addresses
}
return nil
}
var File_cmd_proto protoreflect.FileDescriptor
var file_cmd_proto_rawDesc = []byte{
@@ -1296,7 +1391,7 @@ var file_cmd_proto_rawDesc = []byte{
0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x7a,
0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61,
0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa3,
0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdb,
0x02, 0x0a, 0x06, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a,
@@ -1310,53 +1405,67 @@ var file_cmd_proto_rawDesc = []byte{
0x64, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x1d, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x6f,
0x75, 0x74, 0x65, 0x72, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04,
0x74, 0x61, 0x67, 0x73, 0x1a, 0x4e, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x15, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62,
0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x3a, 0x02, 0x38, 0x01, 0x22, 0x8b, 0x05, 0x0a, 0x0a, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49,
0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a,
0x07, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18,
0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49,
0x64, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x63,
0x72, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61,
0x6e, 0x63, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73,
0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x1e, 0x0a,
0x0a, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a,
0x08, 0x70, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x25, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65,
0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74,
0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61,
0x12, 0x35, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21,
0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72,
0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49,
0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12,
0x1a, 0x0a, 0x08, 0x69, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28,
0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x73,
0x61, 0x76, 0x65, 0x64, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0e,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x73, 0x61, 0x76, 0x65, 0x64, 0x50, 0x72, 0x65, 0x63, 0x65,
0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43,
0x74, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x43, 0x74, 0x72, 0x6c, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74,
0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
0x38, 0x01, 0x1a, 0x4e, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x15, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54,
0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
0x38, 0x01, 0x2a, 0xc3, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79,
0x74, 0x61, 0x67, 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e,
0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x1a, 0x4e, 0x0a, 0x09,
0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x7a, 0x69, 0x74,
0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75,
0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8b, 0x05, 0x0a,
0x0a, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x6f, 0x75,
0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x75,
0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12,
0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x73,
0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69,
0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x73,
0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28,
0x0c, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65,
0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65,
0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x65,
0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74,
0x61, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63,
0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72,
0x2e, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08,
0x70, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73,
0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d,
0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x2e,
0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12,
0x16, 0x0a, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x53, 0x79, 0x73,
0x74, 0x65, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, 0x73,
0x74, 0x65, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x61, 0x76, 0x65, 0x64, 0x50, 0x72, 0x65, 0x63,
0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x73, 0x61,
0x76, 0x65, 0x64, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1e, 0x0a,
0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x74, 0x72, 0x6c, 0x1a, 0x3b, 0x0a,
0x0d, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79,
0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4e, 0x0a, 0x09, 0x54, 0x61,
0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e,
0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x49,
0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f,
0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x41,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x03, 0x20,
0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65,
0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14,
0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x66,
0x6c, 0x61, 0x67, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65,
0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x65, 0x73, 0x2a, 0xc3, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79,
0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70,
0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x0f, 0x4e, 0x65, 0x77, 0x4c, 0x6f,
0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x10, 0x82, 0x10, 0x12, 0x16, 0x0a,
@@ -1397,7 +1506,7 @@ func file_cmd_proto_rawDescGZIP() []byte {
}
var file_cmd_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_cmd_proto_msgTypes = make([]protoimpl.MessageInfo, 19)
var file_cmd_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
var file_cmd_proto_goTypes = []interface{}{
(ContentType)(0), // 0: ziti.cmd.pb.ContentType
(CommandType)(0), // 1: ziti.cmd.pb.CommandType
@@ -1415,14 +1524,15 @@ var file_cmd_proto_goTypes = []interface{}{
(*Service)(nil), // 13: ziti.cmd.pb.Service
(*Router)(nil), // 14: ziti.cmd.pb.Router
(*Terminator)(nil), // 15: ziti.cmd.pb.Terminator
nil, // 16: ziti.cmd.pb.ChangeContext.AttributesEntry
nil, // 17: ziti.cmd.pb.Service.TagsEntry
nil, // 18: ziti.cmd.pb.Router.TagsEntry
nil, // 19: ziti.cmd.pb.Terminator.PeerDataEntry
nil, // 20: ziti.cmd.pb.Terminator.TagsEntry
(*Interface)(nil), // 16: ziti.cmd.pb.Interface
nil, // 17: ziti.cmd.pb.ChangeContext.AttributesEntry
nil, // 18: ziti.cmd.pb.Service.TagsEntry
nil, // 19: ziti.cmd.pb.Router.TagsEntry
nil, // 20: ziti.cmd.pb.Terminator.PeerDataEntry
nil, // 21: ziti.cmd.pb.Terminator.TagsEntry
}
var file_cmd_proto_depIdxs = []int32{
16, // 0: ziti.cmd.pb.ChangeContext.attributes:type_name -> ziti.cmd.pb.ChangeContext.AttributesEntry
17, // 0: ziti.cmd.pb.ChangeContext.attributes:type_name -> ziti.cmd.pb.ChangeContext.AttributesEntry
2, // 1: ziti.cmd.pb.AddPeerRequest.ctx:type_name -> ziti.cmd.pb.ChangeContext
2, // 2: ziti.cmd.pb.RemovePeerRequest.ctx:type_name -> ziti.cmd.pb.ChangeContext
2, // 3: ziti.cmd.pb.TransferLeadershipRequest.ctx:type_name -> ziti.cmd.pb.ChangeContext
@@ -1430,18 +1540,19 @@ var file_cmd_proto_depIdxs = []int32{
2, // 5: ziti.cmd.pb.UpdateEntityCommand.ctx:type_name -> ziti.cmd.pb.ChangeContext
2, // 6: ziti.cmd.pb.DeleteEntityCommand.ctx:type_name -> ziti.cmd.pb.ChangeContext
2, // 7: ziti.cmd.pb.DeleteTerminatorsBatchCommand.ctx:type_name -> ziti.cmd.pb.ChangeContext
17, // 8: ziti.cmd.pb.Service.tags:type_name -> ziti.cmd.pb.Service.TagsEntry
18, // 9: ziti.cmd.pb.Router.tags:type_name -> ziti.cmd.pb.Router.TagsEntry
19, // 10: ziti.cmd.pb.Terminator.peerData:type_name -> ziti.cmd.pb.Terminator.PeerDataEntry
20, // 11: ziti.cmd.pb.Terminator.tags:type_name -> ziti.cmd.pb.Terminator.TagsEntry
12, // 12: ziti.cmd.pb.Service.TagsEntry.value:type_name -> ziti.cmd.pb.TagValue
12, // 13: ziti.cmd.pb.Router.TagsEntry.value:type_name -> ziti.cmd.pb.TagValue
12, // 14: ziti.cmd.pb.Terminator.TagsEntry.value:type_name -> ziti.cmd.pb.TagValue
15, // [15:15] is the sub-list for method output_type
15, // [15:15] is the sub-list for method input_type
15, // [15:15] is the sub-list for extension type_name
15, // [15:15] is the sub-list for extension extendee
0, // [0:15] is the sub-list for field type_name
18, // 8: ziti.cmd.pb.Service.tags:type_name -> ziti.cmd.pb.Service.TagsEntry
19, // 9: ziti.cmd.pb.Router.tags:type_name -> ziti.cmd.pb.Router.TagsEntry
16, // 10: ziti.cmd.pb.Router.interfaces:type_name -> ziti.cmd.pb.Interface
20, // 11: ziti.cmd.pb.Terminator.peerData:type_name -> ziti.cmd.pb.Terminator.PeerDataEntry
21, // 12: ziti.cmd.pb.Terminator.tags:type_name -> ziti.cmd.pb.Terminator.TagsEntry
12, // 13: ziti.cmd.pb.Service.TagsEntry.value:type_name -> ziti.cmd.pb.TagValue
12, // 14: ziti.cmd.pb.Router.TagsEntry.value:type_name -> ziti.cmd.pb.TagValue
12, // 15: ziti.cmd.pb.Terminator.TagsEntry.value:type_name -> ziti.cmd.pb.TagValue
16, // [16:16] is the sub-list for method output_type
16, // [16:16] is the sub-list for method input_type
16, // [16:16] is the sub-list for extension type_name
16, // [16:16] is the sub-list for extension extendee
0, // [0:16] is the sub-list for field type_name
}
func init() { file_cmd_proto_init() }
@@ -1618,6 +1729,18 @@ func file_cmd_proto_init() {
return nil
}
}
file_cmd_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Interface); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
file_cmd_proto_msgTypes[10].OneofWrappers = []interface{}{
(*TagValue_BoolValue)(nil),
@@ -1631,7 +1754,7 @@ func file_cmd_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_cmd_proto_rawDesc,
NumEnums: 2,
NumMessages: 19,
NumMessages: 20,
NumExtensions: 0,
NumServices: 0,
},
+10
View File
@@ -111,6 +111,7 @@ message Router {
bool noTraversal = 5;
bool disabled = 6;
map<string, TagValue> tags = 7;
repeated Interface interfaces = 8;
}
message Terminator {
@@ -130,3 +131,12 @@ message Terminator {
uint32 savedPrecedence = 14;
string sourceCtrl = 15;
}
message Interface {
string name = 1;
string hardwareAddress = 2;
int64 mtu = 3;
int64 index = 4;
uint64 flags = 5;
repeated string addresses = 6;
}
+319 -137
View File
@@ -58,6 +58,7 @@ const (
ContentType_DecommissionRouterRequestType ContentType = 1043
ContentType_PeerStateChangeRequestType ContentType = 1050
ContentType_UpdateClusterLeaderRequestType ContentType = 1051
ContentType_UpdateRouterInterfaces ContentType = 1052
)
// Enum value maps for ContentType.
@@ -92,6 +93,7 @@ var (
1043: "DecommissionRouterRequestType",
1050: "PeerStateChangeRequestType",
1051: "UpdateClusterLeaderRequestType",
1052: "UpdateRouterInterfaces",
}
ContentType_value = map[string]int32{
"Zero": 0,
@@ -123,6 +125,7 @@ var (
"DecommissionRouterRequestType": 1043,
"PeerStateChangeRequestType": 1050,
"UpdateClusterLeaderRequestType": 1051,
"UpdateRouterInterfaces": 1052,
}
)
@@ -2366,6 +2369,140 @@ func (x *RouterMetadata) GetCapabilities() []RouterCapability {
return nil
}
type Interface struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
HardwareAddress string `protobuf:"bytes,2,opt,name=hardwareAddress,proto3" json:"hardwareAddress,omitempty"`
Mtu int64 `protobuf:"varint,3,opt,name=mtu,proto3" json:"mtu,omitempty"`
Index int64 `protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"`
Flags uint64 `protobuf:"varint,5,opt,name=flags,proto3" json:"flags,omitempty"`
Addresses []string `protobuf:"bytes,6,rep,name=addresses,proto3" json:"addresses,omitempty"`
}
func (x *Interface) Reset() {
*x = Interface{}
if protoimpl.UnsafeEnabled {
mi := &file_ctrl_proto_msgTypes[30]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Interface) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Interface) ProtoMessage() {}
func (x *Interface) ProtoReflect() protoreflect.Message {
mi := &file_ctrl_proto_msgTypes[30]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Interface.ProtoReflect.Descriptor instead.
func (*Interface) Descriptor() ([]byte, []int) {
return file_ctrl_proto_rawDescGZIP(), []int{30}
}
func (x *Interface) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Interface) GetHardwareAddress() string {
if x != nil {
return x.HardwareAddress
}
return ""
}
func (x *Interface) GetMtu() int64 {
if x != nil {
return x.Mtu
}
return 0
}
func (x *Interface) GetIndex() int64 {
if x != nil {
return x.Index
}
return 0
}
func (x *Interface) GetFlags() uint64 {
if x != nil {
return x.Flags
}
return 0
}
func (x *Interface) GetAddresses() []string {
if x != nil {
return x.Addresses
}
return nil
}
type RouterInterfacesUpdate struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Interfaces []*Interface `protobuf:"bytes,1,rep,name=interfaces,proto3" json:"interfaces,omitempty"`
}
func (x *RouterInterfacesUpdate) Reset() {
*x = RouterInterfacesUpdate{}
if protoimpl.UnsafeEnabled {
mi := &file_ctrl_proto_msgTypes[31]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RouterInterfacesUpdate) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RouterInterfacesUpdate) ProtoMessage() {}
func (x *RouterInterfacesUpdate) ProtoReflect() protoreflect.Message {
mi := &file_ctrl_proto_msgTypes[31]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RouterInterfacesUpdate.ProtoReflect.Descriptor instead.
func (*RouterInterfacesUpdate) Descriptor() ([]byte, []int) {
return file_ctrl_proto_rawDescGZIP(), []int{31}
}
func (x *RouterInterfacesUpdate) GetInterfaces() []*Interface {
if x != nil {
return x.Interfaces
}
return nil
}
type RouterLinks_RouterLink struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -2382,7 +2519,7 @@ type RouterLinks_RouterLink struct {
func (x *RouterLinks_RouterLink) Reset() {
*x = RouterLinks_RouterLink{}
if protoimpl.UnsafeEnabled {
mi := &file_ctrl_proto_msgTypes[35]
mi := &file_ctrl_proto_msgTypes[37]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -2395,7 +2532,7 @@ func (x *RouterLinks_RouterLink) String() string {
func (*RouterLinks_RouterLink) ProtoMessage() {}
func (x *RouterLinks_RouterLink) ProtoReflect() protoreflect.Message {
mi := &file_ctrl_proto_msgTypes[35]
mi := &file_ctrl_proto_msgTypes[37]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2467,7 +2604,7 @@ type Route_Egress struct {
func (x *Route_Egress) Reset() {
*x = Route_Egress{}
if protoimpl.UnsafeEnabled {
mi := &file_ctrl_proto_msgTypes[37]
mi := &file_ctrl_proto_msgTypes[39]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -2480,7 +2617,7 @@ func (x *Route_Egress) String() string {
func (*Route_Egress) ProtoMessage() {}
func (x *Route_Egress) ProtoReflect() protoreflect.Message {
mi := &file_ctrl_proto_msgTypes[37]
mi := &file_ctrl_proto_msgTypes[39]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2537,7 +2674,7 @@ type Route_Forward struct {
func (x *Route_Forward) Reset() {
*x = Route_Forward{}
if protoimpl.UnsafeEnabled {
mi := &file_ctrl_proto_msgTypes[38]
mi := &file_ctrl_proto_msgTypes[40]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -2550,7 +2687,7 @@ func (x *Route_Forward) String() string {
func (*Route_Forward) ProtoMessage() {}
func (x *Route_Forward) ProtoReflect() protoreflect.Message {
mi := &file_ctrl_proto_msgTypes[38]
mi := &file_ctrl_proto_msgTypes[40]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2599,7 +2736,7 @@ type InspectResponse_InspectValue struct {
func (x *InspectResponse_InspectValue) Reset() {
*x = InspectResponse_InspectValue{}
if protoimpl.UnsafeEnabled {
mi := &file_ctrl_proto_msgTypes[41]
mi := &file_ctrl_proto_msgTypes[43]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -2612,7 +2749,7 @@ func (x *InspectResponse_InspectValue) String() string {
func (*InspectResponse_InspectValue) ProtoMessage() {}
func (x *InspectResponse_InspectValue) ProtoReflect() protoreflect.Message {
mi := &file_ctrl_proto_msgTypes[41]
mi := &file_ctrl_proto_msgTypes[43]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2938,98 +3075,116 @@ var file_ctrl_proto_rawDesc = []byte{
0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x7a,
0x69, 0x74, 0x69, 0x2e, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74,
0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61,
0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2a, 0xa8, 0x06, 0x0a, 0x0b, 0x43,
0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x65,
0x72, 0x6f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe8, 0x07, 0x12, 0x0d, 0x0a,
0x08, 0x44, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x10, 0xea, 0x07, 0x12, 0x16, 0x0a, 0x11,
0x4c, 0x69, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70,
0x65, 0x10, 0xeb, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x79, 0x70,
0x65, 0x10, 0xec, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70,
0x65, 0x10, 0xed, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x55, 0x6e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54,
0x79, 0x70, 0x65, 0x10, 0xee, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
0x73, 0x54, 0x79, 0x70, 0x65, 0x10, 0xef, 0x07, 0x12, 0x20, 0x0a, 0x1b, 0x54, 0x6f, 0x67, 0x67,
0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf0, 0x07, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x72,
0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf2, 0x07, 0x12,
0x20, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf3,
0x07, 0x12, 0x20, 0x0a, 0x1b, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69,
0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65,
0x10, 0xf4, 0x07, 0x12, 0x17, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf5, 0x07, 0x12, 0x18, 0x0a, 0x13,
0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54,
0x79, 0x70, 0x65, 0x10, 0xf6, 0x07, 0x12, 0x23, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf9, 0x07, 0x12, 0x20, 0x0a, 0x1b, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xfa, 0x07, 0x12, 0x11, 0x0a,
0x0c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x54, 0x79, 0x70, 0x65, 0x10, 0xfc, 0x07,
0x12, 0x1c, 0x0a, 0x17, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x10, 0x8a, 0x08, 0x12, 0x14,
0x0a, 0x0f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x54, 0x79, 0x70,
0x65, 0x10, 0x8b, 0x08, 0x12, 0x15, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x6f,
0x75, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x10, 0x8c, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x74, 0x72, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x65, 0x73, 0x54, 0x79, 0x70, 0x65, 0x10, 0x8d, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x52, 0x65, 0x6d,
0x6f, 0x76, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x8e, 0x08, 0x12, 0x1d, 0x0a, 0x18,
0x51, 0x75, 0x69, 0x65, 0x73, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x8f, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x44,
0x65, 0x71, 0x75, 0x69, 0x65, 0x73, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x90, 0x08, 0x12, 0x25, 0x0a, 0x20,
0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74,
0x6f, 0x72, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65,
0x10, 0x91, 0x08, 0x12, 0x26, 0x0a, 0x21, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54,
0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0x92, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x44,
0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, 0x74, 0x65,
0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x93, 0x08, 0x12,
0x1f, 0x0a, 0x1a, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e,
0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x9a, 0x08,
0x12, 0x23, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65,
0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79,
0x70, 0x65, 0x10, 0x9b, 0x08, 0x2a, 0x67, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x6f, 0x6e, 0x65, 0x48,
0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x65,
0x6e, 0x65, 0x72, 0x73, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x0a, 0x12, 0x18, 0x0a, 0x14,
0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x65,
0x61, 0x64, 0x65, 0x72, 0x10, 0x0b, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69,
0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x0c, 0x2a, 0x3a,
0x0a, 0x10, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
0x74, 0x79, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x61,
0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0x01, 0x2a, 0x35, 0x0a, 0x0c, 0x53, 0x65,
0x74, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x6e,
0x75, 0x73, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x12, 0x0a,
0x0e, 0x4e, 0x65, 0x77, 0x43, 0x74, 0x72, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x10,
0x01, 0x2a, 0x3d, 0x0a, 0x14, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x50,
0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, 0x66,
0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72,
0x65, 0x64, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x02,
0x2a, 0x52, 0x0a, 0x17, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e,
0x76, 0x61, 0x6c, 0x69, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x0e, 0x55,
0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12,
0x15, 0x0a, 0x11, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e,
0x61, 0x74, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x61, 0x64, 0x53, 0x74, 0x61,
0x74, 0x65, 0x10, 0x02, 0x2a, 0x83, 0x01, 0x0a, 0x0c, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x75,
0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73,
0x46, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x67, 0x72, 0x65, 0x73,
0x73, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x6b,
0x46, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x6f, 0x72, 0x77, 0x61,
0x72, 0x64, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x6e, 0x6b,
0x6e, 0x6f, 0x77, 0x6e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64,
0x46, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x69, 0x6e, 0x6b, 0x44,
0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x10, 0x05, 0x2a, 0x28, 0x0a, 0x08, 0x44, 0x65,
0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x10,
0x00, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x69,
0x6e, 0x6b, 0x10, 0x02, 0x2a, 0x34, 0x0a, 0x09, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74,
0x65, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x10, 0x00, 0x12, 0x0d,
0x0a, 0x09, 0x55, 0x6e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x10, 0x01, 0x12, 0x0b, 0x0a,
0x07, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x10, 0x02, 0x42, 0x27, 0x5a, 0x25, 0x67, 0x69,
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x7a, 0x69, 0x74,
0x69, 0x2f, 0x66, 0x61, 0x62, 0x72, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x2f, 0x63, 0x74, 0x72, 0x6c,
0x5f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x49,
0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f,
0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x41,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x03, 0x20,
0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65,
0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14,
0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x66,
0x6c, 0x61, 0x67, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65,
0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x65, 0x73, 0x22, 0x51, 0x0a, 0x16, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65,
0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0a,
0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x17, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e,
0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72,
0x66, 0x61, 0x63, 0x65, 0x73, 0x2a, 0xc5, 0x06, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12,
0x17, 0x0a, 0x12, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe8, 0x07, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x69, 0x61, 0x6c,
0x54, 0x79, 0x70, 0x65, 0x10, 0xea, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x4c, 0x69, 0x6e, 0x6b, 0x43,
0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x10, 0xeb, 0x07, 0x12,
0x0e, 0x0a, 0x09, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xec, 0x07, 0x12,
0x0e, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xed, 0x07, 0x12,
0x10, 0x0a, 0x0b, 0x55, 0x6e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xee,
0x07, 0x12, 0x10, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x54, 0x79, 0x70, 0x65,
0x10, 0xef, 0x07, 0x12, 0x20, 0x0a, 0x1b, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x50, 0x69, 0x70,
0x65, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79,
0x70, 0x65, 0x10, 0xf0, 0x07, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76,
0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf2, 0x07, 0x12, 0x20, 0x0a, 0x1b, 0x43, 0x72,
0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf3, 0x07, 0x12, 0x20, 0x0a, 0x1b,
0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf4, 0x07, 0x12, 0x17,
0x0a, 0x12, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x54, 0x79, 0x70, 0x65, 0x10, 0xf5, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x70, 0x65,
0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf6,
0x07, 0x12, 0x23, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72,
0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54,
0x79, 0x70, 0x65, 0x10, 0xf9, 0x07, 0x12, 0x20, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xfa, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x74,
0x69, 0x6e, 0x67, 0x73, 0x54, 0x79, 0x70, 0x65, 0x10, 0xfc, 0x07, 0x12, 0x1c, 0x0a, 0x17, 0x43,
0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x10, 0x8a, 0x08, 0x12, 0x14, 0x0a, 0x0f, 0x52, 0x6f, 0x75,
0x74, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x54, 0x79, 0x70, 0x65, 0x10, 0x8b, 0x08, 0x12,
0x15, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x54,
0x79, 0x70, 0x65, 0x10, 0x8c, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x43, 0x74, 0x72, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x79, 0x70,
0x65, 0x10, 0x8d, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x65,
0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x54, 0x79, 0x70, 0x65, 0x10, 0x8e, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x51, 0x75, 0x69, 0x65, 0x73,
0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54,
0x79, 0x70, 0x65, 0x10, 0x8f, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x44, 0x65, 0x71, 0x75, 0x69, 0x65,
0x73, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x54, 0x79, 0x70, 0x65, 0x10, 0x90, 0x08, 0x12, 0x25, 0x0a, 0x20, 0x56, 0x61, 0x6c, 0x69, 0x64,
0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x56, 0x32,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x91, 0x08, 0x12, 0x26,
0x0a, 0x21, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e,
0x61, 0x74, 0x6f, 0x72, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54,
0x79, 0x70, 0x65, 0x10, 0x92, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, 0x63, 0x6f, 0x6d, 0x6d,
0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x93, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x65,
0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x9a, 0x08, 0x12, 0x23, 0x0a, 0x1e, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x64,
0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x9b, 0x08,
0x12, 0x1b, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72,
0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x10, 0x9c, 0x08, 0x2a, 0x67, 0x0a,
0x0e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12,
0x0e, 0x0a, 0x0a, 0x4e, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x00, 0x12,
0x13, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x48, 0x65, 0x61, 0x64,
0x65, 0x72, 0x10, 0x0a, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4d, 0x65,
0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x0b, 0x12, 0x16,
0x0a, 0x12, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x48, 0x65,
0x61, 0x64, 0x65, 0x72, 0x10, 0x0c, 0x2a, 0x3a, 0x0a, 0x10, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72,
0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x61,
0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x12,
0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74,
0x10, 0x01, 0x2a, 0x35, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70,
0x65, 0x73, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74,
0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x65, 0x77, 0x43, 0x74, 0x72, 0x6c,
0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x10, 0x01, 0x2a, 0x3d, 0x0a, 0x14, 0x54, 0x65, 0x72,
0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63,
0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x0c,
0x0a, 0x08, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06,
0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x02, 0x2a, 0x52, 0x0a, 0x17, 0x54, 0x65, 0x72, 0x6d,
0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x52, 0x65, 0x61,
0x73, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x69,
0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x6e, 0x6b, 0x6e, 0x6f,
0x77, 0x6e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0c,
0x0a, 0x08, 0x42, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10, 0x02, 0x2a, 0x83, 0x01, 0x0a,
0x0c, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x10, 0x0a,
0x0c, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12,
0x0f, 0x0a, 0x0b, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x01,
0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x6b, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x02, 0x12,
0x10, 0x0a, 0x0c, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x10,
0x03, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x4f, 0x77, 0x6e, 0x65,
0x72, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x04, 0x12,
0x11, 0x0a, 0x0d, 0x4c, 0x69, 0x6e, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65,
0x10, 0x05, 0x2a, 0x28, 0x0a, 0x08, 0x44, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09,
0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x6e, 0x64,
0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x10, 0x02, 0x2a, 0x34, 0x0a, 0x09,
0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x65, 0x61,
0x6c, 0x74, 0x68, 0x79, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x6e, 0x68, 0x65, 0x61, 0x6c,
0x74, 0x68, 0x79, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64,
0x10, 0x02, 0x42, 0x27, 0x5a, 0x25, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x7a, 0x69, 0x74, 0x69, 0x2f, 0x66, 0x61, 0x62, 0x72, 0x69, 0x63,
0x2f, 0x70, 0x62, 0x2f, 0x63, 0x74, 0x72, 0x6c, 0x5f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
}
var (
@@ -3045,7 +3200,7 @@ func file_ctrl_proto_rawDescGZIP() []byte {
}
var file_ctrl_proto_enumTypes = make([]protoimpl.EnumInfo, 9)
var file_ctrl_proto_msgTypes = make([]protoimpl.MessageInfo, 42)
var file_ctrl_proto_msgTypes = make([]protoimpl.MessageInfo, 44)
var file_ctrl_proto_goTypes = []interface{}{
(ContentType)(0), // 0: ziti.ctrl.pb.ContentType
(ControlHeaders)(0), // 1: ziti.ctrl.pb.ControlHeaders
@@ -3086,52 +3241,55 @@ var file_ctrl_proto_goTypes = []interface{}{
(*PeerStateChange)(nil), // 36: ziti.ctrl.pb.PeerStateChange
(*PeerStateChanges)(nil), // 37: ziti.ctrl.pb.PeerStateChanges
(*RouterMetadata)(nil), // 38: ziti.ctrl.pb.RouterMetadata
nil, // 39: ziti.ctrl.pb.Settings.DataEntry
nil, // 40: ziti.ctrl.pb.CircuitRequest.PeerDataEntry
nil, // 41: ziti.ctrl.pb.CircuitConfirmation.IdleTimesEntry
nil, // 42: ziti.ctrl.pb.CreateTerminatorRequest.PeerDataEntry
nil, // 43: ziti.ctrl.pb.ValidateTerminatorsV2Response.StatesEntry
(*RouterLinks_RouterLink)(nil), // 44: ziti.ctrl.pb.RouterLinks.RouterLink
nil, // 45: ziti.ctrl.pb.Context.FieldsEntry
(*Route_Egress)(nil), // 46: ziti.ctrl.pb.Route.Egress
(*Route_Forward)(nil), // 47: ziti.ctrl.pb.Route.Forward
nil, // 48: ziti.ctrl.pb.Route.TagsEntry
nil, // 49: ziti.ctrl.pb.Route.Egress.PeerDataEntry
(*InspectResponse_InspectValue)(nil), // 50: ziti.ctrl.pb.InspectResponse.InspectValue
(*Interface)(nil), // 39: ziti.ctrl.pb.Interface
(*RouterInterfacesUpdate)(nil), // 40: ziti.ctrl.pb.RouterInterfacesUpdate
nil, // 41: ziti.ctrl.pb.Settings.DataEntry
nil, // 42: ziti.ctrl.pb.CircuitRequest.PeerDataEntry
nil, // 43: ziti.ctrl.pb.CircuitConfirmation.IdleTimesEntry
nil, // 44: ziti.ctrl.pb.CreateTerminatorRequest.PeerDataEntry
nil, // 45: ziti.ctrl.pb.ValidateTerminatorsV2Response.StatesEntry
(*RouterLinks_RouterLink)(nil), // 46: ziti.ctrl.pb.RouterLinks.RouterLink
nil, // 47: ziti.ctrl.pb.Context.FieldsEntry
(*Route_Egress)(nil), // 48: ziti.ctrl.pb.Route.Egress
(*Route_Forward)(nil), // 49: ziti.ctrl.pb.Route.Forward
nil, // 50: ziti.ctrl.pb.Route.TagsEntry
nil, // 51: ziti.ctrl.pb.Route.Egress.PeerDataEntry
(*InspectResponse_InspectValue)(nil), // 52: ziti.ctrl.pb.InspectResponse.InspectValue
}
var file_ctrl_proto_depIdxs = []int32{
39, // 0: ziti.ctrl.pb.Settings.data:type_name -> ziti.ctrl.pb.Settings.DataEntry
40, // 1: ziti.ctrl.pb.CircuitRequest.peerData:type_name -> ziti.ctrl.pb.CircuitRequest.PeerDataEntry
41, // 2: ziti.ctrl.pb.CircuitConfirmation.idleTimes:type_name -> ziti.ctrl.pb.CircuitConfirmation.IdleTimesEntry
42, // 3: ziti.ctrl.pb.CreateTerminatorRequest.peerData:type_name -> ziti.ctrl.pb.CreateTerminatorRequest.PeerDataEntry
41, // 0: ziti.ctrl.pb.Settings.data:type_name -> ziti.ctrl.pb.Settings.DataEntry
42, // 1: ziti.ctrl.pb.CircuitRequest.peerData:type_name -> ziti.ctrl.pb.CircuitRequest.PeerDataEntry
43, // 2: ziti.ctrl.pb.CircuitConfirmation.idleTimes:type_name -> ziti.ctrl.pb.CircuitConfirmation.IdleTimesEntry
44, // 3: ziti.ctrl.pb.CreateTerminatorRequest.peerData:type_name -> ziti.ctrl.pb.CreateTerminatorRequest.PeerDataEntry
4, // 4: ziti.ctrl.pb.CreateTerminatorRequest.precedence:type_name -> ziti.ctrl.pb.TerminatorPrecedence
15, // 5: ziti.ctrl.pb.ValidateTerminatorsRequest.terminators:type_name -> ziti.ctrl.pb.Terminator
15, // 6: ziti.ctrl.pb.ValidateTerminatorsV2Request.terminators:type_name -> ziti.ctrl.pb.Terminator
5, // 7: ziti.ctrl.pb.RouterTerminatorState.reason:type_name -> ziti.ctrl.pb.TerminatorInvalidReason
43, // 8: ziti.ctrl.pb.ValidateTerminatorsV2Response.states:type_name -> ziti.ctrl.pb.ValidateTerminatorsV2Response.StatesEntry
45, // 8: ziti.ctrl.pb.ValidateTerminatorsV2Response.states:type_name -> ziti.ctrl.pb.ValidateTerminatorsV2Response.StatesEntry
4, // 9: ziti.ctrl.pb.UpdateTerminatorRequest.precedence:type_name -> ziti.ctrl.pb.TerminatorPrecedence
22, // 10: ziti.ctrl.pb.LinkConnected.conns:type_name -> ziti.ctrl.pb.LinkConn
44, // 11: ziti.ctrl.pb.RouterLinks.links:type_name -> ziti.ctrl.pb.RouterLinks.RouterLink
46, // 11: ziti.ctrl.pb.RouterLinks.links:type_name -> ziti.ctrl.pb.RouterLinks.RouterLink
6, // 12: ziti.ctrl.pb.Fault.subject:type_name -> ziti.ctrl.pb.FaultSubject
45, // 13: ziti.ctrl.pb.Context.fields:type_name -> ziti.ctrl.pb.Context.FieldsEntry
46, // 14: ziti.ctrl.pb.Route.egress:type_name -> ziti.ctrl.pb.Route.Egress
47, // 15: ziti.ctrl.pb.Route.forwards:type_name -> ziti.ctrl.pb.Route.Forward
47, // 13: ziti.ctrl.pb.Context.fields:type_name -> ziti.ctrl.pb.Context.FieldsEntry
48, // 14: ziti.ctrl.pb.Route.egress:type_name -> ziti.ctrl.pb.Route.Egress
49, // 15: ziti.ctrl.pb.Route.forwards:type_name -> ziti.ctrl.pb.Route.Forward
26, // 16: ziti.ctrl.pb.Route.context:type_name -> ziti.ctrl.pb.Context
48, // 17: ziti.ctrl.pb.Route.tags:type_name -> ziti.ctrl.pb.Route.TagsEntry
50, // 18: ziti.ctrl.pb.InspectResponse.values:type_name -> ziti.ctrl.pb.InspectResponse.InspectValue
50, // 17: ziti.ctrl.pb.Route.tags:type_name -> ziti.ctrl.pb.Route.TagsEntry
52, // 18: ziti.ctrl.pb.InspectResponse.values:type_name -> ziti.ctrl.pb.InspectResponse.InspectValue
32, // 19: ziti.ctrl.pb.Listeners.listeners:type_name -> ziti.ctrl.pb.Listener
8, // 20: ziti.ctrl.pb.PeerStateChange.state:type_name -> ziti.ctrl.pb.PeerState
32, // 21: ziti.ctrl.pb.PeerStateChange.listeners:type_name -> ziti.ctrl.pb.Listener
36, // 22: ziti.ctrl.pb.PeerStateChanges.changes:type_name -> ziti.ctrl.pb.PeerStateChange
2, // 23: ziti.ctrl.pb.RouterMetadata.capabilities:type_name -> ziti.ctrl.pb.RouterCapability
18, // 24: ziti.ctrl.pb.ValidateTerminatorsV2Response.StatesEntry.value:type_name -> ziti.ctrl.pb.RouterTerminatorState
49, // 25: ziti.ctrl.pb.Route.Egress.peerData:type_name -> ziti.ctrl.pb.Route.Egress.PeerDataEntry
7, // 26: ziti.ctrl.pb.Route.Forward.dstType:type_name -> ziti.ctrl.pb.DestType
27, // [27:27] is the sub-list for method output_type
27, // [27:27] is the sub-list for method input_type
27, // [27:27] is the sub-list for extension type_name
27, // [27:27] is the sub-list for extension extendee
0, // [0:27] is the sub-list for field type_name
39, // 24: ziti.ctrl.pb.RouterInterfacesUpdate.interfaces:type_name -> ziti.ctrl.pb.Interface
18, // 25: ziti.ctrl.pb.ValidateTerminatorsV2Response.StatesEntry.value:type_name -> ziti.ctrl.pb.RouterTerminatorState
51, // 26: ziti.ctrl.pb.Route.Egress.peerData:type_name -> ziti.ctrl.pb.Route.Egress.PeerDataEntry
7, // 27: ziti.ctrl.pb.Route.Forward.dstType:type_name -> ziti.ctrl.pb.DestType
28, // [28:28] is the sub-list for method output_type
28, // [28:28] is the sub-list for method input_type
28, // [28:28] is the sub-list for extension type_name
28, // [28:28] is the sub-list for extension extendee
0, // [0:28] is the sub-list for field type_name
}
func init() { file_ctrl_proto_init() }
@@ -3500,8 +3658,20 @@ func file_ctrl_proto_init() {
return nil
}
}
file_ctrl_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RouterLinks_RouterLink); i {
file_ctrl_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Interface); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_ctrl_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RouterInterfacesUpdate); i {
case 0:
return &v.state
case 1:
@@ -3513,6 +3683,18 @@ func file_ctrl_proto_init() {
}
}
file_ctrl_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RouterLinks_RouterLink); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_ctrl_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Route_Egress); i {
case 0:
return &v.state
@@ -3524,7 +3706,7 @@ func file_ctrl_proto_init() {
return nil
}
}
file_ctrl_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
file_ctrl_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Route_Forward); i {
case 0:
return &v.state
@@ -3536,7 +3718,7 @@ func file_ctrl_proto_init() {
return nil
}
}
file_ctrl_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
file_ctrl_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*InspectResponse_InspectValue); i {
case 0:
return &v.state
@@ -3555,7 +3737,7 @@ func file_ctrl_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_ctrl_proto_rawDesc,
NumEnums: 9,
NumMessages: 42,
NumMessages: 44,
NumExtensions: 0,
NumServices: 0,
},
+15
View File
@@ -42,6 +42,8 @@ enum ContentType {
PeerStateChangeRequestType = 1050;
UpdateClusterLeaderRequestType = 1051;
UpdateRouterInterfaces = 1052;
}
enum ControlHeaders {
@@ -292,4 +294,17 @@ message PeerStateChanges {
message RouterMetadata {
repeated RouterCapability capabilities = 1;
}
message Interface {
string name = 1;
string hardwareAddress = 2;
int64 mtu = 3;
int64 index = 4;
uint64 flags = 5;
repeated string addresses = 6;
}
message RouterInterfacesUpdate {
repeated Interface interfaces = 1;
}
+4
View File
@@ -113,3 +113,7 @@ func (request *PeerStateChanges) GetContentType() int32 {
func (request *UpdateClusterLeader) GetContentType() int32 {
return int32(ContentType_UpdateClusterLeaderRequestType)
}
func (request *RouterInterfacesUpdate) GetContentType() int32 {
return int32(ContentType_UpdateRouterInterfaces)
}
File diff suppressed because it is too large Load Diff
+11
View File
@@ -195,6 +195,15 @@ message ApiAddress {
string Version = 2;
}
message Interface {
string name = 1;
string hardwareAddress = 2;
int64 mtu = 3;
int64 index = 4;
uint64 flags = 5;
repeated string addresses = 6;
}
// Edge Routers
message EdgeRouter {
string id = 1;
@@ -212,6 +221,7 @@ message EdgeRouter {
uint32 cost = 13;
bool noTraversal = 14;
bool disabled = 15;
repeated Interface interfaces = 16;
}
message ReEnrollEdgeRouterCmd {
@@ -328,6 +338,7 @@ message Identity {
optional google.protobuf.Timestamp disabledAt = 18;
optional google.protobuf.Timestamp disabledUntil = 19;
repeated ServiceConfig serviceConfigs = 20;
repeated Interface interfaces = 21;
}
message CreateIdentityWithEnrollmentsCmd {
+17
View File
@@ -17,6 +17,7 @@
package api_impl
import (
"github.com/openziti/foundation/v2/util"
"github.com/openziti/ziti/controller/api"
"github.com/openziti/ziti/controller/model"
"github.com/openziti/ziti/controller/network"
@@ -135,5 +136,21 @@ func (RouterModelMapper) ToApi(n *network.Network, _ api.RequestContext, router
}
}
for _, intf := range router.Interfaces {
apiIntf := &rest_model.Interface{
HardwareAddress: &intf.HardwareAddress,
Index: &intf.Index,
IsBroadcast: util.Ptr(intf.IsBroadcast()),
IsLoopback: util.Ptr(intf.IsLoopback()),
IsMulticast: util.Ptr(intf.IsMulticast()),
IsRunning: util.Ptr(intf.IsRunning()),
IsUp: util.Ptr(intf.IsUp()),
Mtu: &intf.MTU,
Name: &intf.Name,
Addresses: intf.Addresses,
}
ret.Interfaces = append(ret.Interfaces, apiIntf)
}
return ret, nil
}
-1
View File
@@ -180,7 +180,6 @@ func (store *edgeRouterStoreImpl) FillEntity(entity *EdgeRouter, bucket *boltz.T
entity.RoleAttributes = bucket.GetStringList(FieldRoleAttributes)
entity.AppData = bucket.GetMap(FieldEdgeRouterAppData)
}
func (store *edgeRouterStoreImpl) PersistEntity(entity *EdgeRouter, ctx *boltz.PersistContext) {
+3
View File
@@ -112,6 +112,7 @@ type Identity struct {
DisabledUntil *time.Time `json:"disabledUntil"`
Disabled bool `json:"disabled"`
ServiceConfigs map[string]map[string]string `json:"serviceConfigs"`
Interfaces []*Interface `json:"interfaces"`
}
func (entity *Identity) GetEntityType() string {
@@ -268,6 +269,7 @@ func (store *identityStoreImpl) FillEntity(entity *Identity, bucket *boltz.Typed
}
store.fillServiceConfig(entity, bucket)
entity.Interfaces = loadInterfaces(bucket)
}
func (store *identityStoreImpl) fillServiceConfig(entity *Identity, entityBucket *boltz.TypedBucket) {
@@ -383,6 +385,7 @@ func (store *identityStoreImpl) PersistEntity(entity *Identity, ctx *boltz.Persi
}
store.persistServiceConfigs(entity, ctx)
storeInterfaces(entity.Interfaces, ctx)
}
func (store *identityStoreImpl) persistServiceConfigs(entity *Identity, ctx *boltz.PersistContext) {
+137
View File
@@ -0,0 +1,137 @@
/*
Copyright NetFoundry Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package db
import (
"encoding/json"
"fmt"
"github.com/openziti/storage/boltz"
"net"
)
const (
FieldInterfaces = "interfaces"
FieldInterfaceHardwareAddress = "addr"
FieldInterfaceMtu = "mtu"
FieldInterfaceIndex = "index"
FieldInterfaceFlags = "flags"
FieldInterfaceAddresses = "addrs"
)
type Interface struct {
Name string `json:"name"`
HardwareAddress string `json:"hardwareAddress"`
MTU int64 `json:"mtu"`
Index int64 `json:"index"`
Flags uint64 `json:"flags"`
Addresses []string `json:"addresses"`
}
func (self *Interface) IsUp() bool {
return self.IsFlagSet(net.FlagUp)
}
func (self *Interface) IsRunning() bool {
return self.IsFlagSet(net.FlagRunning)
}
func (self *Interface) IsLoopback() bool {
return self.IsFlagSet(net.FlagLoopback)
}
func (self *Interface) IsBroadcast() bool {
return self.IsFlagSet(net.FlagBroadcast)
}
func (self *Interface) IsMulticast() bool {
return self.IsFlagSet(net.FlagMulticast)
}
func (self *Interface) IsFlagSet(f net.Flags) bool {
return net.Flags(self.Flags)&f == f
}
func (self *Interface) MarshalJSON() ([]byte, error) {
result := map[string]any{}
result["name"] = self.Name
result["hardwareAddress"] = self.HardwareAddress
result["mtu"] = self.MTU
result["index"] = self.Index
result["isBroadcast"] = self.IsBroadcast()
result["isLoopback"] = self.IsLoopback()
result["isMulticast"] = self.IsMulticast()
result["isRunning"] = self.IsRunning()
result["isUp"] = self.IsUp()
result["addresses"] = self.Addresses
return json.Marshal(result)
}
func (self *Interface) toBoltMap() map[string]any {
result := map[string]any{}
result[FieldName] = self.Name
result[FieldInterfaceHardwareAddress] = self.HardwareAddress
result[FieldInterfaceMtu] = self.MTU
result[FieldInterfaceIndex] = self.Index
result[FieldInterfaceFlags] = int64(self.Flags)
addresses := make([]any, len(self.Addresses))
for i, address := range self.Addresses {
addresses[i] = address
}
result[FieldInterfaceAddresses] = addresses
return result
}
func (self *Interface) FillEntity(bucket *boltz.TypedBucket) {
self.Name = bucket.GetStringOrError(FieldName)
self.HardwareAddress = bucket.GetStringOrError(FieldInterfaceHardwareAddress)
self.MTU = bucket.GetInt64WithDefault(FieldInterfaceMtu, 0)
self.Index = bucket.GetInt64WithDefault(FieldInterfaceIndex, 0)
self.Flags = uint64(bucket.GetInt64WithDefault(FieldInterfaceFlags, 0))
addresses := bucket.GetList(FieldInterfaceAddresses)
for _, address := range addresses {
self.Addresses = append(self.Addresses, address.(string))
}
}
func loadInterfaces(bucket *boltz.TypedBucket) []*Interface {
var result []*Interface
if interfacesBucket := bucket.GetBucket(FieldInterfaces); interfacesBucket != nil {
err := interfacesBucket.ForEachTypedBucket(func(_ string, intfBucket *boltz.TypedBucket) error {
intf := &Interface{}
intf.FillEntity(intfBucket)
result = append(result, intf)
return bucket.Err
})
if err != nil {
bucket.SetError(err)
}
}
return result
}
func storeInterfaces(interfaces []*Interface, ctx *boltz.PersistContext) {
if ctx.ProceedWithSet(FieldInterfaces) {
m := map[string]any{}
for idx, v := range interfaces {
m[fmt.Sprintf("%d.%s", idx, v.Name)] = v.toBoltMap()
}
ctx.SetMap(FieldInterfaces, m)
}
}
+15 -5
View File
@@ -20,6 +20,7 @@ import (
"github.com/openziti/storage/ast"
"github.com/openziti/storage/boltz"
"go.etcd.io/bbolt"
"time"
)
const (
@@ -32,11 +33,12 @@ const (
type Router struct {
boltz.BaseExtEntity
Name string `json:"name"`
Fingerprint *string `json:"fingerprint"`
Cost uint16 `json:"cost"`
NoTraversal bool `json:"noTraversal"`
Disabled bool `json:"disabled"`
Name string `json:"name"`
Fingerprint *string `json:"fingerprint"`
Cost uint16 `json:"cost"`
NoTraversal bool `json:"noTraversal"`
Disabled bool `json:"disabled"`
Interfaces []*Interface `json:"interfaces"`
}
func (entity *Router) GetEntityType() string {
@@ -93,6 +95,7 @@ func (self *routerStoreImpl) FillEntity(entity *Router, bucket *boltz.TypedBucke
entity.Cost = uint16(bucket.GetInt32WithDefault(FieldRouterCost, 0))
entity.NoTraversal = bucket.GetBoolWithDefault(FieldRouterNoTraversal, false)
entity.Disabled = bucket.GetBoolWithDefault(FieldRouterDisabled, false)
entity.Interfaces = loadInterfaces(bucket)
}
func (self *routerStoreImpl) PersistEntity(entity *Router, ctx *boltz.PersistContext) {
@@ -102,6 +105,13 @@ func (self *routerStoreImpl) PersistEntity(entity *Router, ctx *boltz.PersistCon
ctx.SetInt32(FieldRouterCost, int32(entity.Cost))
ctx.SetBool(FieldRouterNoTraversal, entity.NoTraversal)
ctx.SetBool(FieldRouterDisabled, entity.Disabled)
storeInterfaces(entity.Interfaces, ctx)
}
func (self *routerStoreImpl) UpdateInterfaces(entity *Router, interfaces map[string]*Interface, ctx *boltz.PersistContext) {
now := time.Now()
ctx.Bucket.SetTimeP(boltz.FieldUpdatedAt, &now, nil)
}
func (store *routerStoreImpl) GetNameIndex() boltz.ReadIndex {
+1
View File
@@ -73,6 +73,7 @@ func (self *bindHandler) BindChannel(binding channel.Binding) error {
binding.AddTypedReceiveHandler(newQuiesceRouterHandler(self.router, self.network))
binding.AddTypedReceiveHandler(newDequiesceRouterHandler(self.router, self.network))
binding.AddTypedReceiveHandler(newDecommissionRouterHandler(self.router, self.network))
binding.AddTypedReceiveHandler(newUpdateRouterInterfacesHandler(self.router, self.network))
binding.AddTypedReceiveHandler(newPingHandler())
binding.AddTypedReceiveHandler(&channel.AsyncFunctionReceiveAdapter{
Type: int32(ctrl_pb.ContentType_ValidateTerminatorsV2ResponseType),
@@ -0,0 +1,83 @@
/*
Copyright NetFoundry Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package handler_ctrl
import (
"fmt"
"github.com/michaelquigley/pfxlog"
"github.com/openziti/channel/v4"
"github.com/openziti/ziti/common/handler_common"
"github.com/openziti/ziti/common/pb/ctrl_pb"
"github.com/openziti/ziti/controller/model"
"github.com/openziti/ziti/controller/network"
"google.golang.org/protobuf/proto"
)
type updateRouterInterfacesHandler struct {
baseHandler
}
func newUpdateRouterInterfacesHandler(r *model.Router, network *network.Network) *updateRouterInterfacesHandler {
return &updateRouterInterfacesHandler{
baseHandler: baseHandler{
router: r,
network: network,
},
}
}
func (self *updateRouterInterfacesHandler) ContentType() int32 {
return int32(ctrl_pb.ContentType_UpdateRouterInterfaces)
}
func (self *updateRouterInterfacesHandler) HandleReceive(msg *channel.Message, ch channel.Channel) {
log := pfxlog.ContextLogger(ch.Label()).Entry
request := &ctrl_pb.RouterInterfacesUpdate{}
if err := proto.Unmarshal(msg.Body, request); err != nil {
log.WithError(err).Error("could not unmarshal update router interfaces request")
return
}
go self.updateRouterInterfaces(msg, ch, request)
}
func (self *updateRouterInterfacesHandler) updateRouterInterfaces(msg *channel.Message, ch channel.Channel, request *ctrl_pb.RouterInterfacesUpdate) {
log := pfxlog.Logger().WithField("routerId", self.router.Id)
var interfaces []*model.Interface
for _, intf := range request.Interfaces {
interfaces = append(interfaces, &model.Interface{
Name: intf.Name,
HardwareAddress: intf.HardwareAddress,
MTU: intf.Mtu,
Index: intf.Index,
Flags: intf.Flags,
Addresses: intf.Addresses,
})
}
ctx := self.newChangeContext(ch, "fabric.create.terminator")
err := self.network.Managers.Router.UpdateRouterInterfaces(self.router.Id, interfaces, ctx)
if err != nil {
log.WithError(err).Error("could not update router interfaces")
handler_common.SendFailure(msg, ch, fmt.Errorf("failed to update router network interfaces (%w)", err).Error())
} else {
log.Debug("router network interfaces updated")
handler_common.SendSuccess(msg, ch, "success")
}
}
@@ -17,6 +17,7 @@
package routes
import (
"github.com/openziti/foundation/v2/util"
"github.com/openziti/foundation/v2/versions"
"strings"
@@ -164,6 +165,22 @@ func MapEdgeRouterToRestModel(ae *env.AppEnv, router *model.EdgeRouter) (*rest_m
UnverifiedCertPem: router.UnverifiedCertPem,
}
for _, intf := range router.Interfaces {
apiIntf := &rest_model.Interface{
HardwareAddress: &intf.HardwareAddress,
Index: &intf.Index,
IsBroadcast: util.Ptr(intf.IsBroadcast()),
IsLoopback: util.Ptr(intf.IsLoopback()),
IsMulticast: util.Ptr(intf.IsMulticast()),
IsRunning: util.Ptr(intf.IsRunning()),
IsUp: util.Ptr(intf.IsUp()),
Mtu: &intf.MTU,
Name: &intf.Name,
Addresses: intf.Addresses,
}
ret.Interfaces = append(ret.Interfaces, apiIntf)
}
if !router.IsVerified {
var enrollments []*model.Enrollment
@@ -23,6 +23,7 @@ import (
"github.com/michaelquigley/pfxlog"
"github.com/openziti/edge-api/rest_model"
"github.com/openziti/foundation/v2/stringz"
"github.com/openziti/foundation/v2/util"
"github.com/openziti/sdk-golang/ziti"
"github.com/openziti/ziti/controller/db"
"github.com/openziti/ziti/controller/env"
@@ -300,6 +301,23 @@ func MapIdentityToRestModel(ae *env.AppEnv, identity *model.Identity) (*rest_mod
Type: ToEntityRef(identityType.Name, identityType, IdentityTypeLinkFactory),
TypeID: &identityType.Id,
}
for _, intf := range identity.Interfaces {
apiIntf := &rest_model.Interface{
HardwareAddress: &intf.HardwareAddress,
Index: &intf.Index,
IsBroadcast: util.Ptr(intf.IsBroadcast()),
IsLoopback: util.Ptr(intf.IsLoopback()),
IsMulticast: util.Ptr(intf.IsMulticast()),
IsRunning: util.Ptr(intf.IsRunning()),
IsUp: util.Ptr(intf.IsUp()),
Mtu: &intf.MTU,
Name: &intf.Name,
Addresses: intf.Addresses,
}
ret.Interfaces = append(ret.Interfaces, apiIntf)
}
fillInfo(ret, identity.EnvInfo, identity.SdkInfo)
ret.Authenticators = &rest_model.IdentityAuthenticators{}
+26 -2
View File
@@ -458,6 +458,17 @@ func (self *EdgeRouterManager) EdgeRouterToProtobuf(entity *EdgeRouter) (*edge_c
Disabled: entity.Disabled,
}
for _, intf := range entity.Interfaces {
msg.Interfaces = append(msg.Interfaces, &edge_cmd_pb.Interface{
Name: intf.Name,
HardwareAddress: intf.HardwareAddress,
Mtu: intf.MTU,
Index: intf.Index,
Flags: intf.Flags,
Addresses: intf.Addresses,
})
}
return msg, nil
}
@@ -475,7 +486,7 @@ func (self *EdgeRouterManager) ProtobufToEdgeRouter(msg *edge_cmd_pb.EdgeRouter)
return nil, err
}
return &EdgeRouter{
result := &EdgeRouter{
BaseEntity: models.BaseEntity{
Id: msg.Id,
Tags: edge_cmd_pb.DecodeTags(msg.Tags),
@@ -493,7 +504,20 @@ func (self *EdgeRouterManager) ProtobufToEdgeRouter(msg *edge_cmd_pb.EdgeRouter)
Cost: uint16(msg.Cost),
NoTraversal: msg.NoTraversal,
Disabled: msg.Disabled,
}, nil
}
for _, intf := range msg.Interfaces {
result.Interfaces = append(result.Interfaces, &Interface{
Name: intf.Name,
HardwareAddress: intf.HardwareAddress,
MTU: intf.Mtu,
Index: intf.Index,
Flags: intf.Flags,
Addresses: intf.Addresses,
})
}
return result, nil
}
func (self *EdgeRouterManager) Unmarshall(bytes []byte) (*EdgeRouter, error) {
+4 -1
View File
@@ -40,6 +40,7 @@ type EdgeRouter struct {
Cost uint16
NoTraversal bool
Disabled bool
Interfaces []*Interface
}
func (self *EdgeRouter) GetName() string {
@@ -54,6 +55,7 @@ func (entity *EdgeRouter) toBoltEntityForCreate(*bbolt.Tx, Env) (*db.EdgeRouter,
Cost: entity.Cost,
NoTraversal: entity.NoTraversal,
Disabled: entity.Disabled,
Interfaces: InterfacesToBolt(entity.Interfaces),
},
RoleAttributes: entity.RoleAttributes,
IsVerified: false,
@@ -73,6 +75,7 @@ func (entity *EdgeRouter) toBoltEntityForUpdate(*bbolt.Tx, Env, boltz.FieldCheck
Cost: entity.Cost,
NoTraversal: entity.NoTraversal,
Disabled: entity.Disabled,
Interfaces: InterfacesToBolt(entity.Interfaces),
},
RoleAttributes: entity.RoleAttributes,
IsVerified: entity.IsVerified,
@@ -98,6 +101,6 @@ func (entity *EdgeRouter) fillFrom(_ Env, _ *bbolt.Tx, boltEdgeRouter *db.EdgeRo
entity.Cost = boltEdgeRouter.Cost
entity.NoTraversal = boltEdgeRouter.NoTraversal
entity.Disabled = boltEdgeRouter.Disabled
entity.Interfaces = InterfacesFromBolt(boltEdgeRouter.Interfaces)
return nil
}
+26 -2
View File
@@ -690,6 +690,17 @@ func (self *IdentityManager) IdentityToProtobuf(entity *Identity) (*edge_cmd_pb.
}
}
for _, intf := range entity.Interfaces {
msg.Interfaces = append(msg.Interfaces, &edge_cmd_pb.Interface{
Name: intf.Name,
HardwareAddress: intf.HardwareAddress,
Mtu: intf.MTU,
Index: intf.Index,
Flags: intf.Flags,
Addresses: intf.Addresses,
})
}
return msg, nil
}
@@ -756,7 +767,7 @@ func (self *IdentityManager) ProtobufToIdentity(msg *edge_cmd_pb.Identity) (*Ide
serviceMap[serviceConfig.ConfigTypeId] = serviceConfig.ConfigId
}
return &Identity{
result := &Identity{
BaseEntity: models.BaseEntity{
Id: msg.Id,
Tags: edge_cmd_pb.DecodeTags(msg.Tags),
@@ -779,7 +790,20 @@ func (self *IdentityManager) ProtobufToIdentity(msg *edge_cmd_pb.Identity) (*Ide
DisabledAt: pbTimeToTimePtr(msg.DisabledAt),
DisabledUntil: pbTimeToTimePtr(msg.DisabledUntil),
ServiceConfigs: serviceConfigs,
}, nil
}
for _, intf := range msg.Interfaces {
result.Interfaces = append(result.Interfaces, &Interface{
Name: intf.Name,
HardwareAddress: intf.HardwareAddress,
MTU: intf.Mtu,
Index: intf.Index,
Flags: intf.Flags,
Addresses: intf.Addresses,
})
}
return result, nil
}
func (self *IdentityManager) Unmarshall(bytes []byte) (*Identity, error) {
+4
View File
@@ -96,6 +96,7 @@ type Identity struct {
DisabledAt *time.Time
DisabledUntil *time.Time
ServiceConfigs map[string]map[string]string
Interfaces []*Interface
}
func (entity *Identity) toBoltEntityForCreate(_ *bbolt.Tx, env Env) (*db.Identity, error) {
@@ -136,6 +137,7 @@ func (entity *Identity) toBoltEntityForCreate(_ *bbolt.Tx, env Env) (*db.Identit
DisabledAt: entity.DisabledAt,
DisabledUntil: entity.DisabledUntil,
ServiceConfigs: entity.ServiceConfigs,
Interfaces: InterfacesToBolt(entity.Interfaces),
}
if entity.EnvInfo != nil {
@@ -246,6 +248,7 @@ func (entity *Identity) toBoltEntityForUpdate(tx *bbolt.Tx, env Env, checker bol
DisabledUntil: entity.DisabledUntil,
IsAdmin: entity.IsAdmin,
ServiceConfigs: entity.ServiceConfigs,
Interfaces: InterfacesToBolt(entity.Interfaces),
}
identityStore := env.GetManagers().Identity.GetStore()
@@ -291,6 +294,7 @@ func (entity *Identity) fillFrom(env Env, _ *bbolt.Tx, boltIdentity *db.Identity
entity.DisabledAt = boltIdentity.DisabledAt
entity.Disabled = boltIdentity.Disabled
entity.ServiceConfigs = boltIdentity.ServiceConfigs
entity.Interfaces = InterfacesFromBolt(boltIdentity.Interfaces)
fillModelInfo(entity, boltIdentity.EnvInfo, boltIdentity.SdkInfo)
return nil
+133
View File
@@ -0,0 +1,133 @@
/*
Copyright NetFoundry Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package model
import (
"github.com/openziti/foundation/v2/stringz"
"github.com/openziti/ziti/controller/db"
"net"
"sort"
)
type Interface struct {
Name string `json:"name"`
HardwareAddress string `json:"hardwareAddress"`
MTU int64 `json:"mtu"`
Index int64 `json:"index"`
Flags uint64 `json:"flags"`
Addresses []string `json:"addresses"`
}
func (self *Interface) IsUp() bool {
return self.IsFlagSet(net.FlagUp)
}
func (self *Interface) IsRunning() bool {
return self.IsFlagSet(net.FlagRunning)
}
func (self *Interface) IsLoopback() bool {
return self.IsFlagSet(net.FlagLoopback)
}
func (self *Interface) IsBroadcast() bool {
return self.IsFlagSet(net.FlagBroadcast)
}
func (self *Interface) IsMulticast() bool {
return self.IsFlagSet(net.FlagMulticast)
}
func (self *Interface) IsFlagSet(f net.Flags) bool {
return net.Flags(self.Flags)&f == f
}
func (entity *Interface) ToBolt() *db.Interface {
return &db.Interface{
Name: entity.Name,
HardwareAddress: entity.HardwareAddress,
MTU: entity.MTU,
Index: entity.Index,
Flags: entity.Flags,
Addresses: entity.Addresses,
}
}
func InterfacesToBolt(val []*Interface) []*db.Interface {
var result []*db.Interface
for _, v := range val {
result = append(result, v.ToBolt())
}
return result
}
func InterfaceFromBolt(entity *db.Interface) *Interface {
return &Interface{
Name: entity.Name,
HardwareAddress: entity.HardwareAddress,
MTU: entity.MTU,
Index: entity.Index,
Flags: entity.Flags,
Addresses: entity.Addresses,
}
}
func InterfacesFromBolt(m []*db.Interface) []*Interface {
var result []*Interface
for _, v := range m {
result = append(result, InterfaceFromBolt(v))
}
return result
}
func didInterfacesChange(old, new []*Interface) bool {
sort.Slice(old, func(i, j int) bool {
return old[i].Name < old[j].Name
})
sort.Slice(new, func(i, j int) bool {
return new[i].Name < new[j].Name
})
if len(old) != len(new) {
return true
}
for idx, iface := range old {
if didInterfaceChange(iface, new[idx]) {
return true
}
}
return false
}
func didInterfaceChange(a, b *Interface) bool {
changed := a.Name != b.Name ||
a.Index != b.Index ||
a.Flags != b.Flags ||
a.MTU != b.MTU ||
a.HardwareAddress != b.HardwareAddress
if changed {
return true
}
sort.Strings(a.Addresses)
sort.Strings(b.Addresses)
return !stringz.EqualSlices(a.Addresses, b.Addresses)
}
+65 -2
View File
@@ -230,6 +230,27 @@ func (self *RouterManager) ApplyUpdate(cmd *command.UpdateEntityCommand[*Router]
return self.ApplyDequiesce(cmd, ctx)
}
if cmd.UpdatedFields.IsUpdated(db.FieldInterfaces) {
ctx.AddPreCommitAction(func(ctx boltz.MutateContext) error {
er, _, err := self.env.GetStores().EdgeRouter.FindById(ctx.Tx(), cmd.Entity.Id)
if err != nil {
return err
}
if er != nil && er.IsTunnelerEnabled {
id, err := self.env.GetStores().Identity.LoadById(ctx.Tx(), cmd.Entity.Id)
if err != nil {
pfxlog.Logger().Error("er/t is missing associated identity")
return nil
}
id.Interfaces = InterfacesToBolt(cmd.Entity.Interfaces)
return self.env.GetStores().Identity.Update(ctx, id, fields.UpdatedFieldsMap{
db.FieldInterfaces: struct{}{},
})
}
return nil
})
}
return self.updateEntity(cmd.Entity, cmd.UpdatedFields, ctx)
}
@@ -293,6 +314,24 @@ func (self *RouterManager) ApplyDequiesce(cmd *command.UpdateEntityCommand[*Rout
})
}
func (self *RouterManager) UpdateRouterInterfaces(routerId string, interfaces []*Interface, ctx *change.Context) error {
r, err := self.Read(routerId)
if err != nil {
return err
}
if !didInterfacesChange(interfaces, r.Interfaces) {
pfxlog.Logger().WithField("routerId", routerId).Debug("network interfaces submitted, but no change detected")
return nil
}
r.Interfaces = interfaces
updatedFields := fields.UpdatedFieldsMap{
db.FieldInterfaces: struct{}{},
}
return self.Update(r, updatedFields, ctx)
}
func (self *RouterManager) UpdateTerminators(router *Router, ctx boltz.MutateContext, f func(terminator *db.Terminator) error) error {
return self.GetDb().Update(ctx, func(ctx boltz.MutateContext) error {
terminatorIds := self.Store.GetRelatedEntitiesIdList(ctx.Tx(), router.Id, db.EntityTypeTerminators)
@@ -384,6 +423,17 @@ func (self *RouterManager) Marshall(entity *Router) ([]byte, error) {
Tags: tags,
}
for _, intf := range entity.Interfaces {
msg.Interfaces = append(msg.Interfaces, &cmd_pb.Interface{
Name: intf.Name,
HardwareAddress: intf.HardwareAddress,
Mtu: intf.MTU,
Index: intf.Index,
Flags: intf.Flags,
Addresses: intf.Addresses,
})
}
return proto.Marshal(msg)
}
@@ -399,7 +449,7 @@ func (self *RouterManager) Unmarshall(bytes []byte) (*Router, error) {
fingerprint = &tmp
}
return &Router{
result := &Router{
BaseEntity: models.BaseEntity{
Id: msg.Id,
Tags: cmd_pb.DecodeTags(msg.Tags),
@@ -409,7 +459,20 @@ func (self *RouterManager) Unmarshall(bytes []byte) (*Router, error) {
Cost: uint16(msg.Cost),
NoTraversal: msg.NoTraversal,
Disabled: msg.Disabled,
}, nil
}
for _, intf := range msg.Interfaces {
result.Interfaces = append(result.Interfaces, &Interface{
Name: intf.Name,
HardwareAddress: intf.HardwareAddress,
MTU: intf.Mtu,
Index: intf.Index,
Flags: intf.Flags,
Addresses: intf.Addresses,
})
}
return result, nil
}
func (self *RouterManager) ValidateRouterSdkTerminators(router *Router, cb func(detail *mgmt_pb.RouterSdkTerminatorsDetails)) {
+3
View File
@@ -49,6 +49,7 @@ type Router struct {
NoTraversal bool
Disabled bool
Metadata *ctrl_pb.RouterMetadata
Interfaces []*Interface
}
func (entity *Router) GetLinks() []*Link {
@@ -67,6 +68,7 @@ func (entity *Router) toBoltEntityForCreate(*bbolt.Tx, Env) (*db.Router, error)
Cost: entity.Cost,
NoTraversal: entity.NoTraversal,
Disabled: entity.Disabled,
Interfaces: InterfacesToBolt(entity.Interfaces),
}, nil
}
@@ -76,6 +78,7 @@ func (entity *Router) fillFrom(_ Env, _ *bbolt.Tx, boltRouter *db.Router) error
entity.Cost = boltRouter.Cost
entity.NoTraversal = boltRouter.NoTraversal
entity.Disabled = boltRouter.Disabled
entity.Interfaces = InterfacesFromBolt(boltRouter.Interfaces)
entity.FillCommon(boltRouter)
return nil
}
+258
View File
@@ -0,0 +1,258 @@
// Code generated by go-swagger; DO NOT EDIT.
//
// Copyright NetFoundry Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// __ __ _
// \ \ / / (_)
// \ \ /\ / /_ _ _ __ _ __ _ _ __ __ _
// \ \/ \/ / _` | '__| '_ \| | '_ \ / _` |
// \ /\ / (_| | | | | | | | | | | (_| | : This file is generated, do not edit it.
// \/ \/ \__,_|_| |_| |_|_|_| |_|\__, |
// __/ |
// |___/
package rest_model
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
)
// Interface A resource describing a network interface
//
// swagger:model interface
type Interface struct {
// addresses
// Required: true
Addresses []string `json:"addresses"`
// hardware address
// Required: true
HardwareAddress *string `json:"hardwareAddress"`
// index
// Required: true
// Minimum: 0
Index *int64 `json:"index"`
// is broadcast
// Required: true
IsBroadcast *bool `json:"isBroadcast"`
// is loopback
// Required: true
IsLoopback *bool `json:"isLoopback"`
// is multicast
// Required: true
IsMulticast *bool `json:"isMulticast"`
// is running
// Required: true
IsRunning *bool `json:"isRunning"`
// is up
// Required: true
IsUp *bool `json:"isUp"`
// mtu
// Required: true
// Minimum: 0
Mtu *int64 `json:"mtu"`
// name
// Required: true
Name *string `json:"name"`
}
// Validate validates this interface
func (m *Interface) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateAddresses(formats); err != nil {
res = append(res, err)
}
if err := m.validateHardwareAddress(formats); err != nil {
res = append(res, err)
}
if err := m.validateIndex(formats); err != nil {
res = append(res, err)
}
if err := m.validateIsBroadcast(formats); err != nil {
res = append(res, err)
}
if err := m.validateIsLoopback(formats); err != nil {
res = append(res, err)
}
if err := m.validateIsMulticast(formats); err != nil {
res = append(res, err)
}
if err := m.validateIsRunning(formats); err != nil {
res = append(res, err)
}
if err := m.validateIsUp(formats); err != nil {
res = append(res, err)
}
if err := m.validateMtu(formats); err != nil {
res = append(res, err)
}
if err := m.validateName(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *Interface) validateAddresses(formats strfmt.Registry) error {
if err := validate.Required("addresses", "body", m.Addresses); err != nil {
return err
}
return nil
}
func (m *Interface) validateHardwareAddress(formats strfmt.Registry) error {
if err := validate.Required("hardwareAddress", "body", m.HardwareAddress); err != nil {
return err
}
return nil
}
func (m *Interface) validateIndex(formats strfmt.Registry) error {
if err := validate.Required("index", "body", m.Index); err != nil {
return err
}
if err := validate.MinimumInt("index", "body", *m.Index, 0, false); err != nil {
return err
}
return nil
}
func (m *Interface) validateIsBroadcast(formats strfmt.Registry) error {
if err := validate.Required("isBroadcast", "body", m.IsBroadcast); err != nil {
return err
}
return nil
}
func (m *Interface) validateIsLoopback(formats strfmt.Registry) error {
if err := validate.Required("isLoopback", "body", m.IsLoopback); err != nil {
return err
}
return nil
}
func (m *Interface) validateIsMulticast(formats strfmt.Registry) error {
if err := validate.Required("isMulticast", "body", m.IsMulticast); err != nil {
return err
}
return nil
}
func (m *Interface) validateIsRunning(formats strfmt.Registry) error {
if err := validate.Required("isRunning", "body", m.IsRunning); err != nil {
return err
}
return nil
}
func (m *Interface) validateIsUp(formats strfmt.Registry) error {
if err := validate.Required("isUp", "body", m.IsUp); err != nil {
return err
}
return nil
}
func (m *Interface) validateMtu(formats strfmt.Registry) error {
if err := validate.Required("mtu", "body", m.Mtu); err != nil {
return err
}
if err := validate.MinimumInt("mtu", "body", *m.Mtu, 0, false); err != nil {
return err
}
return nil
}
func (m *Interface) validateName(formats strfmt.Registry) error {
if err := validate.Required("name", "body", m.Name); err != nil {
return err
}
return nil
}
// ContextValidate validates this interface based on context it is used
func (m *Interface) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *Interface) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *Interface) UnmarshalBinary(b []byte) error {
var res Interface
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}
+66
View File
@@ -63,6 +63,9 @@ type RouterDetail struct {
// Required: true
Fingerprint *string `json:"fingerprint"`
// interfaces
Interfaces []*Interface `json:"interfaces"`
// listener addresses
ListenerAddresses []*RouterListener `json:"listenerAddresses"`
@@ -97,6 +100,8 @@ func (m *RouterDetail) UnmarshalJSON(raw []byte) error {
Fingerprint *string `json:"fingerprint"`
Interfaces []*Interface `json:"interfaces"`
ListenerAddresses []*RouterListener `json:"listenerAddresses"`
Name *string `json:"name"`
@@ -117,6 +122,8 @@ func (m *RouterDetail) UnmarshalJSON(raw []byte) error {
m.Fingerprint = dataAO1.Fingerprint
m.Interfaces = dataAO1.Interfaces
m.ListenerAddresses = dataAO1.ListenerAddresses
m.Name = dataAO1.Name
@@ -146,6 +153,8 @@ func (m RouterDetail) MarshalJSON() ([]byte, error) {
Fingerprint *string `json:"fingerprint"`
Interfaces []*Interface `json:"interfaces"`
ListenerAddresses []*RouterListener `json:"listenerAddresses"`
Name *string `json:"name"`
@@ -163,6 +172,8 @@ func (m RouterDetail) MarshalJSON() ([]byte, error) {
dataAO1.Fingerprint = m.Fingerprint
dataAO1.Interfaces = m.Interfaces
dataAO1.ListenerAddresses = m.ListenerAddresses
dataAO1.Name = m.Name
@@ -204,6 +215,10 @@ func (m *RouterDetail) Validate(formats strfmt.Registry) error {
res = append(res, err)
}
if err := m.validateInterfaces(formats); err != nil {
res = append(res, err)
}
if err := m.validateListenerAddresses(formats); err != nil {
res = append(res, err)
}
@@ -270,6 +285,33 @@ func (m *RouterDetail) validateFingerprint(formats strfmt.Registry) error {
return nil
}
func (m *RouterDetail) validateInterfaces(formats strfmt.Registry) error {
if swag.IsZero(m.Interfaces) { // not required
return nil
}
for i := 0; i < len(m.Interfaces); i++ {
if swag.IsZero(m.Interfaces[i]) { // not required
continue
}
if m.Interfaces[i] != nil {
if err := m.Interfaces[i].Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("interfaces" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("interfaces" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
func (m *RouterDetail) validateListenerAddresses(formats strfmt.Registry) error {
if swag.IsZero(m.ListenerAddresses) { // not required
@@ -344,6 +386,10 @@ func (m *RouterDetail) ContextValidate(ctx context.Context, formats strfmt.Regis
res = append(res, err)
}
if err := m.contextValidateInterfaces(ctx, formats); err != nil {
res = append(res, err)
}
if err := m.contextValidateListenerAddresses(ctx, formats); err != nil {
res = append(res, err)
}
@@ -358,6 +404,26 @@ func (m *RouterDetail) ContextValidate(ctx context.Context, formats strfmt.Regis
return nil
}
func (m *RouterDetail) contextValidateInterfaces(ctx context.Context, formats strfmt.Registry) error {
for i := 0; i < len(m.Interfaces); i++ {
if m.Interfaces[i] != nil {
if err := m.Interfaces[i].ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("interfaces" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("interfaces" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
func (m *RouterDetail) contextValidateListenerAddresses(ctx context.Context, formats strfmt.Registry) error {
for i := 0; i < len(m.ListenerAddresses); i++ {
+116
View File
@@ -1832,6 +1832,57 @@ func init() {
}
}
},
"interface": {
"description": "A resource describing a network interface",
"type": "object",
"required": [
"name",
"hardwareAddress",
"mtu",
"index",
"isUp",
"isRunning",
"isLoopback",
"isBroadcast",
"isMulticast",
"addresses"
],
"properties": {
"addresses": {
"type": "array",
"items": {
"type": "string"
}
},
"hardwareAddress": {
"type": "string"
},
"index": {
"type": "integer"
},
"isBroadcast": {
"type": "boolean"
},
"isLoopback": {
"type": "boolean"
},
"isMulticast": {
"type": "boolean"
},
"isRunning": {
"type": "boolean"
},
"isUp": {
"type": "boolean"
},
"mtu": {
"type": "integer"
},
"name": {
"type": "string"
}
}
},
"link": {
"description": "A link to another resource",
"type": "object",
@@ -2127,6 +2178,12 @@ func init() {
"fingerprint": {
"type": "string"
},
"interfaces": {
"type": "array",
"items": {
"$ref": "#/definitions/interface"
}
},
"listenerAddresses": {
"type": "array",
"items": {
@@ -7542,6 +7599,59 @@ func init() {
}
}
},
"interface": {
"description": "A resource describing a network interface",
"type": "object",
"required": [
"name",
"hardwareAddress",
"mtu",
"index",
"isUp",
"isRunning",
"isLoopback",
"isBroadcast",
"isMulticast",
"addresses"
],
"properties": {
"addresses": {
"type": "array",
"items": {
"type": "string"
}
},
"hardwareAddress": {
"type": "string"
},
"index": {
"type": "integer",
"minimum": 0
},
"isBroadcast": {
"type": "boolean"
},
"isLoopback": {
"type": "boolean"
},
"isMulticast": {
"type": "boolean"
},
"isRunning": {
"type": "boolean"
},
"isUp": {
"type": "boolean"
},
"mtu": {
"type": "integer",
"minimum": 0
},
"name": {
"type": "string"
}
}
},
"link": {
"description": "A link to another resource",
"type": "object",
@@ -7839,6 +7949,12 @@ func init() {
"fingerprint": {
"type": "string"
},
"interfaces": {
"type": "array",
"items": {
"$ref": "#/definitions/interface"
}
},
"listenerAddresses": {
"type": "array",
"items": {
+43
View File
@@ -1384,6 +1384,45 @@ definitions:
newLeaderId:
type: string
interface:
description: A resource describing a network interface
type: object
required:
- name
- hardwareAddress
- mtu
- index
- isUp
- isRunning
- isLoopback
- isBroadcast
- isMulticast
- addresses
properties:
name:
type: string
hardwareAddress:
type: string
mtu:
type: integer
minimum: 0
index:
type: integer
minimum: 0
isUp:
type: boolean
isRunning:
type: boolean
isLoopback:
type: boolean
isBroadcast:
type: boolean
isMulticast:
type: boolean
addresses:
type: array
items:
type: string
###################################################################
# Errors
@@ -1572,6 +1611,10 @@ definitions:
$ref: '#/definitions/routerListener'
versionInfo:
$ref: '#/definitions/versionInfo'
interfaces:
type: array
items:
$ref: '#/definitions/interface'
routerListener:
type: object
required:
+3 -3
View File
@@ -84,12 +84,12 @@ ctrl:
events:
jsonLogger:
subscriptions:
- type: apiSession
- type: authentication
# - type: apiSession
# - type: authentication
# - type: circuit
# - type: connect
# - type: sdk
# - type: entityChange
- type: entityChange
# include:
# - services
# - identities
+7 -7
View File
@@ -53,18 +53,18 @@ require (
github.com/mitchellh/mapstructure v1.5.0
github.com/natefinch/lumberjack v2.0.0+incompatible
github.com/openziti/agent v1.0.27
github.com/openziti/channel/v4 v4.2.1
github.com/openziti/channel/v4 v4.2.5
github.com/openziti/cobra-to-md v1.0.1
github.com/openziti/edge-api v0.26.45
github.com/openziti/foundation/v2 v2.0.65
github.com/openziti/identity v1.0.103
github.com/openziti/edge-api v0.26.46
github.com/openziti/foundation/v2 v2.0.66
github.com/openziti/identity v1.0.105
github.com/openziti/jwks v1.0.6
github.com/openziti/metrics v1.4.1
github.com/openziti/runzmd v1.0.72
github.com/openziti/sdk-golang v1.1.2
github.com/openziti/secretstream v0.1.34
github.com/openziti/storage v0.4.11
github.com/openziti/transport/v2 v2.0.171
github.com/openziti/storage v0.4.17
github.com/openziti/transport/v2 v2.0.175
github.com/openziti/x509-claims v1.0.3
github.com/openziti/xweb/v2 v2.3.3
github.com/openziti/ziti-db-explorer v1.1.3
@@ -83,7 +83,7 @@ require (
github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125
github.com/xeipuuv/gojsonschema v1.2.0
github.com/zitadel/oidc/v3 v3.39.0
go.etcd.io/bbolt v1.4.0
go.etcd.io/bbolt v1.4.1
go.uber.org/atomic v1.11.0
go4.org v0.0.0-20180809161055-417644f6feb5
golang.org/x/crypto v0.38.0
+14 -14
View File
@@ -587,18 +587,18 @@ github.com/openziti-incubator/cf v0.0.3 h1:JKs55DbaIxl87nI/Ra/3DHMiz5iaPpu8JjsuN
github.com/openziti-incubator/cf v0.0.3/go.mod h1:6abCY06bCjKmK2I9kohij+cp9uXIPFiFwSCNZPdMk8E=
github.com/openziti/agent v1.0.27 h1:TzF9v7fwHUU525GBy86t1vWRyKPdsP0NruqeoESbnXk=
github.com/openziti/agent v1.0.27/go.mod h1:pjQ9jSOl+9ZR/0Y9+wOwJhGekYwyai2uKB3YCd0nulI=
github.com/openziti/channel/v4 v4.2.1 h1:gbtO2tC8qjMiApSoCQyn7WbSCyI8xdwzB79IyrKmR3w=
github.com/openziti/channel/v4 v4.2.1/go.mod h1:t42XcuNICtJSizetoZbmml3l5AE7d/LDCf29c+Ene4Q=
github.com/openziti/channel/v4 v4.2.5 h1:FXH2uXZBkvzC25HL1ouw4xEt9BJltyCLlVr9Un2+R6M=
github.com/openziti/channel/v4 v4.2.5/go.mod h1:FnLSH/N8PE0s2/Sv2aPt70rBc+C9cqebzo06RM6ATSg=
github.com/openziti/cobra-to-md v1.0.1 h1:WRinNoIRmwWUSJm+pSNXMjOrtU48oxXDZgeCYQfVXxE=
github.com/openziti/cobra-to-md v1.0.1/go.mod h1:FjCpk/yzHF7/r28oSTNr5P57yN5VolpdAtS/g7KNi2c=
github.com/openziti/dilithium v0.3.5 h1:+envGNzxc3OyVPiuvtxivQmCsOjdZjtOMLpQBeMz7eM=
github.com/openziti/dilithium v0.3.5/go.mod h1:XONq1iK6te/WwNzkgZHfIDHordMPqb0hMwJ8bs9EfSk=
github.com/openziti/edge-api v0.26.45 h1:M5rR28yEIIpbVo7F7c5tF+z2qNKqvN55pK6bZqQHn+8=
github.com/openziti/edge-api v0.26.45/go.mod h1:sYHVpm26Jr1u7VooNJzTb2b2nGSlmCHMnbGC8XfWSng=
github.com/openziti/foundation/v2 v2.0.65 h1:Vvplj+4QjSk3P+M4+QfsT19j9Lt4xPHVPKTBLT1GQgw=
github.com/openziti/foundation/v2 v2.0.65/go.mod h1:sAtu+ulsxJWJ2iZ16UMBZVocRB3beBpHOE6Wy5RuvJI=
github.com/openziti/identity v1.0.103 h1:dJgaUEu0XdZ9fUe3FKpCj5itLLC/zdpr+6GqcCwW3l4=
github.com/openziti/identity v1.0.103/go.mod h1:+0WHnWHvZUbsXkTkbt6a3Bcsat+90DZjMgaDZ7sKEUI=
github.com/openziti/edge-api v0.26.46 h1:cFOGXTIMXmxTgcM/bGd50OqZES/yT37MriojGJxozzo=
github.com/openziti/edge-api v0.26.46/go.mod h1:sYHVpm26Jr1u7VooNJzTb2b2nGSlmCHMnbGC8XfWSng=
github.com/openziti/foundation/v2 v2.0.66 h1:gVONHcMd5VJ8McznzD0Mo9mOhs29gl91rBeTr8EYMOE=
github.com/openziti/foundation/v2 v2.0.66/go.mod h1:sAtu+ulsxJWJ2iZ16UMBZVocRB3beBpHOE6Wy5RuvJI=
github.com/openziti/identity v1.0.105 h1:PCMfXejubkzocGorha8ac5QAh3Gzg0fJ7UsECTETww8=
github.com/openziti/identity v1.0.105/go.mod h1:pHhh5MXSh99McWQGVhgmR5x0KANVfogLcg5mTpRlbVA=
github.com/openziti/jwks v1.0.6 h1:PR+9OVaMO8oHEoVQmHqeUBExWwLWyODEGJQK2DXHaqE=
github.com/openziti/jwks v1.0.6/go.mod h1:t4xxq8vlXGsPn29kiQVnZBBDDnEoOFqtJoHibkJunQQ=
github.com/openziti/metrics v1.4.1 h1:JMnfmW8liTzmqJpd7HDPCSvDDFg1UrE0WoLhW9XdIG8=
@@ -609,10 +609,10 @@ github.com/openziti/sdk-golang v1.1.2 h1:Q7YqFcAjfkH9ZZp+yYPIAvEWt/DOhhOxBx1drXy
github.com/openziti/sdk-golang v1.1.2/go.mod h1:sXLPdy/Q0Zor5ef08H+W60EEy6ofEDpeZFlP4SWwc4w=
github.com/openziti/secretstream v0.1.34 h1:H2/g90s81vkTWwSodeHP7tkf9SZA6pp4L1rqR7UrZUk=
github.com/openziti/secretstream v0.1.34/go.mod h1:LwKcXz+x1grnVn/kdWxLYO6LZOPqQgXNSkGUPvfjl7w=
github.com/openziti/storage v0.4.11 h1:cF6Iys5H7gswOVRJL8RhZx6JhHsB4EIjFRrgbsPZOgY=
github.com/openziti/storage v0.4.11/go.mod h1:aWlZ97qCV7qgTx2WjzpcIdJ+OAIloerJV/ys7X2kgxM=
github.com/openziti/transport/v2 v2.0.171 h1:7vgQLANLXP4WNYuRxeOcCx++/t9QpmcDfwlRagtfigc=
github.com/openziti/transport/v2 v2.0.171/go.mod h1:F4FIT6aH8QnHBC/2N/RcqbGRI5oT3+1ojvWyYldTNIw=
github.com/openziti/storage v0.4.17 h1:zlAKf0Se3gb8HsO3VOh6G0RPS8CZ3mujhOjpQapPNuQ=
github.com/openziti/storage v0.4.17/go.mod h1:t6jN4uvDuulBk9h8jblXUua0YvZV7VrQl5gsMXrzr1c=
github.com/openziti/transport/v2 v2.0.175 h1:u6/po/Iy7k4Bgf4KAXuaRHjX/Ehepwqi71WxgwIBHJk=
github.com/openziti/transport/v2 v2.0.175/go.mod h1:IIK7ECZUaDwZlxoxoe16sKrD8V+ZQyjq3J8CE5guJXM=
github.com/openziti/x509-claims v1.0.3 h1:HNdQ8Nf1agB3lBs1gahcO6zfkeS4S5xoQ2/PkY4HRX0=
github.com/openziti/x509-claims v1.0.3/go.mod h1:Z0WIpBm6c4ecrpRKrou6Gk2wrLWxJO/+tuUwKh8VewE=
github.com/openziti/xweb/v2 v2.3.3 h1:idnzpsN03b+xKIyYF59Cwfy2A0iGJqL3IjN51zLo2Ek=
@@ -841,8 +841,8 @@ github.com/zitadel/oidc/v3 v3.39.0/go.mod h1:JwdgdU/WxkmBtWuE8/pEjAbDTWXxJGqBix/
github.com/zitadel/schema v1.3.1 h1:QT3kwiRIRXXLVAs6gCK/u044WmUVh6IlbLXUsn6yRQU=
github.com/zitadel/schema v1.3.1/go.mod h1:071u7D2LQacy1HAN+YnMd/mx1qVE2isb0Mjeqg46xnU=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.4.0 h1:TU77id3TnN/zKr7CO/uk+fBCwF2jGcMuw2B/FMAzYIk=
go.etcd.io/bbolt v1.4.0/go.mod h1:AsD+OCi/qPN1giOX1aiLAha3o1U8rAz65bvN4j0sRuk=
go.etcd.io/bbolt v1.4.1 h1:5mOV+HWjIPLEAlUGMsveaUvK2+byZMFOzojoi7bh7uI=
go.etcd.io/bbolt v1.4.1/go.mod h1:c8zu2BnXWTu2XM4XcICtbGSl9cFwsXtcf9zLt2OncM8=
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
+58 -7
View File
@@ -31,10 +31,10 @@ import (
"github.com/openziti/channel/v4"
"github.com/openziti/foundation/v2/concurrenz"
"github.com/openziti/identity"
"github.com/openziti/sdk-golang/xgress"
"github.com/openziti/transport/v2"
"github.com/openziti/ziti/common/config"
"github.com/openziti/ziti/common/pb/ctrl_pb"
"github.com/openziti/sdk-golang/xgress"
"github.com/pkg/errors"
"gopkg.in/yaml.v2"
yaml3 "gopkg.in/yaml.v3"
@@ -91,6 +91,8 @@ const (
DefaultConnectEventsFullSyncInterval = 5 * time.Minute
MinConnectEventsFullSyncInterval = time.Second
MaxConnectEventsFullSyncInterval = 24 * time.Hour
InterfaceDiscoveryMapKey = "interfaceDiscovery"
)
// internalConfigKeys is used to distinguish internally defined configuration vs file configuration
@@ -116,6 +118,12 @@ func LoadConfigMap(path string) (map[interface{}]interface{}, error) {
return cfgmap, nil
}
type InterfaceDiscoveryConfig struct {
Disabled bool
CheckInterval time.Duration
MinReportInterval time.Duration
}
type Config struct {
IdConfig *identity.Config
Id *identity.TokenId
@@ -170,12 +178,13 @@ type Config struct {
InitialDelay time.Duration
}
}
ConnectEvents ConnectEventsConfig
Proxy *transport.ProxyConfiguration
Plugins []string
Edge *EdgeConfig
Src map[interface{}]interface{}
path string
ConnectEvents ConnectEventsConfig
Proxy *transport.ProxyConfiguration
Plugins []string
Edge *EdgeConfig
IfaceDiscovery InterfaceDiscoveryConfig
Src map[interface{}]interface{}
path string
}
func (config *Config) CurrentCtrlAddress() string {
@@ -916,6 +925,48 @@ func LoadConfigWithOptions(path string, loadIdentity bool) (*Config, error) {
pfxlog.Logger().Fatalf("one or more advertise addresses are invalid: %v", errs)
}
}
cfg.IfaceDiscovery.Disabled = false
cfg.IfaceDiscovery.CheckInterval = time.Minute
cfg.IfaceDiscovery.MinReportInterval = 24 * time.Hour
if value, found := cfgmap[InterfaceDiscoveryMapKey]; found {
if subMap, ok := value.(map[interface{}]interface{}); !ok {
return nil, errors.New("invalid interfaceDiscovery value, should be map")
} else {
if value, found := subMap["disabled"]; found {
disabled := strings.EqualFold("true", fmt.Sprintf("%v", value))
cfg.IfaceDiscovery.Disabled = disabled
}
if value, found := subMap["checkInterval"]; found {
if strVal, ok := value.(string); ok {
interval, err := time.ParseDuration(strVal)
if err != nil {
return nil, errors.New("invalid value: interfaceDiscovery.checkInterval value should be a valid duration")
} else {
cfg.IfaceDiscovery.CheckInterval = interval
}
} else {
return nil, errors.New("invalid value: interfaceDiscovery.checkInterval value should be a string representing a duration")
}
}
if value, found := subMap["minReportInterval"]; found {
if strVal, ok := value.(string); ok {
interval, err := time.ParseDuration(strVal)
if err != nil {
return nil, errors.New("invalid value: interfaceDiscovery.minReportInterval value should be a valid duration")
} else {
cfg.IfaceDiscovery.CheckInterval = interval
}
} else {
return nil, errors.New("invalid value: interfaceDiscovery.minReportInterval value should be a string representing a duration")
}
}
}
}
return cfg, nil
}
+168
View File
@@ -0,0 +1,168 @@
/*
(c) Copyright NetFoundry Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package interfaces
import (
"errors"
"github.com/michaelquigley/pfxlog"
"github.com/openziti/channel/v4"
"github.com/openziti/channel/v4/protobufs"
"github.com/openziti/foundation/v2/stringz"
"github.com/openziti/ziti/common/pb/ctrl_pb"
"github.com/openziti/ziti/router/env"
"net"
"sort"
"time"
)
func StartInterfaceReporter(ctrls env.NetworkControllers, closeNotify <-chan struct{}, config env.InterfaceDiscoveryConfig) {
if config.Disabled {
return
}
reporter := &InterfaceReporter{
closeNotify: closeNotify,
checkInterval: config.CheckInterval,
minReportInterval: config.MinReportInterval,
ctrls: ctrls,
}
go reporter.run()
}
type InterfaceReporter struct {
closeNotify <-chan struct{}
checkInterval time.Duration
minReportInterval time.Duration
currentInterfaces []*ctrl_pb.Interface
lastReportTime time.Time
ctrls env.NetworkControllers
}
func (self *InterfaceReporter) run() {
for {
self.report()
select {
case <-time.After(self.checkInterval): // using this instead of ticker, as we want to wait the time, not have ticks pile up
case <-self.closeNotify:
return
}
}
}
func (self *InterfaceReporter) report() {
interfaces, err := net.Interfaces()
if err != nil {
pfxlog.Logger().WithError(err).Error("failed to list network interfaces")
return
}
var reportInterfaces []*ctrl_pb.Interface
for _, iface := range interfaces {
v := &ctrl_pb.Interface{
Name: iface.Name,
HardwareAddress: iface.HardwareAddr.String(),
Mtu: int64(iface.MTU),
Index: int64(iface.Index),
Flags: uint64(iface.Flags),
}
addrs, err := iface.Addrs()
if err != nil {
pfxlog.Logger().WithError(err).WithField("interface", iface.Name).Error("failed to list interface addresses")
}
for _, addr := range addrs {
v.Addresses = append(v.Addresses, addr.String())
}
sort.Strings(v.Addresses)
reportInterfaces = append(reportInterfaces, v)
}
sort.Slice(reportInterfaces, func(i, j int) bool {
return reportInterfaces[i].Name < reportInterfaces[j].Name
})
changed := self.DidInterfacesChange(reportInterfaces)
if changed || time.Since(self.lastReportTime) >= self.minReportInterval {
self.reportUpdatedInterfaces(reportInterfaces, changed)
}
}
func (self *InterfaceReporter) DidInterfacesChange(interfaces []*ctrl_pb.Interface) bool {
if len(interfaces) != len(self.currentInterfaces) {
return true
}
for idx, iface := range self.currentInterfaces {
if self.DidInterfaceChange(iface, interfaces[idx]) {
return true
}
}
return false
}
func (self *InterfaceReporter) DidInterfaceChange(a, b *ctrl_pb.Interface) bool {
changed := a.Name != b.Name ||
a.Index != b.Index ||
a.Flags != b.Flags ||
a.Mtu != b.Mtu ||
a.HardwareAddress != b.HardwareAddress
if changed {
return true
}
return !stringz.EqualSlices(a.Addresses, b.Addresses)
}
func (self *InterfaceReporter) reportUpdatedInterfaces(interfaces []*ctrl_pb.Interface, changed bool) {
log := pfxlog.Logger()
req := &ctrl_pb.RouterInterfacesUpdate{
Interfaces: interfaces,
}
if changed {
log.Infof("reporting %d interfaces because interfaces changed", len(req.Interfaces))
} else {
log.Infof("reporting %d interfaces because min report interval has passed", len(req.Interfaces))
}
ctrlCh := self.ctrls.GetModelUpdateCtrlChannel()
if ctrlCh == nil {
log.Error("no controller available, unable to report updated interfaces")
self.ctrls.AnyValidCtrlChannel() // wait for a controller to become available again
return
}
reply, err := protobufs.MarshalTyped(req).WithTimeout(self.ctrls.DefaultRequestTimeout()).SendForReply(ctrlCh)
if err != nil {
log.WithError(err).Error("failed to send update router interfaces request to controller")
return
}
result := channel.UnmarshalResult(reply)
if result.Success {
// don't update current until a controller has been notified
self.currentInterfaces = interfaces
self.lastReportTime = time.Now()
log.Info("router interfaces updated successfully on controller")
} else {
log.WithError(errors.New(result.Message)).Error("failed to update router interfaces on controller")
}
}
+3
View File
@@ -48,6 +48,7 @@ import (
"github.com/openziti/ziti/router/handler_ctrl"
"github.com/openziti/ziti/router/handler_link"
"github.com/openziti/ziti/router/handler_xgress"
"github.com/openziti/ziti/router/interfaces"
"github.com/openziti/ziti/router/link"
routerMetrics "github.com/openziti/ziti/router/metrics"
"github.com/openziti/ziti/router/state"
@@ -660,6 +661,8 @@ func (self *Router) startControlPlane() error {
}
}
interfaces.StartInterfaceReporter(self.ctrls, self.GetCloseNotify(), self.config.IfaceDiscovery)
return nil
}
+3
View File
@@ -53,3 +53,6 @@ link:
- binding: transport
bind: tls:127.0.0.1:6004
advertise: tls:127.0.0.1:6004
interfaceDiscovery:
disabled: true
+3
View File
@@ -53,3 +53,6 @@ link:
- binding: transport
bind: tls:127.0.0.1:6005
advertise: tls:127.0.0.1:6005
interfaceDiscovery:
disabled: true
+7 -7
View File
@@ -12,23 +12,23 @@ require (
github.com/google/uuid v1.6.0
github.com/michaelquigley/pfxlog v0.6.10
github.com/openziti/agent v1.0.27
github.com/openziti/channel/v4 v4.2.1
github.com/openziti/edge-api v0.26.45
github.com/openziti/channel/v4 v4.2.5
github.com/openziti/edge-api v0.26.46
github.com/openziti/fablab v0.5.108
github.com/openziti/foundation/v2 v2.0.66
github.com/openziti/identity v1.0.103
github.com/openziti/identity v1.0.105
github.com/openziti/metrics v1.4.1
github.com/openziti/sdk-golang v1.1.2
github.com/openziti/storage v0.4.11
github.com/openziti/transport/v2 v2.0.171
github.com/openziti/ziti v1.5.4
github.com/openziti/storage v0.4.17
github.com/openziti/transport/v2 v2.0.175
github.com/openziti/ziti v1.6.2
github.com/orcaman/concurrent-map/v2 v2.0.1
github.com/pkg/errors v0.9.1
github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9
github.com/sirupsen/logrus v1.9.3
github.com/spf13/cobra v1.9.1
github.com/stretchr/testify v1.10.0
go.etcd.io/bbolt v1.4.0
go.etcd.io/bbolt v1.4.1
golang.org/x/net v0.40.0
google.golang.org/protobuf v1.36.6
gopkg.in/yaml.v2 v2.4.0
+12 -12
View File
@@ -604,20 +604,20 @@ github.com/openziti-incubator/cf v0.0.3 h1:JKs55DbaIxl87nI/Ra/3DHMiz5iaPpu8JjsuN
github.com/openziti-incubator/cf v0.0.3/go.mod h1:6abCY06bCjKmK2I9kohij+cp9uXIPFiFwSCNZPdMk8E=
github.com/openziti/agent v1.0.27 h1:TzF9v7fwHUU525GBy86t1vWRyKPdsP0NruqeoESbnXk=
github.com/openziti/agent v1.0.27/go.mod h1:pjQ9jSOl+9ZR/0Y9+wOwJhGekYwyai2uKB3YCd0nulI=
github.com/openziti/channel/v4 v4.2.1 h1:gbtO2tC8qjMiApSoCQyn7WbSCyI8xdwzB79IyrKmR3w=
github.com/openziti/channel/v4 v4.2.1/go.mod h1:t42XcuNICtJSizetoZbmml3l5AE7d/LDCf29c+Ene4Q=
github.com/openziti/channel/v4 v4.2.5 h1:FXH2uXZBkvzC25HL1ouw4xEt9BJltyCLlVr9Un2+R6M=
github.com/openziti/channel/v4 v4.2.5/go.mod h1:FnLSH/N8PE0s2/Sv2aPt70rBc+C9cqebzo06RM6ATSg=
github.com/openziti/cobra-to-md v1.0.1 h1:WRinNoIRmwWUSJm+pSNXMjOrtU48oxXDZgeCYQfVXxE=
github.com/openziti/cobra-to-md v1.0.1/go.mod h1:FjCpk/yzHF7/r28oSTNr5P57yN5VolpdAtS/g7KNi2c=
github.com/openziti/dilithium v0.3.5 h1:+envGNzxc3OyVPiuvtxivQmCsOjdZjtOMLpQBeMz7eM=
github.com/openziti/dilithium v0.3.5/go.mod h1:XONq1iK6te/WwNzkgZHfIDHordMPqb0hMwJ8bs9EfSk=
github.com/openziti/edge-api v0.26.45 h1:M5rR28yEIIpbVo7F7c5tF+z2qNKqvN55pK6bZqQHn+8=
github.com/openziti/edge-api v0.26.45/go.mod h1:sYHVpm26Jr1u7VooNJzTb2b2nGSlmCHMnbGC8XfWSng=
github.com/openziti/edge-api v0.26.46 h1:cFOGXTIMXmxTgcM/bGd50OqZES/yT37MriojGJxozzo=
github.com/openziti/edge-api v0.26.46/go.mod h1:sYHVpm26Jr1u7VooNJzTb2b2nGSlmCHMnbGC8XfWSng=
github.com/openziti/fablab v0.5.108 h1:3O8c+bO9s+QjLHA6BXwdVaBlEy1gZNkqP4Vo2s4yJBs=
github.com/openziti/fablab v0.5.108/go.mod h1:yEqvqxPXG5o3krbeJ4ZhfpZWLrwYf3R9bEZdpMu2aKQ=
github.com/openziti/foundation/v2 v2.0.66 h1:gVONHcMd5VJ8McznzD0Mo9mOhs29gl91rBeTr8EYMOE=
github.com/openziti/foundation/v2 v2.0.66/go.mod h1:sAtu+ulsxJWJ2iZ16UMBZVocRB3beBpHOE6Wy5RuvJI=
github.com/openziti/identity v1.0.103 h1:dJgaUEu0XdZ9fUe3FKpCj5itLLC/zdpr+6GqcCwW3l4=
github.com/openziti/identity v1.0.103/go.mod h1:+0WHnWHvZUbsXkTkbt6a3Bcsat+90DZjMgaDZ7sKEUI=
github.com/openziti/identity v1.0.105 h1:PCMfXejubkzocGorha8ac5QAh3Gzg0fJ7UsECTETww8=
github.com/openziti/identity v1.0.105/go.mod h1:pHhh5MXSh99McWQGVhgmR5x0KANVfogLcg5mTpRlbVA=
github.com/openziti/jwks v1.0.6 h1:PR+9OVaMO8oHEoVQmHqeUBExWwLWyODEGJQK2DXHaqE=
github.com/openziti/jwks v1.0.6/go.mod h1:t4xxq8vlXGsPn29kiQVnZBBDDnEoOFqtJoHibkJunQQ=
github.com/openziti/metrics v1.4.1 h1:JMnfmW8liTzmqJpd7HDPCSvDDFg1UrE0WoLhW9XdIG8=
@@ -628,10 +628,10 @@ github.com/openziti/sdk-golang v1.1.2 h1:Q7YqFcAjfkH9ZZp+yYPIAvEWt/DOhhOxBx1drXy
github.com/openziti/sdk-golang v1.1.2/go.mod h1:sXLPdy/Q0Zor5ef08H+W60EEy6ofEDpeZFlP4SWwc4w=
github.com/openziti/secretstream v0.1.34 h1:H2/g90s81vkTWwSodeHP7tkf9SZA6pp4L1rqR7UrZUk=
github.com/openziti/secretstream v0.1.34/go.mod h1:LwKcXz+x1grnVn/kdWxLYO6LZOPqQgXNSkGUPvfjl7w=
github.com/openziti/storage v0.4.11 h1:cF6Iys5H7gswOVRJL8RhZx6JhHsB4EIjFRrgbsPZOgY=
github.com/openziti/storage v0.4.11/go.mod h1:aWlZ97qCV7qgTx2WjzpcIdJ+OAIloerJV/ys7X2kgxM=
github.com/openziti/transport/v2 v2.0.171 h1:7vgQLANLXP4WNYuRxeOcCx++/t9QpmcDfwlRagtfigc=
github.com/openziti/transport/v2 v2.0.171/go.mod h1:F4FIT6aH8QnHBC/2N/RcqbGRI5oT3+1ojvWyYldTNIw=
github.com/openziti/storage v0.4.17 h1:zlAKf0Se3gb8HsO3VOh6G0RPS8CZ3mujhOjpQapPNuQ=
github.com/openziti/storage v0.4.17/go.mod h1:t6jN4uvDuulBk9h8jblXUua0YvZV7VrQl5gsMXrzr1c=
github.com/openziti/transport/v2 v2.0.175 h1:u6/po/Iy7k4Bgf4KAXuaRHjX/Ehepwqi71WxgwIBHJk=
github.com/openziti/transport/v2 v2.0.175/go.mod h1:IIK7ECZUaDwZlxoxoe16sKrD8V+ZQyjq3J8CE5guJXM=
github.com/openziti/x509-claims v1.0.3 h1:HNdQ8Nf1agB3lBs1gahcO6zfkeS4S5xoQ2/PkY4HRX0=
github.com/openziti/x509-claims v1.0.3/go.mod h1:Z0WIpBm6c4ecrpRKrou6Gk2wrLWxJO/+tuUwKh8VewE=
github.com/openziti/xweb/v2 v2.3.3 h1:idnzpsN03b+xKIyYF59Cwfy2A0iGJqL3IjN51zLo2Ek=
@@ -855,8 +855,8 @@ github.com/zitadel/oidc/v3 v3.39.0/go.mod h1:JwdgdU/WxkmBtWuE8/pEjAbDTWXxJGqBix/
github.com/zitadel/schema v1.3.1 h1:QT3kwiRIRXXLVAs6gCK/u044WmUVh6IlbLXUsn6yRQU=
github.com/zitadel/schema v1.3.1/go.mod h1:071u7D2LQacy1HAN+YnMd/mx1qVE2isb0Mjeqg46xnU=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.4.0 h1:TU77id3TnN/zKr7CO/uk+fBCwF2jGcMuw2B/FMAzYIk=
go.etcd.io/bbolt v1.4.0/go.mod h1:AsD+OCi/qPN1giOX1aiLAha3o1U8rAz65bvN4j0sRuk=
go.etcd.io/bbolt v1.4.1 h1:5mOV+HWjIPLEAlUGMsveaUvK2+byZMFOzojoi7bh7uI=
go.etcd.io/bbolt v1.4.1/go.mod h1:c8zu2BnXWTu2XM4XcICtbGSl9cFwsXtcf9zLt2OncM8=
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=