diff --git a/src/runtime/virtcontainers/acrn.go b/src/runtime/virtcontainers/acrn.go index 07eb92c8cf..38473d48eb 100644 --- a/src/runtime/virtcontainers/acrn.go +++ b/src/runtime/virtcontainers/acrn.go @@ -92,15 +92,15 @@ type AcrnState struct { // Acrn is an Hypervisor interface implementation for the Linux acrn hypervisor. type Acrn struct { - id string - config HypervisorConfig - acrnConfig Config - state AcrnState - info AcrnInfo - arch acrnArch - ctx context.Context - store persistapi.PersistDriver sandbox *Sandbox + ctx context.Context + arch acrnArch + store persistapi.PersistDriver + id string + state AcrnState + acrnConfig Config + config HypervisorConfig + info AcrnInfo } type acrnPlatformInfo struct { diff --git a/src/runtime/virtcontainers/acrn_arch_base.go b/src/runtime/virtcontainers/acrn_arch_base.go index 72f03667fe..5d258c42c5 100644 --- a/src/runtime/virtcontainers/acrn_arch_base.go +++ b/src/runtime/virtcontainers/acrn_arch_base.go @@ -190,14 +190,14 @@ type ConsoleDevice struct { // Name of the socket Name string + //Path to virtio-console backend (can be omitted for pty, tty, stdio) + Path string + //Backend device used for virtio-console Backend ConsoleDeviceBackend // PortType marks the port as serial or console port (@) PortType BEPortType - - //Path to virtio-console backend (can be omitted for pty, tty, stdio) - Path string } // NetDeviceType is a acrn networking device type. @@ -235,26 +235,24 @@ type BlockDevice struct { // BridgeDevice represents a acrn bridge device like pci-bridge, pxb, etc. type BridgeDevice struct { - - // Function is PCI function. Func can be from 0 to 7 - Function int - // Emul is a string describing the type of PCI device e.g. virtio-net Emul string // Config is an optional string, depending on the device, that can be // used for configuration Config string + + // Function is PCI function. Func can be from 0 to 7 + Function int } // LPCDevice represents a acrn LPC device type LPCDevice struct { + // Emul is a string describing the type of PCI device e.g. virtio-net + Emul string // Function is PCI function. Func can be from 0 to 7 Function int - - // Emul is a string describing the type of PCI device e.g. virtio-net - Emul string } // Memory is the guest memory configuration structure. @@ -280,6 +278,8 @@ type Kernel struct { // Config is the acrn configuration structure. // It allows for passing custom settings and parameters to the acrn-dm API. type Config struct { + // Devices is a list of devices for acrn to create and drive. + Devices []Device // Path is the acrn binary path. Path string @@ -293,9 +293,6 @@ type Config struct { // UUID is the acrn process UUID. UUID string - // Devices is a list of devices for acrn to create and drive. - Devices []Device - // Kernel is the guest kernel configuration. Kernel Kernel diff --git a/src/runtime/virtcontainers/bridgedmacvlan_endpoint.go b/src/runtime/virtcontainers/bridgedmacvlan_endpoint.go index a8f42c4655..2079798983 100644 --- a/src/runtime/virtcontainers/bridgedmacvlan_endpoint.go +++ b/src/runtime/virtcontainers/bridgedmacvlan_endpoint.go @@ -18,10 +18,10 @@ var macvlanTrace = getNetworkTrace(BridgedMacvlanEndpointType) // BridgedMacvlanEndpoint represents a macvlan endpoint that is bridged to the VM type BridgedMacvlanEndpoint struct { - NetPair NetworkInterfacePair - EndpointProperties NetworkInfo EndpointType EndpointType PCIPath vcTypes.PciPath + EndpointProperties NetworkInfo + NetPair NetworkInterfacePair RxRateLimiter bool TxRateLimiter bool } diff --git a/src/runtime/virtcontainers/clh.go b/src/runtime/virtcontainers/clh.go index 5cf2a5de93..1909253039 100644 --- a/src/runtime/virtcontainers/clh.go +++ b/src/runtime/virtcontainers/clh.go @@ -106,10 +106,10 @@ type clhClient interface { // Cloud hypervisor state // type CloudHypervisorState struct { - state clhState + apiSocket string PID int VirtiofsdPID int - apiSocket string + state clhState } func (s *CloudHypervisorState) reset() { @@ -119,15 +119,15 @@ func (s *CloudHypervisorState) reset() { } type cloudHypervisor struct { - id string - state CloudHypervisorState - config HypervisorConfig - ctx context.Context - APIClient clhClient - vmconfig chclient.VmConfig - virtiofsd Virtiofsd store persistapi.PersistDriver console console.Console + virtiofsd Virtiofsd + APIClient clhClient + ctx context.Context + id string + vmconfig chclient.VmConfig + state CloudHypervisorState + config HypervisorConfig } var clhKernelParams = []Param{ diff --git a/src/runtime/virtcontainers/clh_test.go b/src/runtime/virtcontainers/clh_test.go index aed2ae36c2..2ddffbde09 100644 --- a/src/runtime/virtcontainers/clh_test.go +++ b/src/runtime/virtcontainers/clh_test.go @@ -163,6 +163,7 @@ func TestCloudHypervisorAddNetCheckEnpointTypes(t *testing.T) { type args struct { e Endpoint } + // nolint: govet tests := []struct { name string args args diff --git a/src/runtime/virtcontainers/container.go b/src/runtime/virtcontainers/container.go index 6440bd7fb5..bbc704e1a1 100644 --- a/src/runtime/virtcontainers/container.go +++ b/src/runtime/virtcontainers/container.go @@ -70,6 +70,8 @@ const floppyMajor = int64(2) // Process gathers data related to a container process. type Process struct { + StartTime time.Time + // Token is the process execution context ID. It must be // unique per sandbox. // Token is used to manipulate processes for containers @@ -81,23 +83,23 @@ type Process struct { // stack, e.g. CRI-O, containerd. This is typically the // shim PID. Pid int - - StartTime time.Time } // ContainerStatus describes a container status. type ContainerStatus struct { - ID string - State types.ContainerState - PID int - StartTime time.Time - RootFs string - Spec *specs.Spec + Spec *specs.Spec // Annotations allow clients to store arbitrary values, // for example to add additional status values required // to support particular specifications. Annotations map[string]string + + ID string + RootFs string + StartTime time.Time + State types.ContainerState + + PID int } // ThrottlingData gather the date related to container cpu throttling. @@ -113,12 +115,12 @@ type ThrottlingData struct { // CPUUsage denotes the usage of a CPU. // All CPU stats are aggregate since container inception. type CPUUsage struct { - // Total CPU time consumed. - // Units: nanoseconds. - TotalUsage uint64 `json:"total_usage,omitempty"` // Total CPU time consumed per core. // Units: nanoseconds. PercpuUsage []uint64 `json:"percpu_usage,omitempty"` + // Total CPU time consumed. + // Units: nanoseconds. + TotalUsage uint64 `json:"total_usage,omitempty"` // Time spent by tasks of the cgroup in kernel mode. // Units: nanoseconds. UsageInKernelmode uint64 `json:"usage_in_kernelmode"` @@ -143,8 +145,7 @@ type MemoryData struct { // MemoryStats describes the memory stats type MemoryStats struct { - // memory used for cache - Cache uint64 `json:"cache,omitempty"` + Stats map[string]uint64 `json:"stats,omitempty"` // usage of memory Usage MemoryData `json:"usage,omitempty"` // usage of memory swap @@ -153,10 +154,10 @@ type MemoryStats struct { KernelUsage MemoryData `json:"kernel_usage,omitempty"` // usage of kernel TCP memory KernelTCPUsage MemoryData `json:"kernel_tcp_usage,omitempty"` + // memory used for cache + Cache uint64 `json:"cache,omitempty"` // if true, memory usage is accounted for throughout a hierarchy of cgroups. UseHierarchy bool `json:"use_hierarchy"` - - Stats map[string]uint64 `json:"stats,omitempty"` } // PidsStats describes the pids stats @@ -169,9 +170,9 @@ type PidsStats struct { // BlkioStatEntry gather date related to a block device type BlkioStatEntry struct { + Op string `json:"op,omitempty"` Major uint64 `json:"major,omitempty"` Minor uint64 `json:"minor,omitempty"` - Op string `json:"op,omitempty"` Value uint64 `json:"value,omitempty"` } @@ -200,12 +201,12 @@ type HugetlbStats struct { // CgroupStats describes all cgroup subsystem stats type CgroupStats struct { - CPUStats CPUStats `json:"cpu_stats,omitempty"` - MemoryStats MemoryStats `json:"memory_stats,omitempty"` - PidsStats PidsStats `json:"pids_stats,omitempty"` - BlkioStats BlkioStats `json:"blkio_stats,omitempty"` // the map is in the format "size of hugepage: stats of the hugepage" HugetlbStats map[string]HugetlbStats `json:"hugetlb_stats,omitempty"` + BlkioStats BlkioStats `json:"blkio_stats,omitempty"` + CPUStats CPUStats `json:"cpu_stats,omitempty"` + MemoryStats MemoryStats `json:"memory_stats,omitempty"` + PidsStats PidsStats `json:"pids_stats,omitempty"` } // NetworkStats describe all network stats. @@ -240,32 +241,32 @@ type ContainerResources struct { // ContainerConfig describes one container runtime configuration. type ContainerConfig struct { - ID string + // Device configuration for devices that must be available within the container. + DeviceInfos []config.DeviceInfo - // RootFs is the container workload image on the host. - RootFs RootFs + Mounts []Mount - // ReadOnlyRootfs indicates if the rootfs should be mounted readonly - ReadonlyRootfs bool - - // Cmd specifies the command to run on a container - Cmd types.Cmd + // Raw OCI specification, it won't be saved to disk. + CustomSpec *specs.Spec `json:"-"` // Annotations allow clients to store arbitrary values, // for example to add additional status values required // to support particular specifications. Annotations map[string]string - Mounts []Mount - - // Device configuration for devices that must be available within the container. - DeviceInfos []config.DeviceInfo + ID string // Resources container resources Resources specs.LinuxResources - // Raw OCI specification, it won't be saved to disk. - CustomSpec *specs.Spec `json:"-"` + // Cmd specifies the command to run on a container + Cmd types.Cmd + + // RootFs is the container workload image on the host. + RootFs RootFs + + // ReadOnlyRootfs indicates if the rootfs should be mounted readonly + ReadonlyRootfs bool } // valid checks that the container configuration is valid. @@ -326,29 +327,27 @@ type RootFs struct { // Container is composed of a set of containers and a runtime environment. // A Container can be created, deleted, started, stopped, listed, entered, paused and restored. type Container struct { - id string - sandboxID string - - rootFs RootFs - - config *ContainerConfig + ctx context.Context + config *ContainerConfig sandbox *Sandbox + id string + sandboxID string containerPath string rootfsSuffix string - state types.ContainerState - - process Process - mounts []Mount devices []ContainerDevice - systemMountsInfo SystemMountsInfo + state types.ContainerState - ctx context.Context + process Process + + rootFs RootFs + + systemMountsInfo SystemMountsInfo } // ID returns the container identifier string. diff --git a/src/runtime/virtcontainers/fc.go b/src/runtime/virtcontainers/fc.go index 9b4ffa7829..1dbd03a3ed 100644 --- a/src/runtime/virtcontainers/fc.go +++ b/src/runtime/virtcontainers/fc.go @@ -122,8 +122,8 @@ func (s vmmState) String() string { // FirecrackerInfo contains information related to the hypervisor that we // want to store on disk type FirecrackerInfo struct { - PID int Version string + PID int } type firecrackerState struct { @@ -140,6 +140,15 @@ func (s *firecrackerState) set(state vmmState) { // firecracker is an Hypervisor interface implementation for the firecracker VMM. type firecracker struct { + console console.Console + ctx context.Context + + pendingDevices []firecrackerDevice // Devices to be added before the FC VM ready + + firecrackerd *exec.Cmd //Tracks the firecracker process itself + fcConfig *types.FcConfig // Parameters configured before VM starts + connection *client.Firecracker //Tracks the current active connection + id string //Unique ID per pod. Normally maps to the sandbox id vmPath string //All jailed VM assets need to be under this chrootBaseDir string //chroot base for the jailer @@ -148,23 +157,13 @@ type firecracker struct { netNSPath string uid string //UID and GID to be used for the VMM gid string + fcConfigPath string - info FirecrackerInfo - - firecrackerd *exec.Cmd //Tracks the firecracker process itself - connection *client.Firecracker //Tracks the current active connection - - ctx context.Context - config HypervisorConfig - pendingDevices []firecrackerDevice // Devices to be added before the FC VM ready - + info FirecrackerInfo + config HypervisorConfig state firecrackerState + jailed bool //Set to true if jailer is enabled - - fcConfigPath string - fcConfig *types.FcConfig // Parameters configured before VM starts - - console console.Console } type firecrackerDevice struct { diff --git a/src/runtime/virtcontainers/hypervisor.go b/src/runtime/virtcontainers/hypervisor.go index 525d77ceb9..bc92eb3034 100644 --- a/src/runtime/virtcontainers/hypervisor.go +++ b/src/runtime/virtcontainers/hypervisor.go @@ -222,37 +222,11 @@ type Param struct { // HypervisorConfig is the hypervisor configuration. type HypervisorConfig struct { - // PCIeRootPort is used to indicate the number of PCIe Root Port devices - // The PCIe Root Port device is used to hot-plug the PCIe device - PCIeRootPort uint32 - - // NumVCPUs specifies default number of vCPUs for the VM. - NumVCPUs uint32 - - //DefaultMaxVCPUs specifies the maximum number of vCPUs for the VM. - DefaultMaxVCPUs uint32 - - // DefaultMem specifies default memory size in MiB for the VM. - MemorySize uint32 - - // DefaultBridges specifies default number of bridges for the VM. - // Bridges can be used to hot plug devices - DefaultBridges uint32 - - // Msize9p is used as the msize for 9p shares - Msize9p uint32 - - // MemSlots specifies default memory slots the VM. - MemSlots uint32 - - // VirtioFSCacheSize is the DAX cache size in MiB - VirtioFSCacheSize uint32 - - // KernelParams are additional guest kernel parameters. - KernelParams []Param - - // HypervisorParams are additional hypervisor parameters. - HypervisorParams []Param + // customAssets is a map of assets. + // Each value in that map takes precedence over the configured assets. + // For example, if there is a value for the "kernel" key in this map, + // it will be used for the sandbox's kernel path instead of KernelPath. + customAssets map[types.AssetType]*types.Asset // KernelPath is the guest kernel host path. KernelPath string @@ -276,21 +250,12 @@ type HypervisorConfig struct { // HypervisorPath is the hypervisor executable host path. HypervisorPath string - // HypervisorPathList is the list of hypervisor paths names allowed in annotations - HypervisorPathList []string - - // HypervisorCtlPathList is the list of hypervisor control paths names allowed in annotations - HypervisorCtlPathList []string - // HypervisorCtlPath is the hypervisor ctl executable host path. HypervisorCtlPath string // JailerPath is the jailer executable host path. JailerPath string - // JailerPathList is the list of jailer paths names allowed in annotations - JailerPathList []string - // BlockDeviceDriver specifies the driver to be used for block device // either VirtioSCSI or VirtioBlock with the default driver being defaultBlockDriver BlockDeviceDriver string @@ -322,15 +287,41 @@ type HypervisorConfig struct { // File based memory backend root directory FileBackedMemRootDir string + // VhostUserStorePath is the directory path where vhost-user devices + // related folders, sockets and device nodes should be. + VhostUserStorePath string + + // GuestCoredumpPath is the path in host for saving guest memory dump + GuestMemoryDumpPath string + + // GuestHookPath is the path within the VM that will be used for 'drop-in' hooks + GuestHookPath string + + // VMid is the id of the VM that create the hypervisor if the VM is created by the factory. + // VMid is "" if the hypervisor is not created by the factory. + VMid string + + // SELinux label for the VM + SELinuxProcessLabel string + + // VirtioFSCache cache mode for fs version cache or "none" + VirtioFSCache string + + // HypervisorPathList is the list of hypervisor paths names allowed in annotations + HypervisorPathList []string + + // HypervisorCtlPathList is the list of hypervisor control paths names allowed in annotations + HypervisorCtlPathList []string + + // JailerPathList is the list of jailer paths names allowed in annotations + JailerPathList []string + // EntropySourceList is the list of valid entropy sources EntropySourceList []string // VirtioFSDaemonList is the list of valid virtiofs names for annotations VirtioFSDaemonList []string - // VirtioFSCache cache mode for fs version cache or "none" - VirtioFSCache string - // VirtioFSExtraArgs passes options to virtiofsd daemon VirtioFSExtraArgs []string @@ -346,11 +337,50 @@ type HypervisorConfig struct { // VhostUserStorePathList is the list of valid values for vhost-user paths VhostUserStorePathList []string - // customAssets is a map of assets. - // Each value in that map takes precedence over the configured assets. - // For example, if there is a value for the "kernel" key in this map, - // it will be used for the sandbox's kernel path instead of KernelPath. - customAssets map[types.AssetType]*types.Asset + // KernelParams are additional guest kernel parameters. + KernelParams []Param + + // HypervisorParams are additional hypervisor parameters. + HypervisorParams []Param + + // SGXEPCSize specifies the size in bytes for the EPC Section. + // Enable SGX. Hardware-based isolation and memory encryption. + SGXEPCSize int64 + + // RxRateLimiterMaxRate is used to control network I/O inbound bandwidth on VM level. + RxRateLimiterMaxRate uint64 + + // TxRateLimiterMaxRate is used to control network I/O outbound bandwidth on VM level. + TxRateLimiterMaxRate uint64 + + // MemOffset specifies memory space for nvdimm device + MemOffset uint64 + + // PCIeRootPort is used to indicate the number of PCIe Root Port devices + // The PCIe Root Port device is used to hot-plug the PCIe device + PCIeRootPort uint32 + + // NumVCPUs specifies default number of vCPUs for the VM. + NumVCPUs uint32 + + //DefaultMaxVCPUs specifies the maximum number of vCPUs for the VM. + DefaultMaxVCPUs uint32 + + // DefaultMem specifies default memory size in MiB for the VM. + MemorySize uint32 + + // DefaultBridges specifies default number of bridges for the VM. + // Bridges can be used to hot plug devices + DefaultBridges uint32 + + // Msize9p is used as the msize for 9p shares + Msize9p uint32 + + // MemSlots specifies default memory slots the VM. + MemSlots uint32 + + // VirtioFSCacheSize is the DAX cache size in MiB + VirtioFSCacheSize uint32 // BlockDeviceCacheSet specifies cache-related options will be set to block devices or not. BlockDeviceCacheSet bool @@ -429,36 +459,6 @@ type HypervisorConfig struct { // EnableVhostUserStore is used to indicate if host supports vhost-user-blk/scsi EnableVhostUserStore bool - // VhostUserStorePath is the directory path where vhost-user devices - // related folders, sockets and device nodes should be. - VhostUserStorePath string - - // GuestCoredumpPath is the path in host for saving guest memory dump - GuestMemoryDumpPath string - - // GuestHookPath is the path within the VM that will be used for 'drop-in' hooks - GuestHookPath string - - // VMid is the id of the VM that create the hypervisor if the VM is created by the factory. - // VMid is "" if the hypervisor is not created by the factory. - VMid string - - // SELinux label for the VM - SELinuxProcessLabel string - - // SGXEPCSize specifies the size in bytes for the EPC Section. - // Enable SGX. Hardware-based isolation and memory encryption. - SGXEPCSize int64 - - // RxRateLimiterMaxRate is used to control network I/O inbound bandwidth on VM level. - RxRateLimiterMaxRate uint64 - - // TxRateLimiterMaxRate is used to control network I/O outbound bandwidth on VM level. - TxRateLimiterMaxRate uint64 - - // MemOffset specifies memory space for nvdimm device - MemOffset uint64 - // GuestSwap Used to enable/disable swap in the guest GuestSwap bool } diff --git a/src/runtime/virtcontainers/ipvlan_endpoint.go b/src/runtime/virtcontainers/ipvlan_endpoint.go index 59bdb81316..d40471542f 100644 --- a/src/runtime/virtcontainers/ipvlan_endpoint.go +++ b/src/runtime/virtcontainers/ipvlan_endpoint.go @@ -18,10 +18,10 @@ var ipvlanTrace = getNetworkTrace(IPVlanEndpointType) // IPVlanEndpoint represents a ipvlan endpoint that is bridged to the VM type IPVlanEndpoint struct { - NetPair NetworkInterfacePair - EndpointProperties NetworkInfo EndpointType EndpointType PCIPath vcTypes.PciPath + EndpointProperties NetworkInfo + NetPair NetworkInterfacePair RxRateLimiter bool TxRateLimiter bool } diff --git a/src/runtime/virtcontainers/kata_agent.go b/src/runtime/virtcontainers/kata_agent.go index a8b62127ae..7209f54be1 100644 --- a/src/runtime/virtcontainers/kata_agent.go +++ b/src/runtime/virtcontainers/kata_agent.go @@ -217,15 +217,15 @@ func ephemeralPath() string { // KataAgentConfig is a structure storing information needed // to reach the Kata Containers agent. type KataAgentConfig struct { + TraceMode string + TraceType string + KernelModules []string + ContainerPipeSize uint32 + DialTimeout uint32 LongLiveConn bool Debug bool Trace bool EnableDebugConsole bool - ContainerPipeSize uint32 - TraceMode string - TraceType string - DialTimeout uint32 - KernelModules []string } // KataAgentState is the structure describing the data stored from this @@ -234,21 +234,26 @@ type KataAgentState struct { URL string } +// nolint: govet type kataAgent struct { - // lock protects the client pointer - sync.Mutex + ctx context.Context + vmSocket interface{} + client *kataclient.AgentClient - reqHandlers map[string]reqFunc - state KataAgentState + // lock protects the client pointer + sync.Mutex + + state KataAgentState + + reqHandlers map[string]reqFunc + kmodules []string + + dialTimout uint32 + keepConn bool dynamicTracing bool dead bool - dialTimout uint32 - kmodules []string - - vmSocket interface{} - ctx context.Context } func (k *kataAgent) Logger() *logrus.Entry { diff --git a/src/runtime/virtcontainers/kata_agent_test.go b/src/runtime/virtcontainers/kata_agent_test.go index 533ea5b711..d2b2a9d367 100644 --- a/src/runtime/virtcontainers/kata_agent_test.go +++ b/src/runtime/virtcontainers/kata_agent_test.go @@ -229,6 +229,7 @@ func TestHandleLocalStorage(t *testing.T) { func TestHandleDeviceBlockVolume(t *testing.T) { k := kataAgent{} + // nolint: govet tests := []struct { BlockDeviceDriver string inputMount Mount @@ -991,6 +992,7 @@ func TestKataCleanupSandbox(t *testing.T) { func TestKataAgentKernelParams(t *testing.T) { assert := assert.New(t) + // nolint: govet type testData struct { debug bool trace bool diff --git a/src/runtime/virtcontainers/monitor.go b/src/runtime/virtcontainers/monitor.go index c64412a545..55114e03bb 100644 --- a/src/runtime/virtcontainers/monitor.go +++ b/src/runtime/virtcontainers/monitor.go @@ -18,15 +18,18 @@ const ( watcherChannelSize = 128 ) +// nolint: govet type monitor struct { + watchers []chan error + sandbox *Sandbox + + wg sync.WaitGroup sync.Mutex - sandbox *Sandbox - checkInterval time.Duration - watchers []chan error - wg sync.WaitGroup - running bool stopCh chan bool + checkInterval time.Duration + + running bool } func newMonitor(s *Sandbox) *monitor { diff --git a/src/runtime/virtcontainers/mount.go b/src/runtime/virtcontainers/mount.go index 35d7a4063b..1696650d59 100644 --- a/src/runtime/virtcontainers/mount.go +++ b/src/runtime/virtcontainers/mount.go @@ -91,9 +91,9 @@ func minor(dev uint64) int { } type device struct { + mountPoint string major int minor int - mountPoint string } var errMountPointNotFound = errors.New("Mount point not found") @@ -336,19 +336,19 @@ type Mount struct { // Type specifies the type of filesystem to mount. Type string - // Options list all the mount options of the filesystem. - Options []string - // HostPath used to store host side bind mount path HostPath string - // ReadOnly specifies if the mount should be read only or not - ReadOnly bool - // BlockDeviceID represents block device that is attached to the // VM in case this mount is a block device file or a directory // backed by a block device. BlockDeviceID string + + // Options list all the mount options of the filesystem. + Options []string + + // ReadOnly specifies if the mount should be read only or not + ReadOnly bool } func isSymlink(path string) bool { diff --git a/src/runtime/virtcontainers/netmon.go b/src/runtime/virtcontainers/netmon.go index f10d73d9f5..58483df22d 100644 --- a/src/runtime/virtcontainers/netmon.go +++ b/src/runtime/virtcontainers/netmon.go @@ -25,10 +25,10 @@ type NetmonConfig struct { // for the execution of the network monitor binary. type netmonParams struct { netmonPath string - debug bool logLevel string runtime string sandboxID string + debug bool } func netmonLogger() *logrus.Entry { diff --git a/src/runtime/virtcontainers/network.go b/src/runtime/virtcontainers/network.go index c9fde09d30..7d0126ce13 100644 --- a/src/runtime/virtcontainers/network.go +++ b/src/runtime/virtcontainers/network.go @@ -141,9 +141,9 @@ type NetlinkIface struct { // It can be used to store the description of the underlying network. type NetworkInfo struct { Iface NetlinkIface + DNS DNSInfo Addrs []netlink.Addr Routes []netlink.Route - DNS DNSInfo Neighbors []netlink.Neigh } @@ -179,10 +179,10 @@ type NetworkInterfacePair struct { // NetworkConfig is the network configuration related to a network. type NetworkConfig struct { NetNSPath string - NetNsCreated bool - DisableNewNetNs bool NetmonConfig NetmonConfig InterworkingModel NetInterworkingModel + NetNsCreated bool + DisableNewNetNs bool } func networkLogger() *logrus.Entry { @@ -192,8 +192,8 @@ func networkLogger() *logrus.Entry { // NetworkNamespace contains all data related to its network namespace. type NetworkNamespace struct { NetNsPath string - NetNsCreated bool Endpoints []Endpoint + NetNsCreated bool NetmonPID int } @@ -211,8 +211,8 @@ func (n NetworkNamespace) MarshalJSON() ([]byte, error) { // entering a recursive loop when only calling json.Marshal(). type shadow struct { NetNsPath string - NetNsCreated bool Endpoints []TypedJSONEndpoint + NetNsCreated bool } s := &shadow{ @@ -299,8 +299,8 @@ func generateEndpoints(typedEndpoints []TypedJSONEndpoint) ([]Endpoint, error) { func (n *NetworkNamespace) UnmarshalJSON(b []byte) error { var s struct { NetNsPath string - NetNsCreated bool Endpoints json.RawMessage + NetNsCreated bool } if err := json.Unmarshal(b, &s); err != nil { diff --git a/src/runtime/virtcontainers/qemu.go b/src/runtime/virtcontainers/qemu.go index 8bdc0439fd..fcf700fa54 100644 --- a/src/runtime/virtcontainers/qemu.go +++ b/src/runtime/virtcontainers/qemu.go @@ -60,11 +60,11 @@ const romFile = "" const defaultDisableModern = false type qmpChannel struct { - sync.Mutex - ctx context.Context - path string qmp *govmmQemu.QMP + ctx context.Context disconn chan struct{} + path string + sync.Mutex } // CPUDevice represents a CPU device which was hot-added in a running VM @@ -75,46 +75,46 @@ type CPUDevice struct { // QemuState keeps Qemu's state type QemuState struct { + UUID string Bridges []types.Bridge // HotpluggedCPUs is the list of CPUs that were hot-added HotpluggedVCPUs []CPUDevice HotpluggedMemory int - UUID string - HotplugVFIOOnRootBus bool VirtiofsdPid int PCIeRootPort int + HotplugVFIOOnRootBus bool } // qemu is an Hypervisor interface implementation for the Linux qemu hypervisor. type qemu struct { - id string - - config HypervisorConfig - - qmpMonitorCh qmpChannel - - qemuConfig govmmQemu.Config - - state QemuState - arch qemuArch + virtiofsd Virtiofsd + + store persistapi.PersistDriver + + ctx context.Context + // fds is a list of file descriptors inherited by QEMU process // they'll be closed once QEMU process is running fds []*os.File - ctx context.Context + id string - nvdimmCount int + state QemuState - stopped bool + qmpMonitorCh qmpChannel - store persistapi.PersistDriver + qemuConfig govmmQemu.Config + + config HypervisorConfig // if in memory dump progress memoryDumpFlag sync.Mutex - virtiofsd Virtiofsd + nvdimmCount int + + stopped bool } const ( diff --git a/src/runtime/virtcontainers/qemu_arch_base.go b/src/runtime/virtcontainers/qemu_arch_base.go index 47b5afa5b7..c1716ec488 100644 --- a/src/runtime/virtcontainers/qemu_arch_base.go +++ b/src/runtime/virtcontainers/qemu_arch_base.go @@ -175,20 +175,20 @@ const ( ) type qemuArchBase struct { - memoryOffset uint64 - networkIndex int - nestedRun bool - vhost bool - disableNvdimm bool - dax bool - protection guestProtection - qemuMachine govmmQemu.Machine qemuExePath string + qemuMachine govmmQemu.Machine PFlash []string kernelParamsNonDebug []Param kernelParamsDebug []Param kernelParams []Param Bridges []types.Bridge + memoryOffset uint64 + networkIndex int + protection guestProtection + nestedRun bool + vhost bool + disableNvdimm bool + dax bool } const ( diff --git a/src/runtime/virtcontainers/sandbox.go b/src/runtime/virtcontainers/sandbox.go index 7784a66b88..c84449ea9f 100644 --- a/src/runtime/virtcontainers/sandbox.go +++ b/src/runtime/virtcontainers/sandbox.go @@ -76,16 +76,17 @@ var ( // SandboxStatus describes a sandbox status. type SandboxStatus struct { - ID string - State types.SandboxState - Hypervisor HypervisorType - HypervisorConfig HypervisorConfig ContainersStatus []ContainerStatus // Annotations allow clients to store arbitrary values, // for example to add additional status values required // to support particular specifications. Annotations map[string]string + + ID string + Hypervisor HypervisorType + State types.SandboxState + HypervisorConfig HypervisorConfig } // SandboxStats describes a sandbox's stats @@ -96,17 +97,6 @@ type SandboxStats struct { // SandboxConfig is a Sandbox configuration. type SandboxConfig struct { - ID string - - Hostname string - - HypervisorType HypervisorType - HypervisorConfig HypervisorConfig - - AgentConfig KataAgentConfig - - NetworkConfig NetworkConfig - // Volumes is a list of shared volumes between the host and the Sandbox. Volumes []types.Volume @@ -116,10 +106,32 @@ type SandboxConfig struct { //TODO: this should be a map to avoid duplicated containers Containers []ContainerConfig + // SandboxBindMounts - list of paths to mount into guest + SandboxBindMounts []string + + // Experimental features enabled + Experimental []exp.Feature + + // Cgroups specifies specific cgroup settings for the various subsystems that the container is + // placed into to limit the resources the container has available + Cgroups *configs.Cgroup + // Annotations keys must be unique strings and must be name-spaced // with e.g. reverse domain notation (org.clearlinux.key). Annotations map[string]string + ID string + + Hostname string + + HypervisorType HypervisorType + + AgentConfig KataAgentConfig + + NetworkConfig NetworkConfig + + HypervisorConfig HypervisorConfig + ShmSize uint64 // SharePidNs sets all containers to share the same sandbox level pid namespace. @@ -132,16 +144,6 @@ type SandboxConfig struct { SandboxCgroupOnly bool DisableGuestSeccomp bool - - // SandboxBindMounts - list of paths to mount into guest - SandboxBindMounts []string - - // Experimental features enabled - Experimental []exp.Feature - - // Cgroups specifies specific cgroup settings for the various subsystems that the container is - // placed into to limit the resources the container has available - Cgroups *configs.Cgroup } // valid checks that the sandbox configuration is valid. @@ -166,47 +168,42 @@ func (sandboxConfig *SandboxConfig) valid() bool { // Sandbox is composed of a set of containers and a runtime environment. // A Sandbox can be created, deleted, started, paused, stopped, listed, entered, and restored. type Sandbox struct { - id string - - sync.Mutex + ctx context.Context + devManager api.DeviceManager factory Factory hypervisor hypervisor agent agent store persistapi.PersistDriver - network Network - monitor *monitor + swapDevices []*config.BlockDrive + volumes []types.Volume - config *SandboxConfig - - devManager api.DeviceManager - - volumes []types.Volume + monitor *monitor + config *SandboxConfig + annotationsLock *sync.RWMutex + wg *sync.WaitGroup + cgroupMgr *vccgroups.Manager + cw *consoleWatcher containers map[string]*Container + id string + + network Network + state types.SandboxState networkNS NetworkNamespace - annotationsLock *sync.RWMutex + sync.Mutex - wg *sync.WaitGroup + swapSizeBytes int64 + shmSize uint64 + swapDeviceNum uint - shmSize uint64 sharePidNs bool seccompSupported bool disableVMShutdown bool - - cgroupMgr *vccgroups.Manager - - ctx context.Context - - cw *consoleWatcher - - swapDeviceNum uint - swapSizeBytes int64 - swapDevices []*config.BlockDrive } // ID returns the sandbox identifier string. @@ -921,10 +918,10 @@ const ( // console watcher is designed to monitor guest console output. type consoleWatcher struct { - proto string - consoleURL string conn net.Conn ptyConsole *os.File + proto string + consoleURL string } func newConsoleWatcher(ctx context.Context, s *Sandbox) (*consoleWatcher, error) { diff --git a/src/runtime/virtcontainers/sandbox_test.go b/src/runtime/virtcontainers/sandbox_test.go index 77475be96e..a39f241f4f 100644 --- a/src/runtime/virtcontainers/sandbox_test.go +++ b/src/runtime/virtcontainers/sandbox_test.go @@ -674,6 +674,7 @@ var assetContentWrongHash = "92549f8d2018a95a294d28a65e795ed7d1a9d150009a28cea10 func TestSandboxCreateAssets(t *testing.T) { assert := assert.New(t) + // nolint: govet type testData struct { assetType types.AssetType annotations map[string]string @@ -1469,6 +1470,7 @@ func TestSandbox_SetupSandboxCgroup(t *testing.T) { successfulContainer.Annotations = make(map[string]string) successfulContainer.Annotations[annotations.ContainerTypeKey] = string(PodSandbox) + // nolint: govet tests := []struct { name string s *Sandbox diff --git a/src/runtime/virtcontainers/tuntap_endpoint.go b/src/runtime/virtcontainers/tuntap_endpoint.go index a3607b114a..5260dd1558 100644 --- a/src/runtime/virtcontainers/tuntap_endpoint.go +++ b/src/runtime/virtcontainers/tuntap_endpoint.go @@ -22,11 +22,11 @@ var tuntapTrace = getNetworkTrace(TuntapEndpointType) // TuntapEndpoint represents just a tap endpoint type TuntapEndpoint struct { - NetPair NetworkInterfacePair - TuntapInterface TuntapInterface - EndpointProperties NetworkInfo EndpointType EndpointType PCIPath vcTypes.PciPath + TuntapInterface TuntapInterface + EndpointProperties NetworkInfo + NetPair NetworkInterfacePair RxRateLimiter bool TxRateLimiter bool } diff --git a/src/runtime/virtcontainers/veth_endpoint.go b/src/runtime/virtcontainers/veth_endpoint.go index c1a42cc9c7..8725ee278b 100644 --- a/src/runtime/virtcontainers/veth_endpoint.go +++ b/src/runtime/virtcontainers/veth_endpoint.go @@ -18,10 +18,10 @@ var vethTrace = getNetworkTrace(VethEndpointType) // VethEndpoint gathers a network pair and its properties. type VethEndpoint struct { - NetPair NetworkInterfacePair - EndpointProperties NetworkInfo EndpointType EndpointType PCIPath vcTypes.PciPath + EndpointProperties NetworkInfo + NetPair NetworkInterfacePair RxRateLimiter bool TxRateLimiter bool } diff --git a/src/runtime/virtcontainers/veth_endpoint_test.go b/src/runtime/virtcontainers/veth_endpoint_test.go index 9649b82e7a..64bfb1555f 100644 --- a/src/runtime/virtcontainers/veth_endpoint_test.go +++ b/src/runtime/virtcontainers/veth_endpoint_test.go @@ -81,6 +81,7 @@ func TestCreateVethNetworkEndpointChooseIfaceName(t *testing.T) { } func TestCreateVethNetworkEndpointInvalidArgs(t *testing.T) { + // nolint: govet type endpointValues struct { idx int ifName string diff --git a/src/runtime/virtcontainers/virtiofsd.go b/src/runtime/virtcontainers/virtiofsd.go index 2e996e256b..c7a0043343 100644 --- a/src/runtime/virtcontainers/virtiofsd.go +++ b/src/runtime/virtcontainers/virtiofsd.go @@ -47,22 +47,22 @@ type Virtiofsd interface { type onQuitFunc func() type virtiofsd struct { + // Neded by tracing + ctx context.Context // path to virtiofsd daemon path string // socketPath where daemon will serve socketPath string // cache size for virtiofsd cache string - // extraArgs list of extra args to append to virtiofsd command - extraArgs []string // sourcePath path that daemon will help to share sourcePath string + // extraArgs list of extra args to append to virtiofsd command + extraArgs []string // debug flag debug bool // PID process ID of virtiosd process PID int - // Neded by tracing - ctx context.Context } // Open socket on behalf of virtiofsd diff --git a/src/runtime/virtcontainers/virtiofsd_test.go b/src/runtime/virtcontainers/virtiofsd_test.go index b9f67057c9..a4d81430c0 100644 --- a/src/runtime/virtcontainers/virtiofsd_test.go +++ b/src/runtime/virtcontainers/virtiofsd_test.go @@ -17,6 +17,7 @@ import ( func TestVirtiofsdStart(t *testing.T) { assert := assert.New(t) + // nolint: govet type fields struct { path string socketPath string @@ -46,6 +47,7 @@ func TestVirtiofsdStart(t *testing.T) { NoDirectorySocket := validConfig NoDirectorySocket.socketPath = "/tmp/path/to/virtiofsd/socket.sock" + // nolint: govet tests := []struct { name string fields fields diff --git a/src/runtime/virtcontainers/vm.go b/src/runtime/virtcontainers/vm.go index 556d0e408e..25d8b1d805 100644 --- a/src/runtime/virtcontainers/vm.go +++ b/src/runtime/virtcontainers/vm.go @@ -21,25 +21,23 @@ import ( // VM is abstraction of a virtual machine. type VM struct { - id string - hypervisor hypervisor agent agent + store persistapi.PersistDriver + + id string cpu uint32 memory uint32 cpuDelta uint32 - - store persistapi.PersistDriver } // VMConfig is a collection of all info that a new blackbox VM needs. type VMConfig struct { HypervisorType HypervisorType + AgentConfig KataAgentConfig HypervisorConfig HypervisorConfig - - AgentConfig KataAgentConfig } // Valid check VMConfig validity.