diff --git a/docs/APP-CONNECTIVITY.md b/docs/APP-CONNECTIVITY.md index b9906b407a..dce07389cf 100644 --- a/docs/APP-CONNECTIVITY.md +++ b/docs/APP-CONNECTIVITY.md @@ -10,13 +10,59 @@ Network connectivity is enabled for an application by configuring one or more ne These consists of [virtual network interfaces](#virtual-network-interfaces), connecting application with [network instances](#network-instances), and directly assigned [physical NIC](#physical-network-ports) or [SR-IOV virtual functions](#sr-iov-vfs). -The order of network adapter configurations inside `AppInstanceConfig` matters, because this -is the same order at which these network adapters will be presented to the application by the -Virtual Machine Manager (VMM). -This order is reflected in the PCI addresses of the adapters. It is important to note that VIFs -and direct assignments are configured in two separate lists. The VMM is configured to present -VIFs first, adhering to their configured order, followed by direct assignments in their respective -order. User cannot enforce direct assignment to appear before VIF. + +### Interface order + +To match an application's network interface with its logical representation from the configuration, +using MAC addresses is recommended. For virtual network interfaces, users can configure MAC +addresses for easier interface identification. Meanwhile, directly assigned NICs are passed +through to applications with their original MAC addresses unchanged. + +However, since MAC addresses differ across a fleet of devices, having a predictable application +network interface order provides a simpler and more scalable matching solution. +But there are two main challenges related to application interface ordering, which make this method +less recommended: + +#### 1. Interface Order Configuration Limitations + +Virtual and directly assigned NICs are configured in two separate lists within `AppInstanceConfig`: +`Interfaces` (VIFs) and `Adapters` (direct assignments, including physical NICs and SR-IOV virtual +functions). Until EVE version 13.8.0, it was not possible to configure the order between items +of these two lists. Consequently, EVE would configure the VMM to present the VIFs first, followed +by direct assignments. While directly assigned NICs adhered to the `Adapters` list order, virtual +interfaces were ordered based on the lowest ACL rule ID assigned to each VIF. This caused undesired +behavior when ACL rule IDs (assigned by the controller) did not align with the user-defined VIF order. +Furthermore, VIFs without ACLs (rather useless interfaces since all traffic is blocked) were +represented with an ACL ID of 0 and always placed first in the interface list. + +EVE version 13.8.0 addressed this by allowing users to define the desired position of each VIF and +directly assigned network devices. This is propagated from controller to EVE via the `InterfaceOrder` +fields with unique (integer) values across both the `Interfaces` and `Adapters` lists. To maintain +backward compatibility and avoid changing interface order in existing deployments, the user-defined +order is applied only if `VmConfig.EnforceNetworkInterfaceOrder` is set to true. Otherwise, EVE +defaults to the legacy behavior described above. + +#### 2. Hypervisor Limitations + +The second, more fundamental challenge lies in the hypervisor's limited ability to control the order +of network interfaces inside VM applications. The actual interface order depends on the application OS, +and EVE cannot guarantee the desired outcome. + +For the KVM hypervisor, EVE attempts to enforce legacy or user-defined orders via the virtualized +PCI topology. Devices expected to appear earlier in the interface list are assigned lower PCI +addresses. This generally works for Linux-based systems, especially those using +the [systemd's naming scheme](https://www.freedesktop.org/software/systemd/man/latest/systemd.net-naming-scheme.html). +However, some limitations persist: + +* Devices of different types (e.g., Wi-Fi adapters vs. Ethernet NICs) often receive distinct name + prefixes from the application OS, making reordering impossible. +* Multifunction PCI devices must have all functions connected to the same PCI bridge and cannot be + interleaved with other devices. If a user places a VIF or another NIC between functions + of a multifunction device (with `EnforceNetworkInterfaceOrder` enabled), EVE will return an error, + and the application will not be deployed. + +For Xen and KubeVirt hypervisors, application interface order is undefined, and +`EnforceNetworkInterfaceOrder` is not yet supported. ### Physical network ports diff --git a/pkg/pillar/cmd/zedagent/parseconfig.go b/pkg/pillar/cmd/zedagent/parseconfig.go index 77b6789921..be8ccad25e 100644 --- a/pkg/pillar/cmd/zedagent/parseconfig.go +++ b/pkg/pillar/cmd/zedagent/parseconfig.go @@ -689,6 +689,8 @@ func parseAppInstanceConfig(getconfigCtx *getconfigContext, appInstance.FixedResources.EnableVncShimVM = cfgApp.Fixedresources.EnableVncShimVm appInstance.FixedResources.VncDisplay = cfgApp.Fixedresources.VncDisplay appInstance.FixedResources.VncPasswd = cfgApp.Fixedresources.VncPasswd + appInstance.FixedResources.EnforceNetworkInterfaceOrder = + cfgApp.Fixedresources.EnforceNetworkInterfaceOrder appInstance.DisableLogs = cfgApp.Fixedresources.DisableLogs appInstance.MetaDataType = types.MetaDataType(cfgApp.MetaDataType) appInstance.Delay = time.Duration(cfgApp.StartDelayInSeconds) * time.Second @@ -734,6 +736,9 @@ func parseAppInstanceConfig(getconfigCtx *getconfigContext, } else if ioa.Type == types.IoCAN || ioa.Type == types.IoVCAN || ioa.Type == types.IoLCAN { log.Functionf("Got CAN adapter") } + if ioa.Type.IsNet() && appInstance.FixedResources.EnforceNetworkInterfaceOrder { + ioa.IntfOrder = adapter.GetInterfaceOrder() + } appInstance.IoAdapterList = append(appInstance.IoAdapterList, ioa) } log.Functionf("Got adapters %v", appInstance.IoAdapterList) @@ -2439,11 +2444,12 @@ func parseAppNetAdapterConfig(appInstance *types.AppInstanceConfig, intfEnt.Name, adapterCfg.Error) } } - // sort based on intfOrder - // XXX remove? Debug? - if len(appInstance.AppNetAdapterList) > 1 { - log.Functionf("XXX pre sort %+v", appInstance.AppNetAdapterList) - } + + // Sort based on IntfOrder. When EnforceNetworkInterfaceOrder is enabled, this is done + // only for troubleshooting purposes to make the pubsub messages containing application + // interface list easier to read. Interface order is still determined by the IntfOrder + // attribute, and that includes direct attachments, not based on the order of items + // inside AppNetAdapterList. sort.Slice(appInstance.AppNetAdapterList[:], func(i, j int) bool { return appInstance.AppNetAdapterList[i].IntfOrder < @@ -2490,8 +2496,6 @@ func parseAppNetAdapterConfigEntry( adapterCfg := new(types.AppNetAdapterConfig) adapterCfg.Name = intfEnt.Name - // XXX set adapterCfg.IntfOrder from API once available - var intfOrder int32 // Lookup NetworkInstance ID networkInstanceEntry := lookupNetworkInstanceId(intfEnt.NetworkId, cfgNetworkInstances) @@ -2553,6 +2557,7 @@ func parseAppNetAdapterConfigEntry( } } + var aclIntfOrder uint32 adapterCfg.ACLs = make([]types.ACE, len(intfEnt.Acls)) for aclIdx, acl := range intfEnt.Acls { aclCfg := new(types.ACE) @@ -2561,9 +2566,11 @@ func parseAppNetAdapterConfigEntry( aclCfg.Actions = make([]types.ACEAction, len(acl.Actions)) aclCfg.RuleID = acl.Id - // XXX temporary until we get an intfOrder in the API - if intfOrder == 0 { - intfOrder = acl.Id + // When EnforceNetworkInterfaceOrder is disabled, we fall back to the previous + // interface ordering method, where virtual interfaces are ordered according to ACL + // IDs and direct attachments come after virtual interfaces. + if aclIntfOrder == 0 && acl.Id > 0 { + aclIntfOrder = uint32(acl.Id) } aclCfg.Name = acl.Name aclCfg.Dir = types.ACEDirection(acl.Dir) @@ -2587,8 +2594,11 @@ func parseAppNetAdapterConfigEntry( } adapterCfg.ACLs[aclIdx] = *aclCfg } - // XXX set adapterCfg.IntfOrder from API once available - adapterCfg.IntfOrder = intfOrder + if cfgApp.Fixedresources.EnforceNetworkInterfaceOrder { + adapterCfg.IntfOrder = intfEnt.GetInterfaceOrder() + } else { + adapterCfg.IntfOrder = aclIntfOrder + } adapterCfg.AccessVlanID = intfEnt.AccessVlanId adapterCfg.AllowToDiscover = intfEnt.AllowToDiscover @@ -2822,6 +2832,37 @@ func checkAndPublishAppInstanceConfig(getconfigCtx *getconfigContext, config.Errors = append(config.Errors, err.Error()) } + // If EnforceNetworkInterfaceOrder is enabled, check that every network interface + // has unique order number. + if config.FixedResources.EnforceNetworkInterfaceOrder { + intfOrderMap := make(map[uint32]string) + for _, adapter := range config.AppNetAdapterList { + if adapter2, duplicate := intfOrderMap[adapter.IntfOrder]; duplicate { + err := fmt.Errorf("virtual network adapter %s has the same interface "+ + "order (%d) configured as adapter %s", adapter.Name, adapter.IntfOrder, + adapter2) + log.Error(err) + config.Errors = append(config.Errors, err.Error()) + continue + } + intfOrderMap[adapter.IntfOrder] = adapter.Name + } + for _, adapter := range config.IoAdapterList { + if !adapter.Type.IsNet() { + continue + } + if adapter2, duplicate := intfOrderMap[adapter.IntfOrder]; duplicate { + err := fmt.Errorf("directly attached network adapter %s has the same "+ + "interface order (%d) configured as adapter %s", adapter.Name, + adapter.IntfOrder, adapter2) + log.Error(err) + config.Errors = append(config.Errors, err.Error()) + continue + } + intfOrderMap[adapter.IntfOrder] = adapter.Name + } + } + pub.Publish(key, config) } diff --git a/pkg/pillar/cmd/zedagent/reportinfo.go b/pkg/pillar/cmd/zedagent/reportinfo.go index a5ad028146..08d6222764 100644 --- a/pkg/pillar/cmd/zedagent/reportinfo.go +++ b/pkg/pillar/cmd/zedagent/reportinfo.go @@ -644,8 +644,10 @@ func PublishDeviceInfoToZedCloud(ctx *zedagentContext, dest destinationBitset) { // TODO: Enhance capability reporting with a bitmap-like approach for increased granularity. // We report the snapshot capability despite the fact that we support snapshots only // for file-based volumes. If a controller tries to make a snapshot of ZFS-based volume - // device returns a runtime error. - ReportDeviceInfo.ApiCapability = info.APICapability_API_CAPABILITY_ADAPTER_USER_LABELS + // device returns a runtime error. Similarly, we only support enforced application network + // interface order for the KVM hypervisor. If enabled for application deployed under Xen + // or Kubevirt hypervisor, EVE returns error and the application will not be started. + ReportDeviceInfo.ApiCapability = info.APICapability_API_CAPABILITY_ENFORCED_NET_INTERFACE_ORDER // Report if there is a local override of profile if ctx.getconfigCtx.sideController.currentProfile != diff --git a/pkg/pillar/cmd/zedmanager/zedmanager.go b/pkg/pillar/cmd/zedmanager/zedmanager.go index 20787a6896..1fc2e6b661 100644 --- a/pkg/pillar/cmd/zedmanager/zedmanager.go +++ b/pkg/pillar/cmd/zedmanager/zedmanager.go @@ -1095,7 +1095,7 @@ func handleCreate(ctxArg interface{}, key string, if len(config.Errors) > 0 { // Combine all errors from Config parsing state and send them in Status for i, errStr := range config.Errors { - allErrors += errStr + allErrors += errStr + "\n" log.Errorf("App Instance %s-%s: Error(%d): %s", config.DisplayName, config.UUIDandVersion.UUID, i, errStr) } diff --git a/pkg/pillar/cmd/zedrouter/appnetwork.go b/pkg/pillar/cmd/zedrouter/appnetwork.go index 305b83900c..76a748c5b4 100644 --- a/pkg/pillar/cmd/zedrouter/appnetwork.go +++ b/pkg/pillar/cmd/zedrouter/appnetwork.go @@ -102,6 +102,9 @@ func (z *zedrouter) prepareConfigForVIFs(config types.AppNetworkConfig, } adapterStatus.HostName = config.Key() adapterStatus.MTU = netInstStatus.MTU + // Propagate IntfOrder from adapter down to VifConfig, which zedmanager then passes + // to domainmgr. + adapterStatus.VifConfig.VifOrder = adapterStatus.IntfOrder guestIP, err := z.lookupOrAllocateIPv4ForVIF( netInstStatus, *adapterStatus, status.UUIDandVersion.UUID) if err != nil { diff --git a/pkg/pillar/go.mod b/pkg/pillar/go.mod index e7b49bcbd8..9e5ee99d00 100644 --- a/pkg/pillar/go.mod +++ b/pkg/pillar/go.mod @@ -30,7 +30,7 @@ require ( github.com/jaypipes/ghw v0.8.0 github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.5.0 github.com/lf-edge/edge-containers v0.0.0-20240207093504-5dfda0619b80 - github.com/lf-edge/eve-api/go v0.0.0-20241125213346-b026f21b3e75 + github.com/lf-edge/eve-api/go v0.0.0-20241202084032-46c0a58dc84c github.com/lf-edge/eve-libs v0.0.0-20240614221125-6913ec4213f9 github.com/lf-edge/eve/pkg/kube/cnirpc v0.0.0-20240315102754-0f6d1f182e0d github.com/lf-edge/go-qemu v0.0.0-20231121152149-4c467eda0c56 diff --git a/pkg/pillar/go.sum b/pkg/pillar/go.sum index c8ef8ff53e..90d5043ef3 100644 --- a/pkg/pillar/go.sum +++ b/pkg/pillar/go.sum @@ -1432,8 +1432,8 @@ github.com/lestrrat-go/jwx v1.2.25/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xw github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lf-edge/edge-containers v0.0.0-20240207093504-5dfda0619b80 h1:kiqB1Rk8fmWci0idN68azRDJfPxCivD3zNDddWZocFw= github.com/lf-edge/edge-containers v0.0.0-20240207093504-5dfda0619b80/go.mod h1:4yXdumKdTzF0URMtxOl8Xnzdxnoy1QR+2dzfOr4CIZY= -github.com/lf-edge/eve-api/go v0.0.0-20241125213346-b026f21b3e75 h1:vEu+sJLajrsVrBOKSl9+rZZ2tD6kg4Pi4gGiNAT2Cx0= -github.com/lf-edge/eve-api/go v0.0.0-20241125213346-b026f21b3e75/go.mod h1:ot6MhAhBXapUDl/hXklaX4kY88T3uC4PTg0D2wD8DzA= +github.com/lf-edge/eve-api/go v0.0.0-20241202084032-46c0a58dc84c h1:axc1BfKlb6MmvbxPhCMW427b+Wxn7u/5PxdqbvYmm6k= +github.com/lf-edge/eve-api/go v0.0.0-20241202084032-46c0a58dc84c/go.mod h1:ot6MhAhBXapUDl/hXklaX4kY88T3uC4PTg0D2wD8DzA= github.com/lf-edge/eve-libs v0.0.0-20240614221125-6913ec4213f9 h1:blXdD227+xDCsezw8gTlk5Kh0ONb5ZekkH4lLnV4J04= github.com/lf-edge/eve-libs v0.0.0-20240614221125-6913ec4213f9/go.mod h1:bz9uyBFalnRnzXl6A4oAsO7CLJfW01ZR/sT0Frqa6o8= github.com/lf-edge/eve/pkg/kube/cnirpc v0.0.0-20240315102754-0f6d1f182e0d h1:tUBb9M6u42LXwHAYHyh22wJeUUQlTpDkXwRXalpRqbo= diff --git a/pkg/pillar/hypervisor/kubevirt.go b/pkg/pillar/hypervisor/kubevirt.go index ae3c3e128f..378584edbc 100644 --- a/pkg/pillar/hypervisor/kubevirt.go +++ b/pkg/pillar/hypervisor/kubevirt.go @@ -191,6 +191,12 @@ func (ctx kubevirtContext) Setup(status types.DomainStatus, config types.DomainC logrus.Debugf("Setup called for Domain: %s, vmmode %v", domainName, config.VirtualizationMode) + if config.EnforceNetworkInterfaceOrder { + logrus.Errorf("Enforcing user-defined network interface order is not supported "+ + "with the KubeVirt hypervisor. Ignoring EnforceNetworkInterfaceOrder flag "+ + "for app %s", config.DisplayName) + } + if config.VirtualizationMode == types.NOHYPER { if err := ctx.CreatePodConfig(domainName, config, status, diskStatusList, aa, file); err != nil { return logError("failed to build kube pod config: %v", err) diff --git a/pkg/pillar/hypervisor/kvm.go b/pkg/pillar/hypervisor/kvm.go index 510c2528e1..750bbed5fe 100644 --- a/pkg/pillar/hypervisor/kvm.go +++ b/pkg/pillar/hypervisor/kvm.go @@ -77,7 +77,7 @@ type vtpmRequestResult struct { // we adjust max_sectors option (16384) to run Windows VM with vhost-scsi-pci and avoid errors like // [ 259.573575] vhost_scsi_calc_sgls: requested sgl_count: 2649 exceeds pre-allocated max_sgls: 2048 -const qemuConfTemplate = `# This file is automatically generated by domainmgr +const qemuGlobalConfTemplate = `# This file is automatically generated by domainmgr [msg] timestamp = "on" @@ -387,7 +387,7 @@ const qemuNetTemplate = ` {{- end}} ` -const qemuRootPortPciPassthruTemplate = ` +const qemuPCIeRootPortTemplate = ` [device "pci.{{.PCIId}}"] driver = "pcie-root-port" port = "1{{.PCIId}}" @@ -397,14 +397,14 @@ const qemuRootPortPciPassthruTemplate = ` addr = "{{printf "0x%x" .PCIId}}" ` -const qemuPCIPassthruBridgeTemplate = ` -[device "pcie-bridge.{{.Bus}}"] +const qemuPCIeBridgeTemplate = ` +[device "pcie-bridge.{{.PCIId}}"] driver = "pcie-pci-bridge" - bus = "pci.{{.Bus}}" - addr = "{{printf "0x%x" .PCIId}}" + bus = "pci.{{.PCIId}}" + addr = "0x0" ` -const qemuPciPassthruTemplate = ` +const qemuPCIPassthruTemplate = ` [device] driver = "vfio-pci" host = "{{.PciShortAddr}}" @@ -415,7 +415,7 @@ const qemuPciPassthruTemplate = ` {{- end -}} {{- if .Xopregion }} x-igd-opregion = "on" -{{- end -}} +{{- end}} ` const qemuSerialTemplate = ` @@ -474,6 +474,131 @@ const qemuSwtpmTemplate = ` tpmdev = "tpm0" ` +// Context for qemuGlobalConfTemplate. +type tQemuGlobalConfContext struct { + Machine string + VirtualizationMode string + BootLoaderSettingsFile string + types.DomainConfig + types.DomainStatus +} + +// Context for qemuSwtpmTemplate. +type tQemuSwtpmContext struct { + Machine string + CtrlSocket string +} + +// Context for qemuPCIPassthruTemplate. +type tQemuPCIPassthruContext struct { + PciShortAddr string + Xvga bool + Xopregion bool + Bus string + Addr string +} + +// Context for qemuPCIeRootPortTemplate. +type tQemuPCIeRootPortContext struct { + PCIId int +} + +// Context for qemuPCIeBridgeTemplate. +type tQemuPCIeBridgeContext struct { + PCIId int +} + +// Context for qemuNetTemplate. +type tQemuNetContext struct { + PCIId, NetID int + Driver string + Mac, Bridge, Vif string + MTU uint16 +} + +// Context for qemuSerialTemplate. +type tQemuSerialContext struct { + Machine string + SerialPortName string + ID int +} + +// Context for qemuCANBusTemplate. +type tQemuCANBusContext struct { + Machine string + IfName string + HostIfName string + ID int +} + +// Context for qemuDiskTemplate. +type tQemuDiskContext struct { + Machine string + PCIId, DiskID, SATAId, NumQueues int + AioType string + types.DiskStatus +} + +// Context for qemuVsockTemplate. +type tQemuVsockContext struct { + GuestCID string +} + +var ( + tQemuGlobalConf, tQemuSwtmp, tQemuVsock *template.Template + tQemuPCIeBridge, tQemuPCIPassthru, tQemuPCIeRootPort *template.Template + tQemuDisk, tQemuNet, tQemuSerial, tQemuCANBus *template.Template +) + +// Initialize all Go templates used to generate qemu config file. +func init() { + var err error + tQemuGlobalConf, err = template.New("qemuGlobalConf").Parse(qemuGlobalConfTemplate) + if err != nil { + panic(fmt.Errorf("parsing qemuGlobalConfTemplate failed: %w", err)) + } + tQemuSwtmp, err = template.New("qemuSwtpm").Parse(qemuSwtpmTemplate) + if err != nil { + panic(fmt.Errorf("parsing qemuSwtpmTemplate failed: %w", err)) + } + tQemuVsock, err = template.New("qemuVsock").Parse(qemuVsockTemplate) + if err != nil { + panic(fmt.Errorf("parsing qemuVsockTemplate failed: %w", err)) + } + tQemuPCIeBridge, err = template.New("qemuPCIeBridge").Parse(qemuPCIeBridgeTemplate) + if err != nil { + panic(fmt.Errorf("parsing qemuPCIeBridgeTemplate failed: %w", err)) + } + tQemuPCIPassthru, err = template.New("qemuPCIPassthru").Parse(qemuPCIPassthruTemplate) + if err != nil { + panic(fmt.Errorf("parsing qemuPCIPassthruTemplate failed: %w", err)) + } + tQemuPCIeRootPort, err = template.New("qemuPCIeRootPort").Parse(qemuPCIeRootPortTemplate) + if err != nil { + panic(fmt.Errorf("parsing qemuPCIeRootPortTemplate failed: %w", err)) + } + tQemuDisk, err = template.New("qemuDisk"). + Funcs(template.FuncMap{"Fmt": func(f zconfig.Format) string { + return strings.ToLower(f.String()) + }}). + Parse(qemuDiskTemplate) + if err != nil { + panic(fmt.Errorf("parsing qemuDiskTemplate failed: %w", err)) + } + tQemuNet, err = template.New("qemuNet").Parse(qemuNetTemplate) + if err != nil { + panic(fmt.Errorf("parsing qemuNetTemplate failed: %w", err)) + } + tQemuSerial, err = template.New("qemuSerial").Parse(qemuSerialTemplate) + if err != nil { + panic(fmt.Errorf("parsing qemuSerialTemplate failed: %w", err)) + } + tQemuCANBus, err = template.New("qemuCANBus").Parse(qemuCANBusTemplate) + if err != nil { + panic(fmt.Errorf("parsing qemuCANBusTemplate failed: %w", err)) + } +} + const kvmStateDir = "/run/hypervisor/kvm/" const sysfsPciDriversProbe = "/sys/bus/pci/drivers_probe" const vfioDriverPath = "/sys/bus/pci/drivers/vfio-pci" @@ -942,40 +1067,297 @@ func getFmlCustomResolution(status *types.DomainStatus, globalConfig *types.Conf return "", fmt.Errorf("invalid fml resolution %s", fmlResolutions) } +type virtualNetwork struct { + types.VifConfig + networkID int + pciDeviceID int +} + +type pciAddressAllocator struct { + pciAssignments []pciDevice + virtualNetworks []virtualNetwork + multifunctionDevices multifunctionDevs + firstFreePCIID int + enforceNetInterfaceOrder bool +} + +// allocate sets pciDeviceID and pciBridgeID for every pciDevice and virtualNetwork +// based on user-configured ordering requirements. +func (a *pciAddressAllocator) allocate() error { + if !a.enforceNetInterfaceOrder { + // Fallback to legacy ordering of PCI devices. + return a.allocateLegacy() + } + + // Determine PCI addresses for virtual network interfaces, which are connected + // to the root bus using root ports. + for i := range a.virtualNetworks { + pciDeviceID := a.firstFreePCIID + // Increment pciDeviceID by 1 for every (virtual or assigned) PCI device + // which should have lower PCI address. + // For a multifunction PCI device, we increment by 1 for the entire group of + // functions, as they share a single address on the root bus through their bridge. + for j := range a.virtualNetworks { + if i == j { + continue + } + if a.virtualNetworks[j].VifOrder < a.virtualNetworks[i].VifOrder { + pciDeviceID++ + } + } + for pciAddr, md := range a.multifunctionDevices { + isBefore, isAfter := md.compareOrderWithVirtNet(a.virtualNetworks[i]) + invalidOrder := isBefore && isAfter + if invalidOrder { + return logError("Invalid VIF %s configuration: user-defined network "+ + "interface order disrupts the function sequence of the multifunction "+ + "PCI device %s. Interleaving PCI device functions with other devices "+ + "is not allowed.", a.virtualNetworks[i].Vif, pciAddr) + } + if isBefore { + pciDeviceID++ + } + } + a.virtualNetworks[i].pciDeviceID = pciDeviceID + } + + // Determine PCI addresses for direct PCI assignments. + for i := range a.pciAssignments { + pciLongWoFunc, err := a.pciAssignments[i].pciLongWOFunction() + if err != nil { + logrus.Warnf("retrieving pci address without function failed: %v", err) + continue + } + md := a.multifunctionDevices[pciLongWoFunc] + if md == nil { + // Even when device is not multifunction, it still should have entry + // in the multifunctionDevices map. + logrus.Warnf("missing multifunctionDevices entry for pci address: %s", + pciLongWoFunc) + continue + } + // Increment pciDeviceOrBridgeID by 1 for every (virtual or assigned) PCI device + // which should have lower PCI address. + // For a multifunction PCI device, we increment by 1 for the entire group of + // functions, as they share a single address on the root bus through their bridge. + pciDeviceOrBridgeID := a.firstFreePCIID + for _, virtNet := range a.virtualNetworks { + // Order validity already checked when addresses for virtual networks + // were determined. + if isBefore, _ := md.compareOrderWithVirtNet(virtNet); !isBefore { + // Also increased when order is undefined, i.e. this PCI device + // does not have network function. Non-networking PCI devices + // are placed after virtual network interfaces. + pciDeviceOrBridgeID++ + } + } + thisHasNetFunc := md.hasNetworkFunction() + for pciAddr2, md2 := range a.multifunctionDevices { + if pciLongWoFunc == pciAddr2 { + continue + } + theOtherHasNetFunc := md2.hasNetworkFunction() + if !thisHasNetFunc { + if theOtherHasNetFunc { + // Network functions take priority in the order. + pciDeviceOrBridgeID++ + } else { + // Between non-networking devices, order by PCI addresses + // lexicographically. + if pciLongWoFunc > pciAddr2 { + pciDeviceOrBridgeID++ + } + } + continue + } + if !theOtherHasNetFunc { + // The other non-network device is ordered after this network device. + continue + } + // Both devices have at least one network function. + theOtherIsBefore, theOtherIsAfter := md2.compareOrder(*md) + invalidOrder := theOtherIsBefore && theOtherIsAfter + if invalidOrder { + return logError("User-defined network interface order disrupts "+ + "the function sequence of the multifunction PCI devices %s and %s. "+ + "Interleaving PCI device functions with other devices/functions "+ + "is not allowed.", pciLongWoFunc, pciAddr2) + } + if theOtherIsBefore { + pciDeviceOrBridgeID++ + } + } + if len(md.devs) > 1 { + // pciDeviceOrBridgeID is for the bridge wrt. the root bus. + a.pciAssignments[i].pciBridgeID = pciDeviceOrBridgeID + // Determine device address on the secondary bus provided by the bridge. + // Skip PCI address 0 which is unsupported for standard hotplug controller. + pciDeviceID := 1 + devIndex := md.index(a.pciAssignments[i]) + thisIsNetDev := a.pciAssignments[i].ioType.IsNet() + for dev2Index, dev2 := range md.devs { + theOtherIsNetDev := dev2.ioType.IsNet() + if !thisIsNetDev { + if theOtherIsNetDev { + // Network functions take priority in the order. + pciDeviceID++ + } else { + // Between non-networking functions, preserve the order received + // from zedagent. + if devIndex > dev2Index { + pciDeviceID++ + } + } + continue + } + if !theOtherIsNetDev { + // The other non-network device is ordered after this network device. + continue + } + // Both devices are of the networking type. + if dev2.netIntfOrder < a.pciAssignments[i].netIntfOrder { + pciDeviceID++ + } + } + a.pciAssignments[i].pciDeviceID = pciDeviceID + } else { + // Not multifunction PCI device. + a.pciAssignments[i].pciBridgeID = 0 + a.pciAssignments[i].pciDeviceID = pciDeviceOrBridgeID + } + } + return nil +} + +func (a *pciAddressAllocator) allocateLegacy() error { + // Virtual network interfaces precede PCI-passthrough devices in the PCI topology. + // Among virtual interfaces, the order received from zedagent is preserved. + pciDeviceID := a.firstFreePCIID + for i := range a.virtualNetworks { + a.virtualNetworks[i].pciDeviceID = pciDeviceID + pciDeviceID++ + } + + // Preserve order of PCI assignments as received from zedagent, but group + // functions of the same multifunction PCI device under the same bridge. + pciBridgeIDs := make(map[string]int) // key = PCI address without function suffix + for i := range a.pciAssignments { + pciLongWoFunc, err := a.pciAssignments[i].pciLongWOFunction() + if err != nil { + logrus.Warnf("retrieving pci address without function failed: %v", err) + continue + } + md := a.multifunctionDevices[pciLongWoFunc] + if md == nil { + // Even when device is not multifunction, it still should have entry + // in the a.multifunctionDevices map. + logrus.Warnf("missing multifunctionDevices entry for pci address: %s", + pciLongWoFunc) + continue + } + if len(md.devs) > 1 { + // Multi-function PCI device. + pciBridgeID, bridgeIDAllocated := pciBridgeIDs[pciLongWoFunc] + if !bridgeIDAllocated { + pciBridgeID = pciDeviceID + pciBridgeIDs[pciLongWoFunc] = pciBridgeID + pciDeviceID++ + } + a.pciAssignments[i].pciBridgeID = pciBridgeID + // Skip PCI address 0 which is unsupported for standard hotplug controller. + a.pciAssignments[i].pciDeviceID = md.index(a.pciAssignments[i]) + 1 + } else { + // Not multifunction PCI device. + a.pciAssignments[i].pciBridgeID = 0 + a.pciAssignments[i].pciDeviceID = pciDeviceID + pciDeviceID++ + } + } + return nil +} + type pciDevicesWithBridge struct { bridgeBus string devs []*pciDevice } -type multifunctionDevs map[string]*pciDevicesWithBridge // key: pci long without function number - -func (md multifunctionDevs) isMultiFunction(p pciDevice) bool { - pciLongWOFunc, err := p.pciLongWOFunction() - if err != nil { - return false +func (pd pciDevicesWithBridge) index(p pciDevice) int { + for i, dev := range pd.devs { + if p.sameDevice(*dev) { + return i + } } - devs, found := md[pciLongWOFunc] - return found && len(devs.devs) > 1 + return -1 } -func (md multifunctionDevs) index(p pciDevice) int { - pciLongWOFunc, err := p.pciLongWOFunction() - if err != nil { - logrus.Warnf("retrieving pci address without function failed: %v", err) - return -1 +// compareOrder determines if this (possibly multifunction) device should be ordered +// (in the PCI hierarchy) before the other given device. +// Please note that if both booleans are true, then the user-defined order is invalid +// and would break the (multifunction) device if applied. +// If both return values are false, the order is undefined. This occurs when one or both +// devices lack a network function (user only specifies order for network interfaces). +func (pd pciDevicesWithBridge) compareOrder( + pd2 pciDevicesWithBridge) (isBefore, isAfter bool) { + for _, dev := range pd.devs { + if !dev.ioType.IsNet() { + continue + } + for _, dev2 := range pd2.devs { + if !dev2.ioType.IsNet() { + continue + } + if dev.netIntfOrder < dev2.netIntfOrder { + isBefore = true + } + if dev.netIntfOrder > dev2.netIntfOrder { + isAfter = true + } + } } - pciDevices, found := md[pciLongWOFunc] - if !found { - return -1 + return isBefore, isAfter +} + +// compareOrderWithVirtNet determines if this (possibly multifunction) device should be +// ordered (in the PCI hierarchy) before or after the given virtual network device. +// Please note that if both booleans are true, then the user-defined order is invalid +// and would break the (multifunction) device if applied. +// If both return values are false, the order is undefined. This occurs when this device +// lacks a network function (user only specifies order for network interfaces). +func (pd pciDevicesWithBridge) compareOrderWithVirtNet( + virtNet virtualNetwork) (isBefore, isAfter bool) { + for _, dev := range pd.devs { + if !dev.ioType.IsNet() { + continue + } + if dev.netIntfOrder < virtNet.VifOrder { + isBefore = true + } + if dev.netIntfOrder > virtNet.VifOrder { + isAfter = true + } } + return isBefore, isAfter +} - for i, dev := range pciDevices.devs { - if p.ioType == dev.ioType && p.pciLong == dev.pciLong { - return i +// Return true if device has at least one network function. +func (pd pciDevicesWithBridge) hasNetworkFunction() bool { + for _, dev := range pd.devs { + if dev.ioType.IsNet() { + return true } } + return false +} - return -1 +type multifunctionDevs map[string]*pciDevicesWithBridge // key: pci long without function number + +func (md multifunctionDevs) isMultiFunction(p pciDevice) bool { + pciLongWOFunc, err := p.pciLongWOFunction() + if err != nil { + return false + } + devs, found := md[pciLongWOFunc] + return found && len(devs.devs) > 1 } func multifunctionDevGroup(pcis []pciDevice) multifunctionDevs { @@ -1001,65 +1383,32 @@ func multifunctionDevGroup(pcis []pciDevice) multifunctionDevs { return mds } -func (p pciDevice) pciLongWOFunction() (string, error) { - pciLongSplit := strings.Split(p.pciLong, ".") - if len(pciLongSplit) == 0 { - return "", fmt.Errorf("could not split %s", p.pciLong) - } - pciWithoutFunction := strings.Join(pciLongSplit[0:len(pciLongSplit)-1], ".") - - return pciWithoutFunction, nil -} - type pciAssignmentsTemplateFiller struct { multifunctionDevices multifunctionDevs file io.Writer } func (f *pciAssignmentsTemplateFiller) pciEBridge(pciID int, pciWOFunction string) error { - pciChildTemplateVars := struct { - PCIId int - Bus int - }{ - PCIId: 0, - Bus: pciID, - } - - tPCIeBridge, err := template.New("qemuPCIeBridge").Parse(qemuPCIPassthruBridgeTemplate) - if err != nil { - return fmt.Errorf("parsing qemuPCIPassthruBridgeTemplate failed: %w", err) - } - if err := tPCIeBridge.Execute(f.file, pciChildTemplateVars); err != nil { + pcieBridgeContext := tQemuPCIeBridgeContext{PCIId: pciID} + if err := tQemuPCIeBridge.Execute(f.file, pcieBridgeContext); err != nil { return fmt.Errorf("can't write PCIe bridge Passthrough to config file (%w)", err) } f.multifunctionDevices[pciWOFunction].bridgeBus = fmt.Sprintf("pcie-bridge.%d", pciID) - return nil } -func (f *pciAssignmentsTemplateFiller) do(file io.Writer, pciAssignments []pciDevice, pciID int) error { +func (f *pciAssignmentsTemplateFiller) do(pciAssignments []pciDevice) error { if len(pciAssignments) == 0 { return nil } - pciPTContext := struct { - PCIId int - PciShortAddr string - Xvga bool - Xopregion bool - Bus string - Addr string - }{PCIId: pciID, PciShortAddr: "", Xvga: false, Xopregion: false} - - tPCI, _ := template.New("qemuPCI").Parse(qemuPciPassthruTemplate) - pciEBridgeForMultiFuncDevCreated := make(map[string]struct{}) // key: pci long without function number - for i, pa := range pciAssignments { - pciPTContext.Xopregion = false - pciPTContext.Xvga = pa.isVGA() - pciPTContext.Bus = fmt.Sprintf("pci.%d", pciPTContext.PCIId) - pciPTContext.PciShortAddr = types.PCILongToShort(pa.pciLong) - + for _, pa := range pciAssignments { + pciPTContext := tQemuPCIPassthruContext{ + PciShortAddr: types.PCILongToShort(pa.pciLong), + Xvga: pa.isVGA(), + Xopregion: false, + } if vendor, err := pa.vid(); err == nil { // check for Intel vendor if vendor == "0x8086" { @@ -1078,41 +1427,69 @@ func (f *pciAssignmentsTemplateFiller) do(file io.Writer, pciAssignments []pciDe } _, pciEBridgeCreated := pciEBridgeForMultiFuncDevCreated[pciLongWoFunc] pciEBridgeForMultiFuncDevCreated[pciLongWoFunc] = struct{}{} - - // for non-multifunction devices, every pci device gets a "pcie-root-port" - if !f.multifunctionDevices.isMultiFunction(pa) || !pciEBridgeCreated { - tRootPortPCI, _ := template.New("qemuRootPortPCI").Parse(qemuRootPortPciPassthruTemplate) - if err := tRootPortPCI.Execute(file, pciPTContext); err != nil { - return logError("can't write Root Port PCI Passthrough to config file (%v)", err) + isMultifunctionDev := f.multifunctionDevices.isMultiFunction(pa) + + // Connect device using PCI Express Root Port either directly or via bridge if it + // has multiple functions. + if !isMultifunctionDev || !pciEBridgeCreated { + var pcieRPContext tQemuPCIeRootPortContext + if isMultifunctionDev { + pcieRPContext.PCIId = pa.pciBridgeID + } else { + pcieRPContext.PCIId = pa.pciDeviceID + } + if err := tQemuPCIeRootPort.Execute(f.file, pcieRPContext); err != nil { + return logError("can't write PCIe Root Port to config file (%v)", err) } } - if f.multifunctionDevices.isMultiFunction(pa) { + if isMultifunctionDev { if !pciEBridgeCreated { - err := f.pciEBridge(pciPTContext.PCIId, pciLongWoFunc) + err := f.pciEBridge(pa.pciBridgeID, pciLongWoFunc) if err != nil { logrus.Warnf("could not write template: %v, skipping", err) } } - pciPTContext.Bus = f.multifunctionDevices[pciLongWoFunc].bridgeBus - pciPTContext.PCIId = f.multifunctionDevices.index(pa) - if pciPTContext.PCIId < 0 { - logrus.Warn("PCIId is less than 0 - skipping") - } - pciPTContext.Addr = fmt.Sprintf("0x%x", pciPTContext.PCIId+1) // Unsupported PCI slot 0 for standard hotplug controller + pciPTContext.Addr = fmt.Sprintf("0x%x", pa.pciDeviceID) } else { - pciPTContext.Bus = fmt.Sprintf("pci.%d", pciPTContext.PCIId) + pciPTContext.Bus = fmt.Sprintf("pci.%d", pa.pciDeviceID) pciPTContext.Addr = "0x0" } - if err := tPCI.Execute(file, pciPTContext); err != nil { + if err := tQemuPCIPassthru.Execute(f.file, pciPTContext); err != nil { return logError("can't write PCI Passthrough to config file (%v)", err) } - pciPTContext.PCIId = pciID + i + 1 } return nil } +type virtNetworkTemplateFiller struct { + file io.Writer +} + +func (f *virtNetworkTemplateFiller) do(virtualNetworks []virtualNetwork, + virtMode types.VmMode) error { + for _, virtNet := range virtualNetworks { + netContext := tQemuNetContext{ + PCIId: virtNet.pciDeviceID, + NetID: virtNet.networkID, + Mac: virtNet.Mac.String(), + Bridge: virtNet.Bridge, + Vif: virtNet.Vif, + MTU: virtNet.MTU, + } + if virtMode == types.LEGACY { + netContext.Driver = "e1000" + } else { + netContext.Driver = "virtio-net-pci" + } + if err := tQemuNet.Execute(f.file, netContext); err != nil { + return logError("failed to write network template to config file: %v", err) + } + } + return nil +} + // CreateDomConfig creates a domain config (a qemu config file, // typically named something like xen-%d.cfg) func (ctx KvmContext) CreateDomConfig(domainName string, @@ -1128,47 +1505,41 @@ func (ctx KvmContext) CreateDomConfig(domainName string, if config.VirtualizationMode == types.FML { virtualizationMode = "FML" } - tmplCtx := struct { - Machine string - VirtualizationMode string - BootLoaderSettingsFile string - types.DomainConfig - types.DomainStatus - }{ctx.devicemodel, virtualizationMode, bootLoaderSettingsFile, config, status} - tmplCtx.DomainConfig.Memory = (config.Memory + 1023) / 1024 - tmplCtx.DomainConfig.EnableVncShimVM = + qemuConfContext := tQemuGlobalConfContext{ + Machine: ctx.devicemodel, + VirtualizationMode: virtualizationMode, + BootLoaderSettingsFile: bootLoaderSettingsFile, + DomainConfig: config, + DomainStatus: status, + } + qemuConfContext.DomainConfig.Memory = (config.Memory + 1023) / 1024 + qemuConfContext.DomainConfig.EnableVncShimVM = isVncShimVMEnabled(globalConfig, config) - tmplCtx.DomainConfig.DisplayName = domainName + qemuConfContext.DomainConfig.DisplayName = domainName // render global device model settings - t, _ := template.New("qemu").Parse(qemuConfTemplate) - if err := t.Execute(file, tmplCtx); err != nil { + if err := tQemuGlobalConf.Execute(file, qemuConfContext); err != nil { return logError("can't write to config file %s (%v)", file.Name(), err) } // render swtpm settings if swtpmCtrlSock != "" { - swtpmContext := struct { - Machine string - CtrlSocket string - }{ctx.devicemodel, swtpmCtrlSock} - t, _ = template.New("qemuSwtpm").Parse(qemuSwtpmTemplate) - if err := t.Execute(file, swtpmContext); err != nil { + swtpmContext := tQemuSwtpmContext{ + Machine: ctx.devicemodel, + CtrlSocket: swtpmCtrlSock, + } + if err := tQemuSwtmp.Execute(file, swtpmContext); err != nil { return logError("can't write to config file %s (%v)", file.Name(), err) } } // render disk device model settings - diskContext := struct { - Machine string - PCIId, DiskID, SATAId, NumQueues int - AioType string - types.DiskStatus - }{Machine: ctx.devicemodel, PCIId: 4, DiskID: 0, SATAId: 0, AioType: "io_uring", NumQueues: config.VCpus} - - t, _ = template.New("qemuDisk"). - Funcs(template.FuncMap{"Fmt": func(f zconfig.Format) string { return strings.ToLower(f.String()) }}). - Parse(qemuDiskTemplate) + diskContext := tQemuDiskContext{ + Machine: ctx.devicemodel, + PCIId: 4, + AioType: "io_uring", + NumQueues: config.VCpus, + } for _, ds := range diskStatusList { if ds.Devtype == "" { continue @@ -1179,7 +1550,7 @@ func (ctx KvmContext) CreateDomConfig(domainName string, continue } diskContext.DiskStatus = ds - if err := t.Execute(file, diskContext); err != nil { + if err := tQemuDisk.Execute(file, diskContext); err != nil { return logError("can't write to config file %s (%v)", file.Name(), err) } if diskContext.Devtype == "cdrom" { @@ -1190,38 +1561,9 @@ func (ctx KvmContext) CreateDomConfig(domainName string, diskContext.DiskID = diskContext.DiskID + 1 } - // render network device model settings - netContext := struct { - PCIId, NetID int - Driver string - Mac, Bridge, Vif string - MTU uint16 - }{PCIId: diskContext.PCIId, NetID: 0} - t, _ = template.New("qemuNet").Parse(qemuNetTemplate) - for _, net := range config.VifList { - netContext.Mac = net.Mac.String() - netContext.Bridge = net.Bridge - netContext.Vif = net.Vif - if config.VirtualizationMode == types.LEGACY { - netContext.Driver = "e1000" - } else { - netContext.Driver = "virtio-net-pci" - } - netContext.MTU = net.MTU - if err := t.Execute(file, netContext); err != nil { - return logError("can't write to config file %s (%v)", file.Name(), err) - } - netContext.PCIId = netContext.PCIId + 1 - netContext.NetID = netContext.NetID + 1 - } - - // Gather all PCI assignments into a single line var pciAssignments []pciDevice - // Gather all serial assignments into a single line var serialAssignments []string - // Gather all CAN Bus assignments into a single line canBusAssignments := make(map[string]string) - for _, adapter := range config.IoAdapterList { logrus.Debugf("processing adapter %d %s\n", adapter.Type, adapter.Name) list := aa.LookupIoBundleAny(adapter.Name) @@ -1242,6 +1584,9 @@ func (ctx KvmContext) CreateDomConfig(domainName string, if ib.PciLong != "" && ib.UsbAddr == "" { logrus.Infof("Adding PCI device <%v>\n", ib.PciLong) tap := pciDevice{pciLong: ib.PciLong, ioType: ib.Type} + if ib.Type.IsNet() { + tap.netIntfOrder = adapter.IntfOrder + } pciAssignments = addNoDuplicatePCI(pciAssignments, tap) } if ib.Serial != "" { @@ -1265,44 +1610,69 @@ func (ctx KvmContext) CreateDomConfig(domainName string, } } + // Group functions of the same multifunction PCI device together. + multifunctionDevices := multifunctionDevGroup(pciAssignments) + + // Prepare a list of virtual interfaces connecting the application with network + // instances. + var virtualNetworks []virtualNetwork + var networkID int + for _, vif := range config.VifList { + virtualNetworks = append(virtualNetworks, virtualNetwork{ + VifConfig: vif, + networkID: networkID, + }) + networkID++ + } + + // Determine PCI addresses for all virtual networks and direct PCI assignments. + addrAllocator := pciAddressAllocator{ + pciAssignments: pciAssignments, + virtualNetworks: virtualNetworks, + multifunctionDevices: multifunctionDevices, + firstFreePCIID: diskContext.PCIId, + enforceNetInterfaceOrder: config.EnforceNetworkInterfaceOrder, + } + // Set pciDeviceID and pciBridgeID for every item in pciAssignments and virtualNetworks. + if err = addrAllocator.allocate(); err != nil { + return logError(err.Error()) + } + + // Render virtual network interfaces. + virtNetworksFiller := virtNetworkTemplateFiller{ + file: file, + } + err = virtNetworksFiller.do(virtualNetworks, config.VirtualizationMode) + if err != nil { + return logError(err.Error()) + } + + // Render PCI assignments. pciAssignmentsFiller := pciAssignmentsTemplateFiller{ - multifunctionDevices: multifunctionDevGroup(pciAssignments), + multifunctionDevices: multifunctionDevices, file: file, } - - err = pciAssignmentsFiller.do(file, pciAssignments, netContext.PCIId) + err = pciAssignmentsFiller.do(pciAssignments) if err != nil { return fmt.Errorf("writing to template file %s failed: %w", file.Name(), err) } - if len(serialAssignments) != 0 { - serialPortContext := struct { - Machine string - SerialPortName string - ID int - }{Machine: ctx.devicemodel, SerialPortName: "", ID: 0} - t, _ = template.New("qemuSerial").Parse(qemuSerialTemplate) + // Render serial assignments. + if len(serialAssignments) != 0 { + serialPortContext := tQemuSerialContext{Machine: ctx.devicemodel} for id, serial := range serialAssignments { serialPortContext.SerialPortName = serial - fmt.Printf("id for serial is %d\n", id) serialPortContext.ID = id - if err := t.Execute(file, serialPortContext); err != nil { - return logError("can't write serial assignment to config file %s (%v)", file.Name(), err) + if err := tQemuSerial.Execute(file, serialPortContext); err != nil { + return logError("can't write serial assignment to config file %s (%v)", + file.Name(), err) } } } + + // Render CANBus assignments. if len(canBusAssignments) != 0 { - canIfContext := struct { - Machine string - IfName string - HostIfName string - ID int - }{Machine: ctx.devicemodel, IfName: "", HostIfName: "", ID: 0} - - t, err := template.New("qemuCANBus").Parse(qemuCANBusTemplate) - if err != nil { - return logError("can't create CAN Bus configuration template: %v", err) - } + canIfContext := tQemuCANBusContext{Machine: ctx.devicemodel} id := 0 for canIf, canHostIf := range canBusAssignments { logrus.Infof("CAN interface %s connected to host CAN %s\n", canIf, canHostIf) @@ -1310,17 +1680,16 @@ func (ctx KvmContext) CreateDomConfig(domainName string, canIfContext.HostIfName = canHostIf canIfContext.ID = id id++ - if err := t.Execute(file, canIfContext); err != nil { - return logError("can't write CAN Bus assignment to config file %s (%v)", file.Name(), err) + if err := tQemuCANBus.Execute(file, canIfContext); err != nil { + return logError("can't write CAN Bus assignment to config file %s (%v)", + file.Name(), err) } } } // render vsock settings, this should go last to avoid // PCI ID conflicts, let qemu assign PCI ID for vsock. - vsockContext := struct { - GuestCID string - }{ + vsockContext := tQemuVsockContext{ // currently we don't save the clientCid/AppUUID pair since // we there is no need for it, but in the future when wen // we add channels for vms to report things like CPU/Mem usage @@ -1329,9 +1698,9 @@ func (ctx KvmContext) CreateDomConfig(domainName string, // clientCid needs atomic add to avoid race condition // in case CreateDomConfig is called concurrently, which // happens at least in unit tests. - atomic.AddUint32(&clientCid, 1))} - t, _ = template.New("qemuVsock").Parse(qemuVsockTemplate) - if err := t.Execute(file, vsockContext); err != nil { + atomic.AddUint32(&clientCid, 1)), + } + if err := tQemuVsock.Execute(file, vsockContext); err != nil { return logError("can't write to config file %s (%v)", file.Name(), err) } diff --git a/pkg/pillar/hypervisor/kvm_test.go b/pkg/pillar/hypervisor/kvm_test.go index 35b01aa73c..f8c2e4517a 100644 --- a/pkg/pillar/hypervisor/kvm_test.go +++ b/pkg/pillar/hypervisor/kvm_test.go @@ -12,6 +12,7 @@ import ( "github.com/google/go-cmp/cmp" zconfig "github.com/lf-edge/eve-api/go/config" "github.com/lf-edge/eve/pkg/pillar/types" + . "github.com/onsi/gomega" uuid "github.com/satori/go.uuid" ) @@ -1403,6 +1404,7 @@ func domConfigArm64() string { host = "f3:00.0" bus = "pci.10" addr = "0x0" + [chardev "charserial-usr0"] backend = "serial" path = "/dev/ttyS0" @@ -1702,6 +1704,7 @@ func domConfigAmd64FML() string { host = "f3:00.0" bus = "pci.10" addr = "0x0" + [device "pci.11"] driver = "pcie-root-port" port = "111" @@ -1715,6 +1718,7 @@ func domConfigAmd64FML() string { host = "f4:00.0" bus = "pci.11" addr = "0x0" + [chardev "charserial-usr0"] backend = "serial" path = "/dev/ttyS0" @@ -2003,6 +2007,7 @@ func domConfigAmd64Legacy() string { host = "f3:00.0" bus = "pci.10" addr = "0x0" + [chardev "charserial-usr0"] backend = "serial" path = "/dev/ttyS0" @@ -2289,6 +2294,7 @@ func domConfigAmd64() string { host = "f3:00.0" bus = "pci.10" addr = "0x0" + [chardev "charserial-usr0"] backend = "serial" path = "/dev/ttyS0" @@ -2577,6 +2583,7 @@ func domConfigContainerVNC() string { host = "f3:00.0" bus = "pci.9" addr = "0x0" + [chardev "charserial-usr0"] backend = "serial" path = "/dev/ttyS0" @@ -2788,6 +2795,7 @@ func expectedMultifunctionDevice() string { host = "00:0a.0" bus = "pci.0" addr = "0x0" + [device "pci.1"] driver = "pcie-root-port" port = "11" @@ -2806,6 +2814,7 @@ func expectedMultifunctionDevice() string { host = "00:0d.0" bus = "pcie-bridge.1" addr = "0x1" + [device "pci.2"] driver = "pcie-root-port" port = "12" @@ -2819,11 +2828,13 @@ func expectedMultifunctionDevice() string { host = "00:0b.0" bus = "pci.2" addr = "0x0" + [device] driver = "vfio-pci" host = "00:0d.2" bus = "pcie-bridge.1" - addr = "0x2"` + addr = "0x2" +` } func TestPCIAssignmentsTemplateFillMultifunctionDevice(t *testing.T) { @@ -2847,11 +2858,20 @@ func TestPCIAssignmentsTemplateFillMultifunctionDevice(t *testing.T) { } wr := bytes.Buffer{} + multifunctionDevices := multifunctionDevGroup(pciAssignments) + addrAllocator := pciAddressAllocator{ + pciAssignments: pciAssignments, + multifunctionDevices: multifunctionDevices, + } + if err := addrAllocator.allocate(); err != nil { + t.Error(err) + } + p := pciAssignmentsTemplateFiller{ - multifunctionDevices: multifunctionDevGroup(pciAssignments), + multifunctionDevices: multifunctionDevices, file: &wr, } - p.do(&wr, pciAssignments, 0) + p.do(pciAssignments) if wr.String() != expectedMultifunctionDevice() { t.Fatalf("not equal, diff: \n%s\ncomplete:\n%s", cmp.Diff(wr.String(), expectedMultifunctionDevice()), wr.String()) @@ -2897,3 +2917,382 @@ func TestConvertToMultifunctionPCIDevices(t *testing.T) { t.Fatal("expected one device") } } + +func TestPCIAddressAllocator(t *testing.T) { + g := NewGomegaWithT(t) + virtualNetworks := []virtualNetwork{ + { + VifConfig: types.VifConfig{ + Bridge: "br1", + Vif: "nbu1x1", + Mac: net.HardwareAddr{0x02, 0x16, 0x3e, 0x00, 0x00, 0x01}, + MTU: 1500, + VifOrder: 1, + }, + networkID: 0, + }, + { + VifConfig: types.VifConfig{ + Bridge: "br2", + Vif: "nbu2x1", + Mac: net.HardwareAddr{0x02, 0x16, 0x3e, 0x00, 0x00, 0x02}, + MTU: 1500, + VifOrder: 4, + }, + networkID: 1, + }, + } + pciAssignments := []pciDevice{ + { + pciLong: "0000:06:00.0", + ioType: types.IoNetEth, + netIntfOrder: 2, + }, + { + pciLong: "0000:00:15.0", + ioType: types.IoUSB, + }, + { + pciLong: "0000:06:00.2", + ioType: types.IoOther, + }, + { + pciLong: "0000:06:00.1", + ioType: types.IoNetEth, + netIntfOrder: 3, + }, + { + pciLong: "0000:08:00.0", + ioType: types.IoNetWWAN, + netIntfOrder: 0, + }, + } + multifunctionDevices := multifunctionDevGroup(pciAssignments) + g.Expect(multifunctionDevices).To(HaveLen(3)) + addrAllocator := pciAddressAllocator{ + pciAssignments: pciAssignments, + virtualNetworks: virtualNetworks, + multifunctionDevices: multifunctionDevices, + firstFreePCIID: 5, + // First test the legacy order. + enforceNetInterfaceOrder: false, + } + err := addrAllocator.allocate() + g.Expect(err).ToNot(HaveOccurred()) + + g.Expect(virtualNetworks[0].pciDeviceID).To(Equal(5)) + g.Expect(virtualNetworks[1].pciDeviceID).To(Equal(6)) + g.Expect(pciAssignments[0].pciBridgeID).To(Equal(7)) + g.Expect(pciAssignments[0].pciDeviceID).To(Equal(1)) + g.Expect(pciAssignments[1].pciBridgeID).To(Equal(0)) + g.Expect(pciAssignments[1].pciDeviceID).To(Equal(8)) + g.Expect(pciAssignments[2].pciBridgeID).To(Equal(7)) + g.Expect(pciAssignments[2].pciDeviceID).To(Equal(2)) + g.Expect(pciAssignments[3].pciBridgeID).To(Equal(7)) + g.Expect(pciAssignments[3].pciDeviceID).To(Equal(3)) + g.Expect(pciAssignments[4].pciBridgeID).To(Equal(0)) + g.Expect(pciAssignments[4].pciDeviceID).To(Equal(9)) + + // Check generated config with the legacy order. + buffer := bytes.Buffer{} + vnFiller := virtNetworkTemplateFiller{ + file: &buffer, + } + err = vnFiller.do(virtualNetworks, types.HVM) + g.Expect(err).ToNot(HaveOccurred()) + paFiller := pciAssignmentsTemplateFiller{ + multifunctionDevices: multifunctionDevices, + file: &buffer, + } + err = paFiller.do(pciAssignments) + g.Expect(err).ToNot(HaveOccurred()) + expectedConfig := ` +[device "pci.5"] + driver = "pcie-root-port" + port = "15" + chassis = "5" + bus = "pcie.0" + multifunction = "on" + addr = "0x5" + +[netdev "hostnet0"] + type = "tap" + ifname = "nbu1x1" + br = "br1" + script = "/etc/xen/scripts/qemu-ifup" + downscript = "no" + vhost = "on" + +[device "net0"] + driver = "virtio-net-pci" + netdev = "hostnet0" + mac = "02:16:3e:00:00:01" + bus = "pci.5" + addr = "0x0" + host_mtu = "1500" + +[device "pci.6"] + driver = "pcie-root-port" + port = "16" + chassis = "6" + bus = "pcie.0" + multifunction = "on" + addr = "0x6" + +[netdev "hostnet1"] + type = "tap" + ifname = "nbu2x1" + br = "br2" + script = "/etc/xen/scripts/qemu-ifup" + downscript = "no" + vhost = "on" + +[device "net1"] + driver = "virtio-net-pci" + netdev = "hostnet1" + mac = "02:16:3e:00:00:02" + bus = "pci.6" + addr = "0x0" + host_mtu = "1500" + +[device "pci.7"] + driver = "pcie-root-port" + port = "17" + chassis = "7" + bus = "pcie.0" + multifunction = "on" + addr = "0x7" + +[device "pcie-bridge.7"] + driver = "pcie-pci-bridge" + bus = "pci.7" + addr = "0x0" + +[device] + driver = "vfio-pci" + host = "06:00.0" + bus = "pcie-bridge.7" + addr = "0x1" + +[device "pci.8"] + driver = "pcie-root-port" + port = "18" + chassis = "8" + bus = "pcie.0" + multifunction = "on" + addr = "0x8" + +[device] + driver = "vfio-pci" + host = "00:15.0" + bus = "pci.8" + addr = "0x0" + +[device] + driver = "vfio-pci" + host = "06:00.2" + bus = "pcie-bridge.7" + addr = "0x2" + +[device] + driver = "vfio-pci" + host = "06:00.1" + bus = "pcie-bridge.7" + addr = "0x3" + +[device "pci.9"] + driver = "pcie-root-port" + port = "19" + chassis = "9" + bus = "pcie.0" + multifunction = "on" + addr = "0x9" + +[device] + driver = "vfio-pci" + host = "08:00.0" + bus = "pci.9" + addr = "0x0" +` + g.Expect(buffer.String()).To(Equal(expectedConfig)) + + // Test enforced user-defined network interface order. + addrAllocator.enforceNetInterfaceOrder = true + err = addrAllocator.allocate() + g.Expect(err).ToNot(HaveOccurred()) + + g.Expect(virtualNetworks[0].pciDeviceID).To(Equal(6)) + g.Expect(virtualNetworks[1].pciDeviceID).To(Equal(8)) + g.Expect(pciAssignments[0].pciBridgeID).To(Equal(7)) + g.Expect(pciAssignments[0].pciDeviceID).To(Equal(1)) + g.Expect(pciAssignments[1].pciBridgeID).To(Equal(0)) + g.Expect(pciAssignments[1].pciDeviceID).To(Equal(9)) + g.Expect(pciAssignments[2].pciBridgeID).To(Equal(7)) + g.Expect(pciAssignments[2].pciDeviceID).To(Equal(3)) + g.Expect(pciAssignments[3].pciBridgeID).To(Equal(7)) + g.Expect(pciAssignments[3].pciDeviceID).To(Equal(2)) + g.Expect(pciAssignments[4].pciBridgeID).To(Equal(0)) + g.Expect(pciAssignments[4].pciDeviceID).To(Equal(5)) + + // Check generated config with the user-defined order. + buffer.Reset() + err = vnFiller.do(virtualNetworks, types.HVM) + g.Expect(err).ToNot(HaveOccurred()) + err = paFiller.do(pciAssignments) + g.Expect(err).ToNot(HaveOccurred()) + expectedConfig = ` +[device "pci.6"] + driver = "pcie-root-port" + port = "16" + chassis = "6" + bus = "pcie.0" + multifunction = "on" + addr = "0x6" + +[netdev "hostnet0"] + type = "tap" + ifname = "nbu1x1" + br = "br1" + script = "/etc/xen/scripts/qemu-ifup" + downscript = "no" + vhost = "on" + +[device "net0"] + driver = "virtio-net-pci" + netdev = "hostnet0" + mac = "02:16:3e:00:00:01" + bus = "pci.6" + addr = "0x0" + host_mtu = "1500" + +[device "pci.8"] + driver = "pcie-root-port" + port = "18" + chassis = "8" + bus = "pcie.0" + multifunction = "on" + addr = "0x8" + +[netdev "hostnet1"] + type = "tap" + ifname = "nbu2x1" + br = "br2" + script = "/etc/xen/scripts/qemu-ifup" + downscript = "no" + vhost = "on" + +[device "net1"] + driver = "virtio-net-pci" + netdev = "hostnet1" + mac = "02:16:3e:00:00:02" + bus = "pci.8" + addr = "0x0" + host_mtu = "1500" + +[device "pci.7"] + driver = "pcie-root-port" + port = "17" + chassis = "7" + bus = "pcie.0" + multifunction = "on" + addr = "0x7" + +[device "pcie-bridge.7"] + driver = "pcie-pci-bridge" + bus = "pci.7" + addr = "0x0" + +[device] + driver = "vfio-pci" + host = "06:00.0" + bus = "pcie-bridge.7" + addr = "0x1" + +[device "pci.9"] + driver = "pcie-root-port" + port = "19" + chassis = "9" + bus = "pcie.0" + multifunction = "on" + addr = "0x9" + +[device] + driver = "vfio-pci" + host = "00:15.0" + bus = "pci.9" + addr = "0x0" + +[device] + driver = "vfio-pci" + host = "06:00.2" + bus = "pcie-bridge.7" + addr = "0x3" + +[device] + driver = "vfio-pci" + host = "06:00.1" + bus = "pcie-bridge.7" + addr = "0x2" + +[device "pci.5"] + driver = "pcie-root-port" + port = "15" + chassis = "5" + bus = "pcie.0" + multifunction = "on" + addr = "0x5" + +[device] + driver = "vfio-pci" + host = "08:00.0" + bus = "pci.5" + addr = "0x0" +` + g.Expect(buffer.String()).To(Equal(expectedConfig)) + + // Try re-ordering functions of a multifunction device. This should be allowed. + pciAssignments[0].netIntfOrder = 3 + pciAssignments[3].netIntfOrder = 2 + err = addrAllocator.allocate() + g.Expect(err).ToNot(HaveOccurred()) + + g.Expect(virtualNetworks[0].pciDeviceID).To(Equal(6)) + g.Expect(virtualNetworks[1].pciDeviceID).To(Equal(8)) + g.Expect(pciAssignments[0].pciBridgeID).To(Equal(7)) + g.Expect(pciAssignments[0].pciDeviceID).To(Equal(2)) // 1 -> 2 + g.Expect(pciAssignments[1].pciBridgeID).To(Equal(0)) + g.Expect(pciAssignments[1].pciDeviceID).To(Equal(9)) + g.Expect(pciAssignments[2].pciBridgeID).To(Equal(7)) + g.Expect(pciAssignments[2].pciDeviceID).To(Equal(3)) + g.Expect(pciAssignments[3].pciBridgeID).To(Equal(7)) + g.Expect(pciAssignments[3].pciDeviceID).To(Equal(1)) // 2 -> 1 + g.Expect(pciAssignments[4].pciBridgeID).To(Equal(0)) + g.Expect(pciAssignments[4].pciDeviceID).To(Equal(5)) + + // Try to put virtual interface in-between functions of a multifunction device. + // This should not be allowed. + virtualNetworks[1].VifOrder = 3 + pciAssignments[0].netIntfOrder = 4 + + err = addrAllocator.allocate() + g.Expect(err).To(HaveOccurred()) + g.Expect(err.Error()).To(ContainSubstring("Invalid VIF nbu2x1 configuration: " + + "user-defined network interface order disrupts the function sequence " + + "of the multifunction PCI device 0000:06:00")) + // Revert the invalid config change. + virtualNetworks[1].VifOrder = 4 + pciAssignments[0].netIntfOrder = 3 + err = addrAllocator.allocate() + g.Expect(err).ToNot(HaveOccurred()) + + // Try to put PCI-passthrough network device in-between functions of a multifunction + // device. This should not be allowed. + pciAssignments[4].netIntfOrder = 3 + pciAssignments[0].netIntfOrder = 4 + + err = addrAllocator.allocate() + g.Expect(err).To(HaveOccurred()) + fmt.Println(err.Error()) + g.Expect(err.Error()).To(ContainSubstring("User-defined network interface order " + + "disrupts the function sequence of the multifunction PCI devices 0000:06:00 and 0000:08:00")) +} diff --git a/pkg/pillar/hypervisor/pci.go b/pkg/pillar/hypervisor/pci.go index ba91826d1e..4a663dac46 100644 --- a/pkg/pillar/hypervisor/pci.go +++ b/pkg/pillar/hypervisor/pci.go @@ -75,6 +75,23 @@ func addNoDuplicatePCI(list []pciDevice, tap pciDevice) []pciDevice { type pciDevice struct { pciLong string ioType types.IoType + // netIntfOrder is only applied to network devices when EnforceNetworkInterfaceOrder + // is enabled. + netIntfOrder uint32 + + // pciBridgeID and pciDeviceID are set by pciAddressAllocator. + + // PCI bridge is only used for multifunction PCI devices. + // In that case pciBridgeID is address of the bridge on the root bus, while + // pciDeviceID is device address inside the secondary bus provided by the bridge. + // For single-function PCI devices, bridge is unused, pciBridgeID is unset + // and pciDeviceID points to device address on the root bus. + pciBridgeID int + pciDeviceID int +} + +func (d pciDevice) sameDevice(d2 pciDevice) bool { + return d.ioType == d2.ioType && d.pciLong == d2.pciLong } // check if the PCI device is a VGA device @@ -102,6 +119,16 @@ func (d pciDevice) devid() (string, error) { return strings.TrimSpace(strings.TrimSuffix(string(devID), "\n")), nil } +// Return PCI long address without the function suffix. +func (d pciDevice) pciLongWOFunction() (string, error) { + pciLongSplit := strings.Split(d.pciLong, ".") + if len(pciLongSplit) == 0 { + return "", fmt.Errorf("could not split %s", d.pciLong) + } + pciWithoutFunction := strings.Join(pciLongSplit[0:len(pciLongSplit)-1], ".") + return pciWithoutFunction, nil +} + // isBridge checks if the given PCI device is a bridge. // It reads the device's class from the sysfs filesystem and returns true if the class // starts with "0x06", which is the PCI base class code for bridges. diff --git a/pkg/pillar/hypervisor/xen.go b/pkg/pillar/hypervisor/xen.go index 565dca6f14..8c21c9b94f 100644 --- a/pkg/pillar/hypervisor/xen.go +++ b/pkg/pillar/hypervisor/xen.go @@ -163,6 +163,12 @@ func (ctx xenContext) CreateDomConfig(domainName string, xenGlobal := "" uuidStr := fmt.Sprintf("appuuid=%s ", config.UUIDandVersion.UUID) + if config.EnforceNetworkInterfaceOrder { + logrus.Errorf("Enforcing user-defined network interface order is not supported "+ + "with the Xen hypervisor. Ignoring EnforceNetworkInterfaceOrder flag "+ + "for app %s", config.DisplayName) + } + switch config.VirtualizationMode { case types.PV: xenType = "pv" diff --git a/pkg/pillar/types/domainmgrtypes.go b/pkg/pillar/types/domainmgrtypes.go index 33c494aa01..cdcb5c3d9f 100644 --- a/pkg/pillar/types/domainmgrtypes.go +++ b/pkg/pillar/types/domainmgrtypes.go @@ -261,6 +261,8 @@ type VmConfig struct { CPUsPinned bool VMMMaxMem int // in kbytes EnableVncShimVM bool + // Enables enforcement of user-defined ordering for network interfaces. + EnforceNetworkInterfaceOrder bool } // VmMode is the type for the virtualization mode @@ -425,6 +427,10 @@ type VifConfig struct { MTU uint16 // PodVif is only valid in the Kubernetes mode. PodVif PodVIF + // Interface order across both VIFs and directly attached network devices. + // Note that we cannot use attribute name "IntfOrder" here, otherwise it would + // overlap with IntfOrder from AppNetAdapterConfig inside AppNetAdapterStatus. + VifOrder uint32 } // PodVIF : configuration parameters for VIF connecting Kubernetes pod with the host. diff --git a/pkg/pillar/types/zedmanagertypes.go b/pkg/pillar/types/zedmanagertypes.go index b86faf4101..fb46b5aacb 100644 --- a/pkg/pillar/types/zedmanagertypes.go +++ b/pkg/pillar/types/zedmanagertypes.go @@ -156,9 +156,10 @@ type AppInstanceOpsCmd struct { // IoAdapter specifies that a group of ports should be assigned type IoAdapter struct { - Type IoType - Name string // Short hand name such as "COM1" or "eth1-2" - EthVf sriov.EthVF // Applies only to the VF IoType + Type IoType + Name string // Short hand name such as "COM1" or "eth1-2" + EthVf sriov.EthVF // Applies only to the VF IoType + IntfOrder uint32 // Interface order across both virtual and passthrough network devices. } // LogCreate : diff --git a/pkg/pillar/types/zedroutertypes.go b/pkg/pillar/types/zedroutertypes.go index a696c91663..93b6868b99 100644 --- a/pkg/pillar/types/zedroutertypes.go +++ b/pkg/pillar/types/zedroutertypes.go @@ -282,7 +282,7 @@ type AppNetAdapterConfig struct { Name string // From proto message AppMacAddr net.HardwareAddr // If set use it for vif AppIPAddr net.IP // If set use DHCP to assign to app - IntfOrder int32 // XXX need to get from API + IntfOrder uint32 // Order wrt. other virtual and also directly assigned network adapters // XXX Shouldn't we use ErrorAndTime here // Error diff --git a/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/devcommon.pb.go b/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/devcommon.pb.go index 00f4471e77..5fbe08dcda 100644 --- a/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/devcommon.pb.go +++ b/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/devcommon.pb.go @@ -220,6 +220,25 @@ type Adapter struct { Type evecommon.PhyIoType `protobuf:"varint,1,opt,name=type,proto3,enum=org.lfedge.eve.common.PhyIoType" json:"type,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Short hand name such as "com" from bundle EthVf *EthVF `protobuf:"bytes,3,opt,name=eth_vf,json=ethVf,proto3" json:"eth_vf,omitempty"` // Only relevant for PHY_IO_TYPE_PHY_IO_NET_ETH_VF + // Define the network interface order relative to other directly assigned + // network devices and virtual network adapters. + // Only applies to (assignable) network adapters, i.e. types: "PhyIoNetEth", "PhyIoNetWLAN", + // "PhyIoNetWWAN" and "PhyIoNetEthVF". + // The numbering is across both the "Adapter" (direct assignments) and the "NetworkAdapter" + // (virtual interfaces) lists for a given "AppInstanceConfig", thus every entry in these + // lists, excluding non-networking adapters, must have a unique order number + // (when the "enforce_network_interface_order" is enabled, see "VmConfig"). + // Interface with a lower order value should appear inside the application before + // interface with a higher order value. + // The implementation of this ordering may depend on the hypervisor. For example, + // the hypervisor might virtualize the PCI bus and assign lower PCI addresses to + // interfaces with lower order values. But the actual outcome of interface ordering + // depends on the application and EVE therefore cannot guarantee desired order. + // Since this field was introduced in later versions, older EVE versions do not support + // user-defined interface ordering. For backward compatibility, the user-defined + // order is applied only if "enforce_network_interface_order" is enabled for the given + // application (see "VmConfig", file "vm.proto"). + InterfaceOrder uint32 `protobuf:"varint,4,opt,name=interface_order,json=interfaceOrder,proto3" json:"interface_order,omitempty"` } func (x *Adapter) Reset() { @@ -275,6 +294,13 @@ func (x *Adapter) GetEthVf() *EthVF { return nil } +func (x *Adapter) GetInterfaceOrder() uint32 { + if x != nil { + return x.InterfaceOrder + } + return 0 +} + // Information regarding Virtual Function (VF) customisation type EthVF struct { state protoimpl.MessageState @@ -360,7 +386,7 @@ var file_config_devcommon_proto_rawDesc = []byte{ 0x6f, 0x70, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x34, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x88, 0x01, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x07, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, @@ -369,16 +395,19 @@ var file_config_devcommon_proto_rawDesc = []byte{ 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x74, 0x68, 0x56, - 0x46, 0x52, 0x05, 0x65, 0x74, 0x68, 0x56, 0x66, 0x22, 0x48, 0x0a, 0x05, 0x45, 0x74, 0x68, 0x56, - 0x46, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x63, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x76, 0x6c, 0x61, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x76, 0x6c, 0x61, 0x6e, - 0x49, 0x64, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, - 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, - 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x46, 0x52, 0x05, 0x65, 0x74, 0x68, 0x56, 0x66, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x22, 0x48, 0x0a, 0x05, 0x45, 0x74, 0x68, 0x56, 0x46, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, + 0x61, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x76, 0x6c, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x76, 0x6c, 0x61, 0x6e, 0x49, 0x64, 0x42, 0x3d, 0x0a, 0x15, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, + 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/netconfig.pb.go b/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/netconfig.pb.go index 9aad8a10b5..d70bf26fed 100644 --- a/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/netconfig.pb.go +++ b/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/netconfig.pb.go @@ -214,6 +214,23 @@ type NetworkAdapter struct { // allow AppInstance to discover other AppInstances // attached to this network instance. Default is false AllowToDiscover bool `protobuf:"varint,42,opt,name=allow_to_discover,json=allowToDiscover,proto3" json:"allow_to_discover,omitempty"` + // Define the network interface order relative to other virtual network adapters + // and directly assigned network devices. + // The numbering is across both the "Adapter" (direct assignments) and the "NetworkAdapter" + // (virtual interfaces) lists for a given "AppInstanceConfig", thus every entry in these + // lists, excluding non-networking adapters, must have a unique order number + // (when the "enforce_network_interface_order" is enabled, see "VmConfig"). + // Interface with a lower order value should appear inside the application before + // interface with a higher order value. + // The implementation of this ordering may depend on the hypervisor. For example, + // the hypervisor might virtualize the PCI bus and assign lower PCI addresses to + // interfaces with lower order values. But the actual outcome of interface ordering + // depends on the application and EVE therefore cannot guarantee desired order. + // Since this field was introduced in later versions, older EVE versions do not support + // user-defined interface ordering. For backward compatibility, the user-defined + // order is applied only if "enforce_network_interface_order" is enabled for the given + // application (see "VmConfig", file "vm.proto"). + InterfaceOrder uint32 `protobuf:"varint,50,opt,name=interface_order,json=interfaceOrder,proto3" json:"interface_order,omitempty"` } func (x *NetworkAdapter) Reset() { @@ -332,6 +349,13 @@ func (x *NetworkAdapter) GetAllowToDiscover() bool { return false } +func (x *NetworkAdapter) GetInterfaceOrder() uint32 { + if x != nil { + return x.InterfaceOrder + } + return 0 +} + type WirelessConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -883,7 +907,7 @@ var file_config_netconfig_proto_rawDesc = []byte{ 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, 0x98, 0x03, 0x0a, 0x0e, 0x4e, 0x65, 0x74, + 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, 0xc1, 0x03, 0x0a, 0x0e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, @@ -909,112 +933,115 @@ var file_config_netconfig_proto_rawDesc = []byte{ 0x73, 0x56, 0x6c, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x22, 0xcf, 0x01, 0x0a, 0x0e, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x72, - 0x65, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x47, 0x0a, 0x0b, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x66, 0x67, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x65, 0x6c, - 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x63, 0x65, 0x6c, - 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x66, 0x67, 0x12, 0x3b, 0x0a, 0x07, 0x77, 0x69, 0x66, 0x69, - 0x43, 0x66, 0x67, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, - 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x77, 0x69, - 0x66, 0x69, 0x43, 0x66, 0x67, 0x22, 0x96, 0x02, 0x0a, 0x0e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, - 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x50, 0x4e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x50, 0x4e, 0x12, 0x46, 0x0a, 0x05, 0x70, 0x72, - 0x6f, 0x62, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x67, 0x2e, - 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x05, 0x70, 0x72, 0x6f, - 0x62, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x12, - 0x4f, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, - 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, - 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, - 0x6d, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x53, 0x6c, 0x6f, 0x74, 0x22, 0xab, - 0x01, 0x0a, 0x19, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, - 0x01, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x4b, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, - 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x22, 0xfe, 0x02, 0x0a, - 0x13, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x6d, 0x5f, 0x73, 0x6c, 0x6f, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x69, 0x6d, 0x53, 0x6c, 0x6f, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x61, 0x70, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, - 0x6e, 0x12, 0x50, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x12, 0x43, 0x0a, 0x0b, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0a, 0x63, 0x69, - 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x6c, 0x6d, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x6c, 0x6d, 0x6e, - 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x5f, 0x72, 0x6f, 0x61, 0x6d, - 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x62, 0x69, - 0x64, 0x52, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x53, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0e, - 0x32, 0x2c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0d, - 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x52, 0x61, 0x74, 0x73, 0x22, 0x92, 0x03, - 0x0a, 0x0a, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, - 0x77, 0x69, 0x66, 0x69, 0x53, 0x53, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x77, 0x69, 0x66, 0x69, 0x53, 0x53, 0x49, 0x44, 0x12, 0x42, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x72, - 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x46, 0x69, 0x4b, 0x65, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x65, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x66, - 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, - 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, - 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x45, 0x0a, 0x0b, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x6f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x2a, 0xa1, 0x01, 0x0a, 0x14, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, - 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x43, - 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, - 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, - 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x50, 0x41, 0x50, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, - 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x48, 0x41, 0x50, 0x10, 0x02, 0x12, 0x27, 0x0a, - 0x23, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, - 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x50, 0x41, 0x50, 0x5f, 0x41, 0x4e, 0x44, 0x5f, - 0x43, 0x48, 0x41, 0x50, 0x10, 0x03, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, - 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, - 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x76, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0xcf, 0x01, 0x0a, + 0x0e, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x63, 0x65, 0x6c, 0x6c, + 0x75, 0x6c, 0x61, 0x72, 0x43, 0x66, 0x67, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x66, + 0x67, 0x12, 0x3b, 0x0a, 0x07, 0x77, 0x69, 0x66, 0x69, 0x43, 0x66, 0x67, 0x18, 0x0a, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x77, 0x69, 0x66, 0x69, 0x43, 0x66, 0x67, 0x22, 0x96, + 0x02, 0x0a, 0x0e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x50, 0x4e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x41, 0x50, 0x4e, 0x12, 0x46, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, + 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, + 0x72, 0x6f, 0x62, 0x65, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x12, 0x4f, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6d, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x69, 0x6d, 0x53, 0x6c, 0x6f, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x19, 0x43, 0x65, 0x6c, 0x6c, + 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, + 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, + 0x27, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x62, + 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4b, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x50, 0x72, 0x6f, 0x62, 0x65, 0x22, 0xfe, 0x02, 0x0a, 0x13, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, + 0x61, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x73, 0x69, 0x6d, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x73, 0x69, 0x6d, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x6e, 0x12, 0x50, 0x0a, 0x0d, 0x61, 0x75, + 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x2b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, + 0x61, 0x72, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x0c, + 0x61, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x43, 0x0a, 0x0b, + 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x70, + 0x6c, 0x6d, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x6c, 0x6d, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6f, + 0x72, 0x62, 0x69, 0x64, 0x5f, 0x72, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x52, 0x6f, 0x61, 0x6d, 0x69, 0x6e, + 0x67, 0x12, 0x53, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x72, + 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x65, 0x63, + 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, + 0x65, 0x64, 0x52, 0x61, 0x74, 0x73, 0x22, 0x92, 0x03, 0x0a, 0x0a, 0x57, 0x69, 0x66, 0x69, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x69, 0x66, 0x69, 0x53, 0x53, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x69, 0x66, 0x69, 0x53, 0x53, 0x49, + 0x44, 0x12, 0x42, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x46, + 0x69, 0x4b, 0x65, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x45, 0x0a, + 0x06, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x1e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x69, 0x70, + 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x1a, 0x45, 0x0a, 0x0b, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, + 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2a, 0xa1, 0x01, 0x0a, 0x14, + 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, + 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4e, + 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, + 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x50, 0x41, 0x50, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, + 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x43, 0x48, 0x41, 0x50, 0x10, 0x02, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, + 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x50, 0x41, 0x50, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x50, 0x10, 0x03, 0x42, + 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, + 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/vm.pb.go b/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/vm.pb.go index 51b861fe3b..3e576d05cc 100644 --- a/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/vm.pb.go +++ b/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/config/vm.pb.go @@ -191,6 +191,18 @@ type VmConfig struct { EnableVncShimVm bool `protobuf:"varint,22,opt,name=enable_vnc_shim_vm,json=enableVncShimVm,proto3" json:"enable_vnc_shim_vm,omitempty"` // Boot mode: Legacy or UEFI BootMode VmBootMode `protobuf:"varint,23,opt,name=boot_mode,json=bootMode,proto3,enum=org.lfedge.eve.config.VmBootMode" json:"boot_mode,omitempty"` + // Enables enforcement of user-defined ordering for network interfaces. + // This applies to both virtual interfaces (specified in the "AppInstanceConfig.interfaces" list) + // and directly assigned network adapters (specified in the "AppInstanceConfig.adapters" list + // as items of type "PhyIoNetEth", "PhyIoNetWLAN", "PhyIoNetWWAN", and "PhyIoNetEthVF"). + // Note: Older versions of EVE may not support enforcing the user-defined order + // of application network interfaces. The controller can check + // "ZInfoDevice.api_capability" to verify if the configured device supports the + // API capability "API_CAPABILITY_ENFORCED_NET_INTERFACE_ORDER". + // Please beware that EVE's ability to influence the order of VM application interfaces + // is limited. Depending on the application's operating system, achieving the desired network + // interface order might not be possible. + EnforceNetworkInterfaceOrder bool `protobuf:"varint,24,opt,name=enforce_network_interface_order,json=enforceNetworkInterfaceOrder,proto3" json:"enforce_network_interface_order,omitempty"` } func (x *VmConfig) Reset() { @@ -386,12 +398,19 @@ func (x *VmConfig) GetBootMode() VmBootMode { return VmBootMode_VM_BOOT_MODE_UNSPECIFIED } +func (x *VmConfig) GetEnforceNetworkInterfaceOrder() bool { + if x != nil { + return x.EnforceNetworkInterfaceOrder + } + return false +} + var File_config_vm_proto protoreflect.FileDescriptor var file_config_vm_proto_rawDesc = []byte{ 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, - 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xdb, 0x05, 0x0a, 0x08, 0x56, 0x6d, 0x43, + 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xa2, 0x06, 0x0a, 0x08, 0x56, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x61, 0x6d, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, @@ -437,22 +456,26 @@ var file_config_vm_proto_rawDesc = []byte{ 0x6f, 0x64, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6d, 0x42, 0x6f, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x62, 0x6f, - 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x2a, 0x47, 0x0a, 0x06, 0x56, 0x6d, 0x4d, 0x6f, 0x64, 0x65, - 0x12, 0x06, 0x0a, 0x02, 0x50, 0x56, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x48, 0x56, 0x4d, 0x10, - 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x10, 0x02, 0x12, 0x07, 0x0a, - 0x03, 0x46, 0x4d, 0x4c, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x4f, 0x48, 0x59, 0x50, 0x45, - 0x52, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x10, 0x05, 0x2a, - 0x5a, 0x0a, 0x0a, 0x56, 0x6d, 0x42, 0x6f, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, - 0x18, 0x56, 0x4d, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x56, - 0x4d, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x45, 0x47, 0x41, - 0x43, 0x59, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x4d, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, - 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x45, 0x46, 0x49, 0x10, 0x02, 0x42, 0x3d, 0x0a, 0x15, 0x6f, - 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, - 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x45, 0x0a, 0x1f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x1c, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x2a, 0x47, 0x0a, + 0x06, 0x56, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x56, 0x10, 0x00, 0x12, + 0x07, 0x0a, 0x03, 0x48, 0x56, 0x4d, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x6c, + 0x65, 0x72, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x4d, 0x4c, 0x10, 0x03, 0x12, 0x0b, 0x0a, + 0x07, 0x4e, 0x4f, 0x48, 0x59, 0x50, 0x45, 0x52, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, + 0x47, 0x41, 0x43, 0x59, 0x10, 0x05, 0x2a, 0x5a, 0x0a, 0x0a, 0x56, 0x6d, 0x42, 0x6f, 0x6f, 0x74, + 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x56, 0x4d, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, + 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4d, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x4d, 0x4f, + 0x44, 0x45, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x56, + 0x4d, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x45, 0x46, 0x49, + 0x10, 0x02, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, + 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/info/info.pb.go b/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/info/info.pb.go index b23d324850..50bc6f1214 100644 --- a/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/info/info.pb.go +++ b/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/info/info.pb.go @@ -1020,43 +1020,46 @@ func (StorageTypeInfo) EnumDescriptor() ([]byte, []int) { type APICapability int32 const ( - APICapability_API_CAPABILITY_UNSPECIFIED APICapability = 0 - APICapability_API_CAPABILITY_RETRY_UPDATE APICapability = 1 // BaseOs.retry_update counter supported - APICapability_API_CAPABILITY_SHUTDOWN APICapability = 2 // shutdown DevOpsCmd support - APICapability_API_CAPABILITY_START_DELAY_IN_SECONDS APICapability = 3 // start_delay_in_seconds supported - APICapability_API_CAPABILITY_EDGEVIEW APICapability = 4 // edgeview and edgeview.token supported - APICapability_API_CAPABILITY_VOLUME_SNAPSHOTS APICapability = 5 // Volume snapshots supported - APICapability_API_CAPABILITY_NETWORK_INSTANCE_ROUTING APICapability = 6 // routing config in NetworkInstanceConfig supported - APICapability_API_CAPABILITY_BOOT_MODE APICapability = 7 // Support different boot modes for Edge Applications (VMs) - APICapability_API_CAPABILITY_MTU APICapability = 8 // Allows to set MTU for network adapters and network instances - APICapability_API_CAPABILITY_ADAPTER_USER_LABELS APICapability = 9 // Supports user-defined shared network adapter labels + APICapability_API_CAPABILITY_UNSPECIFIED APICapability = 0 + APICapability_API_CAPABILITY_RETRY_UPDATE APICapability = 1 // BaseOs.retry_update counter supported + APICapability_API_CAPABILITY_SHUTDOWN APICapability = 2 // shutdown DevOpsCmd support + APICapability_API_CAPABILITY_START_DELAY_IN_SECONDS APICapability = 3 // start_delay_in_seconds supported + APICapability_API_CAPABILITY_EDGEVIEW APICapability = 4 // edgeview and edgeview.token supported + APICapability_API_CAPABILITY_VOLUME_SNAPSHOTS APICapability = 5 // Volume snapshots supported + APICapability_API_CAPABILITY_NETWORK_INSTANCE_ROUTING APICapability = 6 // routing config in NetworkInstanceConfig supported + APICapability_API_CAPABILITY_BOOT_MODE APICapability = 7 // Support different boot modes for Edge Applications (VMs) + APICapability_API_CAPABILITY_MTU APICapability = 8 // Allows to set MTU for network adapters and network instances + APICapability_API_CAPABILITY_ADAPTER_USER_LABELS APICapability = 9 // Supports user-defined shared network adapter labels + APICapability_API_CAPABILITY_ENFORCED_NET_INTERFACE_ORDER APICapability = 10 // EVE is able to enforce the user-defined order of application network interfaces ) // Enum value maps for APICapability. var ( APICapability_name = map[int32]string{ - 0: "API_CAPABILITY_UNSPECIFIED", - 1: "API_CAPABILITY_RETRY_UPDATE", - 2: "API_CAPABILITY_SHUTDOWN", - 3: "API_CAPABILITY_START_DELAY_IN_SECONDS", - 4: "API_CAPABILITY_EDGEVIEW", - 5: "API_CAPABILITY_VOLUME_SNAPSHOTS", - 6: "API_CAPABILITY_NETWORK_INSTANCE_ROUTING", - 7: "API_CAPABILITY_BOOT_MODE", - 8: "API_CAPABILITY_MTU", - 9: "API_CAPABILITY_ADAPTER_USER_LABELS", + 0: "API_CAPABILITY_UNSPECIFIED", + 1: "API_CAPABILITY_RETRY_UPDATE", + 2: "API_CAPABILITY_SHUTDOWN", + 3: "API_CAPABILITY_START_DELAY_IN_SECONDS", + 4: "API_CAPABILITY_EDGEVIEW", + 5: "API_CAPABILITY_VOLUME_SNAPSHOTS", + 6: "API_CAPABILITY_NETWORK_INSTANCE_ROUTING", + 7: "API_CAPABILITY_BOOT_MODE", + 8: "API_CAPABILITY_MTU", + 9: "API_CAPABILITY_ADAPTER_USER_LABELS", + 10: "API_CAPABILITY_ENFORCED_NET_INTERFACE_ORDER", } APICapability_value = map[string]int32{ - "API_CAPABILITY_UNSPECIFIED": 0, - "API_CAPABILITY_RETRY_UPDATE": 1, - "API_CAPABILITY_SHUTDOWN": 2, - "API_CAPABILITY_START_DELAY_IN_SECONDS": 3, - "API_CAPABILITY_EDGEVIEW": 4, - "API_CAPABILITY_VOLUME_SNAPSHOTS": 5, - "API_CAPABILITY_NETWORK_INSTANCE_ROUTING": 6, - "API_CAPABILITY_BOOT_MODE": 7, - "API_CAPABILITY_MTU": 8, - "API_CAPABILITY_ADAPTER_USER_LABELS": 9, + "API_CAPABILITY_UNSPECIFIED": 0, + "API_CAPABILITY_RETRY_UPDATE": 1, + "API_CAPABILITY_SHUTDOWN": 2, + "API_CAPABILITY_START_DELAY_IN_SECONDS": 3, + "API_CAPABILITY_EDGEVIEW": 4, + "API_CAPABILITY_VOLUME_SNAPSHOTS": 5, + "API_CAPABILITY_NETWORK_INSTANCE_ROUTING": 6, + "API_CAPABILITY_BOOT_MODE": 7, + "API_CAPABILITY_MTU": 8, + "API_CAPABILITY_ADAPTER_USER_LABELS": 9, + "API_CAPABILITY_ENFORCED_NET_INTERFACE_ORDER": 10, } ) @@ -9703,8 +9706,8 @@ var file_info_info_proto_rawDesc = []byte{ 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x45, 0x58, 0x54, 0x34, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x5a, 0x46, 0x53, 0x10, 0x02, 0x2a, 0xe5, - 0x02, 0x0a, 0x0d, 0x41, 0x50, 0x49, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x5a, 0x46, 0x53, 0x10, 0x02, 0x2a, 0x96, + 0x03, 0x0a, 0x0d, 0x41, 0x50, 0x49, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, 0x4c, 0x49, @@ -9726,150 +9729,153 @@ var file_info_info_proto_rawDesc = []byte{ 0x50, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x54, 0x55, 0x10, 0x08, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x41, 0x50, 0x54, 0x45, 0x52, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4c, 0x41, - 0x42, 0x45, 0x4c, 0x53, 0x10, 0x09, 0x2a, 0xb9, 0x03, 0x0a, 0x0a, 0x42, 0x6f, 0x6f, 0x74, 0x52, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, - 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, - 0x4e, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4f, 0x4f, - 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x5f, - 0x43, 0x4d, 0x44, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, - 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, - 0x14, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x4c, - 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, - 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, - 0x54, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, - 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x4f, - 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x4f, 0x4d, 0x10, 0x07, 0x12, - 0x1d, 0x0a, 0x19, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x57, - 0x41, 0x54, 0x43, 0x48, 0x44, 0x4f, 0x47, 0x5f, 0x48, 0x55, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x1c, - 0x0a, 0x18, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x57, 0x41, - 0x54, 0x43, 0x48, 0x44, 0x4f, 0x47, 0x5f, 0x50, 0x49, 0x44, 0x10, 0x09, 0x12, 0x16, 0x0a, 0x12, - 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4b, 0x45, 0x52, 0x4e, - 0x45, 0x4c, 0x10, 0x0a, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, - 0x53, 0x4f, 0x4e, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x0b, - 0x12, 0x17, 0x0a, 0x13, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x0c, 0x12, 0x1c, 0x0a, 0x18, 0x42, 0x4f, 0x4f, - 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x46, - 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x1c, 0x0a, 0x18, 0x42, 0x4f, 0x4f, 0x54, 0x5f, - 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x4f, 0x46, 0x46, 0x5f, - 0x43, 0x4d, 0x44, 0x10, 0x0e, 0x12, 0x1b, 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, - 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, 0x53, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, - 0xff, 0x01, 0x2a, 0xbe, 0x01, 0x0a, 0x15, 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x1c, - 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, - 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x2a, - 0x0a, 0x26, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, - 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x52, - 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x2b, 0x0a, 0x27, 0x4d, 0x41, - 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, - 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, - 0x45, 0x44, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x12, 0x2a, 0x0a, 0x26, 0x4d, 0x41, 0x49, 0x4e, 0x54, - 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, - 0x4f, 0x4e, 0x5f, 0x4c, 0x4f, 0x57, 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x53, 0x50, 0x41, 0x43, - 0x45, 0x10, 0x03, 0x2a, 0xb5, 0x02, 0x0a, 0x10, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x54, 0x54, 0x45, - 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x41, + 0x42, 0x45, 0x4c, 0x53, 0x10, 0x09, 0x12, 0x2f, 0x0a, 0x2b, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, + 0x50, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x45, 0x4e, 0x46, 0x4f, 0x52, 0x43, 0x45, + 0x44, 0x5f, 0x4e, 0x45, 0x54, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x5f, + 0x4f, 0x52, 0x44, 0x45, 0x52, 0x10, 0x0a, 0x2a, 0xb9, 0x03, 0x0a, 0x0a, 0x42, 0x6f, 0x6f, 0x74, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, + 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, + 0x4f, 0x4e, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4f, + 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, + 0x5f, 0x43, 0x4d, 0x44, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, + 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x03, 0x12, 0x18, + 0x0a, 0x14, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x46, 0x41, + 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, + 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, + 0x43, 0x54, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, + 0x53, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x42, + 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x4f, 0x4d, 0x10, 0x07, + 0x12, 0x1d, 0x0a, 0x19, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, + 0x57, 0x41, 0x54, 0x43, 0x48, 0x44, 0x4f, 0x47, 0x5f, 0x48, 0x55, 0x4e, 0x47, 0x10, 0x08, 0x12, + 0x1c, 0x0a, 0x18, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x57, + 0x41, 0x54, 0x43, 0x48, 0x44, 0x4f, 0x47, 0x5f, 0x50, 0x49, 0x44, 0x10, 0x09, 0x12, 0x16, 0x0a, + 0x12, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4b, 0x45, 0x52, + 0x4e, 0x45, 0x4c, 0x10, 0x0a, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, + 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, + 0x0b, 0x12, 0x17, 0x0a, 0x13, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, + 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x0c, 0x12, 0x1c, 0x0a, 0x18, 0x42, 0x4f, + 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x55, 0x4c, 0x54, 0x5f, + 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x1c, 0x0a, 0x18, 0x42, 0x4f, 0x4f, 0x54, + 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x4f, 0x46, 0x46, + 0x5f, 0x43, 0x4d, 0x44, 0x10, 0x0e, 0x12, 0x1b, 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, + 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, 0x53, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, + 0x10, 0xff, 0x01, 0x2a, 0xbe, 0x01, 0x0a, 0x15, 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x20, 0x0a, + 0x1c, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, + 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, + 0x2a, 0x0a, 0x26, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, + 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, + 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x2b, 0x0a, 0x27, 0x4d, + 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, + 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4c, 0x4f, 0x43, + 0x4b, 0x45, 0x44, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x12, 0x2a, 0x0a, 0x26, 0x4d, 0x41, 0x49, 0x4e, + 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, + 0x53, 0x4f, 0x4e, 0x5f, 0x4c, 0x4f, 0x57, 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x53, 0x50, 0x41, + 0x43, 0x45, 0x10, 0x03, 0x2a, 0xb5, 0x02, 0x0a, 0x10, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x54, 0x54, + 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, + 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x43, 0x45, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x01, 0x12, 0x24, + 0x0a, 0x20, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x54, 0x50, 0x4d, 0x5f, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x5f, 0x57, 0x41, + 0x49, 0x54, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x50, 0x4d, 0x5f, 0x45, 0x53, + 0x43, 0x52, 0x4f, 0x57, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x4e, 0x4f, 0x4e, 0x43, 0x45, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x01, 0x12, 0x24, 0x0a, - 0x20, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x54, 0x50, 0x4d, 0x5f, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x5f, 0x57, 0x41, 0x49, - 0x54, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x50, 0x4d, 0x5f, 0x45, 0x53, 0x43, - 0x52, 0x4f, 0x57, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x54, - 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x04, 0x12, 0x28, 0x0a, - 0x24, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x53, 0x43, 0x52, 0x4f, 0x57, - 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x05, 0x12, 0x22, 0x0a, 0x1e, 0x41, 0x54, 0x54, 0x45, 0x53, - 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x53, - 0x54, 0x41, 0x52, 0x54, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x06, 0x12, 0x1e, 0x0a, 0x1a, 0x41, - 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x07, 0x2a, 0x8b, 0x01, 0x0a, 0x13, - 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x5f, - 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, - 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x27, 0x0a, 0x23, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x53, - 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x01, 0x12, 0x29, - 0x0a, 0x25, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x02, 0x2a, 0x61, 0x0a, 0x0c, 0x57, 0x69, 0x72, - 0x65, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x57, 0x49, 0x52, - 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x57, 0x49, 0x52, 0x45, - 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x57, 0x49, 0x46, 0x49, 0x10, 0x01, - 0x12, 0x1a, 0x0a, 0x16, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x10, 0x02, 0x2a, 0x71, 0x0a, 0x0c, - 0x42, 0x61, 0x73, 0x65, 0x4f, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x08, 0x0a, 0x04, - 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, - 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x4f, 0x57, 0x4e, 0x4c, - 0x4f, 0x41, 0x44, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x50, - 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x44, 0x41, - 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, - 0x4b, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x2a, - 0xcb, 0x01, 0x0a, 0x0f, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x73, 0x53, 0x75, 0x62, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x55, 0x42, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x4f, 0x57, 0x4e, 0x4c, - 0x4f, 0x41, 0x44, 0x5f, 0x49, 0x4e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, - 0x12, 0x15, 0x0a, 0x11, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x49, 0x4e, 0x50, 0x52, 0x4f, - 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x50, 0x44, 0x41, 0x54, - 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x03, - 0x12, 0x14, 0x0a, 0x10, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, - 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x50, - 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x45, 0x45, 0x44, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x43, - 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x50, 0x44, 0x41, - 0x54, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x45, 0x52, 0x52, 0x45, 0x44, 0x10, 0x07, 0x2a, 0x4b, 0x0a, - 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, - 0x19, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, - 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, - 0x50, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x01, 0x2a, 0xb8, 0x01, 0x0a, 0x16, 0x5a, - 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x26, 0x5a, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, - 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x24, 0x0a, 0x20, 0x5a, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x43, 0x4c, 0x55, 0x53, + 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x04, 0x12, 0x28, + 0x0a, 0x24, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x53, 0x43, 0x52, 0x4f, + 0x57, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x05, 0x12, 0x22, 0x0a, 0x1e, 0x41, 0x54, 0x54, 0x45, + 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, + 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x06, 0x12, 0x1e, 0x0a, 0x1a, + 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x07, 0x2a, 0x8b, 0x01, 0x0a, + 0x13, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x53, 0x54, + 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x27, 0x0a, 0x23, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, + 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x01, 0x12, + 0x29, 0x0a, 0x25, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, + 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, + 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x02, 0x2a, 0x61, 0x0a, 0x0c, 0x57, 0x69, + 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x57, 0x49, + 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x57, 0x49, 0x52, + 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x57, 0x49, 0x46, 0x49, 0x10, + 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x10, 0x02, 0x2a, 0x71, 0x0a, + 0x0c, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x08, 0x0a, + 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x4f, 0x57, 0x4e, 0x4c, + 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x4f, 0x57, 0x4e, + 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x55, + 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, + 0x43, 0x4b, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, + 0x2a, 0xcb, 0x01, 0x0a, 0x0f, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x73, 0x53, 0x75, 0x62, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x55, 0x42, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x4f, 0x57, 0x4e, + 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x49, 0x4e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, + 0x01, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x49, 0x4e, 0x50, 0x52, + 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, + 0x03, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x4f, + 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x50, 0x44, 0x41, 0x54, + 0x45, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18, 0x55, + 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x45, 0x45, 0x44, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, + 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x45, 0x52, 0x52, 0x45, 0x44, 0x10, 0x07, 0x2a, 0x4b, + 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, + 0x0a, 0x19, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, + 0x18, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, + 0x50, 0x50, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x01, 0x2a, 0xb8, 0x01, 0x0a, 0x16, + 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x26, 0x5a, 0x5f, 0x49, 0x4e, 0x46, 0x4f, + 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x5a, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x43, 0x4c, 0x55, + 0x53, 0x54, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x01, 0x12, 0x27, 0x0a, 0x23, 0x5a, 0x5f, 0x49, 0x4e, + 0x46, 0x4f, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, + 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x5a, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x01, 0x12, 0x27, 0x0a, 0x23, 0x5a, 0x5f, 0x49, 0x4e, 0x46, - 0x4f, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x02, - 0x12, 0x23, 0x0a, 0x1f, 0x5a, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, - 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, - 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x2a, 0x8f, 0x01, 0x0a, 0x0d, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, - 0x70, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x49, - 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, - 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x56, 0x50, 0x4e, - 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, - 0x0f, 0x56, 0x50, 0x4e, 0x5f, 0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, - 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x56, 0x50, 0x4e, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, - 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x52, 0x45, 0x4b, - 0x45, 0x59, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x44, 0x45, - 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x0a, 0x2a, 0x85, 0x01, 0x0a, 0x15, 0x5a, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x17, 0x0a, 0x13, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x5a, 0x4e, - 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, - 0x49, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, - 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x2a, - 0x9e, 0x01, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x52, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x1b, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, - 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, - 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x57, 0x10, - 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x49, - 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4c, 0x4f, - 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, - 0x44, 0x49, 0x55, 0x4d, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, - 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, 0x04, - 0x42, 0x39, 0x0a, 0x13, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, - 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x2a, 0x8f, 0x01, 0x0a, 0x0d, 0x5a, 0x49, 0x6e, 0x66, 0x6f, + 0x56, 0x70, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, + 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, + 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x56, 0x50, + 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x13, + 0x0a, 0x0f, 0x56, 0x50, 0x4e, 0x5f, 0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, + 0x44, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x56, 0x50, 0x4e, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, + 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x52, 0x45, + 0x4b, 0x45, 0x59, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x44, + 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x0a, 0x2a, 0x85, 0x01, 0x0a, 0x15, 0x5a, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x5a, + 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, + 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, + 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, + 0x2a, 0x9e, 0x01, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x52, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x1b, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, + 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, + 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x57, + 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, + 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4c, + 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4d, + 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x4c, 0x4f, 0x43, 0x5f, 0x52, + 0x45, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, + 0x04, 0x42, 0x39, 0x0a, 0x13, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, + 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/metrics/metrics.pb.go b/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/metrics/metrics.pb.go index 9dfba40bb7..22135f9d2f 100644 --- a/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/metrics/metrics.pb.go +++ b/pkg/pillar/vendor/github.com/lf-edge/eve-api/go/metrics/metrics.pb.go @@ -4061,6 +4061,10 @@ type NewlogMetric struct { TooManyRequest uint32 `protobuf:"varint,21,opt,name=tooManyRequest,proto3" json:"tooManyRequest,omitempty"` // counter for gzip files bypassing the uploading to cloud SkipUploadAppFile uint32 `protobuf:"varint,22,opt,name=skipUploadAppFile,proto3" json:"skipUploadAppFile,omitempty"` + // total size of logs on device + TotalSizeLogs uint64 `protobuf:"varint,23,opt,name=total_size_logs,json=totalSizeLogs,proto3" json:"total_size_logs,omitempty"` + // timestamp of the latest device log saved on device + OldestSavedDeviceLog *timestamppb.Timestamp `protobuf:"bytes,24,opt,name=oldest_saved_device_log,json=oldestSavedDeviceLog,proto3" json:"oldest_saved_device_log,omitempty"` } func (x *NewlogMetric) Reset() { @@ -4249,6 +4253,20 @@ func (x *NewlogMetric) GetSkipUploadAppFile() uint32 { return 0 } +func (x *NewlogMetric) GetTotalSizeLogs() uint64 { + if x != nil { + return x.TotalSizeLogs + } + return 0 +} + +func (x *NewlogMetric) GetOldestSavedDeviceLog() *timestamppb.Timestamp { + if x != nil { + return x.OldestSavedDeviceLog + } + return nil +} + // logfileMetrics - is shared for both device log and application log type LogfileMetrics struct { state protoimpl.MessageState @@ -5742,7 +5760,7 @@ var file_metrics_metrics_proto_rawDesc = []byte{ 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x02, 0x63, 0x6d, 0x42, 0x0f, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0xa1, 0x09, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x6c, 0x6f, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x9c, 0x0a, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x54, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x54, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x48, 0x0a, 0x11, 0x66, @@ -5812,143 +5830,151 @@ var file_metrics_metrics_proto_rawDesc = []byte{ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x70, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x70, 0x70, - 0x46, 0x69, 0x6c, 0x65, 0x1a, 0x44, 0x0a, 0x16, 0x54, 0x6f, 0x70, 0x31, 0x30, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdc, 0x03, 0x0a, 0x0e, 0x6c, - 0x6f, 0x67, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x28, 0x0a, - 0x0f, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, - 0x69, 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6e, 0x75, 0x6d, 0x47, 0x7a, - 0x69, 0x70, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x75, 0x6d, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x75, - 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6e, - 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x44, 0x69, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, - 0x6c, 0x65, 0x49, 0x6e, 0x44, 0x69, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x75, 0x6d, 0x49, 0x6e, - 0x70, 0x75, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, - 0x6e, 0x75, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, - 0x10, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x74, 0x72, - 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, - 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x14, 0x6e, 0x75, 0x6d, - 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x70, 0x74, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, - 0x46, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x70, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x4a, 0x0a, - 0x12, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x12, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x47, 0x7a, 0x69, - 0x70, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x6c, 0x61, 0x73, - 0x74, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, - 0x65, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x33, 0x0a, 0x0b, 0x7a, 0x65, 0x64, - 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x75, 0x6d, 0x47, - 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0d, 0x6e, 0x75, 0x6d, 0x47, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x73, 0x22, 0xc4, - 0x01, 0x0a, 0x08, 0x76, 0x6c, 0x61, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x26, 0x0a, 0x0f, 0x6e, - 0x75, 0x6d, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x6b, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x75, 0x6e, 0x6b, 0x50, 0x6f, - 0x72, 0x74, 0x73, 0x12, 0x51, 0x0a, 0x0b, 0x76, 0x6c, 0x61, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x2e, 0x76, 0x6c, 0x61, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x56, 0x6c, 0x61, 0x6e, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x76, 0x6c, 0x61, 0x6e, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x56, 0x6c, 0x61, 0x6e, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 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, + 0x46, 0x69, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x51, 0x0a, 0x17, + 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x14, 0x6f, 0x6c, 0x64, 0x65, 0x73, + 0x74, 0x53, 0x61, 0x76, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x67, 0x1a, + 0x44, 0x0a, 0x16, 0x54, 0x6f, 0x70, 0x31, 0x30, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdf, 0x01, 0x0a, 0x0d, 0x46, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, - 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x43, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, - 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x05, - 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, - 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x4a, 0x0a, 0x0c, 0x64, - 0x6e, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x6c, - 0x6f, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x64, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x6a, 0x0a, 0x0f, 0x46, 0x6c, 0x6f, 0x77, 0x6c, - 0x6f, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x72, 0x6f, 0x70, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x64, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x0f, 0x4b, 0x75, 0x62, 0x65, 0x4e, 0x6f, 0x64, 0x65, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, - 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, - 0x63, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, - 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x63, 0x70, 0x75, - 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, - 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x6d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x22, 0x64, 0x0a, 0x0e, 0x4b, 0x75, 0x62, 0x65, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdc, 0x03, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x66, 0x69, 0x6c, + 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x47, + 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, + 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6e, + 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x75, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, + 0x70, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x44, 0x69, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x44, + 0x69, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x75, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x47, + 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x52, + 0x65, 0x74, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x14, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, + 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x70, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x4b, + 0x65, 0x70, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x4a, 0x0a, 0x12, 0x72, 0x65, 0x63, 0x65, + 0x6e, 0x74, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x12, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x47, 0x7a, 0x69, 0x70, + 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x14, + 0x6c, 0x61, 0x73, 0x74, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x33, 0x0a, 0x0b, 0x7a, 0x65, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x75, 0x6d, 0x47, 0x6f, 0x52, 0x6f, 0x75, 0x74, + 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x47, + 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x08, 0x76, 0x6c, + 0x61, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x72, + 0x75, 0x6e, 0x6b, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x75, 0x6e, 0x6b, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x51, + 0x0a, 0x0b, 0x76, 0x6c, 0x61, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x6c, 0x61, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x56, 0x6c, 0x61, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x76, 0x6c, 0x61, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x56, 0x6c, 0x61, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 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, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xdf, 0x01, 0x0a, 0x0d, 0x46, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x12, 0x43, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x46, 0x6c, + 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x08, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x77, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, + 0x46, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x05, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x4a, 0x0a, 0x0c, 0x64, 0x6e, 0x73, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x64, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x22, 0x6a, 0x0a, 0x0f, 0x46, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x64, 0x72, 0x6f, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x64, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, + 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x22, 0xba, + 0x01, 0x0a, 0x0f, 0x4b, 0x75, 0x62, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x70, 0x75, 0x43, 0x6f, - 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x22, 0x86, 0x02, 0x0a, 0x12, 0x4b, 0x75, 0x62, 0x65, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x05, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, - 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x65, - 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x41, - 0x70, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x50, 0x6f, - 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x76, 0x65, 0x5f, 0x76, 0x6d, 0x69, - 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, - 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x56, 0x6d, 0x69, 0x41, 0x70, 0x70, 0x73, 0x2a, - 0x32, 0x0a, 0x0c, 0x5a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, - 0x09, 0x0a, 0x05, 0x5a, 0x6d, 0x4e, 0x6f, 0x70, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x5a, 0x6d, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x5a, 0x6d, 0x41, 0x70, - 0x70, 0x10, 0x03, 0x2a, 0x85, 0x02, 0x0a, 0x0b, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, - 0x52, 0x4f, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, - 0x16, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x49, 0x50, - 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, - 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x49, - 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x4d, 0x41, 0x52, - 0x53, 0x48, 0x41, 0x4c, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x23, 0x0a, - 0x1f, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x43, 0x4c, - 0x45, 0x41, 0x52, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, - 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, - 0x4f, 0x52, 0x5f, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, - 0x41, 0x43, 0x4b, 0x10, 0x05, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x5f, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x10, - 0x06, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x5f, 0x4e, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x10, 0x07, 0x2a, 0x66, 0x0a, 0x0e, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, - 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x4f, 0x74, 0x68, 0x65, 0x72, - 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, - 0x47, 0x61, 0x75, 0x67, 0x65, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x10, 0x02, 0x12, 0x13, - 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x10, 0x03, 0x42, 0x3f, 0x0a, 0x16, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5a, 0x25, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, - 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x63, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, + 0x61, 0x67, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x73, 0x61, 0x67, + 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x22, 0x64, 0x0a, 0x0e, 0x4b, + 0x75, 0x62, 0x65, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x21, + 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x86, 0x02, 0x0a, 0x12, 0x4b, 0x75, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, + 0x4b, 0x75, 0x62, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, + 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x76, 0x65, 0x5f, 0x70, 0x6f, + 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x50, 0x6f, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x76, 0x65, 0x5f, 0x76, 0x6d, 0x69, 0x5f, 0x61, 0x70, 0x70, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, + 0x4b, 0x75, 0x62, 0x65, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0a, + 0x65, 0x76, 0x65, 0x56, 0x6d, 0x69, 0x41, 0x70, 0x70, 0x73, 0x2a, 0x32, 0x0a, 0x0c, 0x5a, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x5a, 0x6d, + 0x4e, 0x6f, 0x70, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x5a, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x5a, 0x6d, 0x41, 0x70, 0x70, 0x10, 0x03, 0x2a, 0x85, + 0x02, 0x0a, 0x0b, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, + 0x0a, 0x14, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x49, + 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x49, 0x50, 0x48, + 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, + 0x44, 0x59, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, 0x5f, 0x46, 0x41, 0x49, + 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x4d, 0x41, 0x52, 0x53, 0x48, 0x41, 0x4c, 0x5f, + 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x49, 0x50, 0x48, + 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x43, 0x4c, 0x45, 0x41, 0x52, 0x54, 0x45, + 0x58, 0x54, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x04, 0x12, 0x21, 0x0a, + 0x1d, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4d, 0x49, + 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x05, + 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x5f, 0x4e, 0x4f, 0x5f, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, + 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x5f, + 0x44, 0x41, 0x54, 0x41, 0x10, 0x07, 0x2a, 0x66, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x10, 0x00, 0x12, 0x13, 0x0a, + 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x47, 0x61, 0x75, 0x67, 0x65, + 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10, 0x03, 0x42, 0x3f, + 0x0a, 0x16, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5a, 0x25, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, + 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6117,20 +6143,21 @@ var file_metrics_metrics_proto_depIdxs = []int32{ 43, // 89: org.lfedge.eve.metrics.newlogMetric.deviceMetrics:type_name -> org.lfedge.eve.metrics.logfileMetrics 43, // 90: org.lfedge.eve.metrics.newlogMetric.appMetrics:type_name -> org.lfedge.eve.metrics.logfileMetrics 53, // 91: org.lfedge.eve.metrics.newlogMetric.top10_input_sources:type_name -> org.lfedge.eve.metrics.newlogMetric.Top10InputSourcesEntry - 55, // 92: org.lfedge.eve.metrics.logfileMetrics.recentGzipFileTime:type_name -> google.protobuf.Timestamp - 55, // 93: org.lfedge.eve.metrics.logfileMetrics.lastGzipFileSendTime:type_name -> google.protobuf.Timestamp - 54, // 94: org.lfedge.eve.metrics.vlanInfo.vlan_counts:type_name -> org.lfedge.eve.metrics.vlanInfo.VlanCountsEntry - 47, // 95: org.lfedge.eve.metrics.FlowlogMetric.messages:type_name -> org.lfedge.eve.metrics.FlowlogCounters - 47, // 96: org.lfedge.eve.metrics.FlowlogMetric.flows:type_name -> org.lfedge.eve.metrics.FlowlogCounters - 47, // 97: org.lfedge.eve.metrics.FlowlogMetric.dns_requests:type_name -> org.lfedge.eve.metrics.FlowlogCounters - 48, // 98: org.lfedge.eve.metrics.KubeClusterMetrics.nodes:type_name -> org.lfedge.eve.metrics.KubeNodeMetrics - 49, // 99: org.lfedge.eve.metrics.KubeClusterMetrics.eve_pod_apps:type_name -> org.lfedge.eve.metrics.KubeAppMetrics - 49, // 100: org.lfedge.eve.metrics.KubeClusterMetrics.eve_vmi_apps:type_name -> org.lfedge.eve.metrics.KubeAppMetrics - 101, // [101:101] is the sub-list for method output_type - 101, // [101:101] is the sub-list for method input_type - 101, // [101:101] is the sub-list for extension type_name - 101, // [101:101] is the sub-list for extension extendee - 0, // [0:101] is the sub-list for field type_name + 55, // 92: org.lfedge.eve.metrics.newlogMetric.oldest_saved_device_log:type_name -> google.protobuf.Timestamp + 55, // 93: org.lfedge.eve.metrics.logfileMetrics.recentGzipFileTime:type_name -> google.protobuf.Timestamp + 55, // 94: org.lfedge.eve.metrics.logfileMetrics.lastGzipFileSendTime:type_name -> google.protobuf.Timestamp + 54, // 95: org.lfedge.eve.metrics.vlanInfo.vlan_counts:type_name -> org.lfedge.eve.metrics.vlanInfo.VlanCountsEntry + 47, // 96: org.lfedge.eve.metrics.FlowlogMetric.messages:type_name -> org.lfedge.eve.metrics.FlowlogCounters + 47, // 97: org.lfedge.eve.metrics.FlowlogMetric.flows:type_name -> org.lfedge.eve.metrics.FlowlogCounters + 47, // 98: org.lfedge.eve.metrics.FlowlogMetric.dns_requests:type_name -> org.lfedge.eve.metrics.FlowlogCounters + 48, // 99: org.lfedge.eve.metrics.KubeClusterMetrics.nodes:type_name -> org.lfedge.eve.metrics.KubeNodeMetrics + 49, // 100: org.lfedge.eve.metrics.KubeClusterMetrics.eve_pod_apps:type_name -> org.lfedge.eve.metrics.KubeAppMetrics + 49, // 101: org.lfedge.eve.metrics.KubeClusterMetrics.eve_vmi_apps:type_name -> org.lfedge.eve.metrics.KubeAppMetrics + 102, // [102:102] is the sub-list for method output_type + 102, // [102:102] is the sub-list for method input_type + 102, // [102:102] is the sub-list for extension type_name + 102, // [102:102] is the sub-list for extension extendee + 0, // [0:102] is the sub-list for field type_name } func init() { file_metrics_metrics_proto_init() } diff --git a/pkg/pillar/vendor/modules.txt b/pkg/pillar/vendor/modules.txt index b9c75fa5c6..f33c26f66e 100644 --- a/pkg/pillar/vendor/modules.txt +++ b/pkg/pillar/vendor/modules.txt @@ -638,7 +638,7 @@ github.com/leodido/go-urn github.com/lf-edge/edge-containers/pkg/registry github.com/lf-edge/edge-containers/pkg/resolver github.com/lf-edge/edge-containers/pkg/tgz -# github.com/lf-edge/eve-api/go v0.0.0-20241125213346-b026f21b3e75 +# github.com/lf-edge/eve-api/go v0.0.0-20241202084032-46c0a58dc84c ## explicit; go 1.20 github.com/lf-edge/eve-api/go/attest github.com/lf-edge/eve-api/go/auth