From 8874b3fc999344bb7b873b9c840a2a77ce80976f Mon Sep 17 00:00:00 2001 From: Christoph Ostarek Date: Fri, 5 Sep 2025 16:42:11 +0200 Subject: [PATCH 1/2] inventory: initial API add inventory message for EVE to upload to controller Signed-off-by: Christoph Ostarek --- proto/hardwareinventory/msg.proto | 57 +++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 proto/hardwareinventory/msg.proto diff --git a/proto/hardwareinventory/msg.proto b/proto/hardwareinventory/msg.proto new file mode 100644 index 00000000..093d3c27 --- /dev/null +++ b/proto/hardwareinventory/msg.proto @@ -0,0 +1,57 @@ +// Copyright(c) 2025 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +syntax = "proto3"; + +package org.lfedge.eve.hardwareinventory; +option go_package = "github.com/lf-edge/eve-api/go/hardwareinventory"; +option java_package = "org.lfedge.eve.hardwareinventory"; + +message USBBusDevnum { + // https://elixir.bootlin.com/linux/v6.16.9/source/include/linux/usb.h#L451 + int64 bus = 1; + // https://elixir.bootlin.com/linux/v6.16.9/source/include/linux/usb.h#L657 + int64 devnum = 2; +} + +message USBDevice { + optional PCIAddress pci_parent = 1; + optional USBBusDevnum usb_parent = 2; + + // these are uint16, protobuf only supports from uint32 + // https://elixir.bootlin.com/linux/v6.16.9/source/include/linux/usb.h#L984 + uint32 vendor_id = 3; + uint32 product_id = 4; + + USBBusDevnum bus_devnum = 5; +} + +message PCIAddress { + // https://github.com/lyonel/lshw/blob/master/src/core/pci.cc#L224 + uint32 bus = 1; + uint32 device = 2; + uint32 function = 3; +} + +message PCIDevice { + optional string parent_pci_device_address = 1; + string driver = 2; + PCIAddress address = 3; + // https://elixir.bootlin.com/linux/v6.16.9/source/include/linux/pci.h#L347 + uint32 vendor_id = 4; + uint32 device_id = 5; + uint32 revision = 6; + uint32 subsystem_id = 7; + uint64 class_id = 8; + uint64 subclass_id = 9; + // IOMMU group names apparently are strings: https://elixir.bootlin.com/linux/v6.16.9/source/drivers/iommu/iommu.c#L1101 + string iommu_group = 10; +} + +// this message is POSTed to /inventory/{serial}/{softserial} +message InventoryMsg { + string eve_version = 1; + + repeated PCIDevice pci_devices = 2; + repeated USBDevice usb_devices = 3; +} From 1339545dc7ad676a15dd3edb81b4d735ae6929b5 Mon Sep 17 00:00:00 2001 From: Christoph Ostarek Date: Mon, 29 Sep 2025 14:49:10 +0200 Subject: [PATCH 2/2] Add generated go and python files Signed-off-by: Christoph Ostarek --- go/hardwareinventory/msg.pb.go | 619 ++++++++++++++++++++++++++++ go/register/register.pb.validate.go | 183 -------- images/devconfig.svg | 64 +-- python/hardwareinventory/msg_pb2.py | 35 ++ 4 files changed, 686 insertions(+), 215 deletions(-) create mode 100644 go/hardwareinventory/msg.pb.go delete mode 100644 go/register/register.pb.validate.go create mode 100644 python/hardwareinventory/msg_pb2.py diff --git a/go/hardwareinventory/msg.pb.go b/go/hardwareinventory/msg.pb.go new file mode 100644 index 00000000..e2984bde --- /dev/null +++ b/go/hardwareinventory/msg.pb.go @@ -0,0 +1,619 @@ +// Copyright(c) 2025 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.23.4 +// source: hardwareinventory/msg.proto + +package hardwareinventory + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type USBBusDevnum struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // https://elixir.bootlin.com/linux/v6.16.9/source/include/linux/usb.h#L451 + Bus int64 `protobuf:"varint,1,opt,name=bus,proto3" json:"bus,omitempty"` + // https://elixir.bootlin.com/linux/v6.16.9/source/include/linux/usb.h#L657 + Devnum int64 `protobuf:"varint,2,opt,name=devnum,proto3" json:"devnum,omitempty"` +} + +func (x *USBBusDevnum) Reset() { + *x = USBBusDevnum{} + if protoimpl.UnsafeEnabled { + mi := &file_hardwareinventory_msg_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *USBBusDevnum) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*USBBusDevnum) ProtoMessage() {} + +func (x *USBBusDevnum) ProtoReflect() protoreflect.Message { + mi := &file_hardwareinventory_msg_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use USBBusDevnum.ProtoReflect.Descriptor instead. +func (*USBBusDevnum) Descriptor() ([]byte, []int) { + return file_hardwareinventory_msg_proto_rawDescGZIP(), []int{0} +} + +func (x *USBBusDevnum) GetBus() int64 { + if x != nil { + return x.Bus + } + return 0 +} + +func (x *USBBusDevnum) GetDevnum() int64 { + if x != nil { + return x.Devnum + } + return 0 +} + +type USBDevice struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PciParent *PCIAddress `protobuf:"bytes,1,opt,name=pci_parent,json=pciParent,proto3,oneof" json:"pci_parent,omitempty"` + UsbParent *USBBusDevnum `protobuf:"bytes,2,opt,name=usb_parent,json=usbParent,proto3,oneof" json:"usb_parent,omitempty"` + // these are uint16, protobuf only supports from uint32 + // https://elixir.bootlin.com/linux/v6.16.9/source/include/linux/usb.h#L984 + VendorId uint32 `protobuf:"varint,3,opt,name=vendor_id,json=vendorId,proto3" json:"vendor_id,omitempty"` + ProductId uint32 `protobuf:"varint,4,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + BusDevnum *USBBusDevnum `protobuf:"bytes,5,opt,name=bus_devnum,json=busDevnum,proto3" json:"bus_devnum,omitempty"` +} + +func (x *USBDevice) Reset() { + *x = USBDevice{} + if protoimpl.UnsafeEnabled { + mi := &file_hardwareinventory_msg_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *USBDevice) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*USBDevice) ProtoMessage() {} + +func (x *USBDevice) ProtoReflect() protoreflect.Message { + mi := &file_hardwareinventory_msg_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use USBDevice.ProtoReflect.Descriptor instead. +func (*USBDevice) Descriptor() ([]byte, []int) { + return file_hardwareinventory_msg_proto_rawDescGZIP(), []int{1} +} + +func (x *USBDevice) GetPciParent() *PCIAddress { + if x != nil { + return x.PciParent + } + return nil +} + +func (x *USBDevice) GetUsbParent() *USBBusDevnum { + if x != nil { + return x.UsbParent + } + return nil +} + +func (x *USBDevice) GetVendorId() uint32 { + if x != nil { + return x.VendorId + } + return 0 +} + +func (x *USBDevice) GetProductId() uint32 { + if x != nil { + return x.ProductId + } + return 0 +} + +func (x *USBDevice) GetBusDevnum() *USBBusDevnum { + if x != nil { + return x.BusDevnum + } + return nil +} + +type PCIAddress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // https://github.com/lyonel/lshw/blob/master/src/core/pci.cc#L224 + Bus uint32 `protobuf:"varint,1,opt,name=bus,proto3" json:"bus,omitempty"` + Device uint32 `protobuf:"varint,2,opt,name=device,proto3" json:"device,omitempty"` + Function uint32 `protobuf:"varint,3,opt,name=function,proto3" json:"function,omitempty"` +} + +func (x *PCIAddress) Reset() { + *x = PCIAddress{} + if protoimpl.UnsafeEnabled { + mi := &file_hardwareinventory_msg_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PCIAddress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PCIAddress) ProtoMessage() {} + +func (x *PCIAddress) ProtoReflect() protoreflect.Message { + mi := &file_hardwareinventory_msg_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PCIAddress.ProtoReflect.Descriptor instead. +func (*PCIAddress) Descriptor() ([]byte, []int) { + return file_hardwareinventory_msg_proto_rawDescGZIP(), []int{2} +} + +func (x *PCIAddress) GetBus() uint32 { + if x != nil { + return x.Bus + } + return 0 +} + +func (x *PCIAddress) GetDevice() uint32 { + if x != nil { + return x.Device + } + return 0 +} + +func (x *PCIAddress) GetFunction() uint32 { + if x != nil { + return x.Function + } + return 0 +} + +type PCIDevice struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ParentPciDeviceAddress *string `protobuf:"bytes,1,opt,name=parent_pci_device_address,json=parentPciDeviceAddress,proto3,oneof" json:"parent_pci_device_address,omitempty"` + Driver string `protobuf:"bytes,2,opt,name=driver,proto3" json:"driver,omitempty"` + Address *PCIAddress `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` + // https://elixir.bootlin.com/linux/v6.16.9/source/include/linux/pci.h#L347 + VendorId uint32 `protobuf:"varint,4,opt,name=vendor_id,json=vendorId,proto3" json:"vendor_id,omitempty"` + DeviceId uint32 `protobuf:"varint,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Revision uint32 `protobuf:"varint,6,opt,name=revision,proto3" json:"revision,omitempty"` + SubsystemId uint32 `protobuf:"varint,7,opt,name=subsystem_id,json=subsystemId,proto3" json:"subsystem_id,omitempty"` + ClassId uint64 `protobuf:"varint,8,opt,name=class_id,json=classId,proto3" json:"class_id,omitempty"` + SubclassId uint64 `protobuf:"varint,9,opt,name=subclass_id,json=subclassId,proto3" json:"subclass_id,omitempty"` + // IOMMU group names apparently are strings: https://elixir.bootlin.com/linux/v6.16.9/source/drivers/iommu/iommu.c#L1101 + IommuGroup string `protobuf:"bytes,10,opt,name=iommu_group,json=iommuGroup,proto3" json:"iommu_group,omitempty"` +} + +func (x *PCIDevice) Reset() { + *x = PCIDevice{} + if protoimpl.UnsafeEnabled { + mi := &file_hardwareinventory_msg_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PCIDevice) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PCIDevice) ProtoMessage() {} + +func (x *PCIDevice) ProtoReflect() protoreflect.Message { + mi := &file_hardwareinventory_msg_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PCIDevice.ProtoReflect.Descriptor instead. +func (*PCIDevice) Descriptor() ([]byte, []int) { + return file_hardwareinventory_msg_proto_rawDescGZIP(), []int{3} +} + +func (x *PCIDevice) GetParentPciDeviceAddress() string { + if x != nil && x.ParentPciDeviceAddress != nil { + return *x.ParentPciDeviceAddress + } + return "" +} + +func (x *PCIDevice) GetDriver() string { + if x != nil { + return x.Driver + } + return "" +} + +func (x *PCIDevice) GetAddress() *PCIAddress { + if x != nil { + return x.Address + } + return nil +} + +func (x *PCIDevice) GetVendorId() uint32 { + if x != nil { + return x.VendorId + } + return 0 +} + +func (x *PCIDevice) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *PCIDevice) GetRevision() uint32 { + if x != nil { + return x.Revision + } + return 0 +} + +func (x *PCIDevice) GetSubsystemId() uint32 { + if x != nil { + return x.SubsystemId + } + return 0 +} + +func (x *PCIDevice) GetClassId() uint64 { + if x != nil { + return x.ClassId + } + return 0 +} + +func (x *PCIDevice) GetSubclassId() uint64 { + if x != nil { + return x.SubclassId + } + return 0 +} + +func (x *PCIDevice) GetIommuGroup() string { + if x != nil { + return x.IommuGroup + } + return "" +} + +// this message is POSTed to /inventory/{serial}/{softserial} +type InventoryMsg struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EveVersion string `protobuf:"bytes,1,opt,name=eve_version,json=eveVersion,proto3" json:"eve_version,omitempty"` + PciDevices []*PCIDevice `protobuf:"bytes,2,rep,name=pci_devices,json=pciDevices,proto3" json:"pci_devices,omitempty"` + UsbDevices []*USBDevice `protobuf:"bytes,3,rep,name=usb_devices,json=usbDevices,proto3" json:"usb_devices,omitempty"` +} + +func (x *InventoryMsg) Reset() { + *x = InventoryMsg{} + if protoimpl.UnsafeEnabled { + mi := &file_hardwareinventory_msg_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InventoryMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InventoryMsg) ProtoMessage() {} + +func (x *InventoryMsg) ProtoReflect() protoreflect.Message { + mi := &file_hardwareinventory_msg_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InventoryMsg.ProtoReflect.Descriptor instead. +func (*InventoryMsg) Descriptor() ([]byte, []int) { + return file_hardwareinventory_msg_proto_rawDescGZIP(), []int{4} +} + +func (x *InventoryMsg) GetEveVersion() string { + if x != nil { + return x.EveVersion + } + return "" +} + +func (x *InventoryMsg) GetPciDevices() []*PCIDevice { + if x != nil { + return x.PciDevices + } + return nil +} + +func (x *InventoryMsg) GetUsbDevices() []*USBDevice { + if x != nil { + return x.UsbDevices + } + return nil +} + +var File_hardwareinventory_msg_proto protoreflect.FileDescriptor + +var file_hardwareinventory_msg_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, + 0x6f, 0x72, 0x79, 0x2f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x68, 0x61, + 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x22, + 0x38, 0x0a, 0x0c, 0x55, 0x53, 0x42, 0x42, 0x75, 0x73, 0x44, 0x65, 0x76, 0x6e, 0x75, 0x6d, 0x12, + 0x10, 0x0a, 0x03, 0x62, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x62, 0x75, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x06, 0x64, 0x65, 0x76, 0x6e, 0x75, 0x6d, 0x22, 0xda, 0x02, 0x0a, 0x09, 0x55, 0x53, + 0x42, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x70, 0x63, 0x69, 0x5f, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x68, 0x61, 0x72, + 0x64, 0x77, 0x61, 0x72, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x50, + 0x43, 0x49, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x09, 0x70, 0x63, 0x69, + 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x52, 0x0a, 0x0a, 0x75, 0x73, 0x62, + 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x68, + 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, + 0x2e, 0x55, 0x53, 0x42, 0x42, 0x75, 0x73, 0x44, 0x65, 0x76, 0x6e, 0x75, 0x6d, 0x48, 0x01, 0x52, + 0x09, 0x75, 0x73, 0x62, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, + 0x09, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x08, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x0a, 0x62, 0x75, 0x73, + 0x5f, 0x64, 0x65, 0x76, 0x6e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x68, + 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, + 0x2e, 0x55, 0x53, 0x42, 0x42, 0x75, 0x73, 0x44, 0x65, 0x76, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x62, + 0x75, 0x73, 0x44, 0x65, 0x76, 0x6e, 0x75, 0x6d, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x63, 0x69, + 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x75, 0x73, 0x62, 0x5f, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x0a, 0x50, 0x43, 0x49, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x03, 0x62, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9f, 0x03, 0x0a, 0x09, 0x50, + 0x43, 0x49, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x19, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x70, 0x63, 0x69, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x16, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x63, 0x69, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, + 0x12, 0x46, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x50, 0x43, 0x49, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x65, 0x6e, 0x64, + 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x76, 0x65, 0x6e, + 0x64, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, + 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x73, 0x75, 0x62, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x64, 0x12, 0x1f, 0x0a, + 0x0b, 0x69, 0x6f, 0x6d, 0x6d, 0x75, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6f, 0x6d, 0x6d, 0x75, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x1c, + 0x0a, 0x1a, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x63, 0x69, 0x5f, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xcb, 0x01, 0x0a, + 0x0c, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x73, 0x67, 0x12, 0x1f, 0x0a, + 0x0b, 0x65, 0x76, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4c, + 0x0a, 0x0b, 0x70, 0x63, 0x69, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x69, 0x6e, 0x76, + 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x50, 0x43, 0x49, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x52, 0x0a, 0x70, 0x63, 0x69, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x4c, 0x0a, 0x0b, + 0x75, 0x73, 0x62, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x55, 0x53, 0x42, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x0a, + 0x75, 0x73, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x42, 0x53, 0x0a, 0x20, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x68, 0x61, 0x72, + 0x64, 0x77, 0x61, 0x72, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x5a, 0x2f, + 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, 0x68, 0x61, + 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_hardwareinventory_msg_proto_rawDescOnce sync.Once + file_hardwareinventory_msg_proto_rawDescData = file_hardwareinventory_msg_proto_rawDesc +) + +func file_hardwareinventory_msg_proto_rawDescGZIP() []byte { + file_hardwareinventory_msg_proto_rawDescOnce.Do(func() { + file_hardwareinventory_msg_proto_rawDescData = protoimpl.X.CompressGZIP(file_hardwareinventory_msg_proto_rawDescData) + }) + return file_hardwareinventory_msg_proto_rawDescData +} + +var file_hardwareinventory_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_hardwareinventory_msg_proto_goTypes = []interface{}{ + (*USBBusDevnum)(nil), // 0: org.lfedge.eve.hardwareinventory.USBBusDevnum + (*USBDevice)(nil), // 1: org.lfedge.eve.hardwareinventory.USBDevice + (*PCIAddress)(nil), // 2: org.lfedge.eve.hardwareinventory.PCIAddress + (*PCIDevice)(nil), // 3: org.lfedge.eve.hardwareinventory.PCIDevice + (*InventoryMsg)(nil), // 4: org.lfedge.eve.hardwareinventory.InventoryMsg +} +var file_hardwareinventory_msg_proto_depIdxs = []int32{ + 2, // 0: org.lfedge.eve.hardwareinventory.USBDevice.pci_parent:type_name -> org.lfedge.eve.hardwareinventory.PCIAddress + 0, // 1: org.lfedge.eve.hardwareinventory.USBDevice.usb_parent:type_name -> org.lfedge.eve.hardwareinventory.USBBusDevnum + 0, // 2: org.lfedge.eve.hardwareinventory.USBDevice.bus_devnum:type_name -> org.lfedge.eve.hardwareinventory.USBBusDevnum + 2, // 3: org.lfedge.eve.hardwareinventory.PCIDevice.address:type_name -> org.lfedge.eve.hardwareinventory.PCIAddress + 3, // 4: org.lfedge.eve.hardwareinventory.InventoryMsg.pci_devices:type_name -> org.lfedge.eve.hardwareinventory.PCIDevice + 1, // 5: org.lfedge.eve.hardwareinventory.InventoryMsg.usb_devices:type_name -> org.lfedge.eve.hardwareinventory.USBDevice + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_hardwareinventory_msg_proto_init() } +func file_hardwareinventory_msg_proto_init() { + if File_hardwareinventory_msg_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_hardwareinventory_msg_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*USBBusDevnum); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hardwareinventory_msg_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*USBDevice); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hardwareinventory_msg_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PCIAddress); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hardwareinventory_msg_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PCIDevice); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hardwareinventory_msg_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InventoryMsg); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_hardwareinventory_msg_proto_msgTypes[1].OneofWrappers = []interface{}{} + file_hardwareinventory_msg_proto_msgTypes[3].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_hardwareinventory_msg_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_hardwareinventory_msg_proto_goTypes, + DependencyIndexes: file_hardwareinventory_msg_proto_depIdxs, + MessageInfos: file_hardwareinventory_msg_proto_msgTypes, + }.Build() + File_hardwareinventory_msg_proto = out.File + file_hardwareinventory_msg_proto_rawDesc = nil + file_hardwareinventory_msg_proto_goTypes = nil + file_hardwareinventory_msg_proto_depIdxs = nil +} diff --git a/go/register/register.pb.validate.go b/go/register/register.pb.validate.go deleted file mode 100644 index bb646da0..00000000 --- a/go/register/register.pb.validate.go +++ /dev/null @@ -1,183 +0,0 @@ -// Code generated by protoc-gen-validate. DO NOT EDIT. -// source: register/register.proto - -package register - -import ( - "bytes" - "errors" - "fmt" - "net" - "net/mail" - "net/url" - "regexp" - "sort" - "strings" - "time" - "unicode/utf8" - - "google.golang.org/protobuf/types/known/anypb" -) - -// ensure the imports are used -var ( - _ = bytes.MinRead - _ = errors.New("") - _ = fmt.Print - _ = utf8.UTFMax - _ = (*regexp.Regexp)(nil) - _ = (*strings.Reader)(nil) - _ = net.IPv4len - _ = time.Duration(0) - _ = (*url.URL)(nil) - _ = (*mail.Address)(nil) - _ = anypb.Any{} - _ = sort.Sort -) - -// Validate checks the field values on ZRegisterMsg with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *ZRegisterMsg) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on ZRegisterMsg with the rules defined -// in the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in ZRegisterMsgMultiError, or -// nil if none found. -func (m *ZRegisterMsg) ValidateAll() error { - return m.validate(true) -} - -func (m *ZRegisterMsg) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for OnBoardKey - - if l := len(m.GetPemCert()); l < 100 || l > 10240 { - err := ZRegisterMsgValidationError{ - field: "PemCert", - reason: "value length must be between 100 and 10240 bytes, inclusive", - } - if !all { - return err - } - errors = append(errors, err) - } - - if utf8.RuneCountInString(m.GetSerial()) > 256 { - err := ZRegisterMsgValidationError{ - field: "Serial", - reason: "value length must be at most 256 runes", - } - if !all { - return err - } - errors = append(errors, err) - } - - if utf8.RuneCountInString(m.GetSoftSerial()) > 256 { - err := ZRegisterMsgValidationError{ - field: "SoftSerial", - reason: "value length must be at most 256 runes", - } - if !all { - return err - } - errors = append(errors, err) - } - - if !_ZRegisterMsg_SoftSerial_Pattern.MatchString(m.GetSoftSerial()) { - err := ZRegisterMsgValidationError{ - field: "SoftSerial", - reason: "value does not match regex pattern \"^[a-zA-Z0-9_-]*$\"", - } - if !all { - return err - } - errors = append(errors, err) - } - - if len(errors) > 0 { - return ZRegisterMsgMultiError(errors) - } - - return nil -} - -// ZRegisterMsgMultiError is an error wrapping multiple validation errors -// returned by ZRegisterMsg.ValidateAll() if the designated constraints aren't met. -type ZRegisterMsgMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m ZRegisterMsgMultiError) Error() string { - msgs := make([]string, 0, len(m)) - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m ZRegisterMsgMultiError) AllErrors() []error { return m } - -// ZRegisterMsgValidationError is the validation error returned by -// ZRegisterMsg.Validate if the designated constraints aren't met. -type ZRegisterMsgValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ZRegisterMsgValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ZRegisterMsgValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ZRegisterMsgValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ZRegisterMsgValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ZRegisterMsgValidationError) ErrorName() string { return "ZRegisterMsgValidationError" } - -// Error satisfies the builtin error interface -func (e ZRegisterMsgValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sZRegisterMsg.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ZRegisterMsgValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ZRegisterMsgValidationError{} - -var _ZRegisterMsg_SoftSerial_Pattern = regexp.MustCompile("^[a-zA-Z0-9_-]*$") diff --git a/images/devconfig.svg b/images/devconfig.svg index 64d136e6..4cff910b 100644 --- a/images/devconfig.svg +++ b/images/devconfig.svg @@ -12,6 +12,30 @@ org.lfedge.eve.config + +cluster_c75e6f3a3956 + + +org.lfedge.eve.common + + + + +cluster_087a8b768833 + + +netconfig.proto + + + + +cluster_a1a638239bbb + + +edgeview.proto + + + cluster_ed03ba9919d5 @@ -60,38 +84,6 @@ - -cluster_c75e6f3a3956 - - -org.lfedge.eve.common - - - - -cluster_087a8b768833 - - -netconfig.proto - - - - -cluster_a1a638239bbb - - -edgeview.proto - - - - -cluster_f89bbdbe2429 - - -netinst.proto - - - cluster_0eca8c4caf24 @@ -124,6 +116,14 @@ + +cluster_f89bbdbe2429 + + +netinst.proto + + + cluster_c4848830929a diff --git a/python/hardwareinventory/msg_pb2.py b/python/hardwareinventory/msg_pb2.py new file mode 100644 index 00000000..1685fa2a --- /dev/null +++ b/python/hardwareinventory/msg_pb2.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: hardwareinventory/msg.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bhardwareinventory/msg.proto\x12 org.lfedge.eve.hardwareinventory\"+\n\x0cUSBBusDevnum\x12\x0b\n\x03\x62us\x18\x01 \x01(\x03\x12\x0e\n\x06\x64\x65vnum\x18\x02 \x01(\x03\"\xa4\x02\n\tUSBDevice\x12\x45\n\npci_parent\x18\x01 \x01(\x0b\x32,.org.lfedge.eve.hardwareinventory.PCIAddressH\x00\x88\x01\x01\x12G\n\nusb_parent\x18\x02 \x01(\x0b\x32..org.lfedge.eve.hardwareinventory.USBBusDevnumH\x01\x88\x01\x01\x12\x11\n\tvendor_id\x18\x03 \x01(\r\x12\x12\n\nproduct_id\x18\x04 \x01(\r\x12\x42\n\nbus_devnum\x18\x05 \x01(\x0b\x32..org.lfedge.eve.hardwareinventory.USBBusDevnumB\r\n\x0b_pci_parentB\r\n\x0b_usb_parent\";\n\nPCIAddress\x12\x0b\n\x03\x62us\x18\x01 \x01(\r\x12\x0e\n\x06\x64\x65vice\x18\x02 \x01(\r\x12\x10\n\x08\x66unction\x18\x03 \x01(\r\"\xaa\x02\n\tPCIDevice\x12&\n\x19parent_pci_device_address\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0e\n\x06\x64river\x18\x02 \x01(\t\x12=\n\x07\x61\x64\x64ress\x18\x03 \x01(\x0b\x32,.org.lfedge.eve.hardwareinventory.PCIAddress\x12\x11\n\tvendor_id\x18\x04 \x01(\r\x12\x11\n\tdevice_id\x18\x05 \x01(\r\x12\x10\n\x08revision\x18\x06 \x01(\r\x12\x14\n\x0csubsystem_id\x18\x07 \x01(\r\x12\x10\n\x08\x63lass_id\x18\x08 \x01(\x04\x12\x13\n\x0bsubclass_id\x18\t \x01(\x04\x12\x13\n\x0biommu_group\x18\n \x01(\tB\x1c\n\x1a_parent_pci_device_address\"\xa7\x01\n\x0cInventoryMsg\x12\x13\n\x0b\x65ve_version\x18\x01 \x01(\t\x12@\n\x0bpci_devices\x18\x02 \x03(\x0b\x32+.org.lfedge.eve.hardwareinventory.PCIDevice\x12@\n\x0busb_devices\x18\x03 \x03(\x0b\x32+.org.lfedge.eve.hardwareinventory.USBDeviceBS\n org.lfedge.eve.hardwareinventoryZ/github.com/lf-edge/eve-api/go/hardwareinventoryb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'hardwareinventory.msg_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n org.lfedge.eve.hardwareinventoryZ/github.com/lf-edge/eve-api/go/hardwareinventory' + _globals['_USBBUSDEVNUM']._serialized_start=65 + _globals['_USBBUSDEVNUM']._serialized_end=108 + _globals['_USBDEVICE']._serialized_start=111 + _globals['_USBDEVICE']._serialized_end=403 + _globals['_PCIADDRESS']._serialized_start=405 + _globals['_PCIADDRESS']._serialized_end=464 + _globals['_PCIDEVICE']._serialized_start=467 + _globals['_PCIDEVICE']._serialized_end=765 + _globals['_INVENTORYMSG']._serialized_start=768 + _globals['_INVENTORYMSG']._serialized_end=935 +# @@protoc_insertion_point(module_scope)