Copy disabled (too large)
Download .txt
Showing preview only (39,567K chars total). Download the full file to get everything.
Repository: NVIDIA/nvidia-container-toolkit
Branch: main
Commit: ec7b4e2fa2ca
Files: 2913
Total size: 219.3 MB
Directory structure:
gitextract_w5zx98os/
├── .dockerignore
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── config.yml
│ │ ├── feature_request.md
│ │ └── question.md
│ ├── copy-pr-bot.yaml
│ ├── dependabot.yml
│ ├── scripts/
│ │ ├── add-labels-from-comment.js
│ │ ├── backport.js
│ │ └── extract-branches.js
│ └── workflows/
│ ├── cherrypick.yml
│ ├── ci.yaml
│ ├── code_scanning.yaml
│ ├── e2e.yaml
│ ├── golang.yaml
│ ├── image.yaml
│ ├── release.yaml
│ └── stale.yaml
├── .gitignore
├── .gitmodules
├── .golangci.yml
├── .nvidia-ci.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── DEVELOPMENT.md
├── LICENSE
├── Makefile
├── README.md
├── RELEASE.md
├── SECURITY.md
├── api/
│ └── config/
│ └── v1/
│ ├── cli.go
│ ├── cli_test.go
│ ├── config.go
│ ├── config_test.go
│ ├── features.go
│ ├── hook.go
│ ├── runtime.go
│ ├── toml.go
│ ├── toml_test.go
│ └── toolkit-cli.go
├── cmd/
│ ├── nvidia-cdi-hook/
│ │ ├── README.md
│ │ ├── chmod/
│ │ │ └── chmod.go
│ │ ├── commands/
│ │ │ └── commands.go
│ │ ├── create-symlinks/
│ │ │ ├── create-symlinks.go
│ │ │ └── create-symlinks_test.go
│ │ ├── cudacompat/
│ │ │ ├── container-root.go
│ │ │ ├── cuda-elf-header.go
│ │ │ ├── cuda-elf-header_test.go
│ │ │ ├── cudacompat.go
│ │ │ └── cudacompat_test.go
│ │ ├── disable-device-node-modification/
│ │ │ ├── disable-device-node-modification.go
│ │ │ ├── disable-device-node-modification_test.go
│ │ │ ├── params_linux.go
│ │ │ └── params_other.go
│ │ ├── main.go
│ │ └── update-ldcache/
│ │ └── update-ldcache.go
│ ├── nvidia-container-runtime/
│ │ ├── README.md
│ │ ├── main.go
│ │ └── main_test.go
│ ├── nvidia-container-runtime-hook/
│ │ ├── capabilities.go
│ │ ├── container_config.go
│ │ ├── container_config_test.go
│ │ ├── hook_config.go
│ │ ├── hook_config_test.go
│ │ ├── hook_test.go
│ │ └── main.go
│ ├── nvidia-container-runtime.cdi/
│ │ └── main.go
│ ├── nvidia-container-runtime.legacy/
│ │ └── main.go
│ ├── nvidia-ctk/
│ │ ├── README.md
│ │ ├── cdi/
│ │ │ ├── cdi.go
│ │ │ ├── generate/
│ │ │ │ ├── config.go
│ │ │ │ ├── generate.go
│ │ │ │ └── generate_test.go
│ │ │ ├── list/
│ │ │ │ └── list.go
│ │ │ └── transform/
│ │ │ ├── root/
│ │ │ │ └── root.go
│ │ │ └── transform.go
│ │ ├── config/
│ │ │ ├── config.go
│ │ │ ├── config_test.go
│ │ │ ├── create-default/
│ │ │ │ └── create-default.go
│ │ │ └── flags/
│ │ │ └── options.go
│ │ ├── hook/
│ │ │ └── hook.go
│ │ ├── info/
│ │ │ └── info.go
│ │ ├── main.go
│ │ ├── runtime/
│ │ │ ├── configure/
│ │ │ │ ├── configure.go
│ │ │ │ └── configure_test.go
│ │ │ └── runtime.go
│ │ └── system/
│ │ ├── create-dev-char-symlinks/
│ │ │ ├── all.go
│ │ │ ├── create-dev-char-symlinks.go
│ │ │ ├── existing.go
│ │ │ ├── existing_linux.go
│ │ │ └── existing_other.go
│ │ ├── create-device-nodes/
│ │ │ └── create-device-nodes.go
│ │ └── system.go
│ └── nvidia-ctk-installer/
│ ├── container/
│ │ ├── README.md
│ │ ├── container.go
│ │ ├── operator/
│ │ │ ├── operator.go
│ │ │ └── operator_test.go
│ │ └── runtime/
│ │ ├── containerd/
│ │ │ ├── config_test.go
│ │ │ ├── containerd.go
│ │ │ ├── containerd_linux.go
│ │ │ ├── containerd_other.go
│ │ │ └── containerd_test.go
│ │ ├── crio/
│ │ │ ├── config_test.go
│ │ │ └── crio.go
│ │ ├── docker/
│ │ │ ├── docker.go
│ │ │ ├── docker_linux.go
│ │ │ ├── docker_other.go
│ │ │ └── docker_test.go
│ │ ├── nri/
│ │ │ ├── logger.go
│ │ │ └── plugin.go
│ │ └── runtime.go
│ ├── main.go
│ ├── main_test.go
│ └── toolkit/
│ ├── installer/
│ │ ├── artifact-root.go
│ │ ├── directory.go
│ │ ├── executables.go
│ │ ├── executables_test.go
│ │ ├── file-installer_mock.go
│ │ ├── installer.go
│ │ ├── installer_mock.go
│ │ ├── installer_test.go
│ │ ├── libraries.go
│ │ └── options.go
│ ├── options.go
│ ├── toolkit.go
│ └── toolkit_test.go
├── deployments/
│ ├── container/
│ │ ├── Dockerfile
│ │ ├── Dockerfile.rpmrebuild
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── multi-arch.mk
│ │ └── native-only.mk
│ ├── devel/
│ │ ├── Dockerfile
│ │ ├── Makefile
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── tools.go
│ └── systemd/
│ ├── nvidia-cdi-refresh.env
│ ├── nvidia-cdi-refresh.path
│ └── nvidia-cdi-refresh.service
├── docker/
│ ├── Dockerfile.debian
│ ├── Dockerfile.devel
│ ├── Dockerfile.opensuse-leap
│ ├── Dockerfile.rpm-yum
│ ├── Dockerfile.ubuntu
│ └── docker.mk
├── go.mod
├── go.sum
├── hack/
│ ├── create-release.sh
│ ├── generate-changelog.sh
│ ├── golang-version.sh
│ ├── prepare-artifacts.sh
│ ├── prepare-release.sh
│ └── pull-packages.sh
├── internal/
│ ├── config/
│ │ └── image/
│ │ ├── builder.go
│ │ ├── capabilities.go
│ │ ├── capabilities_test.go
│ │ ├── cuda_image.go
│ │ ├── cuda_image_test.go
│ │ ├── devices.go
│ │ ├── envvars.go
│ │ ├── privileged.go
│ │ └── privileged_test.go
│ ├── cuda/
│ │ └── cuda.go
│ ├── devices/
│ │ ├── devices.go
│ │ ├── devices_mock.go
│ │ └── devices_tests.go
│ ├── discover/
│ │ ├── cache.go
│ │ ├── char_devices.go
│ │ ├── char_devices_test.go
│ │ ├── compat_libs.go
│ │ ├── discover.go
│ │ ├── discover_mock.go
│ │ ├── envvar.go
│ │ ├── filter.go
│ │ ├── first-valid.go
│ │ ├── gdrcopy.go
│ │ ├── gdrcopy_test.go
│ │ ├── gds.go
│ │ ├── gds_test.go
│ │ ├── graphics.go
│ │ ├── graphics_test.go
│ │ ├── hooks.go
│ │ ├── hooks_test.go
│ │ ├── ipc.go
│ │ ├── ipc_test.go
│ │ ├── ldconfig.go
│ │ ├── ldconfig_test.go
│ │ ├── list.go
│ │ ├── mofed.go
│ │ ├── mofed_test.go
│ │ ├── mounts-to-container-path.go
│ │ ├── mounts-to-container-path_test.go
│ │ ├── mounts.go
│ │ ├── mounts_test.go
│ │ ├── none.go
│ │ ├── none_test.go
│ │ ├── nvswitch.go
│ │ ├── nvswitch_test.go
│ │ ├── symlinks.go
│ │ └── symlinks_test.go
│ ├── dxcore/
│ │ ├── api.go
│ │ ├── dxcore.c
│ │ ├── dxcore.go
│ │ └── dxcore.h
│ ├── edits/
│ │ ├── device.go
│ │ ├── device_test.go
│ │ ├── edits.go
│ │ ├── edits_test.go
│ │ ├── envvar.go
│ │ ├── hook.go
│ │ └── mount.go
│ ├── info/
│ │ ├── additional_info.go
│ │ ├── additional_info_test.go
│ │ ├── auto.go
│ │ ├── auto_test.go
│ │ ├── drm/
│ │ │ └── drm_devices.go
│ │ ├── proc/
│ │ │ ├── devices/
│ │ │ │ ├── builder.go
│ │ │ │ ├── devices.go
│ │ │ │ ├── devices_mock.go
│ │ │ │ └── devices_test.go
│ │ │ └── information_files.go
│ │ └── version.go
│ ├── ldcache/
│ │ ├── ldcache.go
│ │ └── ldcache_mock.go
│ ├── ldconfig/
│ │ ├── ldconfig.go
│ │ ├── ldconfig_linux.go
│ │ ├── ldconfig_other.go
│ │ ├── ldconfig_test.go
│ │ ├── safe-exec_linux.go
│ │ └── safe-exec_other.go
│ ├── logger/
│ │ ├── api.go
│ │ └── lib.go
│ ├── lookup/
│ │ └── root/
│ │ ├── cuda_test.go
│ │ ├── options.go
│ │ ├── root.go
│ │ ├── root_test.go
│ │ └── version.go
│ ├── modifier/
│ │ ├── cdi/
│ │ │ ├── builder.go
│ │ │ ├── registry.go
│ │ │ └── spec.go
│ │ ├── cdi.go
│ │ ├── cdi_test.go
│ │ ├── csv.go
│ │ ├── csv_test.go
│ │ ├── discover.go
│ │ ├── discover_test.go
│ │ ├── factory.go
│ │ ├── gated.go
│ │ ├── graphics.go
│ │ ├── graphics_test.go
│ │ ├── hook_remover.go
│ │ ├── hook_remover_test.go
│ │ ├── list.go
│ │ ├── mode.go
│ │ ├── stable.go
│ │ └── stable_test.go
│ ├── nvcaps/
│ │ ├── nvcaps.go
│ │ └── nvcaps_test.go
│ ├── nvsandboxutils/
│ │ ├── api.go
│ │ ├── cgo_helpers.h
│ │ ├── cgo_helpers_static.go
│ │ ├── const.go
│ │ ├── doc.go
│ │ ├── dynamicLibrary_mock.go
│ │ ├── gen/
│ │ │ ├── generate-bindings.sh
│ │ │ ├── nvsandboxutils/
│ │ │ │ ├── anonymous_structs.cocci
│ │ │ │ ├── generateapi.go
│ │ │ │ ├── nvsandboxutils.h
│ │ │ │ └── nvsandboxutils.yml
│ │ │ └── update-bindings.sh
│ │ ├── gpu-resources.go
│ │ ├── impl.go
│ │ ├── lib.go
│ │ ├── lib_test.go
│ │ ├── mock/
│ │ │ └── interface.go
│ │ ├── nvsandboxutils.go
│ │ ├── nvsandboxutils.h
│ │ ├── refcount.go
│ │ ├── refcount_test.go
│ │ ├── return.go
│ │ ├── types_gen.go
│ │ └── zz_generated.api.go
│ ├── oci/
│ │ ├── args.go
│ │ ├── args_test.go
│ │ ├── options.go
│ │ ├── runtime.go
│ │ ├── runtime_low_level.go
│ │ ├── runtime_mock.go
│ │ ├── runtime_modifier.go
│ │ ├── runtime_modifier_test.go
│ │ ├── runtime_path.go
│ │ ├── runtime_path_test.go
│ │ ├── runtime_syscall_exec.go
│ │ ├── spec.go
│ │ ├── spec_file.go
│ │ ├── spec_file_test.go
│ │ ├── spec_memory.go
│ │ ├── spec_memory_test.go
│ │ ├── spec_mock.go
│ │ ├── spec_test.go
│ │ └── state.go
│ ├── platform-support/
│ │ ├── dgpu/
│ │ │ ├── by-path-hooks.go
│ │ │ ├── dgpu.go
│ │ │ ├── dgpu_test.go
│ │ │ ├── nvml.go
│ │ │ ├── nvml_test.go
│ │ │ ├── nvsandboxutils.go
│ │ │ ├── nvsandboxutils_test.go
│ │ │ └── options.go
│ │ └── tegra/
│ │ ├── csv/
│ │ │ ├── csv.go
│ │ │ ├── csv_test.go
│ │ │ ├── mount_spec.go
│ │ │ └── mount_spec_test.go
│ │ ├── csv.go
│ │ ├── csv_test.go
│ │ ├── filter.go
│ │ ├── filter_test.go
│ │ ├── mount_specs.go
│ │ ├── options.go
│ │ ├── symlinks.go
│ │ ├── tegra.go
│ │ └── tegra_test.go
│ ├── requirements/
│ │ ├── constants.go
│ │ ├── constraints/
│ │ │ ├── binary.go
│ │ │ ├── constants.go
│ │ │ ├── constraint_mock.go
│ │ │ ├── constraints.go
│ │ │ ├── constraints_test.go
│ │ │ ├── factory.go
│ │ │ ├── factory_test.go
│ │ │ ├── logical.go
│ │ │ ├── logical_test.go
│ │ │ ├── property.go
│ │ │ └── property_mock.go
│ │ └── requirements.go
│ ├── runtime/
│ │ ├── api.go
│ │ ├── logger.go
│ │ ├── logger_test.go
│ │ ├── runtime.go
│ │ ├── runtime_factory.go
│ │ └── runtime_factory_test.go
│ └── test/
│ ├── test.go
│ └── to/
│ └── to.go
├── packaging/
│ ├── debian/
│ │ ├── changelog.old
│ │ ├── compat
│ │ ├── control
│ │ ├── copyright
│ │ ├── nvidia-container-toolkit-base.install
│ │ ├── nvidia-container-toolkit-base.postinst
│ │ ├── nvidia-container-toolkit-operator-extensions.install
│ │ ├── nvidia-container-toolkit.install
│ │ ├── nvidia-container-toolkit.lintian-overrides
│ │ ├── nvidia-container-toolkit.postinst
│ │ ├── nvidia-container-toolkit.postrm
│ │ ├── prepare
│ │ └── rules
│ └── rpm/
│ ├── SOURCES/
│ │ └── LICENSE
│ └── SPECS/
│ └── nvidia-container-toolkit.spec
├── pkg/
│ ├── config/
│ │ ├── engine/
│ │ │ ├── api.go
│ │ │ ├── config.go
│ │ │ ├── containerd/
│ │ │ │ ├── config.go
│ │ │ │ ├── config_drop_in.go
│ │ │ │ ├── config_drop_in_test.go
│ │ │ │ ├── config_test.go
│ │ │ │ ├── config_v1.go
│ │ │ │ ├── config_v1_test.go
│ │ │ │ ├── containerd.go
│ │ │ │ └── option.go
│ │ │ ├── crio/
│ │ │ │ ├── crio.go
│ │ │ │ ├── crio_test.go
│ │ │ │ └── option.go
│ │ │ ├── docker/
│ │ │ │ ├── docker.go
│ │ │ │ ├── docker_test.go
│ │ │ │ └── option.go
│ │ │ └── engine.go
│ │ ├── ocihook/
│ │ │ ├── hooks.go
│ │ │ └── oci-hook.go
│ │ ├── raw.go
│ │ └── toml/
│ │ ├── list.go
│ │ ├── source-cli.go
│ │ ├── source-empty.go
│ │ ├── source-file.go
│ │ ├── source-map.go
│ │ ├── source-string.go
│ │ ├── source.go
│ │ └── toml.go
│ ├── lookup/
│ │ ├── device.go
│ │ ├── device_test.go
│ │ ├── dir.go
│ │ ├── executable.go
│ │ ├── executable_test.go
│ │ ├── factory.go
│ │ ├── factory_test.go
│ │ ├── file.go
│ │ ├── file_test.go
│ │ ├── ldcache.go
│ │ ├── ldcache_test.go
│ │ ├── library.go
│ │ ├── library_test.go
│ │ ├── locator.go
│ │ ├── locator_mock.go
│ │ ├── merge.go
│ │ ├── null.go
│ │ ├── optional.go
│ │ ├── path.go
│ │ ├── symlinks/
│ │ │ └── symlink.go
│ │ └── symlinks.go
│ ├── nvcdi/
│ │ ├── api.go
│ │ ├── common-nvml.go
│ │ ├── device-wsl.go
│ │ ├── driver-nvml.go
│ │ ├── driver-wsl.go
│ │ ├── driver-wsl_test.go
│ │ ├── full-gpu-nvml.go
│ │ ├── gated.go
│ │ ├── info-interface_mock.go
│ │ ├── lib-csv.go
│ │ ├── lib-csv_test.go
│ │ ├── lib-imex.go
│ │ ├── lib-imex_test.go
│ │ ├── lib-nvml.go
│ │ ├── lib-nvml_test.go
│ │ ├── lib-wsl.go
│ │ ├── lib.go
│ │ ├── lib_test.go
│ │ ├── management.go
│ │ ├── mig-device-nvml.go
│ │ ├── mocks.go
│ │ ├── mode.go
│ │ ├── namer.go
│ │ ├── namer_nvml_mock.go
│ │ ├── namer_test.go
│ │ ├── options.go
│ │ ├── spec/
│ │ │ ├── api.go
│ │ │ ├── builder.go
│ │ │ ├── set-minimum-version.go
│ │ │ ├── spec.go
│ │ │ └── spec_test.go
│ │ ├── transform/
│ │ │ ├── api.go
│ │ │ ├── deduplicate.go
│ │ │ ├── deduplicate_test.go
│ │ │ ├── edits.go
│ │ │ ├── merge.go
│ │ │ ├── merged-device.go
│ │ │ ├── merged-device_test.go
│ │ │ ├── noop/
│ │ │ │ └── no-op.go
│ │ │ ├── remove.go
│ │ │ ├── root/
│ │ │ │ ├── builder.go
│ │ │ │ ├── container-root.go
│ │ │ │ ├── container-root_test.go
│ │ │ │ ├── driver-root.go
│ │ │ │ ├── driver-root_test.go
│ │ │ │ ├── host-root.go
│ │ │ │ ├── host-root_test.go
│ │ │ │ ├── options.go
│ │ │ │ └── root.go
│ │ │ ├── simplify.go
│ │ │ ├── simplify_test.go
│ │ │ ├── sorter.go
│ │ │ └── sorter_test.go
│ │ ├── workarounds-device-folder-permissions.go
│ │ └── wrapper.go
│ └── system/
│ ├── nvdevices/
│ │ ├── devices.go
│ │ ├── devices_test.go
│ │ ├── mknod.go
│ │ ├── mknod_mock.go
│ │ └── options.go
│ └── nvmodules/
│ ├── cmd.go
│ ├── cmd_mock.go
│ ├── modules.go
│ ├── modules_test.go
│ └── options.go
├── scripts/
│ ├── Dockerfile.sign.deb
│ ├── Dockerfile.sign.rpm
│ ├── build-all-components.sh
│ ├── build-packages.sh
│ ├── extract-packages.sh
│ ├── get-component-versions.sh
│ ├── packages-sign-all.sh
│ ├── publish-image.sh
│ ├── release-kitmaker-artifactory.sh
│ ├── release-packages-artifactory.sh
│ ├── release-packages.sh
│ ├── repackage-rpms.sh
│ ├── update-components.sh
│ └── utils.sh
├── testdata/
│ ├── compat/
│ │ ├── libcuda.so.575.57.08
│ │ └── libcuda.so.590.44.01
│ ├── go.mod
│ ├── installer/
│ │ └── artifacts/
│ │ ├── deb/
│ │ │ └── usr/
│ │ │ ├── bin/
│ │ │ │ ├── nvidia-cdi-hook
│ │ │ │ ├── nvidia-container-cli
│ │ │ │ ├── nvidia-container-runtime
│ │ │ │ ├── nvidia-container-runtime-hook
│ │ │ │ ├── nvidia-container-runtime.cdi
│ │ │ │ ├── nvidia-container-runtime.legacy
│ │ │ │ └── nvidia-ctk
│ │ │ └── lib/
│ │ │ └── x86_64-linux-gnu/
│ │ │ ├── libnvidia-container-go.so.99.88.77
│ │ │ └── libnvidia-container.so.99.88.77
│ │ └── rpm/
│ │ └── usr/
│ │ ├── bin/
│ │ │ ├── nvidia-cdi-hook
│ │ │ ├── nvidia-container-cli
│ │ │ ├── nvidia-container-runtime
│ │ │ ├── nvidia-container-runtime-hook
│ │ │ ├── nvidia-container-runtime.cdi
│ │ │ ├── nvidia-container-runtime.legacy
│ │ │ └── nvidia-ctk
│ │ └── lib64/
│ │ ├── libnvidia-container-go.so.99.88.77
│ │ └── libnvidia-container.so.99.88.77
│ └── lookup/
│ ├── csv-mode/
│ │ ├── dev/
│ │ │ └── nvidia0
│ │ └── etc/
│ │ └── nvidia-container-runtime/
│ │ └── host-files-for-container.d/
│ │ ├── devices.csv
│ │ └── drivers.csv
│ ├── rootfs-1/
│ │ ├── README.md
│ │ ├── dev/
│ │ │ ├── gdrdrv
│ │ │ ├── infiniband/
│ │ │ │ ├── rdma_cm
│ │ │ │ └── uverbs0
│ │ │ ├── nvidia-caps/
│ │ │ │ └── nvidia-cap1
│ │ │ ├── nvidia-caps-imex-channels/
│ │ │ │ ├── channel0
│ │ │ │ ├── channel1
│ │ │ │ └── channel2047
│ │ │ ├── nvidia-fs0
│ │ │ ├── nvidia-nvswitch0
│ │ │ ├── nvidia-nvswitchctl
│ │ │ ├── nvidia0
│ │ │ └── nvidiactl
│ │ ├── etc/
│ │ │ ├── cufile.json
│ │ │ └── ld.so.cache
│ │ ├── lib/
│ │ │ └── x86_64-linux-gnu/
│ │ │ ├── libcuda.so.999.88.77
│ │ │ └── vdpau/
│ │ │ └── libvdpau_nvidia.so.999.88.77
│ │ └── run/
│ │ └── udev/
│ │ └── .gitkeep
│ ├── rootfs-2/
│ │ ├── README.md
│ │ ├── etc/
│ │ │ └── ld.so.cache
│ │ └── var/
│ │ └── lib/
│ │ └── nvidia/
│ │ └── lib64/
│ │ └── libcuda.so.999.88.77
│ ├── rootfs-drm/
│ │ └── dev/
│ │ └── dri/
│ │ ├── card0
│ │ └── renderD128
│ ├── rootfs-empty/
│ │ └── README.md
│ ├── rootfs-no-cache-lib64/
│ │ └── usr/
│ │ └── lib64/
│ │ └── libcuda.so.999.88.77
│ ├── rootfs-orin/
│ │ ├── dev/
│ │ │ └── nvidia0
│ │ ├── etc/
│ │ │ └── nvidia-container-runtime/
│ │ │ └── host-files-for-container.d/
│ │ │ ├── devices.csv
│ │ │ └── drivers.csv
│ │ └── usr/
│ │ └── lib/
│ │ └── aarch64-linux-gnu/
│ │ └── nvidia/
│ │ ├── libcuda.so.1.1
│ │ └── libnvidia-ml.so.1
│ ├── rootfs-split/
│ │ ├── dev-root/
│ │ │ └── dev/
│ │ │ ├── gdrdrv
│ │ │ ├── nvidia-caps/
│ │ │ │ └── nvidia-cap1
│ │ │ ├── nvidia-caps-imex-channels/
│ │ │ │ ├── channel0
│ │ │ │ ├── channel1
│ │ │ │ └── channel2047
│ │ │ ├── nvidia-fs0
│ │ │ ├── nvidia0
│ │ │ └── nvidiactl
│ │ └── driver-root/
│ │ ├── etc/
│ │ │ ├── cufile.json
│ │ │ └── ld.so.cache
│ │ ├── lib/
│ │ │ └── x86_64-linux-gnu/
│ │ │ ├── libcuda.so.1
│ │ │ ├── libcuda.so.999.88.77
│ │ │ └── vdpau/
│ │ │ └── libvdpau_nvidia.so.999.88.77
│ │ └── run/
│ │ └── udev/
│ │ └── .gitkeep
│ ├── rootfs-thor-dgpu/
│ │ ├── dev/
│ │ │ ├── nvidia0
│ │ │ ├── nvidia1
│ │ │ ├── nvidia2
│ │ │ ├── nvidiactl
│ │ │ └── nvmap
│ │ └── etc/
│ │ └── nvidia-container-runtime/
│ │ └── host-files-for-container.d/
│ │ ├── devices.csv
│ │ └── drivers.csv
│ └── rootfs-with-nvswitch/
│ └── dev/
│ ├── nvidia-nvswitch0
│ ├── nvidia-nvswitch1
│ └── nvidia-nvswitchctl
├── tests/
│ ├── bin/
│ │ ├── nvidia-container-runtime-hook
│ │ └── runc
│ ├── container/
│ │ ├── common.sh
│ │ ├── containerd_test.sh
│ │ ├── crio_test.sh
│ │ ├── docker_test.sh
│ │ ├── main.sh
│ │ └── shared/
│ │ └── etc/
│ │ ├── containerd/
│ │ │ ├── config_empty.toml
│ │ │ ├── config_v1.toml
│ │ │ └── config_v2.toml
│ │ └── docker/
│ │ └── daemon.json
│ ├── e2e/
│ │ ├── Makefile
│ │ ├── e2e_test.go
│ │ ├── infra/
│ │ │ ├── driver-branch-535.yaml
│ │ │ ├── driver-branch-570.yaml
│ │ │ └── driver-branch-580.yaml
│ │ ├── installer.go
│ │ ├── nvidia-cdi-refresh_test.go
│ │ ├── nvidia-container-cli_test.go
│ │ ├── nvidia-container-toolkit_test.go
│ │ ├── nvidia-ctk_containerd_test.go
│ │ └── runner.go
│ ├── go.mod
│ ├── go.sum
│ ├── input/
│ │ ├── config.clone3.json
│ │ ├── csv_samples/
│ │ │ ├── .csv
│ │ │ ├── empty/
│ │ │ │ └── .gitignore
│ │ │ ├── jetson.csv
│ │ │ ├── other.not_csv
│ │ │ ├── simple.csv
│ │ │ ├── simple_wrong.csv
│ │ │ └── spaced.csv
│ │ ├── nvidia-container-runtime/
│ │ │ └── config.toml
│ │ └── test_spec.json
│ ├── release/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── docker/
│ │ ├── centos8/
│ │ │ ├── Dockerfile
│ │ │ ├── entrypoint.sh
│ │ │ └── install_repo.sh
│ │ ├── fedora35/
│ │ │ ├── Dockerfile
│ │ │ ├── entrypoint.sh
│ │ │ └── install_repo.sh
│ │ └── ubuntu18.04/
│ │ ├── Dockerfile
│ │ ├── entrypoint.sh
│ │ └── install_repo.sh
│ └── vendor/
│ ├── github.com/
│ │ ├── Masterminds/
│ │ │ └── semver/
│ │ │ └── v3/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE.txt
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── collection.go
│ │ │ ├── constraints.go
│ │ │ ├── doc.go
│ │ │ └── version.go
│ │ ├── go-logr/
│ │ │ └── logr/
│ │ │ ├── .golangci.yaml
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── context.go
│ │ │ ├── context_noslog.go
│ │ │ ├── context_slog.go
│ │ │ ├── discard.go
│ │ │ ├── funcr/
│ │ │ │ ├── funcr.go
│ │ │ │ └── slogsink.go
│ │ │ ├── logr.go
│ │ │ ├── sloghandler.go
│ │ │ ├── slogr.go
│ │ │ └── slogsink.go
│ │ ├── google/
│ │ │ ├── go-cmp/
│ │ │ │ ├── LICENSE
│ │ │ │ └── cmp/
│ │ │ │ ├── compare.go
│ │ │ │ ├── export.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── diff/
│ │ │ │ │ │ ├── debug_disable.go
│ │ │ │ │ │ ├── debug_enable.go
│ │ │ │ │ │ └── diff.go
│ │ │ │ │ ├── flags/
│ │ │ │ │ │ └── flags.go
│ │ │ │ │ ├── function/
│ │ │ │ │ │ └── func.go
│ │ │ │ │ └── value/
│ │ │ │ │ ├── name.go
│ │ │ │ │ ├── pointer.go
│ │ │ │ │ └── sort.go
│ │ │ │ ├── options.go
│ │ │ │ ├── path.go
│ │ │ │ ├── report.go
│ │ │ │ ├── report_compare.go
│ │ │ │ ├── report_references.go
│ │ │ │ ├── report_reflect.go
│ │ │ │ ├── report_slices.go
│ │ │ │ ├── report_text.go
│ │ │ │ └── report_value.go
│ │ │ └── pprof/
│ │ │ ├── AUTHORS
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ └── profile/
│ │ │ ├── encode.go
│ │ │ ├── filter.go
│ │ │ ├── index.go
│ │ │ ├── legacy_java_profile.go
│ │ │ ├── legacy_profile.go
│ │ │ ├── merge.go
│ │ │ ├── profile.go
│ │ │ ├── proto.go
│ │ │ └── prune.go
│ │ ├── onsi/
│ │ │ ├── ginkgo/
│ │ │ │ └── v2/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── RELEASING.md
│ │ │ │ ├── config/
│ │ │ │ │ └── deprecated.go
│ │ │ │ ├── core_dsl.go
│ │ │ │ ├── decorator_dsl.go
│ │ │ │ ├── deprecated_dsl.go
│ │ │ │ ├── formatter/
│ │ │ │ │ ├── colorable_others.go
│ │ │ │ │ ├── colorable_windows.go
│ │ │ │ │ └── formatter.go
│ │ │ │ ├── ginkgo/
│ │ │ │ │ ├── automaxprocs/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── automaxprocs.go
│ │ │ │ │ │ ├── cgroup.go
│ │ │ │ │ │ ├── cgroups.go
│ │ │ │ │ │ ├── cgroups2.go
│ │ │ │ │ │ ├── cpu_quota_linux.go
│ │ │ │ │ │ ├── cpu_quota_unsupported.go
│ │ │ │ │ │ ├── errors.go
│ │ │ │ │ │ ├── mountpoint.go
│ │ │ │ │ │ ├── runtime.go
│ │ │ │ │ │ └── subsys.go
│ │ │ │ │ ├── automaxprocs.go
│ │ │ │ │ ├── build/
│ │ │ │ │ │ └── build_command.go
│ │ │ │ │ ├── command/
│ │ │ │ │ │ ├── abort.go
│ │ │ │ │ │ ├── command.go
│ │ │ │ │ │ └── program.go
│ │ │ │ │ ├── generators/
│ │ │ │ │ │ ├── boostrap_templates.go
│ │ │ │ │ │ ├── bootstrap_command.go
│ │ │ │ │ │ ├── generate_command.go
│ │ │ │ │ │ ├── generate_templates.go
│ │ │ │ │ │ └── generators_common.go
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ ├── compile.go
│ │ │ │ │ │ ├── gocovmerge.go
│ │ │ │ │ │ ├── profiles_and_reports.go
│ │ │ │ │ │ ├── run.go
│ │ │ │ │ │ ├── test_suite.go
│ │ │ │ │ │ ├── utils.go
│ │ │ │ │ │ └── verify_version.go
│ │ │ │ │ ├── labels/
│ │ │ │ │ │ └── labels_command.go
│ │ │ │ │ ├── main.go
│ │ │ │ │ ├── outline/
│ │ │ │ │ │ ├── ginkgo.go
│ │ │ │ │ │ ├── import.go
│ │ │ │ │ │ ├── outline.go
│ │ │ │ │ │ └── outline_command.go
│ │ │ │ │ ├── run/
│ │ │ │ │ │ └── run_command.go
│ │ │ │ │ ├── unfocus/
│ │ │ │ │ │ └── unfocus_command.go
│ │ │ │ │ └── watch/
│ │ │ │ │ ├── delta.go
│ │ │ │ │ ├── delta_tracker.go
│ │ │ │ │ ├── dependencies.go
│ │ │ │ │ ├── package_hash.go
│ │ │ │ │ ├── package_hashes.go
│ │ │ │ │ ├── suite.go
│ │ │ │ │ └── watch_command.go
│ │ │ │ ├── ginkgo_cli_dependencies.go
│ │ │ │ ├── ginkgo_t_dsl.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── around_node.go
│ │ │ │ │ ├── counter.go
│ │ │ │ │ ├── failer.go
│ │ │ │ │ ├── focus.go
│ │ │ │ │ ├── global/
│ │ │ │ │ │ └── init.go
│ │ │ │ │ ├── group.go
│ │ │ │ │ ├── interrupt_handler/
│ │ │ │ │ │ ├── interrupt_handler.go
│ │ │ │ │ │ ├── sigquit_swallower_unix.go
│ │ │ │ │ │ └── sigquit_swallower_windows.go
│ │ │ │ │ ├── node.go
│ │ │ │ │ ├── ordering.go
│ │ │ │ │ ├── output_interceptor.go
│ │ │ │ │ ├── output_interceptor_unix.go
│ │ │ │ │ ├── output_interceptor_wasm.go
│ │ │ │ │ ├── output_interceptor_win.go
│ │ │ │ │ ├── parallel_support/
│ │ │ │ │ │ ├── client_server.go
│ │ │ │ │ │ ├── http_client.go
│ │ │ │ │ │ ├── http_server.go
│ │ │ │ │ │ ├── rpc_client.go
│ │ │ │ │ │ ├── rpc_server.go
│ │ │ │ │ │ └── server_handler.go
│ │ │ │ │ ├── progress_report.go
│ │ │ │ │ ├── progress_report_bsd.go
│ │ │ │ │ ├── progress_report_unix.go
│ │ │ │ │ ├── progress_report_wasm.go
│ │ │ │ │ ├── progress_report_win.go
│ │ │ │ │ ├── progress_reporter_manager.go
│ │ │ │ │ ├── report_entry.go
│ │ │ │ │ ├── reporters/
│ │ │ │ │ │ ├── gojson.go
│ │ │ │ │ │ ├── gojson_event_writer.go
│ │ │ │ │ │ └── gojson_reporter.go
│ │ │ │ │ ├── spec.go
│ │ │ │ │ ├── spec_context.go
│ │ │ │ │ ├── suite.go
│ │ │ │ │ ├── testingtproxy/
│ │ │ │ │ │ └── testing_t_proxy.go
│ │ │ │ │ ├── tree.go
│ │ │ │ │ └── writer.go
│ │ │ │ ├── reporters/
│ │ │ │ │ ├── default_reporter.go
│ │ │ │ │ ├── deprecated_reporter.go
│ │ │ │ │ ├── gojson_report.go
│ │ │ │ │ ├── json_report.go
│ │ │ │ │ ├── junit_report.go
│ │ │ │ │ ├── reporter.go
│ │ │ │ │ └── teamcity_report.go
│ │ │ │ ├── reporting_dsl.go
│ │ │ │ ├── table_dsl.go
│ │ │ │ └── types/
│ │ │ │ ├── around_node.go
│ │ │ │ ├── code_location.go
│ │ │ │ ├── config.go
│ │ │ │ ├── deprecated_types.go
│ │ │ │ ├── deprecation_support.go
│ │ │ │ ├── enum_support.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── file_filter.go
│ │ │ │ ├── flags.go
│ │ │ │ ├── label_filter.go
│ │ │ │ ├── report_entry.go
│ │ │ │ ├── semver_filter.go
│ │ │ │ ├── types.go
│ │ │ │ └── version.go
│ │ │ └── gomega/
│ │ │ ├── .gitignore
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── RELEASING.md
│ │ │ ├── format/
│ │ │ │ └── format.go
│ │ │ ├── gomega_dsl.go
│ │ │ ├── internal/
│ │ │ │ ├── assertion.go
│ │ │ │ ├── async_assertion.go
│ │ │ │ ├── duration_bundle.go
│ │ │ │ ├── gomega.go
│ │ │ │ ├── gutil/
│ │ │ │ │ ├── post_ioutil.go
│ │ │ │ │ └── using_ioutil.go
│ │ │ │ ├── polling_signal_error.go
│ │ │ │ └── vetoptdesc.go
│ │ │ ├── matchers/
│ │ │ │ ├── and.go
│ │ │ │ ├── assignable_to_type_of_matcher.go
│ │ │ │ ├── attributes_slice.go
│ │ │ │ ├── be_a_directory.go
│ │ │ │ ├── be_a_regular_file.go
│ │ │ │ ├── be_an_existing_file.go
│ │ │ │ ├── be_closed_matcher.go
│ │ │ │ ├── be_comparable_to_matcher.go
│ │ │ │ ├── be_element_of_matcher.go
│ │ │ │ ├── be_empty_matcher.go
│ │ │ │ ├── be_equivalent_to_matcher.go
│ │ │ │ ├── be_false_matcher.go
│ │ │ │ ├── be_identical_to.go
│ │ │ │ ├── be_key_of_matcher.go
│ │ │ │ ├── be_nil_matcher.go
│ │ │ │ ├── be_numerically_matcher.go
│ │ │ │ ├── be_sent_matcher.go
│ │ │ │ ├── be_temporally_matcher.go
│ │ │ │ ├── be_true_matcher.go
│ │ │ │ ├── be_zero_matcher.go
│ │ │ │ ├── consist_of.go
│ │ │ │ ├── contain_element_matcher.go
│ │ │ │ ├── contain_elements_matcher.go
│ │ │ │ ├── contain_substring_matcher.go
│ │ │ │ ├── equal_matcher.go
│ │ │ │ ├── have_cap_matcher.go
│ │ │ │ ├── have_each_matcher.go
│ │ │ │ ├── have_exact_elements.go
│ │ │ │ ├── have_existing_field_matcher.go
│ │ │ │ ├── have_field.go
│ │ │ │ ├── have_http_body_matcher.go
│ │ │ │ ├── have_http_header_with_value_matcher.go
│ │ │ │ ├── have_http_status_matcher.go
│ │ │ │ ├── have_key_matcher.go
│ │ │ │ ├── have_key_with_value_matcher.go
│ │ │ │ ├── have_len_matcher.go
│ │ │ │ ├── have_occurred_matcher.go
│ │ │ │ ├── have_prefix_matcher.go
│ │ │ │ ├── have_suffix_matcher.go
│ │ │ │ ├── have_value.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── miter/
│ │ │ │ │ ├── type_support_iter.go
│ │ │ │ │ └── type_support_noiter.go
│ │ │ │ ├── match_error_matcher.go
│ │ │ │ ├── match_error_strictly_matcher.go
│ │ │ │ ├── match_json_matcher.go
│ │ │ │ ├── match_regexp_matcher.go
│ │ │ │ ├── match_xml_matcher.go
│ │ │ │ ├── match_yaml_matcher.go
│ │ │ │ ├── not.go
│ │ │ │ ├── or.go
│ │ │ │ ├── panic_matcher.go
│ │ │ │ ├── receive_matcher.go
│ │ │ │ ├── satisfy_matcher.go
│ │ │ │ ├── semi_structured_data_support.go
│ │ │ │ ├── succeed_matcher.go
│ │ │ │ ├── support/
│ │ │ │ │ └── goraph/
│ │ │ │ │ ├── bipartitegraph/
│ │ │ │ │ │ ├── bipartitegraph.go
│ │ │ │ │ │ └── bipartitegraphmatching.go
│ │ │ │ │ ├── edge/
│ │ │ │ │ │ └── edge.go
│ │ │ │ │ ├── node/
│ │ │ │ │ │ └── node.go
│ │ │ │ │ └── util/
│ │ │ │ │ └── util.go
│ │ │ │ ├── type_support.go
│ │ │ │ └── with_transform.go
│ │ │ ├── matchers.go
│ │ │ └── types/
│ │ │ └── types.go
│ │ └── pelletier/
│ │ └── go-toml/
│ │ ├── .dockerignore
│ │ ├── .gitignore
│ │ ├── CONTRIBUTING.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── PULL_REQUEST_TEMPLATE.md
│ │ ├── README.md
│ │ ├── SECURITY.md
│ │ ├── azure-pipelines.yml
│ │ ├── benchmark.sh
│ │ ├── doc.go
│ │ ├── example-crlf.toml
│ │ ├── example.toml
│ │ ├── fuzz.go
│ │ ├── fuzz.sh
│ │ ├── keysparsing.go
│ │ ├── lexer.go
│ │ ├── localtime.go
│ │ ├── marshal.go
│ │ ├── marshal_OrderPreserve_test.toml
│ │ ├── marshal_test.toml
│ │ ├── parser.go
│ │ ├── position.go
│ │ ├── token.go
│ │ ├── toml.go
│ │ ├── tomlpub.go
│ │ ├── tomltree_create.go
│ │ ├── tomltree_write.go
│ │ └── tomltree_writepub.go
│ ├── go.yaml.in/
│ │ └── yaml/
│ │ └── v3/
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── apic.go
│ │ ├── decode.go
│ │ ├── emitterc.go
│ │ ├── encode.go
│ │ ├── parserc.go
│ │ ├── readerc.go
│ │ ├── resolve.go
│ │ ├── scannerc.go
│ │ ├── sorter.go
│ │ ├── writerc.go
│ │ ├── yaml.go
│ │ ├── yamlh.go
│ │ └── yamlprivateh.go
│ ├── golang.org/
│ │ └── x/
│ │ ├── crypto/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── blowfish/
│ │ │ │ ├── block.go
│ │ │ │ ├── cipher.go
│ │ │ │ └── const.go
│ │ │ ├── chacha20/
│ │ │ │ ├── chacha_arm64.go
│ │ │ │ ├── chacha_arm64.s
│ │ │ │ ├── chacha_generic.go
│ │ │ │ ├── chacha_noasm.go
│ │ │ │ ├── chacha_ppc64x.go
│ │ │ │ ├── chacha_ppc64x.s
│ │ │ │ ├── chacha_s390x.go
│ │ │ │ ├── chacha_s390x.s
│ │ │ │ └── xor.go
│ │ │ ├── curve25519/
│ │ │ │ └── curve25519.go
│ │ │ ├── internal/
│ │ │ │ ├── alias/
│ │ │ │ │ ├── alias.go
│ │ │ │ │ └── alias_purego.go
│ │ │ │ └── poly1305/
│ │ │ │ ├── mac_noasm.go
│ │ │ │ ├── poly1305.go
│ │ │ │ ├── sum_amd64.s
│ │ │ │ ├── sum_asm.go
│ │ │ │ ├── sum_generic.go
│ │ │ │ ├── sum_loong64.s
│ │ │ │ ├── sum_ppc64x.s
│ │ │ │ ├── sum_s390x.go
│ │ │ │ └── sum_s390x.s
│ │ │ └── ssh/
│ │ │ ├── buffer.go
│ │ │ ├── certs.go
│ │ │ ├── channel.go
│ │ │ ├── cipher.go
│ │ │ ├── client.go
│ │ │ ├── client_auth.go
│ │ │ ├── common.go
│ │ │ ├── connection.go
│ │ │ ├── doc.go
│ │ │ ├── handshake.go
│ │ │ ├── internal/
│ │ │ │ └── bcrypt_pbkdf/
│ │ │ │ └── bcrypt_pbkdf.go
│ │ │ ├── kex.go
│ │ │ ├── keys.go
│ │ │ ├── mac.go
│ │ │ ├── messages.go
│ │ │ ├── mlkem.go
│ │ │ ├── mux.go
│ │ │ ├── server.go
│ │ │ ├── session.go
│ │ │ ├── ssh_gss.go
│ │ │ ├── streamlocal.go
│ │ │ ├── tcpip.go
│ │ │ └── transport.go
│ │ ├── mod/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ └── semver/
│ │ │ └── semver.go
│ │ ├── net/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ └── html/
│ │ │ ├── atom/
│ │ │ │ ├── atom.go
│ │ │ │ └── table.go
│ │ │ ├── charset/
│ │ │ │ └── charset.go
│ │ │ ├── const.go
│ │ │ ├── doc.go
│ │ │ ├── doctype.go
│ │ │ ├── entity.go
│ │ │ ├── escape.go
│ │ │ ├── foreign.go
│ │ │ ├── iter.go
│ │ │ ├── node.go
│ │ │ ├── parse.go
│ │ │ ├── render.go
│ │ │ └── token.go
│ │ ├── sync/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ └── errgroup/
│ │ │ └── errgroup.go
│ │ ├── sys/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── cpu/
│ │ │ │ ├── asm_aix_ppc64.s
│ │ │ │ ├── asm_darwin_x86_gc.s
│ │ │ │ ├── byteorder.go
│ │ │ │ ├── cpu.go
│ │ │ │ ├── cpu_aix.go
│ │ │ │ ├── cpu_arm.go
│ │ │ │ ├── cpu_arm64.go
│ │ │ │ ├── cpu_arm64.s
│ │ │ │ ├── cpu_darwin_x86.go
│ │ │ │ ├── cpu_gc_arm64.go
│ │ │ │ ├── cpu_gc_s390x.go
│ │ │ │ ├── cpu_gc_x86.go
│ │ │ │ ├── cpu_gc_x86.s
│ │ │ │ ├── cpu_gccgo_arm64.go
│ │ │ │ ├── cpu_gccgo_s390x.go
│ │ │ │ ├── cpu_gccgo_x86.c
│ │ │ │ ├── cpu_gccgo_x86.go
│ │ │ │ ├── cpu_linux.go
│ │ │ │ ├── cpu_linux_arm.go
│ │ │ │ ├── cpu_linux_arm64.go
│ │ │ │ ├── cpu_linux_loong64.go
│ │ │ │ ├── cpu_linux_mips64x.go
│ │ │ │ ├── cpu_linux_noinit.go
│ │ │ │ ├── cpu_linux_ppc64x.go
│ │ │ │ ├── cpu_linux_riscv64.go
│ │ │ │ ├── cpu_linux_s390x.go
│ │ │ │ ├── cpu_loong64.go
│ │ │ │ ├── cpu_loong64.s
│ │ │ │ ├── cpu_mips64x.go
│ │ │ │ ├── cpu_mipsx.go
│ │ │ │ ├── cpu_netbsd_arm64.go
│ │ │ │ ├── cpu_openbsd_arm64.go
│ │ │ │ ├── cpu_openbsd_arm64.s
│ │ │ │ ├── cpu_other_arm.go
│ │ │ │ ├── cpu_other_arm64.go
│ │ │ │ ├── cpu_other_mips64x.go
│ │ │ │ ├── cpu_other_ppc64x.go
│ │ │ │ ├── cpu_other_riscv64.go
│ │ │ │ ├── cpu_other_x86.go
│ │ │ │ ├── cpu_ppc64x.go
│ │ │ │ ├── cpu_riscv64.go
│ │ │ │ ├── cpu_s390x.go
│ │ │ │ ├── cpu_s390x.s
│ │ │ │ ├── cpu_wasm.go
│ │ │ │ ├── cpu_windows_arm64.go
│ │ │ │ ├── cpu_x86.go
│ │ │ │ ├── cpu_zos.go
│ │ │ │ ├── cpu_zos_s390x.go
│ │ │ │ ├── endian_big.go
│ │ │ │ ├── endian_little.go
│ │ │ │ ├── hwcap_linux.go
│ │ │ │ ├── parse.go
│ │ │ │ ├── proc_cpuinfo_linux.go
│ │ │ │ ├── runtime_auxv.go
│ │ │ │ ├── runtime_auxv_go121.go
│ │ │ │ ├── syscall_aix_gccgo.go
│ │ │ │ ├── syscall_aix_ppc64_gc.go
│ │ │ │ └── syscall_darwin_x86_gc.go
│ │ │ ├── unix/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── README.md
│ │ │ │ ├── affinity_linux.go
│ │ │ │ ├── aliases.go
│ │ │ │ ├── asm_aix_ppc64.s
│ │ │ │ ├── asm_bsd_386.s
│ │ │ │ ├── asm_bsd_amd64.s
│ │ │ │ ├── asm_bsd_arm.s
│ │ │ │ ├── asm_bsd_arm64.s
│ │ │ │ ├── asm_bsd_ppc64.s
│ │ │ │ ├── asm_bsd_riscv64.s
│ │ │ │ ├── asm_linux_386.s
│ │ │ │ ├── asm_linux_amd64.s
│ │ │ │ ├── asm_linux_arm.s
│ │ │ │ ├── asm_linux_arm64.s
│ │ │ │ ├── asm_linux_loong64.s
│ │ │ │ ├── asm_linux_mips64x.s
│ │ │ │ ├── asm_linux_mipsx.s
│ │ │ │ ├── asm_linux_ppc64x.s
│ │ │ │ ├── asm_linux_riscv64.s
│ │ │ │ ├── asm_linux_s390x.s
│ │ │ │ ├── asm_openbsd_mips64.s
│ │ │ │ ├── asm_solaris_amd64.s
│ │ │ │ ├── asm_zos_s390x.s
│ │ │ │ ├── auxv.go
│ │ │ │ ├── auxv_unsupported.go
│ │ │ │ ├── bluetooth_linux.go
│ │ │ │ ├── bpxsvc_zos.go
│ │ │ │ ├── bpxsvc_zos.s
│ │ │ │ ├── cap_freebsd.go
│ │ │ │ ├── constants.go
│ │ │ │ ├── dev_aix_ppc.go
│ │ │ │ ├── dev_aix_ppc64.go
│ │ │ │ ├── dev_darwin.go
│ │ │ │ ├── dev_dragonfly.go
│ │ │ │ ├── dev_freebsd.go
│ │ │ │ ├── dev_linux.go
│ │ │ │ ├── dev_netbsd.go
│ │ │ │ ├── dev_openbsd.go
│ │ │ │ ├── dev_zos.go
│ │ │ │ ├── dirent.go
│ │ │ │ ├── endian_big.go
│ │ │ │ ├── endian_little.go
│ │ │ │ ├── env_unix.go
│ │ │ │ ├── fcntl.go
│ │ │ │ ├── fcntl_darwin.go
│ │ │ │ ├── fcntl_linux_32bit.go
│ │ │ │ ├── fdset.go
│ │ │ │ ├── gccgo.go
│ │ │ │ ├── gccgo_c.c
│ │ │ │ ├── gccgo_linux_amd64.go
│ │ │ │ ├── ifreq_linux.go
│ │ │ │ ├── ioctl_linux.go
│ │ │ │ ├── ioctl_signed.go
│ │ │ │ ├── ioctl_unsigned.go
│ │ │ │ ├── ioctl_zos.go
│ │ │ │ ├── mkall.sh
│ │ │ │ ├── mkerrors.sh
│ │ │ │ ├── mmap_nomremap.go
│ │ │ │ ├── mremap.go
│ │ │ │ ├── pagesize_unix.go
│ │ │ │ ├── pledge_openbsd.go
│ │ │ │ ├── ptrace_darwin.go
│ │ │ │ ├── ptrace_ios.go
│ │ │ │ ├── race.go
│ │ │ │ ├── race0.go
│ │ │ │ ├── readdirent_getdents.go
│ │ │ │ ├── readdirent_getdirentries.go
│ │ │ │ ├── sockcmsg_dragonfly.go
│ │ │ │ ├── sockcmsg_linux.go
│ │ │ │ ├── sockcmsg_unix.go
│ │ │ │ ├── sockcmsg_unix_other.go
│ │ │ │ ├── sockcmsg_zos.go
│ │ │ │ ├── symaddr_zos_s390x.s
│ │ │ │ ├── syscall.go
│ │ │ │ ├── syscall_aix.go
│ │ │ │ ├── syscall_aix_ppc.go
│ │ │ │ ├── syscall_aix_ppc64.go
│ │ │ │ ├── syscall_bsd.go
│ │ │ │ ├── syscall_darwin.go
│ │ │ │ ├── syscall_darwin_amd64.go
│ │ │ │ ├── syscall_darwin_arm64.go
│ │ │ │ ├── syscall_darwin_libSystem.go
│ │ │ │ ├── syscall_dragonfly.go
│ │ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ │ ├── syscall_freebsd.go
│ │ │ │ ├── syscall_freebsd_386.go
│ │ │ │ ├── syscall_freebsd_amd64.go
│ │ │ │ ├── syscall_freebsd_arm.go
│ │ │ │ ├── syscall_freebsd_arm64.go
│ │ │ │ ├── syscall_freebsd_riscv64.go
│ │ │ │ ├── syscall_hurd.go
│ │ │ │ ├── syscall_hurd_386.go
│ │ │ │ ├── syscall_illumos.go
│ │ │ │ ├── syscall_linux.go
│ │ │ │ ├── syscall_linux_386.go
│ │ │ │ ├── syscall_linux_alarm.go
│ │ │ │ ├── syscall_linux_amd64.go
│ │ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ │ ├── syscall_linux_arm.go
│ │ │ │ ├── syscall_linux_arm64.go
│ │ │ │ ├── syscall_linux_gc.go
│ │ │ │ ├── syscall_linux_gc_386.go
│ │ │ │ ├── syscall_linux_gc_arm.go
│ │ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ │ ├── syscall_linux_loong64.go
│ │ │ │ ├── syscall_linux_mips64x.go
│ │ │ │ ├── syscall_linux_mipsx.go
│ │ │ │ ├── syscall_linux_ppc.go
│ │ │ │ ├── syscall_linux_ppc64x.go
│ │ │ │ ├── syscall_linux_riscv64.go
│ │ │ │ ├── syscall_linux_s390x.go
│ │ │ │ ├── syscall_linux_sparc64.go
│ │ │ │ ├── syscall_netbsd.go
│ │ │ │ ├── syscall_netbsd_386.go
│ │ │ │ ├── syscall_netbsd_amd64.go
│ │ │ │ ├── syscall_netbsd_arm.go
│ │ │ │ ├── syscall_netbsd_arm64.go
│ │ │ │ ├── syscall_openbsd.go
│ │ │ │ ├── syscall_openbsd_386.go
│ │ │ │ ├── syscall_openbsd_amd64.go
│ │ │ │ ├── syscall_openbsd_arm.go
│ │ │ │ ├── syscall_openbsd_arm64.go
│ │ │ │ ├── syscall_openbsd_libc.go
│ │ │ │ ├── syscall_openbsd_mips64.go
│ │ │ │ ├── syscall_openbsd_ppc64.go
│ │ │ │ ├── syscall_openbsd_riscv64.go
│ │ │ │ ├── syscall_solaris.go
│ │ │ │ ├── syscall_solaris_amd64.go
│ │ │ │ ├── syscall_unix.go
│ │ │ │ ├── syscall_unix_gc.go
│ │ │ │ ├── syscall_unix_gc_ppc64x.go
│ │ │ │ ├── syscall_zos_s390x.go
│ │ │ │ ├── sysvshm_linux.go
│ │ │ │ ├── sysvshm_unix.go
│ │ │ │ ├── sysvshm_unix_other.go
│ │ │ │ ├── timestruct.go
│ │ │ │ ├── unveil_openbsd.go
│ │ │ │ ├── vgetrandom_linux.go
│ │ │ │ ├── vgetrandom_unsupported.go
│ │ │ │ ├── xattr_bsd.go
│ │ │ │ ├── zerrors_aix_ppc.go
│ │ │ │ ├── zerrors_aix_ppc64.go
│ │ │ │ ├── zerrors_darwin_amd64.go
│ │ │ │ ├── zerrors_darwin_arm64.go
│ │ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ │ ├── zerrors_freebsd_386.go
│ │ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ │ ├── zerrors_freebsd_arm.go
│ │ │ │ ├── zerrors_freebsd_arm64.go
│ │ │ │ ├── zerrors_freebsd_riscv64.go
│ │ │ │ ├── zerrors_linux.go
│ │ │ │ ├── zerrors_linux_386.go
│ │ │ │ ├── zerrors_linux_amd64.go
│ │ │ │ ├── zerrors_linux_arm.go
│ │ │ │ ├── zerrors_linux_arm64.go
│ │ │ │ ├── zerrors_linux_loong64.go
│ │ │ │ ├── zerrors_linux_mips.go
│ │ │ │ ├── zerrors_linux_mips64.go
│ │ │ │ ├── zerrors_linux_mips64le.go
│ │ │ │ ├── zerrors_linux_mipsle.go
│ │ │ │ ├── zerrors_linux_ppc.go
│ │ │ │ ├── zerrors_linux_ppc64.go
│ │ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ │ ├── zerrors_linux_riscv64.go
│ │ │ │ ├── zerrors_linux_s390x.go
│ │ │ │ ├── zerrors_linux_sparc64.go
│ │ │ │ ├── zerrors_netbsd_386.go
│ │ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ │ ├── zerrors_netbsd_arm.go
│ │ │ │ ├── zerrors_netbsd_arm64.go
│ │ │ │ ├── zerrors_openbsd_386.go
│ │ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ │ ├── zerrors_openbsd_arm.go
│ │ │ │ ├── zerrors_openbsd_arm64.go
│ │ │ │ ├── zerrors_openbsd_mips64.go
│ │ │ │ ├── zerrors_openbsd_ppc64.go
│ │ │ │ ├── zerrors_openbsd_riscv64.go
│ │ │ │ ├── zerrors_solaris_amd64.go
│ │ │ │ ├── zerrors_zos_s390x.go
│ │ │ │ ├── zptrace_armnn_linux.go
│ │ │ │ ├── zptrace_linux_arm64.go
│ │ │ │ ├── zptrace_mipsnn_linux.go
│ │ │ │ ├── zptrace_mipsnnle_linux.go
│ │ │ │ ├── zptrace_x86_linux.go
│ │ │ │ ├── zsymaddr_zos_s390x.s
│ │ │ │ ├── zsyscall_aix_ppc.go
│ │ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ │ ├── zsyscall_aix_ppc64_gc.go
│ │ │ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ │ ├── zsyscall_darwin_amd64.s
│ │ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ │ ├── zsyscall_darwin_arm64.s
│ │ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ │ ├── zsyscall_freebsd_386.go
│ │ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ │ ├── zsyscall_freebsd_arm64.go
│ │ │ │ ├── zsyscall_freebsd_riscv64.go
│ │ │ │ ├── zsyscall_illumos_amd64.go
│ │ │ │ ├── zsyscall_linux.go
│ │ │ │ ├── zsyscall_linux_386.go
│ │ │ │ ├── zsyscall_linux_amd64.go
│ │ │ │ ├── zsyscall_linux_arm.go
│ │ │ │ ├── zsyscall_linux_arm64.go
│ │ │ │ ├── zsyscall_linux_loong64.go
│ │ │ │ ├── zsyscall_linux_mips.go
│ │ │ │ ├── zsyscall_linux_mips64.go
│ │ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ │ ├── zsyscall_linux_ppc.go
│ │ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ │ ├── zsyscall_linux_s390x.go
│ │ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ │ ├── zsyscall_netbsd_386.go
│ │ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ │ ├── zsyscall_netbsd_arm64.go
│ │ │ │ ├── zsyscall_openbsd_386.go
│ │ │ │ ├── zsyscall_openbsd_386.s
│ │ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ │ ├── zsyscall_openbsd_amd64.s
│ │ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ │ ├── zsyscall_openbsd_arm.s
│ │ │ │ ├── zsyscall_openbsd_arm64.go
│ │ │ │ ├── zsyscall_openbsd_arm64.s
│ │ │ │ ├── zsyscall_openbsd_mips64.go
│ │ │ │ ├── zsyscall_openbsd_mips64.s
│ │ │ │ ├── zsyscall_openbsd_ppc64.go
│ │ │ │ ├── zsyscall_openbsd_ppc64.s
│ │ │ │ ├── zsyscall_openbsd_riscv64.go
│ │ │ │ ├── zsyscall_openbsd_riscv64.s
│ │ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ │ ├── zsyscall_zos_s390x.go
│ │ │ │ ├── zsysctl_openbsd_386.go
│ │ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ │ ├── zsysctl_openbsd_arm64.go
│ │ │ │ ├── zsysctl_openbsd_mips64.go
│ │ │ │ ├── zsysctl_openbsd_ppc64.go
│ │ │ │ ├── zsysctl_openbsd_riscv64.go
│ │ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ │ ├── zsysnum_freebsd_386.go
│ │ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ │ ├── zsysnum_freebsd_arm64.go
│ │ │ │ ├── zsysnum_freebsd_riscv64.go
│ │ │ │ ├── zsysnum_linux_386.go
│ │ │ │ ├── zsysnum_linux_amd64.go
│ │ │ │ ├── zsysnum_linux_arm.go
│ │ │ │ ├── zsysnum_linux_arm64.go
│ │ │ │ ├── zsysnum_linux_loong64.go
│ │ │ │ ├── zsysnum_linux_mips.go
│ │ │ │ ├── zsysnum_linux_mips64.go
│ │ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ │ ├── zsysnum_linux_ppc.go
│ │ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ │ ├── zsysnum_linux_s390x.go
│ │ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ │ ├── zsysnum_netbsd_386.go
│ │ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ │ ├── zsysnum_netbsd_arm64.go
│ │ │ │ ├── zsysnum_openbsd_386.go
│ │ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ │ ├── zsysnum_openbsd_arm64.go
│ │ │ │ ├── zsysnum_openbsd_mips64.go
│ │ │ │ ├── zsysnum_openbsd_ppc64.go
│ │ │ │ ├── zsysnum_openbsd_riscv64.go
│ │ │ │ ├── zsysnum_zos_s390x.go
│ │ │ │ ├── ztypes_aix_ppc.go
│ │ │ │ ├── ztypes_aix_ppc64.go
│ │ │ │ ├── ztypes_darwin_amd64.go
│ │ │ │ ├── ztypes_darwin_arm64.go
│ │ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ │ ├── ztypes_freebsd_386.go
│ │ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ │ ├── ztypes_freebsd_arm.go
│ │ │ │ ├── ztypes_freebsd_arm64.go
│ │ │ │ ├── ztypes_freebsd_riscv64.go
│ │ │ │ ├── ztypes_linux.go
│ │ │ │ ├── ztypes_linux_386.go
│ │ │ │ ├── ztypes_linux_amd64.go
│ │ │ │ ├── ztypes_linux_arm.go
│ │ │ │ ├── ztypes_linux_arm64.go
│ │ │ │ ├── ztypes_linux_loong64.go
│ │ │ │ ├── ztypes_linux_mips.go
│ │ │ │ ├── ztypes_linux_mips64.go
│ │ │ │ ├── ztypes_linux_mips64le.go
│ │ │ │ ├── ztypes_linux_mipsle.go
│ │ │ │ ├── ztypes_linux_ppc.go
│ │ │ │ ├── ztypes_linux_ppc64.go
│ │ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ │ ├── ztypes_linux_riscv64.go
│ │ │ │ ├── ztypes_linux_s390x.go
│ │ │ │ ├── ztypes_linux_sparc64.go
│ │ │ │ ├── ztypes_netbsd_386.go
│ │ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ │ ├── ztypes_netbsd_arm.go
│ │ │ │ ├── ztypes_netbsd_arm64.go
│ │ │ │ ├── ztypes_openbsd_386.go
│ │ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ │ ├── ztypes_openbsd_arm.go
│ │ │ │ ├── ztypes_openbsd_arm64.go
│ │ │ │ ├── ztypes_openbsd_mips64.go
│ │ │ │ ├── ztypes_openbsd_ppc64.go
│ │ │ │ ├── ztypes_openbsd_riscv64.go
│ │ │ │ ├── ztypes_solaris_amd64.go
│ │ │ │ └── ztypes_zos_s390x.go
│ │ │ └── windows/
│ │ │ ├── aliases.go
│ │ │ ├── dll_windows.go
│ │ │ ├── env_windows.go
│ │ │ ├── eventlog.go
│ │ │ ├── exec_windows.go
│ │ │ ├── memory_windows.go
│ │ │ ├── mkerrors.bash
│ │ │ ├── mkknownfolderids.bash
│ │ │ ├── mksyscall.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── security_windows.go
│ │ │ ├── service.go
│ │ │ ├── setupapi_windows.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_windows.go
│ │ │ ├── types_windows.go
│ │ │ ├── types_windows_386.go
│ │ │ ├── types_windows_amd64.go
│ │ │ ├── types_windows_arm.go
│ │ │ ├── types_windows_arm64.go
│ │ │ ├── zerrors_windows.go
│ │ │ ├── zknownfolderids_windows.go
│ │ │ └── zsyscall_windows.go
│ │ ├── text/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── encoding/
│ │ │ │ ├── charmap/
│ │ │ │ │ ├── charmap.go
│ │ │ │ │ └── tables.go
│ │ │ │ ├── encoding.go
│ │ │ │ ├── htmlindex/
│ │ │ │ │ ├── htmlindex.go
│ │ │ │ │ ├── map.go
│ │ │ │ │ └── tables.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── identifier/
│ │ │ │ │ │ ├── identifier.go
│ │ │ │ │ │ └── mib.go
│ │ │ │ │ └── internal.go
│ │ │ │ ├── japanese/
│ │ │ │ │ ├── all.go
│ │ │ │ │ ├── eucjp.go
│ │ │ │ │ ├── iso2022jp.go
│ │ │ │ │ ├── shiftjis.go
│ │ │ │ │ └── tables.go
│ │ │ │ ├── korean/
│ │ │ │ │ ├── euckr.go
│ │ │ │ │ └── tables.go
│ │ │ │ ├── simplifiedchinese/
│ │ │ │ │ ├── all.go
│ │ │ │ │ ├── gbk.go
│ │ │ │ │ ├── hzgb2312.go
│ │ │ │ │ └── tables.go
│ │ │ │ ├── traditionalchinese/
│ │ │ │ │ ├── big5.go
│ │ │ │ │ └── tables.go
│ │ │ │ └── unicode/
│ │ │ │ ├── override.go
│ │ │ │ └── unicode.go
│ │ │ ├── internal/
│ │ │ │ ├── language/
│ │ │ │ │ ├── common.go
│ │ │ │ │ ├── compact/
│ │ │ │ │ │ ├── compact.go
│ │ │ │ │ │ ├── language.go
│ │ │ │ │ │ ├── parents.go
│ │ │ │ │ │ ├── tables.go
│ │ │ │ │ │ └── tags.go
│ │ │ │ │ ├── compact.go
│ │ │ │ │ ├── compose.go
│ │ │ │ │ ├── coverage.go
│ │ │ │ │ ├── language.go
│ │ │ │ │ ├── lookup.go
│ │ │ │ │ ├── match.go
│ │ │ │ │ ├── parse.go
│ │ │ │ │ ├── tables.go
│ │ │ │ │ └── tags.go
│ │ │ │ ├── tag/
│ │ │ │ │ └── tag.go
│ │ │ │ └── utf8internal/
│ │ │ │ └── utf8internal.go
│ │ │ ├── language/
│ │ │ │ ├── coverage.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── language.go
│ │ │ │ ├── match.go
│ │ │ │ ├── parse.go
│ │ │ │ ├── tables.go
│ │ │ │ └── tags.go
│ │ │ ├── runes/
│ │ │ │ ├── cond.go
│ │ │ │ └── runes.go
│ │ │ └── transform/
│ │ │ └── transform.go
│ │ └── tools/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── cover/
│ │ │ └── profile.go
│ │ ├── go/
│ │ │ ├── ast/
│ │ │ │ ├── edge/
│ │ │ │ │ └── edge.go
│ │ │ │ └── inspector/
│ │ │ │ ├── cursor.go
│ │ │ │ ├── inspector.go
│ │ │ │ ├── iter.go
│ │ │ │ ├── typeof.go
│ │ │ │ └── walk.go
│ │ │ ├── gcexportdata/
│ │ │ │ ├── gcexportdata.go
│ │ │ │ └── importer.go
│ │ │ ├── packages/
│ │ │ │ ├── doc.go
│ │ │ │ ├── external.go
│ │ │ │ ├── golist.go
│ │ │ │ ├── golist_overlay.go
│ │ │ │ ├── loadmode_string.go
│ │ │ │ ├── packages.go
│ │ │ │ └── visit.go
│ │ │ └── types/
│ │ │ ├── objectpath/
│ │ │ │ └── objectpath.go
│ │ │ └── typeutil/
│ │ │ ├── callee.go
│ │ │ ├── imports.go
│ │ │ ├── map.go
│ │ │ ├── methodsetcache.go
│ │ │ └── ui.go
│ │ └── internal/
│ │ ├── aliases/
│ │ │ ├── aliases.go
│ │ │ └── aliases_go122.go
│ │ ├── event/
│ │ │ ├── core/
│ │ │ │ ├── event.go
│ │ │ │ ├── export.go
│ │ │ │ └── fast.go
│ │ │ ├── doc.go
│ │ │ ├── event.go
│ │ │ ├── keys/
│ │ │ │ ├── keys.go
│ │ │ │ ├── standard.go
│ │ │ │ └── util.go
│ │ │ └── label/
│ │ │ └── label.go
│ │ ├── gcimporter/
│ │ │ ├── bimport.go
│ │ │ ├── exportdata.go
│ │ │ ├── gcimporter.go
│ │ │ ├── iexport.go
│ │ │ ├── iimport.go
│ │ │ ├── predeclared.go
│ │ │ ├── support.go
│ │ │ └── ureader_yes.go
│ │ ├── gocommand/
│ │ │ ├── invoke.go
│ │ │ ├── invoke_notunix.go
│ │ │ ├── invoke_unix.go
│ │ │ ├── vendor.go
│ │ │ └── version.go
│ │ ├── packagesinternal/
│ │ │ └── packages.go
│ │ ├── pkgbits/
│ │ │ ├── codes.go
│ │ │ ├── decoder.go
│ │ │ ├── doc.go
│ │ │ ├── encoder.go
│ │ │ ├── flags.go
│ │ │ ├── reloc.go
│ │ │ ├── support.go
│ │ │ ├── sync.go
│ │ │ ├── syncmarker_string.go
│ │ │ └── version.go
│ │ ├── stdlib/
│ │ │ ├── deps.go
│ │ │ ├── import.go
│ │ │ ├── manifest.go
│ │ │ └── stdlib.go
│ │ ├── typeparams/
│ │ │ ├── common.go
│ │ │ ├── coretype.go
│ │ │ ├── free.go
│ │ │ ├── normalize.go
│ │ │ ├── termlist.go
│ │ │ └── typeterm.go
│ │ ├── typesinternal/
│ │ │ ├── classify_call.go
│ │ │ ├── element.go
│ │ │ ├── errorcode.go
│ │ │ ├── errorcode_string.go
│ │ │ ├── fx.go
│ │ │ ├── isnamed.go
│ │ │ ├── qualifier.go
│ │ │ ├── recv.go
│ │ │ ├── toonew.go
│ │ │ ├── types.go
│ │ │ ├── varkind.go
│ │ │ ├── varkind_go124.go
│ │ │ └── zerovalue.go
│ │ └── versions/
│ │ ├── features.go
│ │ ├── gover.go
│ │ ├── types.go
│ │ └── versions.go
│ └── modules.txt
├── vendor/
│ ├── cyphar.com/
│ │ └── go-pathrs/
│ │ ├── .golangci.yml
│ │ ├── COPYING
│ │ ├── doc.go
│ │ ├── handle_linux.go
│ │ ├── internal/
│ │ │ ├── fdutils/
│ │ │ │ └── fd_linux.go
│ │ │ └── libpathrs/
│ │ │ ├── error_unix.go
│ │ │ └── libpathrs_linux.go
│ │ ├── procfs/
│ │ │ └── procfs_linux.go
│ │ ├── root_linux.go
│ │ └── utils_linux.go
│ ├── github.com/
│ │ ├── NVIDIA/
│ │ │ ├── go-nvlib/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── NOTICE
│ │ │ │ └── pkg/
│ │ │ │ ├── nvlib/
│ │ │ │ │ ├── device/
│ │ │ │ │ │ ├── api.go
│ │ │ │ │ │ ├── device.go
│ │ │ │ │ │ ├── identifier.go
│ │ │ │ │ │ ├── mig_device.go
│ │ │ │ │ │ └── mig_profile.go
│ │ │ │ │ └── info/
│ │ │ │ │ ├── api.go
│ │ │ │ │ ├── builder.go
│ │ │ │ │ ├── logger.go
│ │ │ │ │ ├── options.go
│ │ │ │ │ ├── property-extractor.go
│ │ │ │ │ ├── property-extractor_mock.go
│ │ │ │ │ ├── resolver.go
│ │ │ │ │ └── root.go
│ │ │ │ ├── nvpci/
│ │ │ │ │ ├── bytes/
│ │ │ │ │ │ ├── bytes.go
│ │ │ │ │ │ ├── native.go
│ │ │ │ │ │ └── swapbo.go
│ │ │ │ │ ├── config.go
│ │ │ │ │ ├── logger.go
│ │ │ │ │ ├── mlxpci.go
│ │ │ │ │ ├── mmio/
│ │ │ │ │ │ ├── mmio.go
│ │ │ │ │ │ └── mock.go
│ │ │ │ │ ├── mock.go
│ │ │ │ │ ├── nvpci.go
│ │ │ │ │ ├── nvpci_mock.go
│ │ │ │ │ └── resources.go
│ │ │ │ └── pciids/
│ │ │ │ ├── default_pci.ids
│ │ │ │ └── pciids.go
│ │ │ └── go-nvml/
│ │ │ ├── LICENSE
│ │ │ └── pkg/
│ │ │ ├── dl/
│ │ │ │ ├── dl.go
│ │ │ │ ├── dl_linux.go
│ │ │ │ └── dl_other.go
│ │ │ └── nvml/
│ │ │ ├── api.go
│ │ │ ├── cgo_helpers.h
│ │ │ ├── cgo_helpers_static.go
│ │ │ ├── const.go
│ │ │ ├── const_static.go
│ │ │ ├── device.go
│ │ │ ├── doc.go
│ │ │ ├── dynamicLibrary_mock.go
│ │ │ ├── event_set.go
│ │ │ ├── gpm.go
│ │ │ ├── init.go
│ │ │ ├── lib.go
│ │ │ ├── mock/
│ │ │ │ ├── computeinstance.go
│ │ │ │ ├── device.go
│ │ │ │ ├── dgxa100/
│ │ │ │ │ ├── dgxa100.go
│ │ │ │ │ └── mig-profile.go
│ │ │ │ ├── eventset.go
│ │ │ │ ├── extendedinterface.go
│ │ │ │ ├── gpmsample.go
│ │ │ │ ├── gpuinstance.go
│ │ │ │ ├── interface.go
│ │ │ │ ├── unit.go
│ │ │ │ ├── vgpuinstance.go
│ │ │ │ └── vgputypeid.go
│ │ │ ├── nvml.go
│ │ │ ├── nvml.h
│ │ │ ├── refcount.go
│ │ │ ├── return.go
│ │ │ ├── system.go
│ │ │ ├── types_gen.go
│ │ │ ├── unit.go
│ │ │ ├── vgpu.go
│ │ │ └── zz_generated.api.go
│ │ ├── containerd/
│ │ │ ├── log/
│ │ │ │ ├── .golangci.yml
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ └── context.go
│ │ │ ├── nri/
│ │ │ │ ├── LICENSE
│ │ │ │ └── pkg/
│ │ │ │ ├── api/
│ │ │ │ │ ├── adjustment.go
│ │ │ │ │ ├── api.pb.go
│ │ │ │ │ ├── api.proto
│ │ │ │ │ ├── api_host.pb.go
│ │ │ │ │ ├── api_options.pb.go
│ │ │ │ │ ├── api_plugin.pb.go
│ │ │ │ │ ├── api_service.pb.go
│ │ │ │ │ ├── api_ttrpc.pb.go
│ │ │ │ │ ├── api_vtproto.pb.go
│ │ │ │ │ ├── container.go
│ │ │ │ │ ├── device.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── env.go
│ │ │ │ │ ├── event.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── hooks.go
│ │ │ │ │ ├── ioprio.go
│ │ │ │ │ ├── linux-scheduler.go
│ │ │ │ │ ├── mount.go
│ │ │ │ │ ├── namespace.go
│ │ │ │ │ ├── net-device.go
│ │ │ │ │ ├── optional.go
│ │ │ │ │ ├── owners.go
│ │ │ │ │ ├── plugin.go
│ │ │ │ │ ├── resources.go
│ │ │ │ │ ├── seccomp.go
│ │ │ │ │ ├── strip.go
│ │ │ │ │ ├── timeouts.go
│ │ │ │ │ ├── update.go
│ │ │ │ │ └── validate.go
│ │ │ │ ├── log/
│ │ │ │ │ └── log.go
│ │ │ │ ├── net/
│ │ │ │ │ ├── conn.go
│ │ │ │ │ ├── multiplex/
│ │ │ │ │ │ ├── mux.go
│ │ │ │ │ │ └── ttrpc.go
│ │ │ │ │ ├── socketpair.go
│ │ │ │ │ ├── socketpair_cloexec_linux.go
│ │ │ │ │ ├── socketpair_cloexec_unix.go
│ │ │ │ │ └── socketpair_cloexec_windows.go
│ │ │ │ ├── plugin/
│ │ │ │ │ └── annotations.go
│ │ │ │ └── stub/
│ │ │ │ └── stub.go
│ │ │ └── ttrpc/
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── PROTOCOL.md
│ │ │ ├── Protobuild.toml
│ │ │ ├── README.md
│ │ │ ├── channel.go
│ │ │ ├── client.go
│ │ │ ├── codec.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── handshake.go
│ │ │ ├── interceptor.go
│ │ │ ├── metadata.go
│ │ │ ├── request.pb.go
│ │ │ ├── request.proto
│ │ │ ├── server.go
│ │ │ ├── services.go
│ │ │ ├── stream.go
│ │ │ ├── stream_server.go
│ │ │ ├── test.proto
│ │ │ └── unixcreds_linux.go
│ │ ├── cyphar/
│ │ │ └── filepath-securejoin/
│ │ │ ├── .golangci.yml
│ │ │ ├── CHANGELOG.md
│ │ │ ├── COPYING.md
│ │ │ ├── LICENSE.BSD
│ │ │ ├── LICENSE.MPL-2.0
│ │ │ ├── README.md
│ │ │ ├── VERSION
│ │ │ ├── codecov.yml
│ │ │ ├── doc.go
│ │ │ ├── internal/
│ │ │ │ └── consts/
│ │ │ │ └── consts.go
│ │ │ ├── join.go
│ │ │ ├── pathrs-lite/
│ │ │ │ ├── README.md
│ │ │ │ ├── doc.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── assert/
│ │ │ │ │ │ └── assert.go
│ │ │ │ │ ├── errors_linux.go
│ │ │ │ │ ├── fd/
│ │ │ │ │ │ ├── at_linux.go
│ │ │ │ │ │ ├── fd.go
│ │ │ │ │ │ ├── fd_linux.go
│ │ │ │ │ │ ├── mount_linux.go
│ │ │ │ │ │ └── openat2_linux.go
│ │ │ │ │ ├── gocompat/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── gocompat_atomic_go119.go
│ │ │ │ │ │ ├── gocompat_atomic_unsupported.go
│ │ │ │ │ │ ├── gocompat_errors_go120.go
│ │ │ │ │ │ ├── gocompat_errors_unsupported.go
│ │ │ │ │ │ ├── gocompat_generics_go121.go
│ │ │ │ │ │ └── gocompat_generics_unsupported.go
│ │ │ │ │ ├── gopathrs/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── lookup_linux.go
│ │ │ │ │ │ ├── mkdir_linux.go
│ │ │ │ │ │ ├── open_linux.go
│ │ │ │ │ │ └── openat2_linux.go
│ │ │ │ │ ├── kernelversion/
│ │ │ │ │ │ └── kernel_linux.go
│ │ │ │ │ ├── linux/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── mount_linux.go
│ │ │ │ │ │ └── openat2_linux.go
│ │ │ │ │ └── procfs/
│ │ │ │ │ ├── procfs_linux.go
│ │ │ │ │ └── procfs_lookup_linux.go
│ │ │ │ ├── mkdir.go
│ │ │ │ ├── mkdir_libpathrs.go
│ │ │ │ ├── mkdir_purego.go
│ │ │ │ ├── open.go
│ │ │ │ ├── open_libpathrs.go
│ │ │ │ ├── open_purego.go
│ │ │ │ └── procfs/
│ │ │ │ ├── procfs_libpathrs.go
│ │ │ │ └── procfs_purego.go
│ │ │ └── vfs.go
│ │ ├── davecgh/
│ │ │ └── go-spew/
│ │ │ ├── LICENSE
│ │ │ └── spew/
│ │ │ ├── bypass.go
│ │ │ ├── bypasssafe.go
│ │ │ ├── common.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── dump.go
│ │ │ ├── format.go
│ │ │ └── spew.go
│ │ ├── fsnotify/
│ │ │ └── fsnotify/
│ │ │ ├── .cirrus.yml
│ │ │ ├── .editorconfig
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .mailmap
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── backend_fen.go
│ │ │ ├── backend_inotify.go
│ │ │ ├── backend_kqueue.go
│ │ │ ├── backend_other.go
│ │ │ ├── backend_windows.go
│ │ │ ├── fsnotify.go
│ │ │ ├── mkdoc.zsh
│ │ │ ├── system_bsd.go
│ │ │ └── system_darwin.go
│ │ ├── golang/
│ │ │ └── protobuf/
│ │ │ ├── AUTHORS
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ ├── proto/
│ │ │ │ ├── buffer.go
│ │ │ │ ├── defaults.go
│ │ │ │ ├── deprecated.go
│ │ │ │ ├── discard.go
│ │ │ │ ├── extensions.go
│ │ │ │ ├── properties.go
│ │ │ │ ├── proto.go
│ │ │ │ ├── registry.go
│ │ │ │ ├── text_decode.go
│ │ │ │ ├── text_encode.go
│ │ │ │ ├── wire.go
│ │ │ │ └── wrappers.go
│ │ │ └── ptypes/
│ │ │ ├── any/
│ │ │ │ └── any.pb.go
│ │ │ ├── any.go
│ │ │ ├── doc.go
│ │ │ ├── duration/
│ │ │ │ └── duration.pb.go
│ │ │ ├── duration.go
│ │ │ ├── timestamp/
│ │ │ │ └── timestamp.pb.go
│ │ │ └── timestamp.go
│ │ ├── google/
│ │ │ └── uuid/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── dce.go
│ │ │ ├── doc.go
│ │ │ ├── hash.go
│ │ │ ├── marshal.go
│ │ │ ├── node.go
│ │ │ ├── node_js.go
│ │ │ ├── node_net.go
│ │ │ ├── null.go
│ │ │ ├── sql.go
│ │ │ ├── time.go
│ │ │ ├── util.go
│ │ │ ├── uuid.go
│ │ │ ├── version1.go
│ │ │ ├── version4.go
│ │ │ ├── version6.go
│ │ │ └── version7.go
│ │ ├── knqyf263/
│ │ │ └── go-plugin/
│ │ │ ├── LICENSE
│ │ │ └── wasm/
│ │ │ ├── host.go
│ │ │ ├── plugin.go
│ │ │ └── plugin_tinygo.go
│ │ ├── moby/
│ │ │ └── sys/
│ │ │ ├── capability/
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── capability.go
│ │ │ │ ├── capability_linux.go
│ │ │ │ ├── capability_noop.go
│ │ │ │ ├── enum.go
│ │ │ │ ├── enum_gen.go
│ │ │ │ └── syscall_linux.go
│ │ │ ├── mountinfo/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── doc.go
│ │ │ │ ├── mounted_linux.go
│ │ │ │ ├── mounted_unix.go
│ │ │ │ ├── mountinfo.go
│ │ │ │ ├── mountinfo_bsd.go
│ │ │ │ ├── mountinfo_filters.go
│ │ │ │ ├── mountinfo_freebsdlike.go
│ │ │ │ ├── mountinfo_linux.go
│ │ │ │ ├── mountinfo_openbsd.go
│ │ │ │ ├── mountinfo_unsupported.go
│ │ │ │ └── mountinfo_windows.go
│ │ │ ├── reexec/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── reexec.go
│ │ │ │ ├── reexec_linux.go
│ │ │ │ └── reexec_other.go
│ │ │ └── symlink/
│ │ │ ├── LICENSE
│ │ │ ├── LICENSE.APACHE
│ │ │ ├── LICENSE.BSD
│ │ │ ├── doc.go
│ │ │ ├── fs.go
│ │ │ ├── fs_unix.go
│ │ │ └── fs_windows.go
│ │ ├── opencontainers/
│ │ │ ├── cgroups/
│ │ │ │ ├── LICENSE
│ │ │ │ └── devices/
│ │ │ │ └── config/
│ │ │ │ ├── device.go
│ │ │ │ └── mknod_unix.go
│ │ │ ├── runc/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── NOTICE
│ │ │ │ ├── internal/
│ │ │ │ │ ├── linux/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── eintr.go
│ │ │ │ │ │ └── linux.go
│ │ │ │ │ └── pathrs/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── mkdirall.go
│ │ │ │ │ ├── mkdirall_pathrslite.go
│ │ │ │ │ ├── path.go
│ │ │ │ │ ├── procfs_pathrslite.go
│ │ │ │ │ ├── retry.go
│ │ │ │ │ └── root_pathrslite.go
│ │ │ │ └── libcontainer/
│ │ │ │ ├── devices/
│ │ │ │ │ ├── device_deprecated.go
│ │ │ │ │ └── device_unix.go
│ │ │ │ ├── exeseal/
│ │ │ │ │ ├── cloned_binary_linux.go
│ │ │ │ │ └── overlayfs_linux.go
│ │ │ │ ├── system/
│ │ │ │ │ ├── linux.go
│ │ │ │ │ ├── proc.go
│ │ │ │ │ └── rlimit_linux.go
│ │ │ │ └── utils/
│ │ │ │ ├── cmsg.go
│ │ │ │ ├── utils.go
│ │ │ │ └── utils_unix.go
│ │ │ ├── runtime-spec/
│ │ │ │ ├── LICENSE
│ │ │ │ └── specs-go/
│ │ │ │ ├── config.go
│ │ │ │ ├── state.go
│ │ │ │ └── version.go
│ │ │ └── runtime-tools/
│ │ │ ├── LICENSE
│ │ │ ├── generate/
│ │ │ │ ├── config.go
│ │ │ │ ├── generate.go
│ │ │ │ └── seccomp/
│ │ │ │ ├── consts.go
│ │ │ │ ├── parse_action.go
│ │ │ │ ├── parse_architecture.go
│ │ │ │ ├── parse_arguments.go
│ │ │ │ ├── parse_remove.go
│ │ │ │ ├── seccomp_default.go
│ │ │ │ ├── seccomp_default_linux.go
│ │ │ │ ├── seccomp_default_unsupported.go
│ │ │ │ └── syscall_compare.go
│ │ │ └── validate/
│ │ │ └── capabilities/
│ │ │ ├── lastcap.go
│ │ │ └── validate.go
│ │ ├── pelletier/
│ │ │ └── go-toml/
│ │ │ ├── .dockerignore
│ │ │ ├── .gitignore
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── Dockerfile
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── PULL_REQUEST_TEMPLATE.md
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── azure-pipelines.yml
│ │ │ ├── benchmark.sh
│ │ │ ├── doc.go
│ │ │ ├── example-crlf.toml
│ │ │ ├── example.toml
│ │ │ ├── fuzz.go
│ │ │ ├── fuzz.sh
│ │ │ ├── keysparsing.go
│ │ │ ├── lexer.go
│ │ │ ├── localtime.go
│ │ │ ├── marshal.go
│ │ │ ├── marshal_OrderPreserve_test.toml
│ │ │ ├── marshal_test.toml
│ │ │ ├── parser.go
│ │ │ ├── position.go
│ │ │ ├── token.go
│ │ │ ├── toml.go
│ │ │ ├── tomlpub.go
│ │ │ ├── tomltree_create.go
│ │ │ ├── tomltree_write.go
│ │ │ └── tomltree_writepub.go
│ │ ├── pmezard/
│ │ │ └── go-difflib/
│ │ │ ├── LICENSE
│ │ │ └── difflib/
│ │ │ └── difflib.go
│ │ ├── prometheus/
│ │ │ └── procfs/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── CODE_OF_CONDUCT.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS.md
│ │ │ ├── Makefile
│ │ │ ├── Makefile.common
│ │ │ ├── NOTICE
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── arp.go
│ │ │ ├── buddyinfo.go
│ │ │ ├── cmdline.go
│ │ │ ├── cpuinfo.go
│ │ │ ├── cpuinfo_armx.go
│ │ │ ├── cpuinfo_loong64.go
│ │ │ ├── cpuinfo_mipsx.go
│ │ │ ├── cpuinfo_others.go
│ │ │ ├── cpuinfo_ppcx.go
│ │ │ ├── cpuinfo_riscvx.go
│ │ │ ├── cpuinfo_s390x.go
│ │ │ ├── cpuinfo_x86.go
│ │ │ ├── crypto.go
│ │ │ ├── doc.go
│ │ │ ├── fs.go
│ │ │ ├── fs_statfs_notype.go
│ │ │ ├── fs_statfs_type.go
│ │ │ ├── fscache.go
│ │ │ ├── internal/
│ │ │ │ ├── fs/
│ │ │ │ │ └── fs.go
│ │ │ │ └── util/
│ │ │ │ ├── parse.go
│ │ │ │ ├── readfile.go
│ │ │ │ ├── sysreadfile.go
│ │ │ │ ├── sysreadfile_compat.go
│ │ │ │ └── valueparser.go
│ │ │ ├── ipvs.go
│ │ │ ├── kernel_hung.go
│ │ │ ├── kernel_random.go
│ │ │ ├── loadavg.go
│ │ │ ├── mdstat.go
│ │ │ ├── meminfo.go
│ │ │ ├── mountinfo.go
│ │ │ ├── mountstats.go
│ │ │ ├── net_conntrackstat.go
│ │ │ ├── net_dev.go
│ │ │ ├── net_dev_snmp6.go
│ │ │ ├── net_ip_socket.go
│ │ │ ├── net_protocols.go
│ │ │ ├── net_route.go
│ │ │ ├── net_sockstat.go
│ │ │ ├── net_softnet.go
│ │ │ ├── net_tcp.go
│ │ │ ├── net_tls_stat.go
│ │ │ ├── net_udp.go
│ │ │ ├── net_unix.go
│ │ │ ├── net_wireless.go
│ │ │ ├── net_xfrm.go
│ │ │ ├── netstat.go
│ │ │ ├── nfnetlink_queue.go
│ │ │ ├── proc.go
│ │ │ ├── proc_cgroup.go
│ │ │ ├── proc_cgroups.go
│ │ │ ├── proc_environ.go
│ │ │ ├── proc_fdinfo.go
│ │ │ ├── proc_interrupts.go
│ │ │ ├── proc_io.go
│ │ │ ├── proc_limits.go
│ │ │ ├── proc_maps.go
│ │ │ ├── proc_netstat.go
│ │ │ ├── proc_ns.go
│ │ │ ├── proc_psi.go
│ │ │ ├── proc_smaps.go
│ │ │ ├── proc_snmp.go
│ │ │ ├── proc_snmp6.go
│ │ │ ├── proc_stat.go
│ │ │ ├── proc_statm.go
│ │ │ ├── proc_status.go
│ │ │ ├── proc_sys.go
│ │ │ ├── schedstat.go
│ │ │ ├── slab.go
│ │ │ ├── softirqs.go
│ │ │ ├── stat.go
│ │ │ ├── swaps.go
│ │ │ ├── thread.go
│ │ │ ├── ttar
│ │ │ ├── vm.go
│ │ │ └── zoneinfo.go
│ │ ├── stretchr/
│ │ │ └── testify/
│ │ │ ├── LICENSE
│ │ │ ├── assert/
│ │ │ │ ├── assertion_compare.go
│ │ │ │ ├── assertion_format.go
│ │ │ │ ├── assertion_format.go.tmpl
│ │ │ │ ├── assertion_forward.go
│ │ │ │ ├── assertion_forward.go.tmpl
│ │ │ │ ├── assertion_order.go
│ │ │ │ ├── assertions.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── forward_assertions.go
│ │ │ │ ├── http_assertions.go
│ │ │ │ └── yaml/
│ │ │ │ ├── yaml_custom.go
│ │ │ │ ├── yaml_default.go
│ │ │ │ └── yaml_fail.go
│ │ │ └── require/
│ │ │ ├── doc.go
│ │ │ ├── forward_requirements.go
│ │ │ ├── require.go
│ │ │ ├── require.go.tmpl
│ │ │ ├── require_forward.go
│ │ │ ├── require_forward.go.tmpl
│ │ │ └── requirements.go
│ │ └── tetratelabs/
│ │ └── wazero/
│ │ ├── .editorconfig
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── .gitmodules
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── NOTICE
│ │ ├── RATIONALE.md
│ │ ├── README.md
│ │ ├── api/
│ │ │ ├── features.go
│ │ │ └── wasm.go
│ │ ├── builder.go
│ │ ├── cache.go
│ │ ├── codecov.yml
│ │ ├── config.go
│ │ ├── experimental/
│ │ │ ├── checkpoint.go
│ │ │ ├── close.go
│ │ │ ├── compilationworkers.go
│ │ │ ├── experimental.go
│ │ │ ├── features.go
│ │ │ ├── importresolver.go
│ │ │ ├── listener.go
│ │ │ ├── memory.go
│ │ │ └── sys/
│ │ │ ├── dir.go
│ │ │ ├── errno.go
│ │ │ ├── error.go
│ │ │ ├── file.go
│ │ │ ├── fs.go
│ │ │ ├── oflag.go
│ │ │ ├── syscall_errno.go
│ │ │ ├── syscall_errno_notwindows.go
│ │ │ ├── syscall_errno_unsupported.go
│ │ │ ├── syscall_errno_windows.go
│ │ │ ├── time.go
│ │ │ └── unimplemented.go
│ │ ├── fsconfig.go
│ │ ├── imports/
│ │ │ └── wasi_snapshot_preview1/
│ │ │ ├── args.go
│ │ │ ├── clock.go
│ │ │ ├── environ.go
│ │ │ ├── fs.go
│ │ │ ├── poll.go
│ │ │ ├── proc.go
│ │ │ ├── random.go
│ │ │ ├── sched.go
│ │ │ ├── sock.go
│ │ │ └── wasi.go
│ │ ├── internal/
│ │ │ ├── descriptor/
│ │ │ │ └── table.go
│ │ │ ├── engine/
│ │ │ │ ├── interpreter/
│ │ │ │ │ ├── compiler.go
│ │ │ │ │ ├── format.go
│ │ │ │ │ ├── interpreter.go
│ │ │ │ │ ├── operations.go
│ │ │ │ │ └── signature.go
│ │ │ │ └── wazevo/
│ │ │ │ ├── backend/
│ │ │ │ │ ├── abi.go
│ │ │ │ │ ├── backend.go
│ │ │ │ │ ├── compiler.go
│ │ │ │ │ ├── compiler_lower.go
│ │ │ │ │ ├── go_call.go
│ │ │ │ │ ├── isa/
│ │ │ │ │ │ ├── amd64/
│ │ │ │ │ │ │ ├── abi.go
│ │ │ │ │ │ │ ├── abi_entry_amd64.go
│ │ │ │ │ │ │ ├── abi_entry_amd64.s
│ │ │ │ │ │ │ ├── abi_entry_preamble.go
│ │ │ │ │ │ │ ├── abi_go_call.go
│ │ │ │ │ │ │ ├── cond.go
│ │ │ │ │ │ │ ├── ext.go
│ │ │ │ │ │ │ ├── instr.go
│ │ │ │ │ │ │ ├── instr_encoding.go
│ │ │ │ │ │ │ ├── lower_constant.go
│ │ │ │ │ │ │ ├── lower_mem.go
│ │ │ │ │ │ │ ├── machine.go
│ │ │ │ │ │ │ ├── machine_pro_epi_logue.go
│ │ │ │ │ │ │ ├── machine_regalloc.go
│ │ │ │ │ │ │ ├── machine_vec.go
│ │ │ │ │ │ │ ├── operands.go
│ │ │ │ │ │ │ ├── reg.go
│ │ │ │ │ │ │ └── stack.go
│ │ │ │ │ │ └── arm64/
│ │ │ │ │ │ ├── abi.go
│ │ │ │ │ │ ├── abi_entry_arm64.go
│ │ │ │ │ │ ├── abi_entry_arm64.s
│ │ │ │ │ │ ├── abi_entry_preamble.go
│ │ │ │ │ │ ├── abi_go_call.go
│ │ │ │ │ │ ├── cond.go
│ │ │ │ │ │ ├── instr.go
│ │ │ │ │ │ ├── instr_encoding.go
│ │ │ │ │ │ ├── lower_constant.go
│ │ │ │ │ │ ├── lower_instr.go
│ │ │ │ │ │ ├── lower_instr_operands.go
│ │ │ │ │ │ ├── lower_mem.go
│ │ │ │ │ │ ├── machine.go
│ │ │ │ │ │ ├── machine_pro_epi_logue.go
│ │ │ │ │ │ ├── machine_regalloc.go
│ │ │ │ │ │ ├── machine_relocation.go
│ │ │ │ │ │ ├── reg.go
│ │ │ │ │ │ └── unwind_stack.go
│ │ │ │ │ ├── machine.go
│ │ │ │ │ ├── regalloc/
│ │ │ │ │ │ ├── api.go
│ │ │ │ │ │ ├── reg.go
│ │ │ │ │ │ ├── regalloc.go
│ │ │ │ │ │ └── regset.go
│ │ │ │ │ └── vdef.go
│ │ │ │ ├── call_engine.go
│ │ │ │ ├── engine.go
│ │ │ │ ├── engine_cache.go
│ │ │ │ ├── entrypoint_amd64.go
│ │ │ │ ├── entrypoint_arm64.go
│ │ │ │ ├── entrypoint_others.go
│ │ │ │ ├── frontend/
│ │ │ │ │ ├── frontend.go
│ │ │ │ │ ├── lower.go
│ │ │ │ │ ├── misc.go
│ │ │ │ │ └── sort_id.go
│ │ │ │ ├── hostmodule.go
│ │ │ │ ├── isa_amd64.go
│ │ │ │ ├── isa_arm64.go
│ │ │ │ ├── isa_other.go
│ │ │ │ ├── memmove.go
│ │ │ │ ├── module_engine.go
│ │ │ │ ├── ssa/
│ │ │ │ │ ├── basic_block.go
│ │ │ │ │ ├── basic_block_sort.go
│ │ │ │ │ ├── builder.go
│ │ │ │ │ ├── cmp.go
│ │ │ │ │ ├── funcref.go
│ │ │ │ │ ├── instructions.go
│ │ │ │ │ ├── pass.go
│ │ │ │ │ ├── pass_blk_layouts.go
│ │ │ │ │ ├── pass_cfg.go
│ │ │ │ │ ├── signature.go
│ │ │ │ │ ├── ssa.go
│ │ │ │ │ ├── type.go
│ │ │ │ │ └── vs.go
│ │ │ │ └── wazevoapi/
│ │ │ │ ├── debug_options.go
│ │ │ │ ├── exitcode.go
│ │ │ │ ├── offsetdata.go
│ │ │ │ ├── perfmap.go
│ │ │ │ ├── perfmap_disabled.go
│ │ │ │ ├── perfmap_enabled.go
│ │ │ │ ├── pool.go
│ │ │ │ ├── ptr.go
│ │ │ │ ├── queue.go
│ │ │ │ └── resetmap.go
│ │ │ ├── expctxkeys/
│ │ │ │ ├── checkpoint.go
│ │ │ │ ├── close.go
│ │ │ │ ├── compilationworkers.go
│ │ │ │ ├── expctxkeys.go
│ │ │ │ ├── importresolver.go
│ │ │ │ ├── listener.go
│ │ │ │ └── memory.go
│ │ │ ├── filecache/
│ │ │ │ ├── compilationcache.go
│ │ │ │ └── file_cache.go
│ │ │ ├── fsapi/
│ │ │ │ ├── file.go
│ │ │ │ ├── poll.go
│ │ │ │ └── unimplemented.go
│ │ │ ├── ieee754/
│ │ │ │ └── ieee754.go
│ │ │ ├── internalapi/
│ │ │ │ └── internal.go
│ │ │ ├── leb128/
│ │ │ │ └── leb128.go
│ │ │ ├── moremath/
│ │ │ │ └── moremath.go
│ │ │ ├── platform/
│ │ │ │ ├── cpuid.go
│ │ │ │ ├── cpuid_amd64.go
│ │ │ │ ├── cpuid_amd64.s
│ │ │ │ ├── cpuid_arm64.go
│ │ │ │ ├── cpuid_arm64.s
│ │ │ │ ├── cpuid_unsupported.go
│ │ │ │ ├── crypto.go
│ │ │ │ ├── mmap_linux.go
│ │ │ │ ├── mmap_other.go
│ │ │ │ ├── mmap_unix.go
│ │ │ │ ├── mmap_unsupported.go
│ │ │ │ ├── mmap_windows.go
│ │ │ │ ├── mprotect_bsd.go
│ │ │ │ ├── mprotect_syscall.go
│ │ │ │ ├── mprotect_unsupported.go
│ │ │ │ ├── path.go
│ │ │ │ ├── path_windows.go
│ │ │ │ ├── platform.go
│ │ │ │ ├── time.go
│ │ │ │ ├── time_cgo.go
│ │ │ │ ├── time_notcgo.go
│ │ │ │ └── time_windows.go
│ │ │ ├── sock/
│ │ │ │ ├── sock.go
│ │ │ │ ├── sock_supported.go
│ │ │ │ └── sock_unsupported.go
│ │ │ ├── sys/
│ │ │ │ ├── fs.go
│ │ │ │ ├── lazy.go
│ │ │ │ ├── stdio.go
│ │ │ │ └── sys.go
│ │ │ ├── sysfs/
│ │ │ │ ├── adapter.go
│ │ │ │ ├── datasync_linux.go
│ │ │ │ ├── datasync_tinygo.go
│ │ │ │ ├── datasync_unsupported.go
│ │ │ │ ├── dir.go
│ │ │ │ ├── dirfs.go
│ │ │ │ ├── dirfs_supported.go
│ │ │ │ ├── dirfs_unsupported.go
│ │ │ │ ├── file.go
│ │ │ │ ├── file_unix.go
│ │ │ │ ├── file_unsupported.go
│ │ │ │ ├── file_windows.go
│ │ │ │ ├── futimens.go
│ │ │ │ ├── futimens_darwin.go
│ │ │ │ ├── futimens_darwin.s
│ │ │ │ ├── futimens_linux.go
│ │ │ │ ├── futimens_unsupported.go
│ │ │ │ ├── futimens_windows.go
│ │ │ │ ├── ino.go
│ │ │ │ ├── ino_plan9.go
│ │ │ │ ├── ino_tinygo.go
│ │ │ │ ├── ino_windows.go
│ │ │ │ ├── nonblock_unix.go
│ │ │ │ ├── nonblock_unsupported.go
│ │ │ │ ├── nonblock_windows.go
│ │ │ │ ├── oflag.go
│ │ │ │ ├── open_file_darwin.go
│ │ │ │ ├── open_file_freebsd.go
│ │ │ │ ├── open_file_linux.go
│ │ │ │ ├── open_file_notwindows.go
│ │ │ │ ├── open_file_sun.go
│ │ │ │ ├── open_file_tinygo.go
│ │ │ │ ├── open_file_unsupported.go
│ │ │ │ ├── open_file_windows.go
│ │ │ │ ├── osfile.go
│ │ │ │ ├── poll.go
│ │ │ │ ├── poll_darwin.go
│ │ │ │ ├── poll_darwin.s
│ │ │ │ ├── poll_linux.go
│ │ │ │ ├── poll_unsupported.go
│ │ │ │ ├── poll_windows.go
│ │ │ │ ├── readfs.go
│ │ │ │ ├── rename.go
│ │ │ │ ├── rename_plan9.go
│ │ │ │ ├── rename_windows.go
│ │ │ │ ├── sock.go
│ │ │ │ ├── sock_supported.go
│ │ │ │ ├── sock_unix.go
│ │ │ │ ├── sock_unsupported.go
│ │ │ │ ├── sock_windows.go
│ │ │ │ ├── stat.go
│ │ │ │ ├── stat_bsd.go
│ │ │ │ ├── stat_linux.go
│ │ │ │ ├── stat_unsupported.go
│ │ │ │ ├── stat_windows.go
│ │ │ │ ├── sync.go
│ │ │ │ ├── sync_windows.go
│ │ │ │ ├── syscall6_darwin.go
│ │ │ │ ├── sysfs.go
│ │ │ │ ├── unlink.go
│ │ │ │ ├── unlink_plan9.go
│ │ │ │ └── unlink_windows.go
│ │ │ ├── u32/
│ │ │ │ └── u32.go
│ │ │ ├── u64/
│ │ │ │ └── u64.go
│ │ │ ├── version/
│ │ │ │ └── version.go
│ │ │ ├── wasip1/
│ │ │ │ ├── args.go
│ │ │ │ ├── clock.go
│ │ │ │ ├── environ.go
│ │ │ │ ├── errno.go
│ │ │ │ ├── fs.go
│ │ │ │ ├── poll.go
│ │ │ │ ├── proc.go
│ │ │ │ ├── random.go
│ │ │ │ ├── rights.go
│ │ │ │ ├── sched.go
│ │ │ │ ├── sock.go
│ │ │ │ └── wasi.go
│ │ │ ├── wasm/
│ │ │ │ ├── binary/
│ │ │ │ │ ├── code.go
│ │ │ │ │ ├── const_expr.go
│ │ │ │ │ ├── custom.go
│ │ │ │ │ ├── data.go
│ │ │ │ │ ├── decoder.go
│ │ │ │ │ ├── element.go
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── export.go
│ │ │ │ │ ├── function.go
│ │ │ │ │ ├── global.go
│ │ │ │ │ ├── header.go
│ │ │ │ │ ├── import.go
│ │ │ │ │ ├── limits.go
│ │ │ │ │ ├── memory.go
│ │ │ │ │ ├── names.go
│ │ │ │ │ ├── section.go
│ │ │ │ │ ├── table.go
│ │ │ │ │ └── value.go
│ │ │ │ ├── counts.go
│ │ │ │ ├── engine.go
│ │ │ │ ├── func_validation.go
│ │ │ │ ├── function_definition.go
│ │ │ │ ├── global.go
│ │ │ │ ├── gofunc.go
│ │ │ │ ├── host.go
│ │ │ │ ├── instruction.go
│ │ │ │ ├── memory.go
│ │ │ │ ├── memory_definition.go
│ │ │ │ ├── module.go
│ │ │ │ ├── module_instance.go
│ │ │ │ ├── module_instance_lookup.go
│ │ │ │ ├── store.go
│ │ │ │ ├── store_module_list.go
│ │ │ │ └── table.go
│ │ │ ├── wasmdebug/
│ │ │ │ ├── debug.go
│ │ │ │ └── dwarf.go
│ │ │ └── wasmruntime/
│ │ │ └── errors.go
│ │ ├── netlify.toml
│ │ ├── runtime.go
│ │ └── sys/
│ │ ├── clock.go
│ │ ├── error.go
│ │ ├── stat.go
│ │ ├── stat_bsd.go
│ │ ├── stat_linux.go
│ │ ├── stat_unsupported.go
│ │ └── stat_windows.go
│ ├── golang.org/
│ │ └── x/
│ │ ├── mod/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ └── semver/
│ │ │ └── semver.go
│ │ └── sys/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── unix/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── affinity_linux.go
│ │ │ ├── aliases.go
│ │ │ ├── asm_aix_ppc64.s
│ │ │ ├── asm_bsd_386.s
│ │ │ ├── asm_bsd_amd64.s
│ │ │ ├── asm_bsd_arm.s
│ │ │ ├── asm_bsd_arm64.s
│ │ │ ├── asm_bsd_ppc64.s
│ │ │ ├── asm_bsd_riscv64.s
│ │ │ ├── asm_linux_386.s
│ │ │ ├── asm_linux_amd64.s
│ │ │ ├── asm_linux_arm.s
│ │ │ ├── asm_linux_arm64.s
│ │ │ ├── asm_linux_loong64.s
│ │ │ ├── asm_linux_mips64x.s
│ │ │ ├── asm_linux_mipsx.s
│ │ │ ├── asm_linux_ppc64x.s
│ │ │ ├── asm_linux_riscv64.s
│ │ │ ├── asm_linux_s390x.s
│ │ │ ├── asm_openbsd_mips64.s
│ │ │ ├── asm_solaris_amd64.s
│ │ │ ├── asm_zos_s390x.s
│ │ │ ├── auxv.go
│ │ │ ├── auxv_unsupported.go
│ │ │ ├── bluetooth_linux.go
│ │ │ ├── bpxsvc_zos.go
│ │ │ ├── bpxsvc_zos.s
│ │ │ ├── cap_freebsd.go
│ │ │ ├── constants.go
│ │ │ ├── dev_aix_ppc.go
│ │ │ ├── dev_aix_ppc64.go
│ │ │ ├── dev_darwin.go
│ │ │ ├── dev_dragonfly.go
│ │ │ ├── dev_freebsd.go
│ │ │ ├── dev_linux.go
│ │ │ ├── dev_netbsd.go
│ │ │ ├── dev_openbsd.go
│ │ │ ├── dev_zos.go
│ │ │ ├── dirent.go
│ │ │ ├── endian_big.go
│ │ │ ├── endian_little.go
│ │ │ ├── env_unix.go
│ │ │ ├── fcntl.go
│ │ │ ├── fcntl_darwin.go
│ │ │ ├── fcntl_linux_32bit.go
│ │ │ ├── fdset.go
│ │ │ ├── gccgo.go
│ │ │ ├── gccgo_c.c
│ │ │ ├── gccgo_linux_amd64.go
│ │ │ ├── ifreq_linux.go
│ │ │ ├── ioctl_linux.go
│ │ │ ├── ioctl_signed.go
│ │ │ ├── ioctl_unsigned.go
│ │ │ ├── ioctl_zos.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mmap_nomremap.go
│ │ │ ├── mremap.go
│ │ │ ├── pagesize_unix.go
│ │ │ ├── pledge_openbsd.go
│ │ │ ├── ptrace_darwin.go
│ │ │ ├── ptrace_ios.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── readdirent_getdents.go
│ │ │ ├── readdirent_getdirentries.go
│ │ │ ├── sockcmsg_dragonfly.go
│ │ │ ├── sockcmsg_linux.go
│ │ │ ├── sockcmsg_unix.go
│ │ │ ├── sockcmsg_unix_other.go
│ │ │ ├── sockcmsg_zos.go
│ │ │ ├── symaddr_zos_s390x.s
│ │ │ ├── syscall.go
│ │ │ ├── syscall_aix.go
│ │ │ ├── syscall_aix_ppc.go
│ │ │ ├── syscall_aix_ppc64.go
│ │ │ ├── syscall_bsd.go
│ │ │ ├── syscall_darwin.go
│ │ │ ├── syscall_darwin_amd64.go
│ │ │ ├── syscall_darwin_arm64.go
│ │ │ ├── syscall_darwin_libSystem.go
│ │ │ ├── syscall_dragonfly.go
│ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ ├── syscall_freebsd.go
│ │ │ ├── syscall_freebsd_386.go
│ │ │ ├── syscall_freebsd_amd64.go
│ │ │ ├── syscall_freebsd_arm.go
│ │ │ ├── syscall_freebsd_arm64.go
│ │ │ ├── syscall_freebsd_riscv64.go
│ │ │ ├── syscall_hurd.go
│ │ │ ├── syscall_hurd_386.go
│ │ │ ├── syscall_illumos.go
│ │ │ ├── syscall_linux.go
│ │ │ ├── syscall_linux_386.go
│ │ │ ├── syscall_linux_alarm.go
│ │ │ ├── syscall_linux_amd64.go
│ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ ├── syscall_linux_arm.go
│ │ │ ├── syscall_linux_arm64.go
│ │ │ ├── syscall_linux_gc.go
│ │ │ ├── syscall_linux_gc_386.go
│ │ │ ├── syscall_linux_gc_arm.go
│ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ ├── syscall_linux_loong64.go
│ │ │ ├── syscall_linux_mips64x.go
│ │ │ ├── syscall_linux_mipsx.go
│ │ │ ├── syscall_linux_ppc.go
│ │ │ ├── syscall_linux_ppc64x.go
│ │ │ ├── syscall_linux_riscv64.go
│ │ │ ├── syscall_linux_s390x.go
│ │ │ ├── syscall_linux_sparc64.go
│ │ │ ├── syscall_netbsd.go
│ │ │ ├── syscall_netbsd_386.go
│ │ │ ├── syscall_netbsd_amd64.go
│ │ │ ├── syscall_netbsd_arm.go
│ │ │ ├── syscall_netbsd_arm64.go
│ │ │ ├── syscall_openbsd.go
│ │ │ ├── syscall_openbsd_386.go
│ │ │ ├── syscall_openbsd_amd64.go
│ │ │ ├── syscall_openbsd_arm.go
│ │ │ ├── syscall_openbsd_arm64.go
│ │ │ ├── syscall_openbsd_libc.go
│ │ │ ├── syscall_openbsd_mips64.go
│ │ │ ├── syscall_openbsd_ppc64.go
│ │ │ ├── syscall_openbsd_riscv64.go
│ │ │ ├── syscall_solaris.go
│ │ │ ├── syscall_solaris_amd64.go
│ │ │ ├── syscall_unix.go
│ │ │ ├── syscall_unix_gc.go
│ │ │ ├── syscall_unix_gc_ppc64x.go
│ │ │ ├── syscall_zos_s390x.go
│ │ │ ├── sysvshm_linux.go
│ │ │ ├── sysvshm_unix.go
│ │ │ ├── sysvshm_unix_other.go
│ │ │ ├── timestruct.go
│ │ │ ├── unveil_openbsd.go
│ │ │ ├── vgetrandom_linux.go
│ │ │ ├── vgetrandom_unsupported.go
│ │ │ ├── xattr_bsd.go
│ │ │ ├── zerrors_aix_ppc.go
│ │ │ ├── zerrors_aix_ppc64.go
│ │ │ ├── zerrors_darwin_amd64.go
│ │ │ ├── zerrors_darwin_arm64.go
│ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ ├── zerrors_freebsd_386.go
│ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ ├── zerrors_freebsd_arm.go
│ │ │ ├── zerrors_freebsd_arm64.go
│ │ │ ├── zerrors_freebsd_riscv64.go
│ │ │ ├── zerrors_linux.go
│ │ │ ├── zerrors_linux_386.go
│ │ │ ├── zerrors_linux_amd64.go
│ │ │ ├── zerrors_linux_arm.go
│ │ │ ├── zerrors_linux_arm64.go
│ │ │ ├── zerrors_linux_loong64.go
│ │ │ ├── zerrors_linux_mips.go
│ │ │ ├── zerrors_linux_mips64.go
│ │ │ ├── zerrors_linux_mips64le.go
│ │ │ ├── zerrors_linux_mipsle.go
│ │ │ ├── zerrors_linux_ppc.go
│ │ │ ├── zerrors_linux_ppc64.go
│ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ ├── zerrors_linux_riscv64.go
│ │ │ ├── zerrors_linux_s390x.go
│ │ │ ├── zerrors_linux_sparc64.go
│ │ │ ├── zerrors_netbsd_386.go
│ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ ├── zerrors_netbsd_arm.go
│ │ │ ├── zerrors_netbsd_arm64.go
│ │ │ ├── zerrors_openbsd_386.go
│ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ ├── zerrors_openbsd_arm.go
│ │ │ ├── zerrors_openbsd_arm64.go
│ │ │ ├── zerrors_openbsd_mips64.go
│ │ │ ├── zerrors_openbsd_ppc64.go
│ │ │ ├── zerrors_openbsd_riscv64.go
│ │ │ ├── zerrors_solaris_amd64.go
│ │ │ ├── zerrors_zos_s390x.go
│ │ │ ├── zptrace_armnn_linux.go
│ │ │ ├── zptrace_linux_arm64.go
│ │ │ ├── zptrace_mipsnn_linux.go
│ │ │ ├── zptrace_mipsnnle_linux.go
│ │ │ ├── zptrace_x86_linux.go
│ │ │ ├── zsymaddr_zos_s390x.s
│ │ │ ├── zsyscall_aix_ppc.go
│ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ ├── zsyscall_aix_ppc64_gc.go
│ │ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ ├── zsyscall_darwin_amd64.s
│ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ ├── zsyscall_darwin_arm64.s
│ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ ├── zsyscall_freebsd_386.go
│ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ ├── zsyscall_freebsd_arm64.go
│ │ │ ├── zsyscall_freebsd_riscv64.go
│ │ │ ├── zsyscall_illumos_amd64.go
│ │ │ ├── zsyscall_linux.go
│ │ │ ├── zsyscall_linux_386.go
│ │ │ ├── zsyscall_linux_amd64.go
│ │ │ ├── zsyscall_linux_arm.go
│ │ │ ├── zsyscall_linux_arm64.go
│ │ │ ├── zsyscall_linux_loong64.go
│ │ │ ├── zsyscall_linux_mips.go
│ │ │ ├── zsyscall_linux_mips64.go
│ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ ├── zsyscall_linux_ppc.go
│ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ ├── zsyscall_linux_s390x.go
│ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ ├── zsyscall_netbsd_386.go
│ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ ├── zsyscall_netbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_386.go
│ │ │ ├── zsyscall_openbsd_386.s
│ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ ├── zsyscall_openbsd_amd64.s
│ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ ├── zsyscall_openbsd_arm.s
│ │ │ ├── zsyscall_openbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_arm64.s
│ │ │ ├── zsyscall_openbsd_mips64.go
│ │ │ ├── zsyscall_openbsd_mips64.s
│ │ │ ├── zsyscall_openbsd_ppc64.go
│ │ │ ├── zsyscall_openbsd_ppc64.s
│ │ │ ├── zsyscall_openbsd_riscv64.go
│ │ │ ├── zsyscall_openbsd_riscv64.s
│ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ ├── zsyscall_zos_s390x.go
│ │ │ ├── zsysctl_openbsd_386.go
│ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ ├── zsysctl_openbsd_arm64.go
│ │ │ ├── zsysctl_openbsd_mips64.go
│ │ │ ├── zsysctl_openbsd_ppc64.go
│ │ │ ├── zsysctl_openbsd_riscv64.go
│ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ ├── zsysnum_freebsd_386.go
│ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ ├── zsysnum_freebsd_arm64.go
│ │ │ ├── zsysnum_freebsd_riscv64.go
│ │ │ ├── zsysnum_linux_386.go
│ │ │ ├── zsysnum_linux_amd64.go
│ │ │ ├── zsysnum_linux_arm.go
│ │ │ ├── zsysnum_linux_arm64.go
│ │ │ ├── zsysnum_linux_loong64.go
│ │ │ ├── zsysnum_linux_mips.go
│ │ │ ├── zsysnum_linux_mips64.go
│ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ ├── zsysnum_linux_ppc.go
│ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ ├── zsysnum_linux_s390x.go
│ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ ├── zsysnum_netbsd_386.go
│ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ ├── zsysnum_netbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_386.go
│ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ ├── zsysnum_openbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_mips64.go
│ │ │ ├── zsysnum_openbsd_ppc64.go
│ │ │ ├── zsysnum_openbsd_riscv64.go
│ │ │ ├── zsysnum_zos_s390x.go
│ │ │ ├── ztypes_aix_ppc.go
│ │ │ ├── ztypes_aix_ppc64.go
│ │ │ ├── ztypes_darwin_amd64.go
│ │ │ ├── ztypes_darwin_arm64.go
│ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ ├── ztypes_freebsd_386.go
│ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ ├── ztypes_freebsd_arm.go
│ │ │ ├── ztypes_freebsd_arm64.go
│ │ │ ├── ztypes_freebsd_riscv64.go
│ │ │ ├── ztypes_linux.go
│ │ │ ├── ztypes_linux_386.go
│ │ │ ├── ztypes_linux_amd64.go
│ │ │ ├── ztypes_linux_arm.go
│ │ │ ├── ztypes_linux_arm64.go
│ │ │ ├── ztypes_linux_loong64.go
│ │ │ ├── ztypes_linux_mips.go
│ │ │ ├── ztypes_linux_mips64.go
│ │ │ ├── ztypes_linux_mips64le.go
│ │ │ ├── ztypes_linux_mipsle.go
│ │ │ ├── ztypes_linux_ppc.go
│ │ │ ├── ztypes_linux_ppc64.go
│ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ ├── ztypes_linux_riscv64.go
│ │ │ ├── ztypes_linux_s390x.go
│ │ │ ├── ztypes_linux_sparc64.go
│ │ │ ├── ztypes_netbsd_386.go
│ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ ├── ztypes_netbsd_arm.go
│ │ │ ├── ztypes_netbsd_arm64.go
│ │ │ ├── ztypes_openbsd_386.go
│ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ ├── ztypes_openbsd_arm.go
│ │ │ ├── ztypes_openbsd_arm64.go
│ │ │ ├── ztypes_openbsd_mips64.go
│ │ │ ├── ztypes_openbsd_ppc64.go
│ │ │ ├── ztypes_openbsd_riscv64.go
│ │ │ ├── ztypes_solaris_amd64.go
│ │ │ └── ztypes_zos_s390x.go
│ │ └── windows/
│ │ ├── aliases.go
│ │ ├── dll_windows.go
│ │ ├── env_windows.go
│ │ ├── eventlog.go
│ │ ├── exec_windows.go
│ │ ├── memory_windows.go
│ │ ├── mkerrors.bash
│ │ ├── mkknownfolderids.bash
│ │ ├── mksyscall.go
│ │ ├── race.go
│ │ ├── race0.go
│ │ ├── security_windows.go
│ │ ├── service.go
│ │ ├── setupapi_windows.go
│ │ ├── str.go
│ │ ├── syscall.go
│ │ ├── syscall_windows.go
│ │ ├── types_windows.go
│ │ ├── types_windows_386.go
│ │ ├── types_windows_amd64.go
│ │ ├── types_windows_arm.go
│ │ ├── types_windows_arm64.go
│ │ ├── zerrors_windows.go
│ │ ├── zknownfolderids_windows.go
│ │ └── zsyscall_windows.go
│ ├── google.golang.org/
│ │ ├── genproto/
│ │ │ └── googleapis/
│ │ │ └── rpc/
│ │ │ ├── LICENSE
│ │ │ └── status/
│ │ │ └── status.pb.go
│ │ ├── grpc/
│ │ │ ├── AUTHORS
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE.txt
│ │ │ ├── attributes/
│ │ │ │ └── attributes.go
│ │ │ ├── codes/
│ │ │ │ ├── code_string.go
│ │ │ │ └── codes.go
│ │ │ ├── connectivity/
│ │ │ │ └── connectivity.go
│ │ │ ├── credentials/
│ │ │ │ ├── credentials.go
│ │ │ │ └── tls.go
│ │ │ ├── grpclog/
│ │ │ │ ├── component.go
│ │ │ │ ├── grpclog.go
│ │ │ │ ├── logger.go
│ │ │ │ └── loggerv2.go
│ │ │ ├── internal/
│ │ │ │ ├── credentials/
│ │ │ │ │ ├── credentials.go
│ │ │ │ │ ├── spiffe.go
│ │ │ │ │ ├── syscallconn.go
│ │ │ │ │ └── util.go
│ │ │ │ ├── grpclog/
│ │ │ │ │ ├── grpclog.go
│ │ │ │ │ └── prefixLogger.go
│ │ │ │ ├── internal.go
│ │ │ │ ├── status/
│ │ │ │ │ └── status.go
│ │ │ │ └── xds_handshake_cluster.go
│ │ │ ├── resolver/
│ │ │ │ ├── map.go
│ │ │ │ └── resolver.go
│ │ │ ├── serviceconfig/
│ │ │ │ └── serviceconfig.go
│ │ │ └── status/
│ │ │ └── status.go
│ │ └── protobuf/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── encoding/
│ │ │ ├── prototext/
│ │ │ │ ├── decode.go
│ │ │ │ ├── doc.go
│ │ │ │ └── encode.go
│ │ │ └── protowire/
│ │ │ └── wire.go
│ │ ├── internal/
│ │ │ ├── descfmt/
│ │ │ │ └── stringer.go
│ │ │ ├── descopts/
│ │ │ │ └── options.go
│ │ │ ├── detrand/
│ │ │ │ └── rand.go
│ │ │ ├── editiondefaults/
│ │ │ │ ├── defaults.go
│ │ │ │ └── editions_defaults.binpb
│ │ │ ├── editionssupport/
│ │ │ │ └── editions.go
│ │ │ ├── encoding/
│ │ │ │ ├── defval/
│ │ │ │ │ └── default.go
│ │ │ │ ├── messageset/
│ │ │ │ │ └── messageset.go
│ │ │ │ ├── tag/
│ │ │ │ │ └── tag.go
│ │ │ │ └── text/
│ │ │ │ ├── decode.go
│ │ │ │ ├── decode_number.go
│ │ │ │ ├── decode_string.go
│ │ │ │ ├── decode_token.go
│ │ │ │ ├── doc.go
│ │ │ │ └── encode.go
│ │ │ ├── errors/
│ │ │ │ └── errors.go
│ │ │ ├── filedesc/
│ │ │ │ ├── build.go
│ │ │ │ ├── desc.go
│ │ │ │ ├── desc_init.go
│ │ │ │ ├── desc_lazy.go
│ │ │ │ ├── desc_list.go
│ │ │ │ ├── desc_list_gen.go
│ │ │ │ ├── editions.go
│ │ │ │ ├── placeholder.go
│ │ │ │ └── presence.go
│ │ │ ├── filetype/
│ │ │ │ └── build.go
│ │ │ ├── flags/
│ │ │ │ ├── flags.go
│ │ │ │ ├── proto_legacy_disable.go
│ │ │ │ └── proto_legacy_enable.go
│ │ │ ├── genid/
│ │ │ │ ├── any_gen.go
│ │ │ │ ├── api_gen.go
│ │ │ │ ├── descriptor_gen.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── duration_gen.go
│ │ │ │ ├── empty_gen.go
│ │ │ │ ├── field_mask_gen.go
│ │ │ │ ├── go_features_gen.go
│ │ │ │ ├── goname.go
│ │ │ │ ├── map_entry.go
│ │ │ │ ├── name.go
│ │ │ │ ├── source_context_gen.go
│ │ │ │ ├── struct_gen.go
│ │ │ │ ├── timestamp_gen.go
│ │ │ │ ├── type_gen.go
│ │ │ │ ├── wrappers.go
│ │ │ │ └── wrappers_gen.go
│ │ │ ├── impl/
│ │ │ │ ├── api_export.go
│ │ │ │ ├── api_export_opaque.go
│ │ │ │ ├── bitmap.go
│ │ │ │ ├── bitmap_race.go
│ │ │ │ ├── checkinit.go
│ │ │ │ ├── codec_extension.go
│ │ │ │ ├── codec_field.go
│ │ │ │ ├── codec_field_opaque.go
│ │ │ │ ├── codec_gen.go
│ │ │ │ ├── codec_map.go
│ │ │ │ ├── codec_message.go
│ │ │ │ ├── codec_message_opaque.go
│ │ │ │ ├── codec_messageset.go
│ │ │ │ ├── codec_tables.go
│ │ │ │ ├── codec_unsafe.go
│ │ │ │ ├── convert.go
│ │ │ │ ├── convert_list.go
│ │ │ │ ├── convert_map.go
│ │ │ │ ├── decode.go
│ │ │ │ ├── encode.go
│ │ │ │ ├── enum.go
│ │ │ │ ├── equal.go
│ │ │ │ ├── extension.go
│ │ │ │ ├── lazy.go
│ │ │ │ ├── legacy_enum.go
│ │ │ │ ├── legacy_export.go
│ │ │ │ ├── legacy_extension.go
│ │ │ │ ├── legacy_file.go
│ │ │ │ ├── legacy_message.go
│ │ │ │ ├── merge.go
│ │ │ │ ├── merge_gen.go
│ │ │ │ ├── message.go
│ │ │ │ ├── message_opaque.go
│ │ │ │ ├── message_opaque_gen.go
│ │ │ │ ├── message_reflect.go
│ │ │ │ ├── message_reflect_field.go
│ │ │ │ ├── message_reflect_field_gen.go
│ │ │ │ ├── message_reflect_gen.go
│ │ │ │ ├── pointer_unsafe.go
│ │ │ │ ├── pointer_unsafe_opaque.go
│ │ │ │ ├── presence.go
│ │ │ │ └── validate.go
│ │ │ ├── order/
│ │ │ │ ├── order.go
│ │ │ │ └── range.go
│ │ │ ├── pragma/
│ │ │ │ └── pragma.go
│ │ │ ├── protolazy/
│ │ │ │ ├── bufferreader.go
│ │ │ │ ├── lazy.go
│ │ │ │ └── pointer_unsafe.go
│ │ │ ├── set/
│ │ │ │ └── ints.go
│ │ │ ├── strs/
│ │ │ │ ├── strings.go
│ │ │ │ └── strings_unsafe.go
│ │ │ └── version/
│ │ │ └── version.go
│ │ ├── proto/
│ │ │ ├── checkinit.go
│ │ │ ├── decode.go
│ │ │ ├── decode_gen.go
│ │ │ ├── doc.go
│ │ │ ├── encode.go
│ │ │ ├── encode_gen.go
│ │ │ ├── equal.go
│ │ │ ├── extension.go
│ │ │ ├── merge.go
│ │ │ ├── messageset.go
│ │ │ ├── proto.go
│ │ │ ├── proto_methods.go
│ │ │ ├── proto_reflect.go
│ │ │ ├── reset.go
│ │ │ ├── size.go
│ │ │ ├── size_gen.go
│ │ │ ├── wrapperopaque.go
│ │ │ └── wrappers.go
│ │ ├── reflect/
│ │ │ ├── protodesc/
│ │ │ │ ├── desc.go
│ │ │ │ ├── desc_init.go
│ │ │ │ ├── desc_resolve.go
│ │ │ │ ├── desc_validate.go
│ │ │ │ ├── editions.go
│ │ │ │ └── proto.go
│ │ │ ├── protoreflect/
│ │ │ │ ├── methods.go
│ │ │ │ ├── proto.go
│ │ │ │ ├── source.go
│ │ │ │ ├── source_gen.go
│ │ │ │ ├── type.go
│ │ │ │ ├── value.go
│ │ │ │ ├── value_equal.go
│ │ │ │ ├── value_union.go
│ │ │ │ └── value_unsafe.go
│ │ │ └── protoregistry/
│ │ │ └── registry.go
│ │ ├── runtime/
│ │ │ ├── protoiface/
│ │ │ │ ├── legacy.go
│ │ │ │ └── methods.go
│ │ │ └── protoimpl/
│ │ │ ├── impl.go
│ │ │ └── version.go
│ │ └── types/
│ │ ├── descriptorpb/
│ │ │ └── descriptor.pb.go
│ │ ├── gofeaturespb/
│ │ │ └── go_features.pb.go
│ │ └── known/
│ │ ├── anypb/
│ │ │ └── any.pb.go
│ │ ├── durationpb/
│ │ │ └── duration.pb.go
│ │ └── timestamppb/
│ │ └── timestamp.pb.go
│ ├── gopkg.in/
│ │ └── yaml.v3/
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── apic.go
│ │ ├── decode.go
│ │ ├── emitterc.go
│ │ ├── encode.go
│ │ ├── parserc.go
│ │ ├── readerc.go
│ │ ├── resolve.go
│ │ ├── scannerc.go
│ │ ├── sorter.go
│ │ ├── writerc.go
│ │ ├── yaml.go
│ │ ├── yamlh.go
│ │ └── yamlprivateh.go
│ ├── modules.txt
│ ├── sigs.k8s.io/
│ │ └── yaml/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── OWNERS
│ │ ├── README.md
│ │ ├── RELEASE.md
│ │ ├── SECURITY_CONTACTS
│ │ ├── code-of-conduct.md
│ │ ├── fields.go
│ │ ├── goyaml.v2/
│ │ │ ├── LICENSE
│ │ │ ├── LICENSE.libyaml
│ │ │ ├── NOTICE
│ │ │ ├── OWNERS
│ │ │ ├── README.md
│ │ │ ├── apic.go
│ │ │ ├── decode.go
│ │ │ ├── emitterc.go
│ │ │ ├── encode.go
│ │ │ ├── parserc.go
│ │ │ ├── readerc.go
│ │ │ ├── resolve.go
│ │ │ ├── scannerc.go
│ │ │ ├── sorter.go
│ │ │ ├── writerc.go
│ │ │ ├── yaml.go
│ │ │ ├── yamlh.go
│ │ │ └── yamlprivateh.go
│ │ ├── yaml.go
│ │ └── yaml_go110.go
│ └── tags.cncf.io/
│ └── container-device-interface/
│ ├── LICENSE
│ ├── internal/
│ │ └── validation/
│ │ ├── k8s/
│ │ │ ├── objectmeta.go
│ │ │ └── validation.go
│ │ └── validate.go
│ ├── pkg/
│ │ ├── cdi/
│ │ │ ├── annotations.go
│ │ │ ├── cache.go
│ │ │ ├── container-edits.go
│ │ │ ├── container-edits_unix.go
│ │ │ ├── container-edits_windows.go
│ │ │ ├── default-cache.go
│ │ │ ├── device.go
│ │ │ ├── doc.go
│ │ │ ├── oci.go
│ │ │ ├── spec-dirs.go
│ │ │ ├── spec.go
│ │ │ ├── spec_linux.go
│ │ │ └── spec_other.go
│ │ └── parser/
│ │ └── parser.go
│ └── specs-go/
│ ├── LICENSE
│ ├── config.go
│ └── version.go
└── versions.mk
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
.git
/shared-*
release-v*/**
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: '[Bug]: '
labels: ["bug", "needs-triage"]
type: bug
---
_**Important Note: NVIDIA AI Enterprise customers can get support from NVIDIA Enterprise support. Please open a case [here](https://enterprise-support.nvidia.com/s/create-case)**._
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Detailed steps to reproduce the issue.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Environment (please provide the following information):**
- `nvidia-container-toolkit` version: [e.g. `v1.18.2`]
- NVIDIA Driver Version: [e.g. 580.105.08]
- Host OS: [e.g. Ubuntu24.04]
- Kernel Version: [e.g. 6.8.0-generic]
- Container Runtime Version: [e.g. containerd 2.0.0]
- CPU Architecture [e.g. `x86_64`, `arm64` ]
- GPU Model(s) [e.g. A100, L40, RTX 3090]
If applicable, also provide:
- Kubernetes Distro and Version: [e.g. K8s, OpenShift, Rancher, GKE, EKS]
- NVIDIA GPU Operator version
- CUDA Version
**Information to [attach](https://help.github.com/articles/file-attachments-on-issues-and-pull-requests/)** (optional if deemed irrelevant)
- Output of `nvidia-smi`
- Container logs
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Submit a feature request
title: "[Feature]: "
labels: ["feature", "needs-triage", "lifecycle/frozen"]
type: enhancement
---
<!--
A clear and concise description of the feature request.
Please include:
- The motivation for the proposal.
- Whether it is related to a specific problem (e.g., *"I'm working on X and would like Y to be possible"*).
- Links to any related GitHub issues.
-->
================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
---
name: Question / General Discussion
about: Ask a question or raise a discussion
title: "[Question]: "
labels: ["question"]
---
<!-- Ask question(s) or raise a discussion related to nvidia container toolkit -->
================================================
FILE: .github/copy-pr-bot.yaml
================================================
# https://docs.gha-runners.nvidia.com/apps/copy-pr-bot/#configuration
enabled: true
================================================
FILE: .github/dependabot.yml
================================================
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
# main branch
- package-ecosystem: "gomod"
target-branch: main
directories:
- "/"
- "deployments/devel"
- "tests"
schedule:
interval: "daily"
labels:
- dependencies
groups:
k8sio:
patterns:
- k8s.io/*
exclude-patterns:
- k8s.io/klog/*
- package-ecosystem: "docker"
target-branch: main
directories:
# CUDA image
- "/deployments/container"
# Golang version
- "/deployments/devel"
schedule:
interval: "daily"
labels:
- dependencies
- package-ecosystem: "github-actions"
target-branch: main
directory: "/"
schedule:
interval: "daily"
labels:
- dependencies
# Allow dependabot to update the libnvidia-container submodule.
- package-ecosystem: "gitsubmodule"
target-branch: main
directory: "/"
allow:
- dependency-name: "third_party/libnvidia-container"
schedule:
interval: "daily"
labels:
- dependencies
- libnvidia-container
# The release branch(es):
- package-ecosystem: "gomod"
target-branch: release-1.18
directories:
- "/"
# We don't update development or test dependencies on release branches
# - "deployments/devel"
# - "tests"
schedule:
interval: "weekly"
day: "sunday"
labels:
- dependencies
- maintenance
ignore:
# For release branches we only consider patch updates.
- dependency-name: "*"
update-types:
- version-update:semver-major
- version-update:semver-minor
groups:
k8sio:
patterns:
- k8s.io/*
exclude-patterns:
- k8s.io/klog/*
- package-ecosystem: "docker"
target-branch: release-1.18
directories:
# CUDA image
- "/deployments/container"
# Golang version
- "/deployments/devel"
schedule:
interval: "weekly"
day: "sunday"
ignore:
# For release branches we only apply patch updates to the golang version.
- dependency-name: "*golang*"
update-types:
- version-update:semver-major
- version-update:semver-minor
labels:
- dependencies
- maintenance
- package-ecosystem: "github-actions"
target-branch: release-1.18
directory: "/"
schedule:
interval: "weekly"
day: "sunday"
labels:
- dependencies
- maintenance
# Github actions need to be gh-pages branches.
- package-ecosystem: "github-actions"
target-branch: gh-pages
directory: "/"
schedule:
interval: "daily"
labels:
- dependencies
================================================
FILE: .github/scripts/add-labels-from-comment.js
================================================
/**
* Copyright 2025 NVIDIA CORPORATION
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
module.exports = async ({ github, context, core }) => {
const commentBody = context.payload.comment.body;
const prNumber = context.payload.issue.number;
core.info(`Processing comment: ${commentBody}`);
// Parse comment for /cherry-pick branches
const cherryPickPattern = /^\/cherry-pick\s+(.+)$/m;
const match = commentBody.match(cherryPickPattern);
if (!match) {
core.warning('Comment does not match /cherry-pick pattern');
return { success: false, message: 'Invalid format' };
}
// Extract all release branches (space-separated)
const branchesText = match[1].trim();
const branchPattern = /release-\d+\.\d+(?:\.\d+)?/g;
const branches = branchesText.match(branchPattern) || [];
if (branches.length === 0) {
core.warning('No valid release branches found in comment');
await github.rest.reactions.createForIssueComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: context.payload.comment.id,
content: 'confused'
});
return { success: false, message: 'No valid branches found' };
}
core.info(`Found branches: ${branches.join(', ')}`);
// Add labels to PR
const labels = branches.map(branch => `cherry-pick/${branch}`);
try {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
labels: labels
});
core.info(`Added labels: ${labels.join(', ')}`);
} catch (error) {
core.error(`Failed to add labels: ${error.message}`);
await github.rest.reactions.createForIssueComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: context.payload.comment.id,
content: '-1'
});
return { success: false, message: error.message };
}
// React with checkmark emoji
await github.rest.reactions.createForIssueComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: context.payload.comment.id,
content: '+1'
});
// Check if PR is already merged
const { data: pullRequest } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber
});
if (pullRequest.merged) {
core.info('PR is already merged - triggering backport immediately');
// Set branches in environment and trigger backport
process.env.BRANCHES_JSON = JSON.stringify(branches);
// Run backport script
const backportScript = require('./backport.js');
const results = await backportScript({ github, context, core });
return {
success: true,
message: `Labels added and backport triggered for: ${branches.join(', ')}`,
backportResults: results
};
} else {
core.info('PR not yet merged - labels added, backport will trigger on merge');
return {
success: true,
message: `Labels added for: ${branches.join(', ')}. Backport will trigger on merge.`
};
}
};
================================================
FILE: .github/scripts/backport.js
================================================
/**
* Copyright 2025 NVIDIA CORPORATION
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
module.exports = async ({ github, context, core }) => {
const branches = JSON.parse(process.env.BRANCHES_JSON || '[]');
// Get PR number from event
const prNumber = context.payload.pull_request?.number || context.payload.issue.number;
// Fetch full PR data (needed when triggered via issue_comment)
const { data: pullRequest } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber
});
const prTitle = pullRequest.title;
const prAuthor = pullRequest.user.login;
// Get all commits from the PR
const { data: commits } = await github.rest.pulls.listCommits({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber
});
if (commits.length === 0) {
core.warning('No commits found in PR - skipping backport');
return [];
}
core.info(`Backporting PR #${prNumber}: "${prTitle}"`);
core.info(`Commits to cherry-pick: ${commits.length}`);
commits.forEach((commit, index) => {
core.info(` ${index + 1}. ${commit.sha.substring(0, 7)} - ${commit.commit.message.split('\n')[0]}`);
});
const { execSync } = require('child_process');
const results = [];
for (const targetBranch of branches) {
core.info(`\n========================================`);
core.info(`Backporting to ${targetBranch}`);
core.info(`========================================`);
const backportBranch = `backport-${prNumber}-to-${targetBranch}`;
try {
// Create/reset backport branch from target release branch
core.info(`Creating/resetting branch ${backportBranch} from ${targetBranch}`);
execSync(`git fetch origin ${targetBranch}:${targetBranch}`, { stdio: 'inherit' });
execSync(`git checkout -B ${backportBranch} ${targetBranch}`, { stdio: 'inherit' });
// Cherry-pick each commit from the PR
let hasConflicts = false;
for (let i = 0; i < commits.length; i++) {
const commit = commits[i];
const commitSha = commit.sha;
const commitMessage = commit.commit.message.split('\n')[0];
core.info(`Cherry-picking commit ${i + 1}/${commits.length}: ${commitSha.substring(0, 7)} - ${commitMessage}`);
try {
execSync(`git cherry-pick -m 1 -x ${commitSha}`, {
encoding: 'utf-8',
stdio: 'pipe'
});
} catch (error) {
// Check if it's a conflict
const status = execSync('git status', { encoding: 'utf-8' });
if (status.includes('Unmerged paths') || status.includes('both modified')) {
hasConflicts = true;
core.warning(`Cherry-pick has conflicts for commit ${commitSha.substring(0, 7)}.`);
// Add all files (including conflicted ones) and commit
execSync('git add .', { stdio: 'inherit' });
try {
execSync(`git -c core.editor=true cherry-pick --continue`, { stdio: 'inherit' });
} catch (e) {
// If continue fails, make a simple commit
execSync(`git commit --no-edit --allow-empty-message || git commit -m "Cherry-pick ${commitSha} (with conflicts)"`, { stdio: 'inherit' });
}
} else if (error.message && error.message.includes('previous cherry-pick is now empty')) {
// Handle empty commits (changes already exist in target branch)
core.info(`Commit ${commitSha.substring(0, 7)} is empty (changes already in target branch), skipping`);
execSync('git cherry-pick --skip', { stdio: 'inherit' });
} else {
throw error;
}
}
}
// Push the backport branch (force to handle updates)
core.info(`Pushing ${backportBranch} to origin`);
execSync(`git push --force-with-lease origin ${backportBranch}`, { stdio: 'inherit' });
// Check if a PR already exists for this backport branch
const { data: existingPRs } = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
head: `${context.repo.owner}:${backportBranch}`,
base: targetBranch,
state: 'open'
});
const existingPR = existingPRs.length > 0 ? existingPRs[0] : null;
// Create pull request
const commitList = commits.map(c => `- \`${c.sha.substring(0, 7)}\` ${c.commit.message.split('\n')[0]}`).join('\n');
// Build PR body based on conflict status
let prBody = `🤖 **Automated backport of #${prNumber} to \`${targetBranch}\`**\n\n`;
if (hasConflicts) {
prBody += `⚠️ **This PR has merge conflicts that need manual resolution.**
Original PR: #${prNumber}
Original Author: @${prAuthor}
**Cherry-picked commits (${commits.length}):**
${commitList}
**Next Steps:**
1. Review the conflicts in the "Files changed" tab
2. Check out this branch locally: \`git fetch origin ${backportBranch} && git checkout ${backportBranch}\`
3. Resolve conflicts manually
4. Push the resolution: \`git push --force-with-lease origin ${backportBranch}\`
---
<details>
<summary>Instructions for resolving conflicts</summary>
\`\`\`bash
git fetch origin ${backportBranch}
git checkout ${backportBranch}
# Resolve conflicts in your editor
git add .
git commit
git push --force-with-lease origin ${backportBranch}
\`\`\`
</details>`;
} else {
prBody += `✅ Cherry-pick completed successfully with no conflicts.
Original PR: #${prNumber}
Original Author: @${prAuthor}
**Cherry-picked commits (${commits.length}):**
${commitList}
This backport was automatically created by the backport bot.`;
}
if (existingPR) {
// Update existing PR
core.info(`Found existing PR #${existingPR.number}, updating it`);
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: existingPR.number,
body: prBody,
draft: hasConflicts
});
// Update labels
const currentLabels = existingPR.labels.map(l => l.name);
const desiredLabels = ['backport', hasConflicts ? 'needs-manual-resolution' : 'auto-backport'];
// Remove old labels if conflict status changed
if (hasConflicts && currentLabels.includes('auto-backport')) {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: existingPR.number,
name: 'auto-backport'
}).catch(() => {}); // Ignore if label doesn't exist
} else if (!hasConflicts && currentLabels.includes('needs-manual-resolution')) {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: existingPR.number,
name: 'needs-manual-resolution'
}).catch(() => {}); // Ignore if label doesn't exist
}
// Add current labels
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: existingPR.number,
labels: desiredLabels
});
// Comment about the update
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: `🤖 Updated existing backport PR for \`${targetBranch}\`: #${existingPR.number} ${hasConflicts ? '⚠️ (has conflicts)' : '✅'}`
});
results.push({
branch: targetBranch,
success: true,
prNumber: existingPR.number,
prUrl: existingPR.html_url,
hasConflicts,
updated: true
});
core.info(`✅ Successfully updated backport PR #${existingPR.number}`);
} else {
// Create new PR
const newPR = await github.rest.pulls.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: `[${targetBranch}] ${prTitle}`,
head: backportBranch,
base: targetBranch,
body: prBody,
draft: hasConflicts
});
// Add labels
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: newPR.data.number,
labels: ['backport', hasConflicts ? 'needs-manual-resolution' : 'auto-backport']
});
// Link to original PR
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: `🤖 Backport PR created for \`${targetBranch}\`: #${newPR.data.number} ${hasConflicts ? '⚠️ (has conflicts)' : '✅'}`
});
results.push({
branch: targetBranch,
success: true,
prNumber: newPR.data.number,
prUrl: newPR.data.html_url,
hasConflicts,
updated: false
});
core.info(`✅ Successfully created backport PR #${newPR.data.number}`);
}
} catch (error) {
core.error(`❌ Failed to backport to ${targetBranch}: ${error.message}`);
// Comment on original PR about the failure
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: `❌ Failed to create backport PR for \`${targetBranch}\`\n\nError: ${error.message}\n\nPlease backport manually.`
});
results.push({
branch: targetBranch,
success: false,
error: error.message
});
} finally {
// Clean up: go back to main branch
try {
execSync('git checkout main', { stdio: 'inherit' });
execSync(`git branch -D ${backportBranch} 2>/dev/null || true`, { stdio: 'inherit' });
} catch (e) {
// Ignore cleanup errors
}
}
}
// Summary (console only)
core.info('\n========================================');
core.info('Backport Summary');
core.info('========================================');
for (const result of results) {
if (result.success) {
const action = result.updated ? 'Updated' : 'Created';
core.info(`✅ ${result.branch}: ${action} PR #${result.prNumber} ${result.hasConflicts ? '(has conflicts)' : ''}`);
} else {
core.error(`❌ ${result.branch}: ${result.error}`);
}
}
return results;
};
================================================
FILE: .github/scripts/extract-branches.js
================================================
/**
* Copyright 2025 NVIDIA CORPORATION
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
module.exports = async ({ github, context, core }) => {
let branches = [];
// Get PR labels
const labels = context.payload.pull_request?.labels || [];
if (labels.length === 0) {
core.info('No labels found on PR - skipping backport');
return [];
}
// Extract branches from cherry-pick/* labels
const cherryPickPattern = /^cherry-pick\/(release-\d+\.\d+(?:\.\d+)?)$/;
for (const label of labels) {
const match = label.name.match(cherryPickPattern);
if (match) {
branches.push(match[1]);
core.info(`Found cherry-pick label: ${label.name} -> ${match[1]}`);
}
}
if (branches.length === 0) {
core.info('No cherry-pick labels found - skipping backport');
return [];
}
core.info(`Target branches: ${branches.join(', ')}`);
return branches;
};
================================================
FILE: .github/workflows/cherrypick.yml
================================================
# Copyright 2025 NVIDIA CORPORATION
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Cherry-Pick
on:
issue_comment:
types: [created]
pull_request_target:
types: [closed]
permissions:
contents: write
pull-requests: write
issues: write
jobs:
add-labels:
name: Add Cherry-Pick Labels from Comment
runs-on: ubuntu-latest
# Run on /cherry-pick comments on PRs
if: |
github.event_name == 'issue_comment' &&
github.event.issue.pull_request &&
startsWith(github.event.comment.body, '/cherry-pick')
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Configure git
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- name: Add labels and handle backport
uses: actions/github-script@v8
with:
script: |
const run = require('./.github/scripts/add-labels-from-comment.js');
return await run({ github, context, core });
backport:
name: Backport PR
runs-on: ubuntu-latest
# Run when PR is merged and has cherry-pick labels
if: |
github.event_name == 'pull_request_target' &&
github.event.pull_request.merged == true &&
contains(join(github.event.pull_request.labels.*.name, ','), 'cherry-pick/')
steps:
- name: Checkout base branch repository
uses: actions/checkout@v6
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.base.ref }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Extract target branches from PR labels
id: extract-branches
uses: actions/github-script@v8
with:
script: |
const run = require('./.github/scripts/extract-branches.js');
return await run({ github, context, core });
- name: Configure git
if: steps.extract-branches.outputs.result != '[]'
run: |
git config user.name "nvidia-backport-bot"
git config user.email "noreply@nvidia.com"
- name: Backport to release branches
id: backport
if: steps.extract-branches.outputs.result != '[]'
uses: actions/github-script@v8
env:
BRANCHES_JSON: ${{ steps.extract-branches.outputs.result }}
with:
script: |
const run = require('./.github/scripts/backport.js');
return await run({ github, context, core });
================================================
FILE: .github/workflows/ci.yaml
================================================
# Copyright 2025 NVIDIA CORPORATION
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: CI Pipeline
on:
push:
branches:
- "pull-request/[0-9]+"
- main
- release-*
jobs:
code-scanning:
uses: ./.github/workflows/code_scanning.yaml
variables:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Generate Commit Short SHA
id: version
run: echo "version=$(echo $GITHUB_SHA | cut -c1-8)" >> "$GITHUB_OUTPUT"
golang:
secrets: inherit
uses: ./.github/workflows/golang.yaml
image:
uses: ./.github/workflows/image.yaml
needs: [variables, golang, code-scanning]
secrets: inherit
with:
version: ${{ needs.variables.outputs.version }}
build_multi_arch_images: ${{ github.ref_name == 'main' || startsWith(github.ref_name, 'release-') }}
e2e-test:
needs: [image, variables]
secrets: inherit
uses: ./.github/workflows/e2e.yaml
with:
version: ${{ needs.variables.outputs.version }}
================================================
FILE: .github/workflows/code_scanning.yaml
================================================
# Copyright 2024 NVIDIA CORPORATION
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: "CodeQL"
on:
workflow_call: {}
pull_request:
types:
- opened
- synchronize
branches:
- main
- release-*
jobs:
analyze:
name: Analyze Go code with CodeQL
runs-on: ubuntu-latest
timeout-minutes: 360
permissions:
security-events: write
packages: read
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: go
build-mode: manual
- shell: bash
run: |
make build
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
category: "/language:go"
================================================
FILE: .github/workflows/e2e.yaml
================================================
# Copyright 2025 NVIDIA CORPORATION
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: End-to-end Tests
on:
workflow_call:
inputs:
version:
required: true
type: string
secrets:
AWS_ACCESS_KEY_ID:
required: true
AWS_SECRET_ACCESS_KEY:
required: true
AWS_SSH_KEY:
required: true
E2E_SSH_USER:
required: true
SLACK_BOT_TOKEN:
required: true
SLACK_CHANNEL_ID:
required: true
jobs:
e2e-tests:
runs-on: linux-amd64-cpu4
strategy:
matrix:
ispr:
- ${{ github.ref_name != 'main' && !startsWith( github.ref_name, 'release-' ) }}
driver_branch:
# LTS branch. EOL June 2026
- 535
# Production branch. EOL February 2026
- 570
# LTS branch. EOL August 2028
- 580
exclude:
- ispr: true
driver_branch: 570
- ispr: true
driver_branch: 580
steps:
- name: Check out code
uses: actions/checkout@v6
- name: Calculate build vars
id: vars
run: |
echo "COMMIT_SHORT_SHA=${GITHUB_SHA:0:8}" >> $GITHUB_ENV
echo "LOWERCASE_REPO_OWNER=$(echo "${GITHUB_REPOSITORY_OWNER}" | awk '{print tolower($0)}')" >> $GITHUB_ENV
GOLANG_VERSION=$(./hack/golang-version.sh)
echo "GOLANG_VERSION=${GOLANG_VERSION##GOLANG_VERSION := }" >> $GITHUB_ENV
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: ${{ env.GOLANG_VERSION }}
- name: Set up Holodeck (${{ matrix.driver_branch }})
uses: NVIDIA/holodeck@v0.2.13
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_ssh_key: ${{ secrets.AWS_SSH_KEY }}
holodeck_config: tests/e2e/infra/driver-branch-${{ matrix.driver_branch }}.yaml
- name: Get public dns name
id: holodeck_public_dns_name
uses: mikefarah/yq@master
with:
cmd: yq '.status.properties[] | select(.name == "public-dns-name") | .value' /github/workspace/.cache/holodeck.yaml
- name: Run e2e tests (${{ matrix.driver_branch }})
env:
E2E_INSTALL_CTK: "true"
E2E_IMAGE_NAME: ghcr.io/nvidia/container-toolkit
E2E_IMAGE_TAG: ${{ inputs.version }}
E2E_SSH_USER: ${{ secrets.E2E_SSH_USER }}
E2E_SSH_HOST: ${{ steps.holodeck_public_dns_name.outputs.result }}
run: |
e2e_ssh_key=$(mktemp)
echo "${{ secrets.AWS_SSH_KEY }}" > "$e2e_ssh_key"
chmod 600 "$e2e_ssh_key"
export E2E_SSH_KEY="$e2e_ssh_key"
make -f tests/e2e/Makefile test
- name: Archive Ginkgo logs
uses: actions/upload-artifact@v7
with:
name: ginkgo-logs-${{ matrix.driver_branch }}
path: ginkgo.json
retention-days: 15
- name: Send Slack alert notification
if: ${{ failure() }}
uses: slackapi/slack-github-action@v2.1.1
with:
method: chat.postMessage
token: ${{ secrets.SLACK_BOT_TOKEN }}
payload: |
channel: ${{ secrets.SLACK_CHANNEL_ID }}
text: |
:x: On repository ${{ github.repository }}, the Workflow *${{ github.workflow }}-driver-branch-${{ matrix.driver_branch }}* has failed.
Details: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
================================================
FILE: .github/workflows/golang.yaml
================================================
# Copyright 2024 NVIDIA CORPORATION
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Golang
on:
workflow_call: {}
pull_request:
types:
- opened
- synchronize
branches:
- main
- release-*
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
name: Checkout code
- name: Get Golang version
id: vars
run: |
GOLANG_VERSION=$(./hack/golang-version.sh)
echo "GOLANG_VERSION=${GOLANG_VERSION##GOLANG_VERSION := }" >> $GITHUB_ENV
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: ${{ env.GOLANG_VERSION }}
- name: Lint
uses: golangci/golangci-lint-action@v9
with:
version: latest
args: -v --timeout 5m
skip-cache: true
- name: Check golang modules
run: |
make check-vendor
make -C deployments/devel check-modules
test:
name: Unit test
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Get Golang version
id: vars
run: |
GOLANG_VERSION=$(./hack/golang-version.sh)
echo "GOLANG_VERSION=${GOLANG_VERSION##GOLANG_VERSION := }" >> $GITHUB_ENV
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: ${{ env.GOLANG_VERSION }}
- name: Run unit tests and generate coverage report
run: make coverage
- name: Upload to Coveralls
continue-on-error: true
uses: coverallsapp/github-action@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
file: coverage.out
build:
name: Build
runs-on: ${{ ( github.event_name == 'pull_request' ) && 'ubuntu-latest' || 'linux-amd64-cpu4' }}
permissions:
contents: read
id-token: write
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Get Golang version
id: vars
run: |
GOLANG_VERSION=$(./hack/golang-version.sh)
echo "GOLANG_VERSION=${GOLANG_VERSION##GOLANG_VERSION ?= }" >> $GITHUB_ENV
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: ${{ env.GOLANG_VERSION }}
- name: Setup Go Proxy
if: ${{ !( github.event_name == 'pull_request' ) }}
id: setup-go-proxy
uses: nv-gha-runners/setup-artifactory-go-proxy@main
- env:
GOPROXY: ${{ ( github.event_name == 'pull_request' ) && '' || steps.setup-go-proxy.outputs.goproxy-url }}
run: |
make build
================================================
FILE: .github/workflows/image.yaml
================================================
# Copyright 2024 NVIDIA CORPORATION
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Run this workflow on pull requests
name: image
on:
workflow_call:
inputs:
version:
required: true
type: string
build_multi_arch_images:
required: true
type: string
jobs:
packages:
runs-on: ubuntu-latest
strategy:
matrix:
target:
- ubuntu18.04-arm64
- ubuntu18.04-amd64
- centos7-aarch64
- centos7-x86_64
ispr:
- ${{ github.ref_name != 'main' && !startsWith( github.ref_name, 'release-' ) }}
exclude:
- ispr: true
target: ubuntu18.04-arm64
- ispr: true
target: centos7-aarch64
fail-fast: false
steps:
- uses: actions/checkout@v6
name: Check out code
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:master
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: build ${{ matrix.target }} packages
run: |
sudo apt-get install -y coreutils build-essential sed git bash make
echo "Building packages"
./scripts/build-packages.sh ${{ matrix.target }}
- name: 'Upload Artifacts'
uses: actions/upload-artifact@v7
with:
compression-level: 0
name: toolkit-container-${{ matrix.target }}-${{ github.run_id }}
path: ${{ github.workspace }}/dist/*
image:
runs-on: linux-amd64-cpu4
permissions:
contents: read
id-token: write
packages: write
strategy:
matrix:
target:
- application
- packaging
needs: packages
steps:
- uses: actions/checkout@v6
name: Check out code
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:master
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Get built packages
uses: actions/download-artifact@v8
with:
path: ${{ github.workspace }}/dist/
pattern: toolkit-container-*-${{ github.run_id }}
merge-multiple: true
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Go Proxy
id: setup-go-proxy
uses: nv-gha-runners/setup-artifactory-go-proxy@main
- name: Build image
env:
IMAGE_NAME: ghcr.io/nvidia/container-toolkit
VERSION: ${{ inputs.version }}
PUSH_ON_BUILD: "true"
BUILD_MULTI_ARCH_IMAGES: ${{ inputs.build_multi_arch_images }}
GOPROXY: ${{ steps.setup-go-proxy.outputs.goproxy-url }}
run: |
echo "${VERSION}"
make -f deployments/container/Makefile build-${{ matrix.target }}
================================================
FILE: .github/workflows/release.yaml
================================================
# Copyright 2024 NVIDIA CORPORATION
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Run this workflow on new tags
name: Release
on:
push:
tags:
- v*
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
name: Check out code
- name: Prepare Artifacts
run: |
./hack/prepare-artifacts.sh ${{ github.ref_name }}
- name: Create Draft Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
./hack/create-release.sh ${{ github.ref_name }}
================================================
FILE: .github/workflows/stale.yaml
================================================
name: Stale issues
on:
workflow_dispatch:
schedule:
- cron: "21 4 * * *"
jobs:
stale:
permissions:
actions: write
issues: write
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v10
with:
stale-issue-message: 'This issue is stale because it has been open 90 days with no activity. This issue will be closed in 30 days unless new comments are made or the stale label is removed. To skip these checks, apply the "lifecycle/frozen" label.'
stale-issue-label: 'lifecycle/stale'
exempt-issue-labels: 'lifecycle/frozen,feature,enhancement'
days-before-stale: 90
close-issue-message: 'This issue was automatically closed due to inactivity.'
days-before-issue-close: 30
remove-stale-when-updated: true
operations-per-run: 1000
================================================
FILE: .gitignore
================================================
/dist
/artifacts
*.swp
*.swo
/coverage.out*
/tests/output/
/nvidia-*
/shared-*
/release-*
/bin
/toolkit-test
================================================
FILE: .gitmodules
================================================
[submodule "third_party/libnvidia-container"]
path = third_party/libnvidia-container
url = https://github.com/NVIDIA/libnvidia-container.git
branch = main
================================================
FILE: .golangci.yml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
version: "2"
linters:
enable:
- contextcheck
- gocritic
- gosec
- misspell
- unconvert
exclusions:
generated: lax
presets:
- comments
- common-false-positives
- legacy
- std-error-handling
rules:
# Exclude the gocritic dupSubExpr issue for cgo files.
- linters:
- gocritic
path: internal/dxcore/dxcore.go
text: dupSubExpr
# Exclude the checks for usage of returns to config.Delete(Path) in the
# crio and containerd config packages.
- linters:
- errcheck
path: pkg/config/engine/
text: config.Delete
# RENDERD refers to the Render Device and not the past tense of render.
- linters:
- misspell
path: .*.go
text: '`RENDERD` is a misspelling of `RENDERED`'
# The legacy hook relies on spec.Hooks.Prestart, which is deprecated as of
# the v1.2.0 OCI runtime spec.
- path: (.+)\.go$
text: SA1019:(.+).Prestart is deprecated(.+)
# TODO: We should address each of the following integer overflows.
- path: (.+)\.go$
text: 'G115: integer overflow conversion(.+)'
paths:
- third_party$
- builtin$
- examples$
formatters:
enable:
- gofmt
- goimports
settings:
goimports:
local-prefixes:
- github.com/NVIDIA/nvidia-container-toolkit
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$
================================================
FILE: .nvidia-ci.yml
================================================
# Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
default:
image: docker
services:
- name: docker:dind
command: ["--experimental"]
tags:
- cnt
- container-dev
- docker/multi-arch
- docker/privileged
- os/linux
- type/docker
variables:
GIT_SUBMODULE_STRATEGY: recursive
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
# Release "devel"-tagged images off the main branch
RELEASE_DEVEL_BRANCH: "main"
DEVEL_RELEASE_IMAGE_VERSION: "devel"
# On the multi-arch builder we don't need the qemu setup.
SKIP_QEMU_SETUP: "1"
# Define the public staging registry
STAGING_REGISTRY: ghcr.io/nvidia
STAGING_VERSION: ${CI_COMMIT_SHORT_SHA}
ARTIFACTORY_REPO_BASE: "https://urm.nvidia.com/artifactory/sw-gpu-cloudnative"
KITMAKER_RELEASE_FOLDER: "kitmaker"
PACKAGE_ARCHIVE_RELEASE_FOLDER: "releases"
stages:
- pull
- scan
- release
- ngc-publish
.pipeline-trigger-rules:
rules:
# We trigger the pipeline if started manually
- if: $CI_PIPELINE_SOURCE == "web"
# We trigger the pipeline on the main branch
- if: $CI_COMMIT_BRANCH == "main"
# We trigger the pipeline on the release- branches
- if: $CI_COMMIT_BRANCH =~ /^release-.*$/
# We trigger the pipeline on tags
- if: $CI_COMMIT_TAG && $CI_COMMIT_TAG != ""
workflow:
rules:
# We trigger the pipeline on a merge request
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
# We then add all the regular triggers
- !reference [.pipeline-trigger-rules, rules]
# Download the regctl binary for use in the release steps
.regctl-setup:
before_script:
- export REGCTL_VERSION=v0.4.5
- apk add --no-cache curl
- mkdir -p bin
- curl -sSLo bin/regctl https://github.com/regclient/regclient/releases/download/${REGCTL_VERSION}/regctl-linux-amd64
- chmod a+x bin/regctl
- export PATH=$(pwd)/bin:${PATH}
# .copy-images copies the required application and packaging images from the
# IN_IMAGE="${IN_IMAGE_NAME}:${IN_IMAGE_TAG}${TAG_SUFFIX}"
# to
# OUT_IMAGE="${OUT_IMAGE_NAME}:${OUT_IMAGE_TAG}${TAG_SUFFIX}"
# The script also logs into IN_REGISTRY and OUT_REGISTRY using the supplied
# username and tokens.
.copy-images:
parallel:
matrix:
- TAG_SUFFIX: ["", "-packaging"]
before_script:
- !reference [.regctl-setup, before_script]
- apk add --no-cache make bash
variables:
REGCTL: regctl
script:
- |
if [ -n ${IN_REGISTRY} ] && [ -n ${IN_REGISTRY_USER} ]; then
echo "Logging in to ${IN_REGISTRY}"
${REGCTL} registry login "${IN_REGISTRY}" -u "${IN_REGISTRY_USER}" -p "${IN_REGISTRY_TOKEN}" || exit 1
fi
if [ -n ${OUT_REGISTRY} ] && [ -n ${OUT_REGISTRY_USER} ] && [ "${IN_REGISTRY}" != "${OUT_REGISTRY}" ]; then
echo "Logging in to ${OUT_REGISTRY}"
${REGCTL} registry login "${OUT_REGISTRY}" -u "${OUT_REGISTRY_USER}" -p "${OUT_REGISTRY_TOKEN}" || exit 1
fi
export IN_IMAGE="${IN_IMAGE_NAME}:${IN_IMAGE_TAG}${TAG_SUFFIX}"
export OUT_IMAGE="${OUT_IMAGE_NAME}:${OUT_IMAGE_TAG}${TAG_SUFFIX}"
echo "Copying ${IN_IMAGE} to ${OUT_IMAGE}"
${REGCTL} image copy ${IN_IMAGE} ${OUT_IMAGE}
# pull-images pulls images from the public CI registry to the internal CI registry.
pull-images:
extends:
- .copy-images
stage: pull
variables:
IN_REGISTRY: "${STAGING_REGISTRY}"
IN_IMAGE_NAME: ${STAGING_REGISTRY}/container-toolkit
IN_IMAGE_TAG: "${STAGING_VERSION}"
OUT_REGISTRY: "${CI_REGISTRY}"
OUT_REGISTRY_USER: "${CI_REGISTRY_USER}"
OUT_REGISTRY_TOKEN: "${CI_REGISTRY_PASSWORD}"
OUT_IMAGE_NAME: "${CI_REGISTRY_IMAGE}/container-toolkit"
OUT_IMAGE_TAG: "${CI_COMMIT_SHORT_SHA}"
# We delay the job start to allow the public pipeline to generate the required images.
rules:
# If the pipeline is triggered from a tag or the WEB UI we don't delay the
# start of the pipeline.
- if: $CI_COMMIT_TAG || $CI_PIPELINE_SOURCE == "web"
# If the pipeline is triggered through other means (i.e. a branch or MR)
# we add a 30 minute delay to ensure that the images are available in the
# public CI registry.
- when: delayed
start_in: 30 minutes
timeout: 30 minutes
retry:
max: 2
when:
- job_execution_timeout
- stuck_or_timeout_failure
# We skip the integration tests for the internal CI:
.integration:
stage: test
before_script:
- echo "Skipped in internal CI"
script:
- echo "Skipped in internal CI"
# The .scan step forms the base of the image scan operation performed before releasing
# images.
scan-images:
stage: scan
needs:
- pull-images
image: "${PULSE_IMAGE}"
parallel:
matrix:
- TAG_SUFFIX: [""]
PLATFORM: ["linux/amd64", "linux/arm64"]
- TAG_SUFFIX: "-packaging"
PLATFORM: "linux/amd64"
variables:
IMAGE: "${CI_REGISTRY_IMAGE}/container-toolkit:${CI_COMMIT_SHORT_SHA}"
IMAGE_ARCHIVE: "container-toolkit-${CI_JOB_ID}.tar"
allow_failure: true
script:
- |
docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
export SCAN_IMAGE=${IMAGE}${TAG_SUFFIX}
echo "Scanning image ${SCAN_IMAGE} for ${PLATFORM}"
docker pull --platform="${PLATFORM}" "${SCAN_IMAGE}"
docker save "${SCAN_IMAGE}" -o "${IMAGE_ARCHIVE}"
AuthHeader=$(echo -n $SSA_CLIENT_ID:$SSA_CLIENT_SECRET | base64 -w0)
export SSA_TOKEN=$(curl --request POST --header "Authorization: Basic $AuthHeader" --header "Content-Type: application/x-www-form-urlencoded" ${SSA_ISSUER_URL} | jq ".access_token" | tr -d '"')
if [ -z "$SSA_TOKEN" ]; then exit 1; else echo "SSA_TOKEN set!"; fi
pulse-cli -n $NSPECT_ID --ssa $SSA_TOKEN scan -i $IMAGE_ARCHIVE -p $CONTAINER_POLICY -o
rm -f "${IMAGE_ARCHIVE}"
artifacts:
when: always
expire_in: 1 week
paths:
- pulse-cli.log
- licenses.json
- sbom.json
- vulns.json
- policy_evaluation.json
upload-kitmaker-packages:
stage: release
needs:
- pull-images
variables:
VERSION: "${CI_COMMIT_SHORT_SHA}"
PACKAGE_REGISTRY: "${CI_REGISTRY}"
PACKAGE_REGISTRY_USER: "${CI_REGISTRY_USER}"
PACKAGE_REGISTRY_TOKEN: "${CI_REGISTRY_PASSWORD}"
PACKAGE_IMAGE_NAME: "${CI_REGISTRY_IMAGE}/container-toolkit"
PACKAGE_IMAGE_TAG: "${CI_COMMIT_SHORT_SHA}-packaging"
KITMAKER_ARTIFACTORY_REPO: "${ARTIFACTORY_REPO_BASE}-generic-local/${KITMAKER_RELEASE_FOLDER}"
ARTIFACTS_DIR: "${CI_PROJECT_DIR}/artifacts"
script:
- !reference [.regctl-setup, before_script]
- apk add --no-cache bash git
- regctl registry login "${PACKAGE_REGISTRY}" -u "${PACKAGE_REGISTRY_USER}" -p "${PACKAGE_REGISTRY_TOKEN}"
- ./scripts/extract-packages.sh "${PACKAGE_IMAGE_NAME}:${PACKAGE_IMAGE_TAG}"
- ./scripts/release-kitmaker-artifactory.sh "${KITMAKER_ARTIFACTORY_REPO}"
- rm -rf ${ARTIFACTS_DIR}
push-images-to-staging:
extends:
- .copy-images
stage: release
needs:
- scan-images
variables:
IN_REGISTRY: "${CI_REGISTRY}"
IN_REGISTRY_USER: "${CI_REGISTRY_USER}"
IN_REGISTRY_TOKEN: "${CI_REGISTRY_PASSWORD}"
IN_IMAGE_NAME: "${CI_REGISTRY_IMAGE}/container-toolkit"
IN_IMAGE_TAG: "${CI_COMMIT_SHORT_SHA}"
OUT_REGISTRY: "${NGC_REGISTRY}"
OUT_REGISTRY_USER: "${NGC_REGISTRY_USER}"
OUT_REGISTRY_TOKEN: "${NGC_REGISTRY_TOKEN}"
OUT_IMAGE_NAME: "${NGC_STAGING_REGISTRY}/container-toolkit"
OUT_IMAGE_TAG: "${CI_COMMIT_SHORT_SHA}"
.publish-images:
stage: ngc-publish
needs:
- scan-images
- push-images-to-staging
image:
name: "${CNT_NGC_PUBLISH_IMAGE}"
pull_policy: always
variables:
variables:
GITLAB_ACCESS_TOKEN: "${CNT_GITLAB_TOKEN}"
IN_IMAGE_TAG: "${CI_COMMIT_SHORT_SHA}"
OUT_IMAGE_TAG: "${CI_COMMIT_TAG}"
VERSION_FILE: "build-info-${CI_PIPELINE_ID}.txt"
PROJECT_NAME: "nvidia-container-toolkit"
before_script:
- |
if [ -n "${OVERRIDE_PUBLISHING_PROJECT_PATH}" ]; then
NGC_PUBLISHING_PROJECT_PATH="${OVERRIDE_PUBLISHING_PROJECT_PATH}"
fi
if [ -z "${NGC_PUBLISHING_PROJECT_PATH}" ]; then
echo "NGC_PUBLISHING_PROJECT_PATH not set"
exit 1
fi
echo "publishing to ${NGC_PUBLISHING_PROJECT_PATH}"
rm -f ${VERSION_FILE}
echo "${IN_IMAGE_TAG} ${OUT_IMAGE_TAG}" >> ${VERSION_FILE}
echo "${IN_IMAGE_TAG}-packaging ${OUT_IMAGE_TAG}-packaging" >> ${VERSION_FILE}
cat ${VERSION_FILE}
script:
- cnt-ngc-publish render --project-name "${PROJECT_NAME}" --versions-file "${VERSION_FILE}" --output "${PROJECT_NAME}".yaml
- cnt-ngc-publish merge-request --files "${PROJECT_NAME}.yaml"
artifacts:
paths:
- "${VERSION_FILE}"
- "${PROJECT_NAME}.yaml"
publish-images-to-ngc:
extends:
- .publish-images
rules:
- if: $CI_COMMIT_TAG
# We create a dummy MR that exercises the publishing logic.
# TODO: This MR should be closed automatically.
publish-images-dummy:
extends:
- .publish-images
variables:
OVERRIDE_PUBLISHING_PROJECT_PATH: "dl/container-dev/ngc-automation"
OUT_IMAGE_TAG: "publish-${CI_COMMIT_SHORT_SHA}"
rules:
- if: $CI_COMMIT_TAG == null || $CI_COMMIT_TAG == ""
================================================
FILE: CHANGELOG.md
================================================
# NVIDIA Container Toolkit Changelog
## v1.19.0
- Promote v1.19.0-rc.7 to v1.19.0
## v1.19.0-rc.7
- fix: Reuse instantiated editsFactory in CDI
- fix: Don't use driver version in ELF header for compat check
- Use jit-cdi modifier for gated modifiers
- refactor: Use automatic CDI modifier for CSV
- fix: Use driver.Root instead of config option in modifier Factory
- test: Improve csv modifier tests
- test: Add IsOverrideApplied function to devices package
- chore: Run goimports on mocks
- fix: Ensure that CUDA Compat Container path is set by default
- chore: Update isIntegratedGPU for readability
- chore: Rename isIntegratedGPUID function to isOrinGPUID
- fix: Use correct version when updating versions.mk
## v1.19.0-rc.6
- Use host CUDA version for all CSV compat checks
## v1.19.0-rc.5
- Remove dlopen locator added in v1.19.0-rc.4
### Changes in the Toolkit Container
- build(deps): Bump nvidia/distroless/go to v4.0.2-dev in /deployments/container
## v1.19.0-rc.4
- Add a Dlopen-based library locator
- Add support for injecting additional GIDs
- Add support for CUDA forward compat on Orin systems
## v1.19.0-rc.3
- Remove restart logic from nvidia-cdi-refresh.service.
- fix: Set device node GID in CDI specs
- fix: Log actual CDI spec version
- Make internal/system packages public
- Move config to api
- Make internal lookup package exportable
- fix: Allow config options to be set to default values
- test: Add failing test for setting debug log
- test: Adjust e2e test for Docker 29.2.0
### Changes in the Toolkit Container
- build(deps): Bump nvidia/distroless/go to v4.0.1-dev in /deployments/container
- Replace repackaging using fpm with rpmrebuild
### Changes in libnvidia-container
- Add libnvidia-tileiras.so to the list of compute libs
## v1.19.0-rc.2
- fix: Ensure that iGPU device nodes includes /dev/nvidia2
- restrict NRI injection of CDI devices to pods in the toolkit's namespace
- test: Add test for CSV-based device spec generation
- fix: Add docker swarm support to jit-cdi mode
- feat: Check ELF note for CUDA compat
- Refactor enable-cuda-compat hook
- fix: Allow nvidia-cdi-refresh.service to be restarted
- fix: permissions sync
- fix(discover): remove ro mount option from IPC sockets
- Simplify logger.Interface
- Add --no-runtime-config option to toolkit installer
- Add interface for runtime configuration to installer
- implement NRI plugin server to inject management CDI devices
- Generate none device spec
- fix: Fix arguments when creating DRM device symlinks
- fix: Skip device node injection if NVIDIA_VISIBLE_DEVICES=none
- test: Add failing test for NVIDIA_VISIBLE_DEVICES=none
- Fix library paths in Apline containers
- fix: Use pure CSV mode when a single device is found
- fix: Don't filter device nodes when disable-multiple-csv-devices is enabled
- trim extraneous whitespaces when parsing comma-separated config sources
- fix: Return error on JIT CDI spec generation failure
### Changes in the Toolkit Container
- Bump nvidia/distroless/go in /deployments/container
- Bump nvidia/distroless/go in /deployments/container
### Changes in libnvidia-container
- Add tooling to auto-bump golang version
- Allow GOLANG_VERSION to be overridden
## v1.19.0-rc.1
- Add enable-cuda-compat on Tegra-based systems
- Add --cuda-compat-container-root
- Add --device-id flag to nvidia-ctk cdi generate command
- Handle multiple GPUs in CDI spec generation from CSV
- Fix trigger of CDI refresh service
- Add --no-all-device option to nvidia-ctk cd generate
- Default to strict decoding of OCI runtime spec
- Load minimal spec to extract container root
- Allow update-ldcache to work when pivot-root is not supported
- Extract device information from host path if possible
- Fix update of ldcache for non-matching host and container distros
- Use enable-cuda-compat hook when ldcache does not exist
- ldconfig: Create ld.so.conf file if missing
- ldconfig: Determine container "debian-ness" after root pivot
- Add missing return in `getSystemSearchPaths` for debian like containers
- Use requested devices for CSV CDI spec generation
- Also consider libnvidia-ml.so for extracting driver version
- Switch to go 1.25 os.Root
- Filter already tracked directories from ldcache update
- Correct typo in nvsandboxutils feature flag
- Allow nvcdi FeatureFlags to be configured for jit-cdi mode
- Fix duplicate specs for jit-cdi mode
- Fix trigger of CDI refresh service
- Update rpm package to have 256bit digests
- Fix generate tests when cdi hook exists in path
- Fix containerd drop-in config path
- Redirect log message to stderr in nvidia runtime wrapper script
- chore: fix issues raised by govet and gocritic
- Fix handling of existing imports in containerd
- Don't read cdi generate mode from runtime mode
- Fix bug in create-dev-char-symlinks command
- Fix typo in nvidia-container-runtime's README
### Changes in the Toolkit Container
- Update rpm package to have 256bit digests
- Bump nvidia/distroless/go in /deployments/container
- Bump nvidia/distroless/go in /deployments/container
## v1.18.0
- Fix bug in device selection in jit-cdi mode
- Make list of explicit driver libraries opt-in
### Changes in the Toolkit Container
- Invoke the actual default low-level runtime in the nvidia-ctk wrapper script
- Remove default_runtime from cri-o config on cleanup
- Do not remove cri-o drop-in file on shutdown.
## v1.18.0-rc.6
- Remove ppc64le artifacts from build
- Add support for building artifacts with custom GOPROXY
- Always update the ldcache in the container.
### Changes in the Toolkit Container
- Bump nvidia/distroless/go to v3.1.13-dev in /deployments/container
- Allow config sources to be specified for containerd and crio
- Allow file for config source to be specified explicitly
## Changes in libnvidia-container
- Add clock_gettime to the set of allowed syscalls under seccomp.
## v1.18.0-rc.5
- Fix handling of unrecognised hooks
- Disable generation of coherent CDI specs by default
- Update go-nvlib to restrict nvidia.com/gpu.coherent devices to devices with an ATS addressing mode.
- Deprecate the hook config mode for cri-o
### Changes in the Toolkit Container
- Deprecate the hook config mode for cri-o
- Add CRI plugin config from source containerd config to drop-in file
- Add support for drop-in config files in a container
## v1.18.0-rc.4
- Add drop-in file support for containerd and crio
- Add support for IMEX_CHANNELS to jit-cdi mode
- Refactor IMEX channel requests from image
- Remove redundant CDI annotations
- support running and degraded systemd state during install
- Don't inject enable-cuda-compat hook in CSV mode
- Cleanup default runtime in runtime config when setAsDefault=false
### Changes in the Toolkit Container
- Bump nvidia/distroless/go to v3.1.12-dev in /deployments/container
## v1.18.0-rc.3
- Generate separate specs for coherent and noncoherent devices
- Disable chmod hook by default
- Add support for gated modifications jit-cdi mode
- Add support for nvswitch mode to nvcdi API
- Add support for gdrcopy mode to nvcdi API
- Consolidate CDI spec generation of gated modes
- Add missing imex mode to Valid modes
- Add explicitLibs list to libs discovery
- Consolidate logic to determine driver version
- Fix: Enable local YUM repo by default in CentOS8 and Fedora35 entrypoints
### Changes in the Toolkit Container
- Bump nvidia/distroless/go to v3.1.11-dev in /deployments/container
## v1.18.0-rc.2
- Ensure that .so symlinks are created for driver libraries in the container
- Load settings from config.toml file during CDI generation
- Use securejoin to resolve /proc
- Refactor nvml CDI spec generation for consistency
- Simplify nvcdi interface
- Add SpecGenerator interface
- Ensure that modified params file mount does not leak to host
- Add test for leaking mounts with shared mount propagation
### Changes in the Toolkit Container
- Bump nvidia/distroless/go to v3.1.10-dev in /deployments/container
- Bump nvidia/cuda to 12.9.1-base-ubi9 in /deployments/container
## v1.18.0-rc.1
- Add create-soname-symlinks hook
- Require matching version of libnvidia-container-tools
- Add envvar for libcuda.so parent dir to CDI spec
- Add EnvVar to Discover interface
- Resolve to legacy by default in nvidia-container-runtime-hook
- Default to jit-cdi mode in the nvidia runtime
- Use functional options to construct runtime mode resolver
- Add NVIDIA_CTK_CONFIG_FILE_PATH envvar
- Switch to cuda ubi9 base image
- Use single version tag for image
- BUGFIX: modifier: respect GPU volume-mount device requests
- Ensure consistent sorting of annotation devices
- Extract deb and rpm packages to single image
- Remove docker-run as default runtime candidate
- Return annotation devices from VisibleDevices
- Make CDI device requests consistent with other methods
- Construct container info once
- Add logic to extract annotation device requests to image type
- Add IsPrivileged function to CUDA container type
- Add device IDs to nvcdi.GetSpec API
- Refactor extracting requested devices from the container image
- Add EnvVars option for all nvidia-ctk cdi commands
- Add nvidia-cdi-refresh service
- Add discovery of arch-specific vulkan ICD
- Add disabled-device-node-modification hook to CDI spec
- Add a hook to disable device node creation in a container
- Remove redundant deduplication of search paths for WSL
- Added ability to disable specific (or all) CDI hooks
- Consolidate HookName functionality on internal/discover pkg
- Add envvar to control debug logging in CDI hooks
- Add FeatureFlags to the nvcdi API
- Reenable nvsandboxutils for driver discovery
- Edit discover.mounts to have a deterministic output
- Refactor the way we create CDI Hooks
- Issue warning on unsupported CDI hook
- Run update-ldcache in isolated namespaces
- Add cuda-compat-mode config option
- Fix mode detection on Thor-based systems
- Add rprivate to CDI mount options
- Skip nil discoverers in merge
- bump runc go dep to v1.3.0
- Fix resolution of libs in LDCache on ARM
- Updated .release:staging to stage images in nvstaging
- Refactor toolkit installer
- Allow container runtime executable path to be specified
- Add support for building ubuntu22.04 on arm64
- Fix race condition in mounts cache
- Add support for building ubuntu22.04 on amd64
- Fix update-ldcache arguments
- Remove positional arguments from nvidia-ctk-installer
- Remove deprecated --runtime-args from nvidia-ctk-installer
- Add version info to nvidia-ctk-installer
- Update nvidia-ctk-installer app name to match binary name
- Allow nvidia-ctk config --set to accept comma-separated lists
- Disable enable-cuda-compat hook for management containers
- Allow enable-cuda-compat hook to be disabled in CDI spec generation
- Add disable-cuda-compat-lib-hook feature flag
- Add basic integration tests for forward compat
- Ensure that mode hook is executed last
- Add enable-cuda-compat hook to CDI spec generation
- Add ldconfig hook in legacy mode
- Add enable-cuda-compat hook if required
- Add enable-cuda-compat hook to allow compat libs to be discovered
- Use libcontainer execseal to run ldconfig
- Add ignore-imex-channel-requests feature flag
- Disable nvsandboxutils in nvcdi API
- Allow cdi mode to work with --gpus flag
- Add E2E GitHub Action for Container Toolkit
- Add remote-test option for E2E
- Enable CDI in runtime if CDI_ENABLED is set
- Fix overwriting docker feature flags
- Add option in toolkit container to enable CDI in runtime
- Remove Set from engine config API
- Add EnableCDI() method to engine.Interface
- Add IMEX binaries to CDI discovery
- Rename test folder to tests
- Add allow-cuda-compat-libs-from-container feature flag
- Disable mounting of compat libs from container
- Skip graphics modifier in CSV mode
- Move nvidia-toolkit to nvidia-ctk-installer
- Automated regression testing for the NVIDIA Container Toolkit
- Add support for containerd version 3 config
- Remove watch option from create-dev-char-symlinks
- Add string TOML source
- Improve the implementation for UseLegacyConfig
- Properly pass configSearchPaths to a Driver constructor
- Fix create-device-node test when devices exist
- Add imex mode to CDI spec generation
- Only allow host-relative LDConfig paths
- Fix NVIDIA_IMEX_CHANNELS handling on legacy images
- Fix bug in default config file path
- Fix fsnotify.Remove logic function.
- Force symlink creation in create-symlink hook
### Changes in the Toolkit Container
- Create /work/nvidia-toolkit symlink
- Use Apache license for images
- Switch to golang distroless image
- Switch to cuda ubi9 base image
- Use single version tag for image
- Extract deb and rpm packages to single image
- Bump nvidia/cuda in /deployments/container
- Bump nvidia/cuda in /deployments/container
- Add E2E GitHub Action for Container Toolkit
- Bump nvidia/cuda in /deployments/container
- Move nvidia-toolkit to nvidia-ctk-installer
- Add support for containerd version 3 config
- Improve the implementation for UseLegacyConfig
- Bump nvidia/cuda in /deployments/container
- Add imex mode to CDI spec generation
- Only allow host-relative LDConfig paths
- Fallback to file for runtime config
### Changes in libnvidia-container
- Fix pointer accessing local variable out of scope
- Require version match between libnvidia-container-tools and libnvidia-container1
- Add libnvidia-gpucomp.so to the list of compute libs
- Use VERSION_ prefix for version parts in makefiles
- Add additional logging
- Do not discard container flags when --cuda-compat-mode is not specified
- Remove unneeded --no-cntlibs argument from list command
- Add cuda-compat-mode flag to configure command
- Skip files when user has insufficient permissions
- Fix building with Go 1.24
- Add no-cntlibs CLI option to nvidia-container-cli
- Fix always using fallback
- Add fallback for systems without memfd_create()
- Create virtual copy of host ldconfig binary before calling fexecve()
- Fix some typos in text.
## v1.17.0
- Promote v1.17.0-rc.2 to v1.17.0
- Fix bug when using just-in-time CDI spec generation
- Check for valid paths in create-symlinks hook
## v1.17.0-rc.2
- Fix bug in locating libcuda.so from ldcache
- Fix bug in sorting of symlink chain
- Remove unsupported print-ldcache command
- Remove csv-filename support from create-symlinks
### Changes in the Toolkit Container
- Fallback to `crio-status` if `crio status` does not work when configuring the crio runtime
## v1.17.0-rc.1
- Allow IMEX channels to be requested as volume mounts
- Fix typo in error message
- Add disable-imex-channel-creation feature flag
- Add -z,lazy to LDFLAGS
- Add imex channels to management CDI spec
- Add support to fetch current container runtime config from the command line.
- Add creation of select driver symlinks to CDI spec generation.
- Remove support for config overrides when configuring runtimes.
- Skip explicit creation of libnvidia-allocator.so.1 symlink
- Add vdpau as as a driver library search path.
- Add support for using libnvsandboxutils to generate CDI specifications.
### Changes in the Toolkit Container
- Allow opt-in features to be selected when deploying the toolkit-container.
- Bump CUDA base image version to 12.6.2
- Remove support for config overrides when configuring runtimes.
### Changes in libnvidia-container
- Add no-create-imex-channels command line option.
## v1.16.2
- Exclude libnvidia-allocator from graphics mounts. This fixes a bug that leaks mounts when a container is started with bi-directional mount propagation.
- Use empty string for default runtime-config-override. This removes a redundant warning for runtimes (e.g. Docker) where this is not applicable.
### Changes in the Toolkit Container
- Bump CUDA base image version to 12.6.0
### Changes in libnvidia-container
- Add no-gsp-firmware command line option
- Add no-fabricmanager command line option
- Add no-persistenced command line option
- Skip directories and symlinks when mounting libraries.
## v1.16.1
- Fix bug with processing errors during CDI spec generation for MIG devices
## v1.16.0
- Promote v1.16.0-rc.2 to v1.16.0
### Changes in the Toolkit Container
- Bump CUDA base image version to 12.5.1
## v1.16.0-rc.2
- Use relative path to locate driver libraries
- Add RelativeToRoot function to Driver
- Inject additional libraries for full X11 functionality
- Extract options from default runtime if runc does not exist
- Avoid using map pointers as maps are always passed by reference
- Reduce logging for the NVIDIA Container runtime
- Fix bug in argument parsing for logger creation
## v1.16.0-rc.1
- Support vulkan ICD files directly in a driver root. This allows for the discovery of vulkan files in GKE driver installations.
- Increase priority of ld.so.conf.d config file injected into container. This ensures that injected libraries are preferred over libraries present in the container.
- Set default CDI spec permissions to 644. This fixes permission issues when using the `nvidia-ctk cdi transform` functions.
- Add `dev-root` option to `nvidia-ctk system create-device-nodes` command.
- Fix location of `libnvidia-ml.so.1` when a non-standard driver root is used. This enabled CDI spec generation when using the driver container on a host.
- Recalculate minimum required CDI spec version on save.
- Move `nvidia-ctk hook` commands to a separate `nvidia-cdi-hook` binary. The same subcommands are supported.
- Use `:` as an `nvidia-ctk config --set` list separator. This fixes a bug when trying to set config options that are lists.
- [toolkit-container] Bump CUDA base image version to 12.5.0
- [toolkit-container] Allow the path to `toolkit.pid` to be specified directly.
- [toolkit-container] Remove provenance information from image manifests.
- [toolkit-container] Add `dev-root` option when configuring the toolkit. This adds support for GKE driver installations.
## v1.15.0
* Remove `nvidia-container-runtime` and `nvidia-docker2` packages.
* Use `XDG_DATA_DIRS` environment variable when locating config files such as graphics config files.
* Add support for v0.7.0 Container Device Interface (CDI) specification.
* Add `--config-search-path` option to `nvidia-ctk cdi generate` command. These paths are used when locating driver files such as graphics config files.
* Use D3DKMTEnumAdapters3 to enumerate adpaters on WSL2 if available.
* Add support for v1.2.0 OCI Runtime specification.
* Explicitly set `NVIDIA_VISIBLE_DEVICES=void` in generated CDI specifications. This prevents the NVIDIA Container Runtime from making additional modifications.
* [libnvidia-container] Use D3DKMTEnumAdapters3 to enumerate adpaters on WSL2 if available.
* [toolkit-container] Bump CUDA base image version to 12.4.1
## v1.15.0-rc.4
* Add a `--spec-dir` option to the `nvidia-ctk cdi generate` command. This allows specs outside of `/etc/cdi` and `/var/run/cdi` to be processed.
* Add support for extracting device major number from `/proc/devices` if `nvidia` is used as a device name over `nvidia-frontend`.
* Allow multiple device naming strategies for `nvidia-ctk cdi generate` command. This allows a single
CDI spec to be generated that includes GPUs by index and UUID.
* Set the default `--device-name-strategy` for the `nvidia-ctk cdi generate` command to `[index, uuid]`.
* Remove `libnvidia-container0` jetpack dependency included for legacy Tegra-based systems.
* Add `NVIDIA_VISIBLE_DEVICES=void` to generated CDI specifications.
* [toolkit-container] Remove centos7 image. The ubi8 image can be used on all RPM-based platforms.
* [toolkit-container] Bump CUDA base image version to 12.3.2
## v1.15.0-rc.3
* Fix bug in `nvidia-ctk hook update-ldcache` where default `--ldconfig-path` value was not applied.
## v1.15.0-rc.2
* Extend the `runtime.nvidia.com/gpu` CDI kind to support full-GPUs and MIG devices specified by index or UUID.
* Fix bug when specifying `--dev-root` for Tegra-based systems.
* Log explicitly requested runtime mode.
* Remove package dependency on libseccomp.
* Added detection of libnvdxgdmal.so.1 on WSL2
* Use devRoot to resolve MIG device nodes.
* Fix bug in determining default nvidia-container-runtime.user config value on SUSE-based systems.
* Add `crun` to the list of configured low-level runtimes.
* Added support for `--ldconfig-path` to `nvidia-ctk cdi generate` command.
* Fix `nvidia-ctk runtime configure --cdi.enabled` for Docker.
* Add discovery of the GDRCopy device (`gdrdrv`) if the `NVIDIA_GDRCOPY` environment variable of the container is set to `enabled`
* [toolkit-container] Bump CUDA base image version to 12.3.1.
## v1.15.0-rc.1
* Skip update of ldcache in containers without ldconfig. The .so.SONAME symlinks are still created.
* Normalize ldconfig path on use. This automatically adjust the ldconfig setting applied to ldconfig.real on systems where this exists.
* Include `nvidia/nvoptix.bin` in list of graphics mounts.
* Include `vulkan/icd.d/nvidia_layers.json` in list of graphics mounts.
* Add support for `--library-search-paths` to `nvidia-ctk cdi generate` command.
* Add support for injecting /dev/nvidia-nvswitch* devices if the NVIDIA_NVSWITCH=enabled envvar is specified.
* Added support for `nvidia-ctk runtime configure --enable-cdi` for the `docker` runtime. Note that this requires Docker >= 25.
* Fixed bug in `nvidia-ctk config` command when using `--set`. The types of applied config options are now applied correctly.
* Add `--relative-to` option to `nvidia-ctk transform root` command. This controls whether the root transformation is applied to host or container paths.
* Added automatic CDI spec generation when the `runtime.nvidia.com/gpu=all` device is requested by a container.
* [libnvidia-container] Fix device permission check when using cgroupv2 (fixes #227)
## v1.14.3
* [toolkit-container] Bump CUDA base image version to 12.2.2.
## v1.14.2
* Fix bug on Tegra-based systems where symlinks were not created in containers.
* Add --csv.ignore-pattern command line option to nvidia-ctk cdi generate command.
## v1.14.1
* Fixed bug where contents of `/etc/nvidia-container-runtime/config.toml` is ignored by the NVIDIA Container Runtime Hook.
* [libnvidia-container] Use libelf.so on RPM-based systems due to removed mageia repositories hosting pmake and bmake.
## v1.14.0
* Promote v1.14.0-rc.3 to v1.14.0
## v1.14.0-rc.3
* Added support for generating OCI hook JSON file to `nvidia-ctk runtime configure` command.
* Remove installation of OCI hook JSON from RPM package.
* Refactored config for `nvidia-container-runtime-hook`.
* Added a `nvidia-ctk config` command which supports setting config options using a `--set` flag.
* Added `--library-search-path` option to `nvidia-ctk cdi generate` command in `csv` mode. This allows folders where
libraries are located to be specified explicitly.
* Updated go-nvlib to support devices which are not present in the PCI device database. This allows the creation of dev/char symlinks on systems with such devices installed.
* Added `UsesNVGPUModule` info function for more robust platform detection. This is required on Tegra-based systems where libnvidia-ml.so is also supported.
* [toolkit-container] Set `NVIDIA_VISIBLE_DEVICES=void` to prevent injection of NVIDIA devices and drivers into the NVIDIA Container Toolkit container.
## v1.14.0-rc.2
* Fix bug causing incorrect nvidia-smi symlink to be created on WSL2 systems with multiple driver roots.
* Remove dependency on coreutils when installing package on RPM-based systems.
* Create output folders if required when running `nvidia-ctk runtime configure`
* Generate default config as post-install step.
* Added support for detecting GSP firmware at custom paths when generating CDI specifications.
* Added logic to skip the extraction of image requirements if `NVIDIA_DISABLE_REQUIRES` is set to `true`.
* [libnvidia-container] Include Shared Compiler Library (libnvidia-gpucomp.so) in the list of compute libaries.
* [toolkit-container] Ensure that common envvars have higher priority when configuring the container engines.
* [toolkit-container] Bump CUDA base image version to 12.2.0.
* [toolkit-container] Remove installation of nvidia-experimental runtime. This is superceded by the NVIDIA Container Runtime in CDI mode.
## v1.14.0-rc.1
* Add support for updating containerd configs to the `nvidia-ctk runtime configure` command.
* Create file in `etc/ld.so.conf.d` with permissions `644` to support non-root containers.
* Generate CDI specification files with `644` permissions to allow rootless applications (e.g. podman)
* Add `nvidia-ctk cdi list` command to show the known CDI devices.
* Add support for generating merged devices (e.g. `all` device) to the nvcdi API.
* Use *.* pattern to locate libcuda.so when generating a CDI specification to support platforms where a patch version is not specified.
* Update go-nvlib to skip devices that are not MIG capable when generating CDI specifications.
* Add `nvidia-container-runtime-hook.path` config option to specify NVIDIA Container Runtime Hook path explicitly.
* Fix bug in creation of `/dev/char` symlinks by failing operation if kernel modules are not loaded.
* Add option to load kernel modules when creating device nodes
* Add option to create device nodes when creating `/dev/char` symlinks
* [libnvidia-container] Support OpenSSL 3 with the Encrypt/Decrypt library
* [toolkit-container] Allow same envars for all runtime configs
## v1.13.1
* Update `update-ldcache` hook to only update ldcache if it exists.
* Update `update-ldcache` hook to create `/etc/ld.so.conf.d` folder if it doesn't exist.
* Fix failure when libcuda cannot be located during XOrg library discovery.
* Fix CDI spec generation on systems that use `/etc/alternatives` (e.g. Debian)
## v1.13.0
* Promote 1.13.0-rc.3 to 1.13.0
## v1.13.0-rc.3
* Only initialize NVML for modes that require it when runing `nvidia-ctk cdi generate`.
* Prefer /run over /var/run when locating nvidia-persistenced and nvidia-fabricmanager sockets.
* Fix the generation of CDI specifications for management containers when the driver libraries are not in the LDCache.
* Add transformers to deduplicate and simplify CDI specifications.
* Generate a simplified CDI specification by default. This means that entities in the common edits in a spec are not included in device definitions.
* Also return an error from the nvcdi.New constructor instead of panicing.
* Detect XOrg libraries for injection and CDI spec generation.
* Add `nvidia-ctk system create-device-nodes` command to create control devices.
* Add `nvidia-ctk cdi transform` command to apply transforms to CDI specifications.
* Add `--vendor` and `--class` options to `nvidia-ctk cdi generate`
* [libnvidia-container] Fix segmentation fault when RPC initialization fails.
* [libnvidia-container] Build centos variants of the NVIDIA Container Library with static libtirpc v1.3.2.
* [libnvidia-container] Remove make targets for fedora35 as the centos8 packages are compatible.
* [toolkit-container] Add `nvidia-container-runtime.modes.cdi.annotation-prefixes` config option that allows the CDI annotation prefixes that are read to be overridden.
* [toolkit-container] Create device nodes when generating CDI specification for management containers.
* [toolkit-container] Add `nvidia-container-runtime.runtimes` config option to set the low-level runtime for the NVIDIA Container Runtime
## v1.13.0-rc.2
* Don't fail chmod hook if paths are not injected
* Only create `by-path` symlinks if CDI devices are actually requested.
* Fix possible blank `nvidia-ctk` path in generated CDI specifications
* Fix error in postun scriplet on RPM-based systems
* Only check `NVIDIA_VISIBLE_DEVICES` for environment variables if no annotations are specified.
* Add `cdi.default-kind` config option for constructing fully-qualified CDI device names in CDI mode
* Add support for `accept-nvidia-visible-devices-envvar-unprivileged` config setting in CDI mode
* Add `nvidia-container-runtime-hook.skip-mode-detection` config option to bypass mode detection. This allows `legacy` and `cdi` mode, for example, to be used at the same time.
* Add support for generating CDI specifications for GDS and MOFED devices
* Ensure CDI specification is validated on save when generating a spec
* Rename `--discovery-mode` argument to `--mode` for `nvidia-ctk cdi generate`
* [libnvidia-container] Fix segfault on WSL2 systems
* [toolkit-container] Add `--cdi-enabled` flag to toolkit config
* [toolkit-container] Install `nvidia-ctk` from toolkit container
* [toolkit-container] Use installed `nvidia-ctk` path in NVIDIA Container Toolkit config
* [toolkit-container] Bump CUDA base images to 12.1.0
* [toolkit-container] Set `nvidia-ctk` path in the
* [toolkit-container] Add `cdi.k8s.io/*` to set of allowed annotations in containerd config
* [toolkit-container] Generate CDI specification for use in management containers
* [toolkit-container] Install experimental runtime as `nvidia-container-runtime.experimental` instead of `nvidia-container-runtime-experimental`
* [toolkit-container] Install and configure mode-specific runtimes for `cdi` and `legacy` modes
## v1.13.0-rc.1
* Include MIG-enabled devices as GPUs when generating CDI specification
* Fix missing NVML symbols when running `nvidia-ctk` on some platforms [#49]
* Add CDI spec generation for WSL2-based systems to `nvidia-ctk cdi generate` command
* Add `auto` mode to `nvidia-ctk cdi generate` command to automatically detect a WSL2-based system over a standard NVML-based system.
* Add mode-specific (`.cdi` and `.legacy`) NVIDIA Container Runtime binaries for use in the GPU Operator
* Discover all `gsb*.bin` GSP firmware files when generating CDI specification.
* Align `.deb` and `.rpm` release candidate package versions
* Remove `fedora35` packaging targets
* [libnvidia-container] Include all `gsp*.bin` firmware files if present
* [libnvidia-container] Align `.deb` and `.rpm` release candidate package versions
* [libnvidia-container] Remove `fedora35` packaging targets
* [toolkit-container] Install `nvidia-container-toolkit-operator-extensions` package for mode-specific executables.
* [toolkit-container] Allow `nvidia-container-runtime.mode` to be set when configuring the NVIDIA Container Toolkit
## v1.12.0
* Promote `v1.12.0-rc.5` to `v1.12.0`
* Rename `nvidia cdi generate` `--root` flag to `--driver-root` to better indicate intent
* [libnvidia-container] Add nvcubins.bin to DriverStore components under WSL2
* [toolkit-container] Bump CUDA base images to 12.0.1
## v1.12.0-rc.5
* Fix bug here the `nvidia-ctk` path was not properly resolved. This causes failures to run containers when the runtime is configured in `csv` mode or if the `NVIDIA_DRIVER_CAPABILITIES` includes `graphics` or `display` (e.g. `all`).
## v1.12.0-rc.4
* Generate a minimum CDI spec version for improved compatibility.
* Add `--device-name-strategy` options to the `nvidia-ctk cdi generate` command that can be used to control how device names are constructed.
* Set default for CDI device name generation to `index` to generate device names such as `nvidia.com/gpu=0` or `nvidia.com/gpu=1:0` by default.
## v1.12.0-rc.3
* Don't fail if by-path symlinks for DRM devices do not exist
* Replace the --json flag with a --format [json|yaml] flag for the nvidia-ctk cdi generate command
* Ensure that the CDI output folder is created if required
* When generating a CDI specification use a blank host path for devices to ensure compatibility with the v0.4.0 CDI specification
* Add injection of Wayland JSON files
* Add GSP firmware paths to generated CDI specification
* Add --root flag to nvidia-ctk cdi generate command
## v1.12.0-rc.2
* Inject Direct Rendering Manager (DRM) devices into a container using the NVIDIA Container Runtime
* Improve logging of errors from the NVIDIA Container Runtime
* Improve CDI specification generation to support rootless podman
* Use `nvidia-ctk cdi generate` to generate CDI specifications instead of `nvidia-ctk info generate-cdi`
* [libnvidia-container] Skip creation of existing files when these are already mounted
## v1.12.0-rc.1
* Add support for multiple Docker Swarm resources
* Improve injection of Vulkan configurations and libraries
* Add `nvidia-ctk info generate-cdi` command to generated CDI specification for available devices
* [libnvidia-container] Include NVVM compiler library in compute libs
## v1.11.0
* Promote v1.11.0-rc.3 to v1.11.0
## v1.11.0-rc.3
* Build fedora35 packages
* Introduce an `nvidia-container-toolkit-base` package for better dependency management
* Fix removal of `nvidia-container-runtime-hook` on RPM-based systems
* Inject platform files into container on Tegra-based systems
* [toolkit container] Update CUDA base images to 11.7.1
* [libnvidia-container] Preload libgcc_s.so.1 on arm64 systems
## v1.11.0-rc.2
* Allow `accept-nvidia-visible-devices-*` config options to be set by toolkit container
* [libnvidia-container] Fix bug where LDCache was not updated when the `--no-pivot-root` option was specified
## v1.11.0-rc.1
* Add discovery of GPUDirect Storage (`nvidia-fs*`) devices if the `NVIDIA_GDS` environment variable of the container is set to `enabled`
* Add discovery of MOFED Infiniband devices if the `NVIDIA_MOFED` environment variable of the container is set to `enabled`
* Fix bug in CSV mode where libraries listed as `sym` entries in mount specification are not added to the LDCache.
* Rename `nvidia-container-toolkit` executable to `nvidia-container-runtime-hook` and create `nvidia-container-toolkit` as a symlink to `nvidia-container-runtime-hook` instead.
* Add `nvidia-ctk runtime configure` command to configure the Docker config file (e.g. `/etc/docker/daemon.json`) for use with the NVIDIA Container Runtime.
## v1.10.0
* Promote v1.10.0-rc.3 to v1.10.0
## v1.10.0-rc.3
* Use default config instead of raising an error if config file cannot be found
* Ignore NVIDIA_REQUIRE_JETPACK* environment variables for requirement checks
* Fix bug in detection of Tegra systems where `/sys/devices/soc0/family` is ignored
* Fix bug where links to devices were detected as devices
* [libnvida-container] Fix bug introduced when adding libcudadebugger.so to list of libraries
## v1.10.0-rc.2
* Add support for NVIDIA_REQUIRE_* checks for cuda version and arch to csv mode
* Switch to debug logging to reduce log verbosity
* Support logging to logs requested in command line
* Fix bug when launching containers with relative root path (e.g. using containerd)
* Allow low-level runtime path to be set explicitly as nvidia-container-runtime.runtimes option
* Fix failure to locate low-level runtime if PATH envvar is unset
* Replace experimental option for NVIDIA Container Runtime with nvidia-container-runtime.mode = csv option
* Use csv as default mode on Tegra systems without NVML
* Add --version flag to all CLIs
* [libnvidia-container] Bump libtirpc to 1.3.2
* [libnvidia-container] Fix bug when running host ldconfig using glibc compiled with a non-standard prefix
* [libnvidia-container] Add libcudadebugger.so to list of compute libraries
## v1.10.0-rc.1
* Include nvidia-ctk CLI in installed binaries
* Add experimental option to NVIDIA Container Runtime
## v1.9.0
* [libnvidia-container] Add additional check for Tegra in /sys/.../family file in CLI
* [libnvidia-container] Update jetpack-specific CLI option to only load Base CSV files by default
* [libnvidia-container] Fix bug (from 1.8.0) when mounting GSP firmware into containers without /lib to /usr/lib symlinks
* [libnvidia-container] Update nvml.h to CUDA 11.6.1 nvML_DEV 11.6.55
* [libnvidia-container] Update switch statement to include new brands from latest nvml.h
* [libnvidia-container] Process all --require flags on Jetson platforms
* [libnvidia-container] Fix long-standing issue with running ldconfig on Debian systems
## v1.8.1
* [libnvidia-container] Fix bug in determining cgroup root when running in nested containers
* [libnvidia-container] Fix permission issue when determining cgroup version
## v1.8.0
* Promote 1.8.0-rc.2-1 to 1.8.0
## v1.8.0-rc.2
* Remove support for building amazonlinux1 packages
## v1.8.0-rc.1
* [libnvidia-container] Add support for cgroupv2
* Release toolkit-container images from nvidia-container-toolkit repository
## v1.7.0
* Promote 1.7.0-rc.1-1 to 1.7.0
* Bump Golang version to 1.16.4
## v1.7.0-rc.1
* Specify containerd runtime type as string in config tools to remove dependency on containerd package
* Add supported-driver-capabilities config option to allow for a subset of all driver capabilities to be specified
## v1.6.0
* Promote 1.6.0-rc.3-1 to 1.6.0
* Fix unnecessary logging to stderr instead of configured nvidia-container-runtime log file
## v1.6.0-rc.3
* Add supported-driver-capabilities config option to the nvidia-container-toolkit
* Move OCI and command line checks for runtime to internal oci package
## v1.6.0-rc.2
* Use relative path to OCI specification file (config.json) if bundle path is not specified as an argument to the nvidia-container-runtime
## v1.6.0-rc.1
* Add AARCH64 package for Amazon Linux 2
* Include nvidia-container-runtime into nvidia-container-toolkit package
## v1.5.1
* Fix bug where Docker Swarm device selection is ignored if NVIDIA_VISIBLE_DEVICES is also set
* Improve unit testing by using require package and adding coverage reports
* Remove unneeded go dependencies by running go mod tidy
* Move contents of pkg directory to cmd for CLI tools
* Ensure make binary target explicitly sets GOOS
## v1.5.0
* Add dependence on libnvidia-container-tools >= 1.4.0
* Add golang check targets to Makefile
* Add Jenkinsfile definition for build targets
* Move docker.mk to docker folder
## v1.4.2
* Add dependence on libnvidia-container-tools >= 1.3.3
## v1.4.1
* Ignore NVIDIA_VISIBLE_DEVICES for containers with insufficent privileges
* Add dependence on libnvidia-container-tools >= 1.3.2
## v1.4.0
* Add 'compute' capability to list of defaults
* Add dependence on libnvidia-container-tools >= 1.3.1
## v1.3.0
* Promote 1.3.0-rc.2-1 to 1.3.0
* Add dependence on libnvidia-container-tools >= 1.3.0
## v1.3.0-rc.2
* 2c180947 Add more tests for new semantics with device list from volume mounts
* 7c003857 Refactor accepting device lists from volume mounts as a boolean
## v1.3.0-rc.1
* b50d86c1 Update build system to accept a TAG variable for things like rc.x
* fe65573b Add common CI tests for things like golint, gofmt, unit tests, etc.
* da6fbb34 Revert "Add ability to merge envars of the form NVIDIA_VISIBLE_DEVICES_*"
* a7fb3330 Flip build-all targets to run automatically on merge requests
* 8b248b66 Rename github.com/NVIDIA/container-toolkit to nvidia-container-toolkit
* da36874e Add new config options to pull device list from mounted files instead of ENVVAR
## v1.2.1
* 4e6e0ed4 Add 'ngx' to list of*all* driver capabilities
* 2f4af743 List config.toml as a config file in the RPM SPEC
## v1.2.0
* 8e0aab46 Fix repo listed in changelog for debian distributions
* 320bb6e4 Update dependence on libnvidia-container to 1.2.0
* 6cfc8097 Update package license to match source license
* e7dc3cbb Fix debian copyright file
* d3aee3e0 Add the 'ngx' driver capability
## v1.1.2
* c32237f3 Add support for parsing Linux Capabilities for older OCI specs
## v1.1.1
* d202aded Update dependence to libnvidia-container 1.1.1
## v1.1.0
* 4e4de762 Update build system to support multi-arch builds
* fcc1d116 Add support for MIG (Multi-Instance GPUs)
* d4ff0416 Add ability to merge envars of the form NVIDIA_VISIBLE_DEVICES_*
* 60f165ad Add no-pivot option to toolkit
## v1.0.5
* Initial release. Replaces older package nvidia-container-runtime-hook. (Closes: #XXXXXX)
================================================
FILE: CONTRIBUTING.md
================================================
# Contribute to the NVIDIA Container Toolkit
Want to hack on the NVIDIA Container Toolkit Project? Awesome!
We only require you to sign your work, the below section describes this!
## Sign your work
The sign-off is a simple line at the end of the explanation for the patch. Your
signature certifies that you wrote the patch or otherwise have the right to pass
it on as an open-source patch. The rules are pretty simple: if you can certify
the below (from [developercertificate.org](http://developercertificate.org/)):
```
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
1 Letterman Drive
Suite D4700
San Francisco, CA, 94129
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
```
Then you just add a line to every git commit message:
Signed-off-by: Joe Smith <joe.smith@email.com>
Use your real name (sorry, no pseudonyms or anonymous contributions.)
If you set your `user.name` and `user.email` git configs, you can sign your
commit automatically with `git commit -s`.
================================================
FILE: DEVELOPMENT.md
================================================
# NVIDIA Container Toolkit Release Tooling
This repository allows for the components of the NVIDIA container stack to be
built and released as the NVIDIA Container Toolkit from a single repository. The components:
* `libnvidia-container`
* `nvidia-container-runtime`
* `nvidia-docker`
are included as submodules in the `third_party` folder.
The `nvidia-container-toolkit` resides in this repo directly.
## Building
In oder to build the packages, the following command is executed
```sh
./scripts/build-packages.sh TARGET
```
where `TARGET` is a make target that is valid for each of the sub-components.
These include:
* `ubuntu18.04-amd64`
* `centos7-x86_64`
If no `TARGET` is specified, all valid release targets are built.
The packages are generated in the `dist` folder.
## Testing local changes
In oder to use the same build logic to be used to generate packages with local changes,
the location of the individual components can be overridded using the: `LIBNVIDIA_CONTAINER_ROOT`,
`NVIDIA_CONTAINER_TOOLKIT_ROOT`, `NVIDIA_CONTAINER_RUNTIME_ROOT`, and `NVIDIA_DOCKER_ROOT`
environment variables.
## Testing packages locally
The [tests/release](./tests/release/) folder contains documentation on how the installation of local or staged packages can be tested.
## Releasing
In order to release packages required for a release, a utility script
[`scripts/release-packages.sh`](./scripts/release-packages.sh) is provided.
This script can be executed as follows:
```bash
GPG_LOCAL_USER="GPG_USER" \
MASTER_KEY_PATH=/path/to/gpg-master.key \
SUB_KEY_PATH=/path/to/gpg-subkey.key \
./scripts/release-packages.sh REPO PACKAGE_REPO_ROOT [REFERENCE]
```
Where `REPO` is one of `stable` or `experimental`, `PACKAGE_REPO_ROOT` is the local path to the `libnvidia-container` repository checked out to the `gh-pages` branch, and `REFERENCE` is the git SHA that is to be released. If reference is not specified `HEAD` is assumed.
This scripts performs the following basic functions:
* Pulls the package image defined by the `REFERENCE` git SHA from the staging registry,
* Copies the required packages to the package repository at `PACKAGE_REPO_ROOT/REPO`,
* Signs the packages using the specified GPG keys
While the last two are performed, commits are added to the package repository. These can be pushed to the relevant repository.
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: Makefile
================================================
# Copyright (c) 2017-2021, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
DOCKER ?= docker
MKDIR ?= mkdir
DIST_DIR ?= $(CURDIR)/dist
include $(CURDIR)/versions.mk
MODULE := github.com/NVIDIA/nvidia-container-toolkit
# By default run all native docker-based targets
docker-native:
include $(CURDIR)/docker/docker.mk
ifeq ($(IMAGE_NAME),)
REGISTRY ?= nvidia
IMAGE_NAME = $(REGISTRY)/container-toolkit
endif
BUILDIMAGE_TAG ?= golang$(GOLANG_VERSION)
BUILDIMAGE ?= $(IMAGE_NAME)-build:$(BUILDIMAGE_TAG)
EXAMPLES := $(patsubst ./examples/%/,%,$(sort $(dir $(wildcard ./examples/*/))))
EXAMPLE_TARGETS := $(patsubst %,example-%, $(EXAMPLES))
CMDS := $(patsubst ./cmd/%/,%,$(sort $(dir $(wildcard ./cmd/*/))))
CMD_TARGETS := $(patsubst %,cmd-%, $(CMDS))
CHECK_TARGETS := lint
MAKE_TARGETS := binaries build check fmt test examples cmds coverage generate licenses vendor check-vendor $(CHECK_TARGETS)
TARGETS := $(MAKE_TARGETS) $(EXAMPLE_TARGETS) $(CMD_TARGETS)
DOCKER_TARGETS := $(patsubst %,docker-%, $(TARGETS))
.PHONY: $(TARGETS) $(DOCKER_TARGETS)
ifeq ($(VERSION),)
CLI_VERSION = $(LIB_VERSION)$(if $(LIB_TAG),-$(LIB_TAG))
else
CLI_VERSION = $(VERSION)
endif
CLI_VERSION_PACKAGE = github.com/NVIDIA/nvidia-container-toolkit/internal/info
binaries: cmds
ifneq ($(PREFIX),)
cmd-%: COMMAND_BUILD_OPTIONS = -o $(PREFIX)/$(*)
endif
cmds: $(CMD_TARGETS)
ifneq ($(shell uname),Darwin)
EXTLDFLAGS = -Wl,--export-dynamic -Wl,--unresolved-symbols=ignore-in-object-files -Wl,-z,lazy
else
EXTLDFLAGS = -Wl,-undefined,dynamic_lookup
endif
$(CMD_TARGETS): cmd-%:
go build -ldflags "-s -w '-extldflags=$(EXTLDFLAGS)' -X $(CLI_VERSION_PACKAGE).gitCommit=$(GIT_COMMIT) -X $(CLI_VERSION_PACKAGE).version=$(CLI_VERSION)" $(COMMAND_BUILD_OPTIONS) $(MODULE)/cmd/$(*)
build:
go build ./...
examples: $(EXAMPLE_TARGETS)
$(EXAMPLE_TARGETS): example-%:
go build ./examples/$(*)
all: check test build binary
check: $(CHECK_TARGETS)
# Apply go fmt to the codebase
fmt:
go list -f '{{.Dir}}' $(MODULE)/... \
| xargs gofmt -s -l -w
# Apply goimports -local github.com/NVIDIA/container-toolkit to the codebase
goimports:
go list -f {{.Dir}} $(MODULE)/... \
| xargs goimports -local $(MODULE) -w
lint:
golangci-lint run ./...
vendor: | mod-tidy mod-vendor mod-verify
mod-tidy:
@for mod in $$(find . -name go.mod -not -path "./testdata/*" -not -path "./third_party/*"); do \
echo "Tidying $$mod..."; ( \
cd $$(dirname $$mod) && go mod tidy \
) || exit 1; \
done
mod-vendor:
@for mod in $$(find . -name go.mod -not -path "./testdata/*" -not -path "./third_party/*" -not -path "./deployments/*"); do \
echo "Vendoring $$mod..."; ( \
cd $$(dirname $$mod) && go mod vendor \
) || exit 1; \
done
mod-verify:
@for mod in $$(find . -name go.mod -not -path "./testdata/*" -not -path "./third_party/*"); do \
echo "Verifying $$mod..."; ( \
cd $$(dirname $$mod) && go mod verify | sed 's/^/ /g' \
) || exit 1; \
done
check-vendor: vendor
git diff --exit-code HEAD -- go.mod go.sum vendor
licenses:
go-licenses csv $(MODULE)/...
COVERAGE_FILE := coverage.out
test: build cmds
go test -coverprofile=$(COVERAGE_FILE).with-mocks $(MODULE)/...
coverage: test
cat $(COVERAGE_FILE).with-mocks | grep -v "_mock.go" > $(COVERAGE_FILE)
go tool cover -func=$(COVERAGE_FILE)
generate:
go generate $(MODULE)/...
# Generate an image for containerized builds
# Note: This image is local only
.PHONY: .build-image
.build-image:
make -f deployments/devel/Makefile .build-image
ifeq ($(BUILD_DEVEL_IMAGE),yes)
$(DOCKER_TARGETS): .build-image
.shell: .build-image
endif
$(DOCKER_TARGETS): docker-%:
@echo "Running 'make $(*)' in container image $(BUILDIMAGE)"
$(DOCKER) run \
--rm \
-e GOCACHE=/tmp/.cache/go \
-e GOMODCACHE=/tmp/.cache/gomod \
-e GOLANGCI_LINT_CACHE=/tmp/.cache/golangci-lint \
-v $(PWD):/work \
-w /work \
--user $$(id -u):$$(id -g) \
$(BUILDIMAGE) \
make $(*)
# Start an interactive shell using the development image.
PHONY: .shell
.shell:
$(DOCKER) run \
--rm \
-ti \
-e GOCACHE=/tmp/.cache/go \
-e GOMODCACHE=/tmp/.cache/gomod \
-e GOLANGCI_LINT_CACHE=/tmp/.cache/golangci-lint \
-v $(PWD):/work \
-w /work \
--user $$(id -u):$$(id -g) \
$(BUILDIMAGE)
================================================
FILE: README.md
================================================
# NVIDIA Container Toolkit
[](https://raw.githubusercontent.com/NVIDIA/nvidia-container-toolkit/main/LICENSE)
[](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/overview.html)
[](https://nvidia.github.io/libnvidia-container)

## Introduction
The NVIDIA Container Toolkit allows users to build and run GPU-accelerated containers. The toolkit includes a container runtime [library](https://github.com/NVIDIA/libnvidia-container) and utilities to automatically configure containers to leverage NVIDIA GPUs.
Product documentation including an architecture overview, platform support, and installation and usage guides can be found in the [documentation repository](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/overview.html).
## Getting Started
**Make sure you have installed the [NVIDIA driver](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#nvidia-drivers) for your Linux Distribution**
**Note that you do not need to install the CUDA Toolkit on the host system, but the NVIDIA driver needs to be installed**
For instructions on getting started with the NVIDIA Container Toolkit, refer to the [installation guide](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#installation-guide).
## Usage
The [user guide](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/user-guide.html) provides information on the configuration and command line options available when running GPU containers with Docker.
## Issues and Contributing
[Checkout the Contributing document!](CONTRIBUTING.md)
* Please let us know by [filing a new issue](https://github.com/NVIDIA/nvidia-container-toolkit/issues/new)
* You can contribute by creating a [pull request](https://github.com/NVIDIA/nvidia-container-toolkit/compare) to our public GitHub repository
================================================
FILE: RELEASE.md
================================================
# Release Process
The NVIDIA Container Toolkit consists of the following artifacts:
- The NVIDIA Container Toolkit container
- Packages for debian-based systems
- Packages for rpm-based systems
# Release Process Checklist:
- [ ] Create a release PR:
- [ ] Run the `./hack/prepare-release.sh` script to update the version in all the needed files. This also creates a [release issue](https://github.com/NVIDIA/nvidia-container-toolkit/issues?q=is%3Aissue+is%3Aopen+label%3Arelease)
- [ ] Run the `./hack/generate-changelog.sh` script to generate the a draft changelog and update `CHANGELOG.md` with the changes.
- [ ] Create a PR from the created `bump-release-{{ .VERSION }}` branch.
- [ ] Merge the release PR
- [ ] Tag the release and push the tag to the `internal` mirror:
- [ ] Wait for the image release to complete.
- [ ] Push the tag to the the upstream GitHub repo.
- [ ] Wait for the [`Release`](https://github.com/NVIDIA/nvidia-container-toolkit/actions/workflows/release.yaml) GitHub Action to complete
- [ ] Publish the [draft release](https://github.com/NVIDIA/nvidia-container-toolkit/releases) created by the GitHub Action
- [ ] Publish the packages to the gh-pages branch of the libnvidia-container repo
- [ ] Create a KitPick
- [ ] For non-experimental releases, schedule the package for publication to the CUDA Downloads repositories.
## Troubleshooting
*Note*: This assumes that we have the release tag checked out locally.
- If the `Release` GitHub Action fails:
- Check the logs for the error first.
- Create the helm packages locally by running:
```bash
./hack/prepare-artifacts.sh {{ .VERSION }}
```
- Create the draft release by running:
```bash
./hack/create-release.sh {{ .VERSION }}
```
================================================
FILE: SECURITY.md
================================================
# Security
NVIDIA is dedicated to the security and trust of our software products and services, including all source code repositories managed through our organization.
If you need to report a security issue, please use the appropriate contact points outlined below. **Please do not report security vulnerabilities through GitHub.**
## Reporting Potential Security Vulnerability in an NVIDIA Product
To report a potential security vulnerability in any NVIDIA product:
- Web: [Security Vulnerability Submission Form](https://www.nvidia.com/object/submit-security-vulnerability.html)
- E-Mail: psirt@nvidia.com
- We encourage you to use the following PGP key for secure email communication: [NVIDIA public PGP Key for communication](https://www.nvidia.com/en-us/security/pgp-key)
- Please include the following information:
- Product/Driver name and version/branch that contains the vulnerability
- Type of vulnerability (code execution, denial of service, buffer overflow, etc.)
- Instructions to reproduce the vulnerability
- Proof-of-concept or exploit code
- Potential impact of the vulnerability, including how an attacker could exploit the vulnerability
While NVIDIA currently does not have a bug bounty program, we do offer acknowledgement when an externally reported security issue is addressed under our coordinated vulnerability disclosure policy. Please visit our [Product Security Incident Response Team (PSIRT)](https://www.nvidia.com/en-us/security/psirt-policies/) policies page for more information.
## NVIDIA Product Security
For all security-related concerns, please visit NVIDIA's Product Security portal at https://www.nvidia.com/en-us/security
================================================
FILE: api/config/v1/cli.go
================================================
/**
# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package config
import (
"fmt"
"os"
"strings"
)
// ContainerCLIConfig stores the options for the nvidia-container-cli
type ContainerCLIConfig struct {
Root string `toml:"root"`
Path string `toml:"path"`
Environment []string `toml:"environment"`
Debug string `toml:"debug"`
Ldcache string `toml:"ldcache"`
LoadKmods bool `toml:"load-kmods"`
// NoPivot disables the pivot root operation in the NVIDIA Container CLI.
// This is not exposed in the config if not set.
NoPivot bool `toml:"no-pivot,omitempty"`
NoCgroups bool `toml:"no-cgroups"`
User string `toml:"user"`
// Ldconfig represents the path to the ldconfig binary to be used to update
// the ldcache in a container as it is being created.
// If this path starts with a '@' the path is relative to the host and if
// not it is treated as a container path.
//
// Note that the use of container paths are disabled by default and if this
// is required, the features.allow-ldconfig-from-container feature gate must
// be enabled explicitly.
Ldconfig ldconfigPath `toml:"ldconfig"`
}
// NormalizeLDConfigPath returns the resolved path of the configured LDConfig binary.
// This is only done for host LDConfigs and is required to handle systems where
// /sbin/ldconfig is a wrapper around /sbin/ldconfig.real.
func (c *ContainerCLIConfig) NormalizeLDConfigPath() string {
return string(c.Ldconfig.normalize())
}
// An ldconfigPath is used to represent the path to ldconfig.
type ldconfigPath string
func (p ldconfigPath) assertValid(allowContainerRelativePath bool) error {
if p.isHostRelative() {
return nil
}
if allowContainerRelativePath {
return nil
}
return fmt.Errorf("nvidia-container-cli.ldconfig value %q is not host-relative (does not start with a '@')", p)
}
func (p ldconfigPath) isHostRelative() bool {
return strings.HasPrefix(string(p), "@")
}
// normalize returns the resolved path of the configured LDConfig binary.
// This is only done for host LDConfigs and is required to handle systems where
// /sbin/ldconfig is a wrapper around /sbin/ldconfig.real.
func (p ldconfigPath) normalize() ldconfigPath {
if !p.isHostRelative() {
return p
}
path := string(p)
trimmedPath := strings.TrimSuffix(strings.TrimPrefix(path, "@"), ".real")
// If the .real path exists, we return that.
if _, err := os.Stat(trimmedPath + ".real"); err == nil {
return ldconfigPath("@" + trimmedPath + ".real")
}
// If the .real path does not exists (or cannot be read) we return the non-.real path.
return ldconfigPath("@" + trimmedPath)
}
// NormalizeLDConfigPath returns the resolved path of the configured LDConfig binary.
// This is only done for host LDConfigs and is required to handle systems where
// /sbin/ldconfig is a wrapper around /sbin/ldconfig.real.
func NormalizeLDConfigPath(path string) string {
return string(ldconfigPath(path).normalize())
}
================================================
FILE: api/config/v1/cli_test.go
================================================
/**
# Copyright 2023 NVIDIA CORPORATION
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package config
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
)
func TestNormalizeLDConfigPath(t *testing.T) {
testDir := t.TempDir()
f, err := os.Create(filepath.Join(testDir, "exists.real"))
require.NoError(t, err)
_ = f.Close()
testCases := []struct {
description string
ldconfig ldconfigPath
expected string
}{
{
description: "empty input",
},
{
description: "non-host with .real suffix returns as is",
ldconfig: "/some/path/ldconfig.real",
expected: "/some/path/ldconfig.real",
},
{
description: "non-host without .real suffix returns as is",
ldconfig: "/some/path/ldconfig",
expected: "/some/path/ldconfig",
},
{
description: "host .real file exists is returned",
ldconfig: ldconfigPath("@" + filepath.Join(testDir, "exists.real")),
expected: "@" + filepath.Join(testDir, "exists.real"),
},
{
description: "host resolves .real file",
ldconfig: ldconfigPath("@" + filepath.Join(testDir, "exists")),
expected: "@" + filepath.Join(testDir, "exists.real"),
},
{
description: "host .real file not exists strips suffix",
ldconfig: "@/does/not/exist.real",
expected: "@/does/not/exist",
},
{
description: "host file returned as is if no .real file exsits",
ldconfig: "@/does/not/exist",
expected: "@/does/not/exist",
},
}
for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
c := ContainerCLIConfig{
Ldconfig: tc.ldconfig,
}
require.Equal(t, tc.expected, c.NormalizeLDConfigPath())
})
}
}
================================================
FILE: api/config/v1/config.go
================================================
/**
# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package config
import (
"bufio"
"errors"
"os"
"path/filepath"
"strings"
"tags.cncf.io/container-device-interface/pkg/cdi"
"github.com/NVIDIA/nvidia-container-toolkit/internal/config/image"
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
"github.com/NVIDIA/nvidia-container-toolkit/pkg/lookup"
)
const (
FilePathOverrideEnvVar = "NVIDIA_CTK_CONFIG_FILE_PATH"
RelativeFilePath = "nvidia-container-runtime/config.toml"
configRootOverride = "XDG_CONFIG_HOME"
nvidiaCTKExecutable = "nvidia-ctk"
nvidiaCTKDefaultFilePath = "/usr/bin/nvidia-ctk"
nvidiaCDIHookDefaultFilePath = "/usr/bin/nvidia-cdi-hook"
nvidiaContainerRuntimeHookExecutable = "nvidia-container-runtime-hook"
nvidiaContainerRuntimeHookDefaultPath = "/usr/bin/nvidia-container-runtime-hook"
)
var (
// DefaultExecutableDir specifies the default path to use for executables if they cannot be located in the path.
DefaultExecutableDir = "/usr/bin"
// NVIDIAContainerRuntimeHookExecutable is the executable name for the NVIDIA Container Runtime Hook
NVIDIAContainerRuntimeHookExecutable = "nvidia-container-runtime-hook"
// NVIDIAContainerToolkitExecutable is the executable name for the NVIDIA Container Toolkit (an alias for the NVIDIA Container Runtime Hook)
NVIDIAContainerToolkitExecutable = "nvidia-container-toolkit"
)
var errInvalidConfig = errors.New("invalid config value")
// Config represents the contents of the config.toml file for the NVIDIA Container Toolkit
// Note: This is currently duplicated by the HookConfig in cmd/nvidia-container-toolkit/hook_config.go
type Config struct {
DisableRequire bool `toml:"disable-require"`
SwarmResource string `toml:"swarm-resource"`
AcceptEnvvarUnprivileged bool `toml:"accept-nvidia-visible-devices-envvar-when-unprivileged"`
AcceptDeviceListAsVolumeMounts bool `toml:"accept-nvidia-visible-devices-as-volume-mounts"`
SupportedDriverCapabilities string `toml:"supported-driver-capabilities"`
NVIDIAContainerCLIConfig ContainerCLIConfig `toml:"nvidia-container-cli"`
NVIDIACTKConfig CTKConfig `toml:"nvidia-ctk"`
NVIDIAContainerRuntimeConfig RuntimeConfig `toml:"nvidia-container-runtime"`
NVIDIAContainerRuntimeHookConfig RuntimeHookConfig `toml:"nvidia-container-runtime-hook"`
// Features allows for finer control over optional features.
Features features `toml:"features,omitempty"`
}
// GetConfigFilePath returns the path to the config file for the configured system
func GetConfigFilePath() string {
if configFilePathOverride := os.Getenv(FilePathOverrideEnvVar); configFilePathOverride != "" {
return configFilePathOverride
}
configRoot := "/etc"
if XDGConfigDir := os.Getenv(configRootOverride); len(XDGConfigDir) != 0 {
configRoot = XDGConfigDir
}
return filepath.Join(configRoot, RelativeFilePath)
}
// GetConfig sets up the config struct. Values are read from a toml file
// or set via the environment.
func GetConfig() (*Config, error) {
cfg, err := New(
WithConfigFile(GetConfigFilePath()),
)
if err != nil {
return nil, err
}
return cfg.Config()
}
// GetDefault defines the default values for the config
func GetDefault() (*Config, error) {
d := Config{
AcceptEnvvarUnprivileged: true,
SupportedDriverCapabilities: image.SupportedDriverCapabilities.String(),
NVIDIAContainerCLIConfig: ContainerCLIConfig{
LoadKmods: true,
Ldconfig: getLdConfigPath(),
User: getUserGroup(),
},
NVIDIACTKConfig: CTKConfig{
Path: nvidiaCTKExecutable,
},
NVIDIAContainerRuntimeConfig: RuntimeConfig{
DebugFilePath: "/dev/null",
LogLevel: "info",
Runtimes: []string{"runc", "crun"},
Mode: "auto",
Modes: modesConfig{
CSV: csvModeConfig{
MountSpecPath: "/etc/nvidia-container-runtime/host-files-for-container.d",
},
CDI: cdiModeConfig{
DefaultKind: "nvidia.com/gpu",
AnnotationPrefixes: []string{cdi.AnnotationPrefix},
SpecDirs: cdi.DefaultSpecDirs,
},
Legacy: legacyModeConfig{
CUDACompatMode: defaultCUDACompatMode,
},
},
},
NVIDIAContainerRuntimeHookConfig: RuntimeHookConfig{
Path: NVIDIAContainerRuntimeHookExecutable,
},
}
return &d, nil
}
// assertValid checks for a valid config.
func (c *Config) assertValid() error {
err := c.NVIDIAContainerCLIConfig.Ldconfig.assertValid(c.Features.AllowLDConfigFromContainer.IsEnabled())
if err != nil {
return errors.Join(err, errInvalidConfig)
}
return nil
}
// getLdConfigPath allows us to override this function for testing.
var getLdConfigPath = getLdConfigPathStub
func getLdConfigPathStub() ldconfigPath {
return ldconfigPath("@/sbin/ldconfig").normalize()
}
func getUserGroup() string {
if isSuse() {
return "root:video"
}
return ""
}
// isSuse returns whether a SUSE-based distribution was detected.
func isSuse() bool {
suseDists := map[string]bool{
"suse": true,
"opensuse": true,
}
idsLike := getDistIDLike()
for _, id := range idsLike {
if suseDists[id] {
return true
}
}
return false
}
// getDistIDLike returns the ID_LIKE field from /etc/os-release.
// We can override this for testing.
var getDistIDLike = func() []string {
releaseFile, err := os.Open("/etc/os-release")
if err != nil {
return nil
}
defer releaseFile.Close()
scanner := bufio.NewScanner(releaseFile)
for scanner.Scan() {
line := scanner.Text()
if strings.HasPrefix(line, "ID_LIKE=") {
value := strings.Trim(strings.TrimPrefix(line, "ID_LIKE="), "\"")
return strings.Split(value, " ")
}
}
return nil
}
// ResolveNVIDIACTKPath resolves the path to the nvidia-ctk binary.
// This executable is used in hooks and needs to be an absolute path.
// If the path is specified as an absolute path, it is used directly
// without checking for existence of an executable at that path.
//
// Deprecated: Use ResolveNVIDIACDIHookPath directly instead.
func ResolveNVIDIACTKPath(logger logger.Interface, nvidiaCTKPath string) string {
return resolveWithDefault(
logger,
"NVIDIA Container Toolkit CLI",
nvidiaCTKPath,
nvidiaCTKDefaultFilePath,
)
}
// ResolveNVIDIACDIHookPath resolves the path to the nvidia-cdi-hook binary.
// This executable is used in hooks and needs to be an absolute path.
// If the path is specified as an absolute path, it is used directly
// without checking for existence of an executable at that path.
func ResolveNVIDIACDIHookPath(logger logger.Interface, nvidiaCDIHookPath string) string {
if filepath.Base(nvidiaCDIHookPath) == "nvidia-ctk" {
return resolveWithDefault(
logger,
"NVIDIA Container Toolkit CLI",
nvidiaCDIHookPath,
nvidiaCTKDefaultFilePath,
)
}
return resolveWithDefault(
logger,
"NVIDIA CDI Hook CLI",
nvidiaCDIHookPath,
nvidiaCDIHookDefaultFilePath,
)
}
// ResolveNVIDIAContainerRuntimeHookPath resolves the path the nvidia-container-runtime-hook binary.
func ResolveNVIDIAContainerRuntimeHookPath(logger logger.Interface, nvidiaContainerRuntimeHookPath string) string {
return resolveWithDefault(
logger,
"NVIDIA Container Runtime Hook",
nvidiaContainerRuntimeHookPath,
nvidiaContainerRuntimeHookDefaultPath,
)
}
// resolveWithDefault resolves the path to the specified binary.
// If an absolute path is specified, it is used directly without searching for the binary.
// If the binary cannot be found in the path, the specified default is used instead.
func resolveWithDefault(logger logger.Interface, label string, path string, defaultPath string) string {
if filepath.IsAbs(path) {
logger.Debugf("Using specified %v path %v", label, path)
return path
}
if path == "" {
path = filepath.Base(defaultPath)
}
logger.Debugf("Locating %v as %v", label, path)
lookup := lookup.NewExecutableLocator(logger, "")
resolvedPath := defaultPath
targets, err := lookup.Locate(path)
if err != nil {
logger.Warningf("Failed to locate %v: %v", path, err)
} else {
logger.Debugf("Found %v candidates: %v", path, targets)
resolvedPath = targets[0]
}
logger.Debugf("Using %v path %v", label, path)
return resolvedPath
}
================================================
FILE: api/config/v1/config_test.go
================================================
/**
# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package config
import (
"os"
"path/filepath"
"strings"
"testing"
"github.com/stretchr/testify/require"
"github.com/NVIDIA/nvidia-container-toolkit/internal/test/to"
)
func TestGetConfigWithCustomConfig(t *testing.T) {
testDir := t.TempDir()
t.Setenv(configRootOverride, testDir)
filename := filepath.Join(testDir, RelativeFilePath)
// By default debug is disabled
contents := []byte("[nvidia-container-runtime]\ndebug = \"/nvidia-container-toolkit.log\"")
require.NoError(t, os.MkdirAll(filepath.Dir(filename), 0766))
require.NoError(t, os.WriteFile(filename, contents, 0600))
cfg, err := GetConfig()
require.NoError(t, err)
require.Equal(t, "/nvidia-container-toolkit.log", cfg.NVIDIAContainerRuntimeConfig.DebugFilePath)
}
func TestGetConfigWithConfigFilePathOverride(t *testing.T) {
testDir := t.TempDir()
filename := filepath.Join(testDir, RelativeFilePath)
t.Setenv(FilePathOverrideEnvVar, filename)
// By default debug is disabled
contents := []byte("[nvidia-container-runtime]\ndebug = \"/nvidia-container-toolkit.log\"")
require.NoError(t, os.MkdirAll(filepath.Dir(filename), 0766))
require.NoError(t, os.WriteFile(filename, contents, 0600))
cfg, err := GetConfig()
require.NoError(t, err)
require.Equal(t, "/nvidia-container-toolkit.log", cfg.NVIDIAContainerRuntimeConfig.DebugFilePath)
}
func TestGetConfig(t *testing.T) {
testCases := []struct {
description string
contents []string
expectedError error
distIdsLike []string
expectedConfig *Config
}{
{
description: "empty config is default",
expectedConfig: &Config{
AcceptEnvvarUnprivileged: true,
SupportedDriverCapabilities: "compat32,compute,display,graphics,ngx,utility,video",
NVIDIAContainerCLIConfig: ContainerCLIConfig{
Root: "",
LoadKmods: true,
Ldconfig: "@/test/ld/config/path",
},
NVIDIAContainerRuntimeConfig: RuntimeConfig{
DebugFilePath: "/dev/null",
LogLevel: "info",
Runtimes: []string{"runc", "crun"},
Mode: "auto",
Modes: modesConfig{
CSV: csvModeConfig{
MountSpecPath: "/etc/nvidia-container-runtime/host-files-for-container.d",
},
CDI: cdiModeConfig{
DefaultKind: "nvidia.com/gpu",
AnnotationPrefixes: []string{"cdi.k8s.io/"},
SpecDirs: []string{"/etc/cdi", "/var/run/cdi"},
},
Legacy: legacyModeConfig{
CUDACompatMode: "ldconfig",
},
},
},
NVIDIAContainerRuntimeHookConfig: RuntimeHookConfig{
Path: "nvidia-container-runtime-hook",
},
NVIDIACTKConfig: CTKConfig{
Path: "nvidia-ctk",
},
},
},
{
description: "config options set inline",
contents: []string{
"accept-nvidia-visible-devices-envvar-when-unprivileged = false",
"supported-driver-capabilities = \"compute,utility\"",
"nvidia-container-cli.root = \"/bar/baz\"",
"nvidia-container-cli.load-kmods = false",
"nvidia-container-cli.ldconfig = \"@/foo/bar/ldconfig\"",
"nvidia-container-cli.user = \"foo:bar\"",
"nvidia-container-cli.cuda-compat-mode = \"mount\"",
"nvidia-container-runtime.debug = \"/foo/bar\"",
"nvidia-container-runtime.discover-mode = \"not-legacy\"",
"nvidia-container-runtime.log-level = \"debug\"",
"nvidia-container-runtime.runtimes = [\"/some/runtime\",]",
"nvidia-container-runtime.mode = \"not-auto\"",
"nvidia-container-runtime.modes.cdi.default-kind = \"example.vendor.com/device\"",
"nvidia-container-runtime.modes.cdi.annotation-prefixes = [\"cdi.k8s.io/\", \"example.vendor.com/\",]",
"nvidia-container-runtime.modes.cdi.spec-dirs = [\"/except/etc/cdi\", \"/not/var/run/cdi\",]",
"nvidia-container-runtime.modes.csv.mount-spec-path = \"/not/etc/nvidia-container-runtime/host-files-for-container.d\"",
"nvidia-container-runtime.modes.legacy.cuda-compat-mode = \"mount\"",
"nvidia-container-runtime-hook.path = \"/foo/bar/nvidia-container-runtime-hook\"",
"nvidia-ctk.path = \"/foo/bar/nvidia-ctk\"",
},
expectedConfig: &Config{
AcceptEnvvarUnprivileged: false,
SupportedDriverCapabilities: "compute,utility",
NVIDIAContainerCLIConfig: ContainerCLIConfig{
Root: "/bar/baz",
LoadKmods: false,
Ldconfig: "@/foo/bar/ldconfig",
User: "foo:bar",
},
NVIDIAContainerRuntimeConfig: RuntimeConfig{
DebugFilePath: "/foo/bar",
LogLevel: "debug",
Runtimes: []string{"/some/runtime"},
Mode: "not-auto",
Modes: modesConfig{
CSV: csvModeConfig{
MountSpecPath: "/not/etc/nvidia-container-runtime/host-files-for-container.d",
},
CDI: cdiModeConfig{
DefaultKind: "example.vendor.com/device",
AnnotationPrefixes: []string{
"cdi.k8s.io/",
"example.vendor.com/",
},
SpecDirs: []string{
"/except/etc/cdi",
"/not/var/run/cdi",
},
},
Legacy: legacyModeConfig{
CUDACompatMode: "mount",
},
},
},
NVIDIAContainerRuntimeHookConfig: RuntimeHookConfig{
Path: "/foo/bar/nvidia-container-runtime-hook",
},
NVIDIACTKConfig: CTKConfig{
Path: "/foo/bar/nvidia-ctk",
},
},
},
{
description: "feature allows ldconfig to be overridden",
contents: []string{
"[nvidia-container-cli]",
"ldconfig = \"/foo/bar/ldconfig\"",
"[features]",
"allow-ldconfig-from-container = true",
},
expectedConfig: &Config{
AcceptEnvvarUnprivileged: true,
SupportedDriverCapabilities: "compat32,compute,display,graphics,ngx,utility,video",
NVIDIAContainerCLIConfig: ContainerCLIConfig{
Ldconfig: "/foo/bar/ldconfig",
LoadKmods: true,
},
NVIDIAContainerRuntimeConfig: RuntimeConfig{
DebugFilePath: "/dev/null",
LogLevel: "info",
Runtimes: []string{"runc", "crun"},
Mode: "auto",
Modes: modesConfig{
CSV: csvModeConfig{
MountSpecPath: "/etc/nvidia-container-runtime/host-files-for-container.d",
},
CDI: cdiModeConfig{
DefaultKind: "nvidia.com/gpu",
AnnotationPrefixes: []string{
"cdi.k8s.io/",
},
SpecDirs: []string{
"/etc/cdi",
"/var/run/cdi",
},
},
Legacy: legacyModeConfig{
CUDACompatMode: "ldconfig",
},
},
},
NVIDIAContainerRuntimeHookConfig: RuntimeHookConfig{
Path: "nvidia-container-runtime-hook",
},
NVIDIACTKConfig: CTKConfig{
Path: "nvidia-ctk",
},
Features: features{
AllowLDConfigFromContainer: to.Ptr(feature(true)),
},
},
},
{
description: "config options set in section",
contents: []string{
"accept-nvidia-visible-devices-envvar-when-unprivileged = false",
"supported-driver-capabilities = \"compute,utility\"",
"[nvidia-container-cli]",
"root = \"/bar/baz\"",
"load-kmods = false",
"ldconfig = \"@/foo/bar/ldconfig\"",
"cuda-compat-mode = \"mount\"",
"user = \"foo:bar\"",
"[nvidia-container-runtime]",
"debug = \"/foo/bar\"",
"discover-mode = \"not-legacy\"",
"log-level = \"debug\"",
"runtimes = [\"/some/runtime\",]",
"mode = \"not-auto\"",
"[nvidia-container-runtime.modes.cdi]",
"default-kind = \"example.vendor.com/device\"",
"annotation-prefixes = [\"cdi.k8s.io/\", \"example.vendor.com/\",]",
"spec-dirs = [\"/except/etc/cdi\", \"/not/var/run/cdi\",]",
"[nvidia-container-runtime.modes.csv]",
"mount-spec-path = \"/not/etc/nvidia-container-runtime/host-files-for-container.d\"",
"[nvidia-container-runtime.modes.legacy]",
"cuda-compat-mode = \"mount\"",
"[nvidia-container-runtime-hook]",
"path = \"/foo/bar/nvidia-container-runtime-hook\"",
"[nvidia-ctk]",
"path = \"/foo/bar/nvidia-ctk\"",
},
expectedConfig: &Config{
AcceptEnvvarUnprivileged: false,
SupportedDriverCapabilities: "compute,utility",
NVIDIAContainerCLIConfig: ContainerCLIConfig{
Root: "/bar/baz",
LoadKmods: false,
Ldconfig: "@/foo/bar/ldconfig",
User: "foo:bar",
},
NVIDIAContainerRuntimeConfig: RuntimeConfig{
DebugFilePath: "/foo/bar",
LogLevel: "debug",
Runtimes: []string{"/some/runtime"},
Mode: "not-auto",
Modes: modesConfig{
CSV: csvModeConfig{
MountSpecPath: "/not/etc/nvidia-container-runtime/host-files-for-container.d",
},
CDI: cdiModeConfig{
DefaultKind: "example.vendor.com/device",
AnnotationPrefixes: []string{
"cdi.k8s.io/",
"example.vendor.com/",
},
SpecDirs: []string{
"/except/etc/cdi",
"/not/var/run/cdi",
},
},
Legacy: legacyModeConfig{
CUDACompatMode: "mount",
},
},
},
NVIDIAContainerRuntimeHookConfig: RuntimeHookConfig{
Path: "/foo/bar/nvidia-container-runtime-hook",
},
NVIDIACTKConfig: CTKConfig{
Path: "/foo/bar/nvidia-ctk",
},
},
},
{
description: "suse config",
distIdsLike: []string{"suse", "opensuse"},
expectedConfig: &Config{
AcceptEnvvarUnprivileged: true,
SupportedDriverCapabilities: "compat32,compute,display,graphics,ngx,utility,video",
NVIDIAContainerCLIConfig: ContainerCLIConfig{
Root: "",
LoadKmods: true,
Ldconfig: "@/test/ld/config/path",
User: "root:video",
},
NVIDIAContainerRuntimeConfig: RuntimeConfig{
DebugFilePath: "/dev/null",
LogLevel: "info",
Runtimes: []string{"runc", "crun"},
Mode: "auto",
Modes: modesConfig{
CSV: csvModeConfig{
MountSpecPath: "/etc/nvidia-container-runtime/host-files-for-container.d",
},
CDI: cdiModeConfig{
DefaultKind: "nvidia.com/gpu",
AnnotationPrefixes: []string{"cdi.k8s.io/"},
SpecDirs: []string{"/etc/cdi", "/var/run/cdi"},
},
Legacy: legacyModeConfig{
CUDACompatMode: "ldconfig",
},
},
},
NVIDIAContainerRuntimeHookConfig: RuntimeHookConfig{
Path: "nvidia-container-runtime-hook",
},
NVIDIACTKConfig: CTKConfig{
Path: "nvidia-ctk",
},
},
},
{
description: "suse config overrides user",
distIdsLike: []string{"suse", "opensuse"},
contents: []string{
"nvidia-container-cli.user = \"foo:bar\"",
},
expectedConfig: &Config{
AcceptEnvvarUnprivileged: true,
SupportedDriverCapabilities: "compat32,compute,display,graphics,ngx,utility,video",
NVIDIAContainerCLIConfig: ContainerCLIConfig{
Root: "",
LoadKmods: true,
Ldconfig: "@/test/ld/config/path",
User: "foo:bar",
},
NVIDIAContainerRuntimeConfig: RuntimeConfig{
DebugFilePath: "/dev/null",
LogLevel: "info",
Runtimes: []string{"runc", "crun"},
Mode: "auto",
Modes: modesConfig{
CSV: csvModeConfig{
MountSpecPath: "/etc/nvidia-container-runtime/host-files-for-container.d",
},
CDI: cdiModeConfig{
DefaultKind: "nvidia.com/gpu",
AnnotationPrefixes: []string{"cdi.k8s.io/"},
SpecDirs: []string{"/etc/cdi", "/var/run/cdi"},
},
Legacy: legacyModeConfig{
CUDACompatMode: "ldconfig",
},
},
},
NVIDIAContainerRuntimeHookConfig: RuntimeHookConfig{
Path: "nvidia-container-runtime-hook",
},
NVIDIACTKConfig: CTKConfig{
Path: "nvidia-ctk",
},
},
},
}
for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
defer setGetLdConfigPathForTest()()
defer setGetDistIDLikeForTest(tc.distIdsLike)()
reader := strings.NewReader(strings.Join(tc.contents, "\n"))
tomlCfg, err := loadConfigTomlFrom(reader)
if tc.expectedError != nil {
require.Error(t, err)
} else {
require.NoError(t, err)
}
cfg, err := tomlCfg.Config()
require.NoError(t, err)
require.EqualValues(t, tc.expectedConfig, cfg)
})
}
}
func TestAssertValid(t *testing.T) {
defer setGetLdConfigPathForTest()()
testCases := []struct {
description string
config *Config
expectedError error
}{
{
description: "default is valid",
config: func() *Config {
config, _ := GetDefault()
return config
}(),
},
{
description: "alternative host ldconfig path is valid",
config: &Config{
NVIDIAContainerCLIConfig: ContainerCLIConfig{
Ldconfig: "@/some/host/path",
},
},
},
{
description: "non-host path is invalid",
config: &Config{
NVIDIAContainerCLIConfig: ContainerCLIConfig{
Ldconfig: "/non/host/path",
},
},
expectedError: errInvalidConfig,
},
{
description: "feature flag allows non-host path",
config: &Config{
NVIDIAContainerCLIConfig: ContainerCLIConfig{
Ldconfig: "/non/host/path",
},
Features: features{
AllowLDConfigFromContainer: to.Ptr(feature(true)),
},
},
},
}
for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
require.ErrorIs(t, tc.config.assertValid(), tc.expectedError)
})
}
}
// setGetDistIDsLikeForTest overrides the distribution IDs that would normally be read from the /etc/os-release file.
func setGetDistIDLikeForTest(ids []string) func() {
if ids == nil {
return func() {}
}
original := getDistIDLike
getDistIDLike = func() []string {
return ids
}
return func() {
getDistIDLike = original
}
}
func setGetLdConfigPathForTest() func() {
previous := getLdConfigPath
getLdConfigPath = func() ldconfigPath {
return "@/test/ld/config/path"
}
return func() {
getLdConfigPath = previous
}
}
================================================
FILE: api/config/v1/features.go
================================================
/**
# Copyright 2024 NVIDIA CORPORATION
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package config
// features specifies a set of named features.
type features struct {
// AllowCUDACompatLibsFromContainer allows CUDA compat libs from a container
// to override certain driver library mounts from the host.
AllowCUDACompatLibsFromContainer *feature `toml:"allow-cuda-compat-libs-from-container,omitempty"`
// AllowLDConfigFromContainer allows non-host ldconfig paths to be used.
// If this feature flag is not set to 'true' only host-rooted config paths
// (i.e. paths starting with an '@' are considered valid)
AllowLDConfigFromContainer *feature `toml:"allow-ldconfig-from-container,omitempty"`
// AllowUnknownOCISpecFields allows the nvidia-container-runtime to ignore
// unknown fields when loading the config (OCI spec) associated with a
// container.
// If this is enabled, these fields are silently dropped.
AllowUnknownOCISpecFields *feature `toml:"allow-unknown-oci-spec-fields,omitempty"`
// DisableCUDACompatLibHook, when enabled skips the injection of a specific
// hook to process CUDA compatibility libraries.
//
// Note: Since this mechanism replaces the logic in the `nvidia-container-cli`,
// toggling this feature has no effect if `allow-cuda-compat-libs-from-container` is enabled.
DisableCUDACompatLibHook *feature `toml:"disable-cuda-compat-lib-hook,omitempty"`
// DisableImexChannelCreation ensures that the implicit creation of
// requested IMEX channels is skipped when invoking the nvidia-container-cli.
DisableImexChannelCreation *feature `toml:"disable-imex-channel-creation,omitempty"`
// IgnoreImexChannelRequests configures the NVIDIA Container Toolkit to
// ignore IMEX channel requests through the NVIDIA_IMEX_CHANNELS envvar or
// volume mounts.
// This ensures that the NVIDIA Container Toolkit cannot be used to provide
// access to an IMEX channel by simply specifying an environment variable,
// possibly bypassing other checks by an orchestration system such as
// kubernetes.
IgnoreImexChannelRequests *feature `toml:"ignore-imex-channel-requests,omitempty"`
// NoAdditionalGIDsForDeviceNodes disables the injection of additional GIDs
// for a device node when the node is not readable and writeable by the user.
NoAdditionalGIDsForDeviceNodes *feature `toml:"no-additional-gids-for-device-nodes,omitempty"`
}
type feature bool
// IsEnabled checks whether a feature is explicitly enabled.
func (f *feature) IsEnabled() bool {
if f != nil {
return bool(*f)
}
return false
}
================================================
FILE: api/config/v1/hook.go
================================================
/**
# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package config
// RuntimeHookConfig stores the config options for the NVIDIA Container Runtime
type RuntimeHookConfig struct {
// Path specifies the path to the NVIDIA Container Runtime hook binary.
// If an executable name is specified, this will be resolved in the path.
Path string `toml:"path"`
// SkipModeDetection disables the mode check for the runtime hook.
SkipModeDetection bool `toml:"skip-mode-detection"`
}
================================================
FILE: api/config/v1/runtime.go
================================================
/**
# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package config
import "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi"
// RuntimeConfig stores the config options for the NVIDIA Container Runtime
type RuntimeConfig struct {
DebugFilePath string `toml:"debug"`
// LogLevel defines the logging level for the application
LogLevel string `toml:"log-level"`
// Runtimes defines the candidates for the low-level runtime
Runtimes []string `toml:"runtimes"`
Mode string `toml:"mode"`
Modes modesConfig `toml:"modes"`
}
// modesConfig defines (optional) per-mode configs
type modesConfig struct {
CSV csvModeConfig `toml:"csv"`
CDI cdiModeConfig `toml:"cdi"`
JitCDI jitCDIModeConfig `toml:"jit-cdi,omitempty"`
Legacy legacyModeConfig `toml:"legacy"`
}
type cdiModeConfig struct {
// SpecDirs allows for the default spec dirs for CDI to be overridden
SpecDirs []string `toml:"spec-dirs"`
// DefaultKind sets the default kind to be used when constructing fully-qualified CDI device names
DefaultKind string `toml:"default-kind"`
// AnnotationPrefixes sets the allowed prefixes for CDI annotation-based device injection
AnnotationPrefixes []string `toml:"annotation-prefixes"`
}
type jitCDIModeConfig struct {
// NVCDIFeatureFlags sets a list of nvcdi features explicitly.
NVCDIFeatureFlags []nvcdi.FeatureFlag `toml:"nvcdi-feature-flags,omitempty"`
}
type csvModeConfig struct {
MountSpecPath string `toml:"mount-spec-path"`
// CompatContainerRoot specifies the compat root used when the the standard
// CUDA compat libraries should not be used.
CompatContainerRoot string `toml:"compat-container-root,omitempty"`
}
type legacyModeConfig struct {
// CUDACompatMode sets the mode to be used to make CUDA Forward Compat
// libraries discoverable in the container.
CUDACompatMode cudaCompatMode `toml:"cuda-compat-mode,omitempty"`
}
type cudaCompatMode string
const (
defaultCUDACompatMode = CUDACompatModeLdconfig
// CUDACompatModeDisabled explicitly disables the handling of CUDA Forward
// Compatibility in the NVIDIA Container Runtime and NVIDIA Container
// Runtime Hook.
CUDACompatModeDisabled = cudaCompatMode("disabled")
// CUDACompatModeHook uses a container lifecycle hook to implement CUDA
// Forward Compatibility support. This requires the use of the NVIDIA
// Container Runtime and is not compatible with use cases where only the
// NVIDIA Container Runtime Hook is used (e.g. the Docker --gpus flag).
CUDACompatModeHook = cudaCompatMode("hook")
// CUDACompatModeLdconfig adds the folders containing CUDA Forward Compat
// libraries to the ldconfig command invoked from the NVIDIA Container
// Runtime Hook.
CUDACompatModeLdconfig = cudaCompatMode("ldconfig")
// CUDACompatModeMount mounts CUDA Forward Compat folders from the container
// to the container when using the NVIDIA Container Runtime Hook.
CUDACompatModeMount = cudaCompatMode("mount")
)
================================================
FILE: api/config/v1/toml.go
================================================
/**
# Copyright (c) NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package config
import (
"bytes"
"fmt"
"io"
"os"
"regexp"
"github.com/pelletier/go-toml"
)
// Toml is a type for the TOML representation of a config.
type Toml struct {
tree *toml.Tree
// valuesSet allows us to trac expliclitly set values so that we can
// properly uncomment defaults.
valuesSet map[string]bool
}
func TreeFromMap(m map[string]any) (*Toml, error) {
tree, err := toml.TreeFromMap(m)
if err != nil {
return nil, err
}
return fromTree(tree), nil
}
func fromTree(t *toml.Tree) *Toml {
return &Toml{tree: t, valuesSet: make(map[string]bool)}
}
type options struct {
configFile string
required bool
}
// Option is a functional option for loading TOML config files.
type Option func(*options)
// WithConfigFile sets the config file option.
func WithConfigFile(configFile string) Option {
return func(o *options) {
o.configFile = configFile
}
}
// WithRequired sets the required option.
// If this is set to true, a failure to open the specified file is treated as an error
func WithRequired(required bool) Option {
return func(o *options) {
o.required = required
}
}
// New creates a new toml tree based on the provided options
func New(opts ...Option) (*Toml, error) {
o := &options{}
for _, opt := range opts {
opt(o)
}
return o.loadConfigToml()
}
func (o options) loadConfigToml() (*Toml, error) {
filename := o.configFile
if filename == "" {
return defaultToml()
}
_, err := os.Stat(filename)
if os.IsNotExist(err) && o.required {
return nil, os.ErrNotExist
}
tomlFile, err := os.Open(filename)
if os.IsNotExist(err) {
return defaultToml()
} else if err != nil {
return nil, fmt.Errorf("failed to load specified config file: %w", err)
}
defer tomlFile.Close()
return loadConfigTomlFrom(tomlFile)
}
func defaultToml() (*Toml, error) {
cfg, err := GetDefault()
if err != nil {
return nil, err
}
contents, err := toml.Marshal(cfg)
if err != nil {
return nil, err
}
return loadConfigTomlFrom(bytes.NewReader(contents))
}
func loadConfigTomlFrom(reader io.Reader) (*Toml, error) {
tree, err := toml.LoadReader(reader)
if err != nil {
return nil, err
}
t := &Toml{
tree: tree,
valuesSet: make(map[string]bool),
}
return t, nil
}
// Config returns the typed config associated with the toml tree.
func (t *Toml) Config() (*Config, error) {
cfg, err := t.configNoOverrides()
if err != nil {
return nil, err
}
if err := cfg.assertValid(); err != nil {
return nil, err
}
return cfg, nil
}
// configNoOverrides returns the typed config associated with the toml tree.
// This config does not include feature-specific overrides.
func (t *Toml) configNoOverrides() (*Config, error) {
cfg, err := GetDefault()
if err != nil {
return nil, err
}
if t == nil {
return cfg, nil
}
if err := t.Unmarshal(cfg); err != nil {
return nil, fmt.Errorf("failed to unmarshal config: %v", err)
}
return cfg, nil
}
// Unmarshal wraps the toml.Tree Unmarshal function.
func (t *Toml) Unmarshal(v interface{}) error {
return t.tree.Unmarshal(v)
}
// Save saves the config to the specified Writer.
func (t *Toml) Save(w io.Writer) (int64, error) {
contents, err := t.contents()
if err != nil {
return 0, err
}
n, err := w.Write(contents)
return int64(n), err
}
// contents returns the config TOML as a byte slice.
// Any required formatting is applied.
func (t Toml) contents() ([]byte, error) {
commented := t.commentDefaults()
buffer := bytes.NewBuffer(nil)
enc := toml.NewEncoder(buffer).Indentation("")
if err := enc.Encode(commented.tree); err != nil {
return nil, fmt.Errorf("invalid config: %v", err)
}
return t.format(buffer.Bytes())
}
// format fixes the comments for the config to ensure that they start in column
// 1 and are not followed by a space.
func (t Toml) format(contents []byte) ([]byte, error) {
r := regexp.MustCompile(`(\n*)\s*?#\s*(\S.*)`)
replaced := r.ReplaceAll(contents, []byte("$1#$2"))
return replaced, nil
}
// Delete deletes the specified key from the TOML config.
func (t *Toml) Delete(key string) error {
delete(t.valuesSet, key)
return t.tree.Delete(key)
}
// Get returns the value for the specified key.
func (t *Toml) Get(key string) interface{} {
return t.tree.Get(key)
}
// GetDefault returns the value for the specified key and falls back to the default value if the Get call fails
func (t *Toml) GetDefault(key string, def interface{}) interface{} {
return t.tree.GetDefault(key, def)
}
// Set sets the specified key to the specified value in the TOML config.
func (t *Toml) Set(key string, value interface{}) {
t.tree.Set(key, value)
t.valuesSet[key] = true
}
// WriteTo encode the Tree as Toml and writes it to the writer w.
// Returns the number of bytes written in case of success, or an error if anything happened.
func (t *Toml) WriteTo(w io.Writer) (int64, error) {
return t.tree.WriteTo(w)
}
// commentDefaults applies the required comments for default values to the Toml.
func (t *Toml) commentDefaults() *Toml {
asToml := t.tree
commentedDefaults := map[string]interface{}{
"swarm-resource": "DOCKER_RESOURCE_GPU",
"accept-nvidia-visible-devices-envvar-when-unprivileged": true,
"accept-nvidia-visible-devices-as-volume-mounts": false,
"nvidia-container-cli.root": "/run/nvidia/driver",
"nvidia-container-cli.path": "/usr/bin/nvidia-container-cli",
"nvidia-container-cli.debug": "/var/log/nvidia-container-toolkit.log",
"nvidia-container-cli.ldcache": "/etc/ld.so.cache",
"nvidia-container-cli.no-cgroups": false,
"nvidia-container-cli.user": "root:video",
"nvidia-container-runtime.debug": "/var/log/nvidia-container-runtime.log",
}
for k, v := range commentedDefaults {
// If a value has been explicitly set, we don't check whether it should
// be commented.
if t.valuesSet[k] {
continue
}
set := asToml.Get(k)
if !shouldComment(k, v, set) {
continue
}
asToml.SetWithComment(k, "", true, v)
}
t.tree = asToml
return t
}
func shouldComment(key string, defaultValue interface{}, setTo interface{}) bool {
if key == "nvidia-container-cli.user" && defaultValue == setTo && isSuse() {
return false
}
if key == "nvidia-container-runtime.debug" && setTo == "/dev/null" {
return true
}
if setTo == nil || defaultValue == setTo || setTo == "" {
return true
}
return false
}
================================================
FILE: api/config/v1/toml_test.go
================================================
/**
# Copyright (c) NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package config
import (
"bytes"
"strings"
"testing"
"github.com/stretchr/testify/require"
"github.com/NVIDIA/nvidia-container-toolkit/internal/test/to"
)
func TestTomlSave(t *testing.T) {
testCases := []struct {
description string
config *Toml
expected string
}{
{
description: "defaultConfig",
config: func() *Toml {
t, _ := defaultToml()
// TODO: We handle the ldconfig path specifically, since this is platform
// dependent.
t.Set("nvidia-container-cli.ldconfig", "OVERRIDDEN")
return t
}(),
expected: `
#accept-nvidia-visible-devices-as-volume-mounts = false
#accept-nvidia-visible-devices-envvar-when-unprivileged = true
disable-require = false
supported-driver-capabilities = "compat32,compute,display,graphics,ngx,utility,video"
#swarm-resource = "DOCKER_RESOURCE_GPU"
[nvidia-container-cli]
#debug = "/var/log/nvidia-container-toolkit.log"
environment = []
#ldcache = "/etc/ld.so.cache"
ldconfig = "OVERRIDDEN"
load-kmods = true
#no-cgroups = false
#path = "/usr/bin/nvidia-container-cli"
#root = "/run/nvidia/driver"
#user = "root:video"
[nvidia-container-runtime]
#debug = "/var/log/nvidia-container-runtime.log"
log-level = "info"
mode = "auto"
runtimes = ["runc", "crun"]
[nvidia-container-runtime.modes]
[nvidia-container-runtime.modes.cdi]
annotation-prefixes = ["cdi.k8s.io/"]
default-kind = "nvidia.com/gpu"
spec-dirs = ["/etc/cdi", "/var/run/cdi"]
[nvidia-container-runtime.modes.csv]
mount-spec-path = "/etc/nvidia-container-runtime/host-files-for-container.d"
[nvidia-container-runtime.modes.legacy]
cuda-compat-mode = "ldconfig"
[nvidia-container-runtime-hook]
path = "nvidia-container-runtime-hook"
skip-mode-detection = false
[nvidia-ctk]
path = "nvidia-ctk"
`,
},
{
description: "set debug to default uncomments",
config: func() *Toml {
t, _ := defaultToml()
// TODO: We handle the ldconfig path specifically, since this is platform
// dependent.
t.Set("nvidia-container-cli.ldconfig", "OVERRIDDEN")
t.Set("nvidia-container-cli.debug", "/var/log/nvidia-container-toolkit.log")
t.Set("nvidia-container-runtime.debug", "/var/log/nvidia-container-runtime.log")
return t
}(),
expected: `
#accept-nvidia-visible-devices-as-volume-mounts = false
#accept-nvidia-visible-devices-envvar-when-unprivileged = true
disable-require = false
supported-driver-capabilities = "compat32,compute,display,graphics,ngx,utility,video"
#swarm-resource = "DOCKER_RESOURCE_GPU"
[nvidia-container-cli]
debug = "/var/log/nvidia-container-toolkit.log"
environment = []
#ldcache = "/etc/ld.so.cache"
ldconfig = "OVERRIDDEN"
load-kmods = true
#no-cgroups = false
#path = "/usr/bin/nvidia-container-cli"
#root = "/run/nvidia/driver"
#user = "root:video"
[nvidia-container-runtime]
debug = "/var/log/nvidia-container-runtime.log"
log-level = "info"
mode = "auto"
runtimes = ["runc", "crun"]
[nvidia-container-runtime.modes]
[nvidia-container-runtime.modes.cdi]
annotation-prefixes = ["cdi.k8s.io/"]
default-kind = "nvidia.com/gpu"
spec-dirs = ["/etc/cdi", "/var/run/cdi"]
[nvidia-container-runtime.modes.csv]
mount-spec-path = "/etc/nvidia-container-runtime/host-files-for-container.d"
[nvidia-container-runtime.modes.legacy]
cuda-compat-mode = "ldconfig"
[nvidia-container-runtime-hook]
path = "nvidia-container-runtime-hook"
skip-mode-detection = false
[nvidia-ctk]
path = "nvidia-ctk"
`,
},
}
for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
buffer := new(bytes.Buffer)
_, err := tc.config.Save(buffer)
require.NoError(t, err)
require.EqualValues(t,
strings.TrimSpace(tc.expected),
strings.TrimSpace(buffer.String()),
)
})
}
}
func TestFormat(t *testing.T) {
testCases := []struct {
input string
expected string
}{
{
input: "# comment",
expected: "#comment",
},
{
input: " #comment",
expected: "#comment",
},
{
input: " # comment",
expected: "#comment",
},
{
input: strings.Join([]string{
"some",
"# comment",
" # comment",
" #comment",
"other"}, "\n"),
expected: strings.Join([]string{
"some",
"#comment",
"#comment",
"#comment",
"other"}, "\n"),
},
}
for _, tc := range testCases {
t.Run(tc.input, func(t *testing.T) {
actual, _ := (Toml{}).format([]byte(tc.input))
require.Equal(t, tc.expected, string(actual))
})
}
}
func TestGetFormattedConfig(t *testing.T) {
expectedLines := []string{
"#no-cgroups = false",
"#debug = \"/var/log/nvidia-container-toolkit.log\"",
"#debug = \"/var/log/nvidia-container-runtime.log\"",
}
contents, err := createEmpty().contents()
require.NoError(t, err)
lines := strings.Split(string(contents), "\n")
for _, line := range expectedLines {
require.Contains(t, lines, line)
}
}
func TestTomlContents(t *testing.T) {
testCases := []struct {
description string
contents map[string]interface{}
expected string
}{
{
description: "empty config returns commented defaults",
expected: `
#accept-nvidia-visible-devices-as-volume-mounts = false
#accept-nvidia-visible-devices-envvar-when-unprivileged = true
#swarm-resource = "DOCKER_RESOURCE_GPU"
[nvidia-container-cli]
#debug = "/var/log/nvidia-container-toolkit.log"
#ldcache = "/etc/ld.so.cache"
#no-cgroups = false
#path = "/usr/bin/nvidia-container-cli"
#root = "/run/nvidia/driver"
#user = "root:video"
[nvidia-container-runtime]
#debug = "/var/log/nvidia-container-runtime.log"`,
},
}
for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
cfg, err := TreeFromMap(tc.contents)
require.NoError(t, err)
contents, err := cfg.contents()
require.NoError(t, err)
require.EqualValues(t,
strings.TrimSpace(tc.expected),
strings.TrimSpace(string(contents)),
)
})
}
}
func TestConfigFromToml(t *testing.T) {
defer setGetLdConfigPathForTest()()
testCases := []struct {
description string
contents map[string]interface{}
expectedError error
expectedConfig *Config
}{
{
description: "empty config returns default config",
contents: nil,
expectedConfig: func() *Config {
c, _ := GetDefault()
return c
}(),
},
{
description: "contents overrides default",
contents: map[string]interface{}{
"nvidia-container-runtime": map[string]interface{}{
"debug": "/some/log/file.log",
"mode": "csv",
},
},
expectedConfig: func() *Config {
c, _ := GetDefault()
c.NVIDIAContainerRuntimeConfig.DebugFilePath = "/some/log/file.log"
c.NVIDIAContainerRuntimeConfig.Mode = "csv"
return c
}(),
},
{
description: "invalid ldconfig value raises error",
contents: map[string]interface{}{
"nvidia-container-cli": map[string]interface{}{
"ldconfig": "/some/ldconfig/path",
},
},
expectedError: errInvalidConfig,
},
{
description: "feature allows ldconfig override",
contents: map[string]interface{}{
"nvidia-container-cli": map[string]interface{}{
"ldconfig": "/some/ldconfig/path",
},
"features": map[string]interface{}{
"allow-ldconfig-from-container": true,
},
},
expectedConfig: func() *Config {
c, _ := GetDefault()
c.NVIDIAContainerCLIConfig.Ldconfig = "/some/ldconfig/path"
c.Features.AllowLDConfigFromContainer = to.Ptr(feature(true))
return c
}(),
},
}
for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
tomlCfg, _ := TreeFromMap(tc.contents)
config, err := tomlCfg.Config()
require.ErrorIs(t, err, tc.expectedError)
require.EqualValues(t, tc.expectedConfig, config)
})
}
}
func createEmpty() *Toml {
t, _ := TreeFromMap(nil)
return t
}
================================================
FILE: api/config/v1/toolkit-cli.go
================================================
/**
# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package config
// CTKConfig stores the config options for the NVIDIA Container Toolkit CLI (nvidia-ctk)
type CTKConfig struct {
Path string `toml:"path"`
}
================================================
FILE: cmd/nvidia-cdi-hook/README.md
================================================
# NVIDIA CDI Hook
The CLI `nvidia-cdi-hook` provides container device runtime hook capabilities when
called by a container runtime, as specific in a
[Container Device Interface](https://tags.cncf.io/container-device-interface/blob/main/SPEC.md)
file.
## Generating a CDI
The CDI itself is created for an NVIDIA-capable device using the
[`nvidia-ctk cdi generate`](../nvidia-ctk/) command.
When `nvidia-ctk cdi generate` is run, the CDI specification is generated as a yaml file.
The CDI specification provides instructions for a container runtime to set up devices, files and
other resources for the container prior to starting it. Those instructions
may include executing command-line tools to prepare the filesystem. The execution
of such command-line tools is called a hook.
`nvidia-cdi-hook` is the CLI tool that is expected to be called by the container runtime,
when specified by the CDI file.
See the [`nvidia-ctk` documentation](../nvidia-ctk/README.md) for more information
on generating a CDI file.
## Functionality
The `nvidia-cdi-hook` CLI provides the following functionality:
* `chmod` - Change the permissions of a file or directory inside the directory path to be mounted into a container.
* `create-symlinks` - Create symlinks inside the directory path to be mounted into a container.
* `update-ldcache` - Update the dynamic linker cache inside the directory path to be mounted into a container.
================================================
FILE: cmd/nvidia-cdi-hook/chmod/chmod.go
================================================
/**
# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package chmod
import (
"context"
"errors"
"fmt"
"io/fs"
"os"
"path/filepath"
"strconv"
"strings"
"github.com/urfave/cli/v3"
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
)
type command struct {
logger logger.Interface
}
type config struct {
paths []string
modeStr string
mode fs.FileMode
containerSpec string
}
// NewCommand constructs a chmod command with the specified logger
func NewCommand(logger logger.Interface) *cli.Command {
c := command{
logger: logger,
}
return c.build()
}
// build the chmod command
func (m command) build() *cli.Command {
cfg := config{}
// Create the 'chmod' command
c := cli.Command{
Name: "chmod",
Usage: "Set the permissions of folders in the container by running chmod. The container root is prefixed to the specified paths.",
Before: func(ctx context.Context, cmd *cli.Command) (context.Context, error) {
return ctx, m.validateFlags(cmd, &cfg)
},
Action: func(ctx context.Context, cmd *cli.Command) error {
return m.run(cmd, &cfg)
},
Flags: []cli.Flag{
&cli.StringSliceFlag{
Name: "path",
Usage: "Specify a path to apply the specified mode to",
Destination: &cfg.paths,
},
&cli.StringFlag{
Name: "mode",
Usage: "Specify the file mode",
Destination: &cfg.modeStr,
},
&cli.StringFlag{
Name: "container-spec",
Usage: "Specify the path to the OCI container spec. If empty or '-' the spec will be read from STDIN",
Destination: &cfg.containerSpec,
},
},
}
return &c
}
func (m command) validateFlags(_ *cli.Command, cfg *config) error {
if strings.TrimSpace(cfg.modeStr) == "" {
return fmt.Errorf("a non-empty mode must be specified")
}
modeInt, err := strconv.ParseUint(cfg.modeStr, 8, 32)
if err != nil {
return fmt.Errorf("failed to parse mode as octal: %v", err)
}
cfg.mode = fs.FileMode(modeInt)
for _, p := range cfg.paths {
if strings.TrimSpace(p) == "" {
return fmt.Errorf("paths must not be empty")
}
}
return nil
}
func (m command) run(_ *cli.Command, cfg *config) error {
s, err := oci.LoadContainerState(cfg.containerSpec)
if err != nil {
return fmt.Errorf("failed to load container state: %v", err)
}
containerRoot, err := s.GetContainerRoot()
if err != nil {
return fmt.Errorf("failed to determined container root: %v", err)
}
if containerRoot == "" {
return fmt.Errorf("empty container root detected")
}
paths := m.getPaths(containerRoot, cfg.paths, cfg.mode)
if len(paths) == 0 {
m.logger.Debugf("No paths specified; exiting")
return nil
}
for _, path := range paths {
err = os.Chmod(path, cfg.mode)
// in some cases this is not an issue (e.g. whole /dev mounted), see #143
if errors.Is(err, fs.ErrPermission) {
m.logger.Debugf("Ignoring permission error with chmod: %v", err)
err = nil
}
}
return err
}
// getPaths updates the specified paths relative to the root.
func (m command) getPaths(root string, paths []string, desiredMode fs.FileMode) []string {
var pathsInRoot []string
for _, f := range paths {
path := filepath.Join(root, f)
stat, err := os.Stat(path)
if err != nil {
m.logger.Debugf("Skipping path %q: %v", path, err)
continue
}
if (stat.Mode()&(fs.ModePerm|fs.ModeSetuid|fs.ModeSetgid|fs.ModeSticky))^desiredMode == 0 {
m.logger.Debugf("Skipping path %q: already desired mode", path)
continue
}
pathsInRoot = append(pathsInRoot, path)
}
return pathsInRoot
}
================================================
FILE: cmd/nvidia-cdi-hook/commands/commands.go
================================================
/**
# Copyright 2024 NVIDIA CORPORATION
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package commands
import (
"context"
"strings"
"github.com/urfave/cli/v3"
"github.com/NVIDIA/nvidia-container-toolkit/cmd/nvidia-cdi-hook/chmod"
symlinks "github.com/NVIDIA/nvidia-container-toolkit/cmd/nvidia-cdi-hook/create-symlinks"
"github.com/NVIDIA/nvidia-container-toolkit/cmd/nvidia-cdi-hook/cudacompat"
disabledevicenodemodification "github.com/NVIDIA/nvidia-container-toolkit/cmd/nvidia-cdi-hook/disable-device-node-modification"
ldcache "github.com/NVIDIA/nvidia-container-toolkit/cmd/nvidia-cdi-hook/update-ldcache"
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
)
// ConfigureCDIHookCommand configures a base command with supported CDI hooks
// and error handling for unsupported hooks.
// This allows the same command to be used for the nvidia-cdi-hook and
// nvidia-ctk hook commands.
func ConfigureCDIHookCommand(logger logger.Interface, base *cli.Command) *cli.Command {
// We set the default action for the command to issue a warning and exit
// with no error.
// This means that if an unsupported hook is run, a container will not fail
// to launch. An unsupported hook could be the result of a CDI specification
// referring to a new hook that is not yet supported by an older NVIDIA
// Container Toolkit version or a hook that has been removed in newer
// version.
base.Action = func(ctx context.Context, cmd *cli.Command) error {
return issueUnsupportedHookWarning(logger, cmd)
}
// CommandNotFound is triggered when an unrecognised (sub)command is detected.
// We assume that an unrecognised (sub)command represents an unsupported hook
// (usually a hook that was added or removed)
base.CommandNotFound = func(ctx context.Context, cmd *cli.Command, commandName string) {
_ = issueUnsupportedHookWarning(logger, cmd)
}
// OnUsageError is triggered when an unexpected flag is detected.
// We check the invoked command to determine whether it is an expected
// hook, and assume that this is an unsupported hook otherwise.
base.OnUsageError = func(ctx context.Context, cmd *cli.Command, err error, isSubcommand bool) error {
// If this is not an error that comes from parsing an unrecognised flag,
// return it as is.
if !strings.HasPrefix(err.Error(), "flag provided but not defined: -") {
return err
}
// If the first argument is a recognised command, we return the error as
// is since it represents an incorrect argument to the specific hook.
var subcommandName string
for _, arg := range cmd.Args().Slice() {
if strings.HasPrefix(arg, "-") {
continue
}
subcommandName = arg
break
}
// If a subcommand is detected and is a recognised subcommand, we return
// the error as is.
if subcommandName != "" && cmd.Command(subcommandName) != nil {
return err
}
// At this point either no args have been supplied or the (sub)command
// (first arg) is not regognised.
// We issue a warning and returun nil.
return issueUnsupportedHookWarning(logger, cmd)
}
// Define the supported hooks.
base.Commands = []*cli.Command{
ldcache.NewCommand(logger),
symlinks.NewCommand(logger),
chmod.NewCommand(logger),
cudacompat.NewCommand(logger),
disabledevicenodemodification.NewCommand(logger),
{
Name: "noop",
Usage: "The noop hook performs no actions and is only added to facilitate basic testing of the CLI",
Hidden: true,
Action: func(_ context.Context, _ *cli.Command) error {
return nil
},
},
}
return base
}
// issueUnsupportedHookWarning logs a warning that no hook or an unsupported
// hook has been specified.
// This happens if a subcommand is provided that does not match one of the
// subcommands that has been explicitly specified.
func issueUnsupportedHookWarning(logger logger.Interface, c *cli.Command) error {
args := c.Args().Slice()
if len(args) == 0 {
logger.Warningf("No CDI hook specified")
} else {
logger.Warningf("Unsupported CDI hook: %v", args[0])
}
return nil
}
================================================
FILE: cmd/nvidia-cdi-hook/create-symlinks/create-symlinks.go
================================================
/**
# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
**/
package symlinks
import (
"context"
"errors"
"fmt"
"os"
"path/filepath"
"strings"
"github.com/moby/sys/symlink"
"github.com/urfave/cli/v3"
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
"github.com/NVIDIA/nvidia-container-toolkit/pkg/lookup/symlinks"
)
type command struct {
logger logger.Interface
}
type config struct {
links []string
containerSpec string
}
// NewCommand constructs a hook command with the specified logger
func NewCommand(logger logger.Interface) *cli.Command {
c := command{
logger: logger,
}
return c.build()
}
// build creates the create-symlink command.
func (m command) build() *cli.Command {
cfg := config{}
c := cli.Command{
Name: "create-symlinks",
Usage: "A hook to create symlinks in the container.",
Action: func(_ context.Context, cmd *cli.Command) error {
return m.run(cmd, &cfg)
},
Flags: []cli.Flag{
&cli.StringSliceFlag{
Name: "link",
Usage: "Specify a specific link to create. The link is specified as target::link. If the link exists in the container root, it is removed.",
Destination: &cfg.links,
},
// The following flags are testing-only flags.
&cli.StringFlag{
Name: "container-spec",
Usage: "Specify the path to the OCI container spec. If empty or '-' the spec will be read from STDIN. This is only intended for testing.",
Destination: &cfg.containerSpec,
Hidden: true,
},
},
}
return &c
}
func (m command) run(_ *cli.Command, cfg *config) error {
s, err := oci.LoadContainerState(cfg.containerSpec)
if err != nil {
return fmt.Errorf("failed to load container state: %v", err)
}
containerRoot, err := s.GetContainerRoot()
if err != nil {
return fmt.Errorf("failed to determined container root: %v", err)
}
created := make(map[string]bool)
for _, l := range cfg.links {
if created[l] {
m.logger.Debugf("Link %v already processed", l)
continue
}
parts := strings.Split(l, "::")
if len(parts) != 2 {
return fmt.Errorf("invalid symlink specification %v", l)
}
err := m.createLink(containerRoot, parts[0], parts[1])
if err != nil {
return fmt.Errorf("failed to create link %v: %w", parts, err)
}
created[l] = true
}
return nil
}
// createLink creates a symbolic link in the specified container root.
// This is equivalent to:
//
// chroot {{ .containerRoot }} ln -f -s {{ .target }} {{ .link }}
//
// If the specified link already exists and points to the same target, this
// operation is a no-op.
// If a file exists at the link path or the link points to a different target
// this file is removed before creating the link.
//
// Note that if the link path resolves to an absolute path oudside of the
// specified root, this is treated as an absolute path in this root.
func (m command) createLink(containerRoot string, targetPath string, link string) error {
linkPath := filepath.Join(containerRoot, link)
exists, err := linkExists(targetPath, linkPath)
if err != nil {
return fmt.Errorf("failed to check if link exists: %w", err)
}
if exists {
m.logger.Debugf("Link %s already exists", linkPath)
return nil
}
// We resolve the parent of the symlink that we're creating in the container root.
// If we resolve the full link path, an existing link at the location itself
// is also resolved here and we are unable to force create the link.
resolvedLinkParent, err := symlink.FollowSymlinkInScope(filepath.Dir(linkPath), containerRoot)
if err != nil {
return fmt.Errorf("failed to follow path for link %v relative to %v: %w", link, containerRoot, err)
}
resolvedLinkPath := filepath.Join(resolvedLinkParent, filepath.Base(linkPath))
m.logger.Infof("Symlinking %v to %v", resolvedLinkPath, targetPath)
err = os.MkdirAll(filepath.Dir(resolvedLinkPath), 0755)
if err != nil {
return fmt.Errorf("failed to create directory: %v", err)
}
err = symlinks.ForceCreate(targetPath, resolvedLinkPath)
if err != nil {
return fmt.Errorf("failed to create symlink: %v", err)
}
return nil
}
// linkExists checks whether the specified link exists.
// A link exists if the path exists, is a symlink, and points to the specified target.
func linkExists(target string, link string) (bool, error) {
currentTarget, err := symlinks.Resolve(link)
if errors.Is(err, os.ErrNotExist) {
return false, nil
}
if err != nil {
return false, fmt.Errorf("failed to resolve existing symlink %s: %w", link, err)
}
if currentTarget == target {
return true, nil
}
return false, nil
}
================================================
FILE: cmd/nvidia-cdi-hook/create-symlinks/create-symlinks_test.go
================================================
package symlinks
import (
"os"
"path/filepath"
"strings"
"testing"
testlog "github.com/sirupsen/logrus/hooks/test"
"github.com/stretchr/testify/require"
"github.com/NVIDIA/nvidia-container-toolkit/pkg/lookup/symlinks"
)
func TestLinkExist(t *testing.T) {
tmpDir := t.TempDir()
require.NoError(
t,
makeFs(tmpDir,
dirOrLink{path: "/a/b/c", target: "d"},
dirOrLink{path: "/a/b/e", target: "/a/b/f"},
),
)
exists, err := linkExists("d", filepath.Join(tmpDir, "/a/b/c"))
require.NoError(t, err)
require.True(t, exists)
exists, err = linkExists("/a/b/f", filepath.Join(tmpDir, "/a/b/e"))
require.NoError(t, err)
require.True(t, exists)
exists, err = linkExists("different-target", filepath.Join(tmpDir, "/a/b/c"))
require.NoError(t, err)
require.False(t, exists)
exists, err = linkExists("/a/b/d", filepath.Join(tmpDir, "/a/b/c"))
require.NoError(t, err)
require.False(t, exists)
exists, err = linkExists("foo", filepath.Join(tmpDir, "/a/b/does-not-exist"))
require.NoError(t, err)
require.False(t, exists)
}
func TestCreateLink(t *testing.T) {
type link struct {
path string
target string
}
type expectedLink struct {
link
err error
}
testCases := []struct {
description string
containerContents []dirOrLink
link link
expectedCreateError error
expectedLinks []expectedLink
}{
{
description: "link to / resolves to container root",
containerContents: []dirOrLink{
{path: "/lib/foo", target: "/"},
},
link: link{
path: "/lib/foo/libfoo.so",
target: "libfoo.so.1",
},
expectedLinks: []expectedLink{
{
link: link{
path: "{{ .containerRoot }}/libfoo.so",
target: "libfoo.so.1",
},
},
},
},
{
description: "link to / resolves to container root; parent relative link",
containerContents: []dirOrLink{
{path: "/lib/foo", target: "/"},
},
link: link{
path: "/lib/foo/libfoo.so",
target: "../libfoo.so.1",
},
expectedLinks: []expectedLink{
{
link: link{
path: "{{ .containerRoot }}/libfoo.so",
target: "../libfoo.so.1",
},
},
},
},
{
description: "link to / resolves to container root; absolute link",
containerContents: []dirOrLink{
{path: "/lib/foo", target: "/"},
},
link: link{
path: "/lib/foo/libfoo.so",
target: "/a-path-in-container/foo/libfoo.so.1",
},
expectedLinks: []expectedLink{
{
link: link{
path: "{{ .containerRoot }}/libfoo.so",
target: "/a-path-in-container/foo/libfoo.so.1",
},
},
{
// We also check that the target is NOT created.
link: link{
path: "{{ .containerRoot }}/a-path-in-container/foo/libfoo.so.1",
},
err: os.ErrNotExist,
},
},
},
}
for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
tmpDir := t.TempDir()
hostRoot := filepath.Join(tmpDir, "/host-root/")
containerRoot := filepath.Join(tmpDir, "/container-root")
require.NoError(t, makeFs(hostRoot))
require.NoError(t, makeFs(containerRoot, tc.containerContents...))
// nvidia-cdi-hook create-symlinks --link linkSpec
err := getTestCommand().createLink(containerRoot, tc.link.target, tc.link.path)
// TODO: We may be able to replace this with require.ErrorIs.
if tc.expectedCreateError != nil {
require.Error(t, err)
} else {
require.NoError(t, err)
}
for _, expectedLink := range tc.expectedLinks {
path := strings.ReplaceAll(expectedLink.path, "{{ .containerRoot }}", containerRoot)
path = strings.ReplaceAll(path, "{{ .hostRoot }}", hostRoot)
if expectedLink.target != "" {
target, err := symlinks.Resolve(path)
require.ErrorIs(t, err, expectedLink.err)
require.Equal(t, expectedLink.target, target)
} else {
_, err := os.Stat(path)
require.ErrorIs(t, err, expectedLink.err)
}
}
})
}
}
func TestCreateLinkRelativePath(t *testing.T) {
tmpDir := t.TempDir()
hostRoot := filepath.Join(tmpDir, "/host-root/")
containerRoot := filepath.Join(tmpDir, "/container-root")
require.NoError(t, makeFs(hostRoot))
require.NoError(t, makeFs(containerRoot, dirOrLink{path: "/lib/"}))
// nvidia-cdi-hook create-symlinks --link libfoo.so.1::/lib/libfoo.so
err := getTestCommand().createLink(containerRoot, "libfoo.so.1", "/lib/libfoo.so")
require.NoError(t, err)
target, err := symlinks.Resolve(filepath.Join(containerRoot, "/lib/libfoo.so"))
require.NoError(t, err)
require.Equal(t, "libfoo.so.1", target)
}
func TestCreateLinkAbsolutePath(t *testing.T) {
tmpDir := t.TempDir()
hostRoot := filepath.Join(tmpDir, "/host-root/")
containerRoot := filepath.Join(tmpDir, "/container-root")
require.NoError(t, makeFs(hostRoot))
require.NoError(t, makeFs(containerRoot, dirOrLink{path: "/lib/"}))
// nvidia-cdi-hook create-symlinks --link /lib/libfoo.so.1::/lib/libfoo.so
err := getTestCommand().createLink(containerRoot, "/lib/libfoo.so.1", "/lib/libfoo.so")
require.NoError(t, err)
target, err := symlinks.Resolve(filepath.Join(containerRoot, "/lib/libfoo.so"))
require.NoError(t, err)
require.Equal(t, "/lib/libfoo.so.1", target)
}
func TestCreateLinkAlreadyExists(t *testing.T) {
testCases := []struct {
description string
containerContents []dirOrLink
shouldExist []string
}{
{
description: "link already exists with correct target",
containerContents: []dirOrLink{{path: "/lib/libfoo.so", target: "libfoo.so.1"}},
shouldExist: []string{},
},
{
description: "link already exists with different target",
containerContents: []dirOrLink{{path: "/lib/libfoo.so", target: "different-target"}, {path: "different-target"}},
shouldExist: []string{"{{ .containerRoot }}/different-target"},
},
}
for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
tmpDir := t.TempDir()
hostRoot := filepath.Join(tmpDir, "/host-root/")
containerRoot := filepath.Join(tmpDir, "/container-root")
require.NoError(t, makeFs(hostRoot))
require.NoError(t, makeFs(containerRoot, tc.containerContents...))
// nvidia-cdi-hook create-symlinks --link libfoo.so.1::/lib/libfoo.so
err := getTestCommand().createLink(containerRoot, "libfoo.so.1", "/lib/libfoo.so")
require.NoError(t, err)
target, err := symlinks.Resolve(filepath.Join(containerRoot, "lib/libfoo.so"))
require.NoError(t, err)
require.Equal(t, "libfoo.so.1", target)
for _, p := range tc.shouldExist {
require.DirExists(t, strings.ReplaceAll(p, "{{ .containerRoot }}", containerRoot))
}
})
}
}
func TestCreateLinkOutOfBounds(t *testing.T) {
tmpDir := t.TempDir()
hostRoot := filepath.Join(tmpDir, "/host-root")
containerRoot := filepath.Join(tmpDir, "/container-root")
require.NoError(t,
makeFs(hostRoot,
dirOrLink{path: "libfoo.so"},
),
)
require.NoError(t,
makeFs(containerRoot,
dirOrLink{path: "/lib"},
dirOrLink{path: "/lib/foo", target: hostRoot},
),
)
path, err := symlinks.Resolve(filepath.Join(containerRoot, "/lib/foo"))
require.NoError(t, err)
require.Equal(t, hostRoot, path)
// nvidia-cdi-hook create-symlinks --link ../libfoo.so.1::/lib/foo/libfoo.so
_ = getTestCommand().createLink(containerRoot, "../libfoo.so.1", "/lib/foo/libfoo.so")
require.NoError(t, err)
target, err := symlinks.Resolve(filepath.Join(containerRoot, hostRoot, "libfoo.so"))
require.NoError(t, err)
require.Equal(t, "../libfoo.so.1", target)
require.DirExists(t, filepath.Join(hostRoot, "libfoo.so"))
}
type dirOrLink struct {
path string
target string
}
func makeFs(tmpdir string, fs ...dirOrLink) error {
if err := os.MkdirAll(tmpdir, 0o755); err != nil {
return err
}
for _, s := range fs {
s.path = filepath.Join(tmpdir, s.path)
if s.target == "" {
_ = os.MkdirAll(s.path, 0o755)
continue
}
if err := os.MkdirAll(filepath.Dir(s.path), 0o755); err != nil {
return err
}
if err := os.Symlink(s.target, s.path); err != nil && !os.IsExist(err) {
return err
}
}
return nil
}
// getTestCommand creates a command for running tests against.
func getTestCommand() *command {
logger, _ := testlog.NewNullLogger()
return &command{
logger: logger,
}
}
================================================
FILE: cmd/nvidia-cdi-hook/cudacompat/container-root.go
================================================
/**
# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of
gitextract_w5zx98os/ ├── .dockerignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ ├── feature_request.md │ │ └── question.md │ ├── copy-pr-bot.yaml │ ├── dependabot.yml │ ├── scripts/ │ │ ├── add-labels-from-comment.js │ │ ├── backport.js │ │ └── extract-branches.js │ └── workflows/ │ ├── cherrypick.yml │ ├── ci.yaml │ ├── code_scanning.yaml │ ├── e2e.yaml │ ├── golang.yaml │ ├── image.yaml │ ├── release.yaml │ └── stale.yaml ├── .gitignore ├── .gitmodules ├── .golangci.yml ├── .nvidia-ci.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── DEVELOPMENT.md ├── LICENSE ├── Makefile ├── README.md ├── RELEASE.md ├── SECURITY.md ├── api/ │ └── config/ │ └── v1/ │ ├── cli.go │ ├── cli_test.go │ ├── config.go │ ├── config_test.go │ ├── features.go │ ├── hook.go │ ├── runtime.go │ ├── toml.go │ ├── toml_test.go │ └── toolkit-cli.go ├── cmd/ │ ├── nvidia-cdi-hook/ │ │ ├── README.md │ │ ├── chmod/ │ │ │ └── chmod.go │ │ ├── commands/ │ │ │ └── commands.go │ │ ├── create-symlinks/ │ │ │ ├── create-symlinks.go │ │ │ └── create-symlinks_test.go │ │ ├── cudacompat/ │ │ │ ├── container-root.go │ │ │ ├── cuda-elf-header.go │ │ │ ├── cuda-elf-header_test.go │ │ │ ├── cudacompat.go │ │ │ └── cudacompat_test.go │ │ ├── disable-device-node-modification/ │ │ │ ├── disable-device-node-modification.go │ │ │ ├── disable-device-node-modification_test.go │ │ │ ├── params_linux.go │ │ │ └── params_other.go │ │ ├── main.go │ │ └── update-ldcache/ │ │ └── update-ldcache.go │ ├── nvidia-container-runtime/ │ │ ├── README.md │ │ ├── main.go │ │ └── main_test.go │ ├── nvidia-container-runtime-hook/ │ │ ├── capabilities.go │ │ ├── container_config.go │ │ ├── container_config_test.go │ │ ├── hook_config.go │ │ ├── hook_config_test.go │ │ ├── hook_test.go │ │ └── main.go │ ├── nvidia-container-runtime.cdi/ │ │ └── main.go │ ├── nvidia-container-runtime.legacy/ │ │ └── main.go │ ├── nvidia-ctk/ │ │ ├── README.md │ │ ├── cdi/ │ │ │ ├── cdi.go │ │ │ ├── generate/ │ │ │ │ ├── config.go │ │ │ │ ├── generate.go │ │ │ │ └── generate_test.go │ │ │ ├── list/ │ │ │ │ └── list.go │ │ │ └── transform/ │ │ │ ├── root/ │ │ │ │ └── root.go │ │ │ └── transform.go │ │ ├── config/ │ │ │ ├── config.go │ │ │ ├── config_test.go │ │ │ ├── create-default/ │ │ │ │ └── create-default.go │ │ │ └── flags/ │ │ │ └── options.go │ │ ├── hook/ │ │ │ └── hook.go │ │ ├── info/ │ │ │ └── info.go │ │ ├── main.go │ │ ├── runtime/ │ │ │ ├── configure/ │ │ │ │ ├── configure.go │ │ │ │ └── configure_test.go │ │ │ └── runtime.go │ │ └── system/ │ │ ├── create-dev-char-symlinks/ │ │ │ ├── all.go │ │ │ ├── create-dev-char-symlinks.go │ │ │ ├── existing.go │ │ │ ├── existing_linux.go │ │ │ └── existing_other.go │ │ ├── create-device-nodes/ │ │ │ └── create-device-nodes.go │ │ └── system.go │ └── nvidia-ctk-installer/ │ ├── container/ │ │ ├── README.md │ │ ├── container.go │ │ ├── operator/ │ │ │ ├── operator.go │ │ │ └── operator_test.go │ │ └── runtime/ │ │ ├── containerd/ │ │ │ ├── config_test.go │ │ │ ├── containerd.go │ │ │ ├── containerd_linux.go │ │ │ ├── containerd_other.go │ │ │ └── containerd_test.go │ │ ├── crio/ │ │ │ ├── config_test.go │ │ │ └── crio.go │ │ ├── docker/ │ │ │ ├── docker.go │ │ │ ├── docker_linux.go │ │ │ ├── docker_other.go │ │ │ └── docker_test.go │ │ ├── nri/ │ │ │ ├── logger.go │ │ │ └── plugin.go │ │ └── runtime.go │ ├── main.go │ ├── main_test.go │ └── toolkit/ │ ├── installer/ │ │ ├── artifact-root.go │ │ ├── directory.go │ │ ├── executables.go │ │ ├── executables_test.go │ │ ├── file-installer_mock.go │ │ ├── installer.go │ │ ├── installer_mock.go │ │ ├── installer_test.go │ │ ├── libraries.go │ │ └── options.go │ ├── options.go │ ├── toolkit.go │ └── toolkit_test.go ├── deployments/ │ ├── container/ │ │ ├── Dockerfile │ │ ├── Dockerfile.rpmrebuild │ │ ├── Makefile │ │ ├── README.md │ │ ├── multi-arch.mk │ │ └── native-only.mk │ ├── devel/ │ │ ├── Dockerfile │ │ ├── Makefile │ │ ├── go.mod │ │ ├── go.sum │ │ └── tools.go │ └── systemd/ │ ├── nvidia-cdi-refresh.env │ ├── nvidia-cdi-refresh.path │ └── nvidia-cdi-refresh.service ├── docker/ │ ├── Dockerfile.debian │ ├── Dockerfile.devel │ ├── Dockerfile.opensuse-leap │ ├── Dockerfile.rpm-yum │ ├── Dockerfile.ubuntu │ └── docker.mk ├── go.mod ├── go.sum ├── hack/ │ ├── create-release.sh │ ├── generate-changelog.sh │ ├── golang-version.sh │ ├── prepare-artifacts.sh │ ├── prepare-release.sh │ └── pull-packages.sh ├── internal/ │ ├── config/ │ │ └── image/ │ │ ├── builder.go │ │ ├── capabilities.go │ │ ├── capabilities_test.go │ │ ├── cuda_image.go │ │ ├── cuda_image_test.go │ │ ├── devices.go │ │ ├── envvars.go │ │ ├── privileged.go │ │ └── privileged_test.go │ ├── cuda/ │ │ └── cuda.go │ ├── devices/ │ │ ├── devices.go │ │ ├── devices_mock.go │ │ └── devices_tests.go │ ├── discover/ │ │ ├── cache.go │ │ ├── char_devices.go │ │ ├── char_devices_test.go │ │ ├── compat_libs.go │ │ ├── discover.go │ │ ├── discover_mock.go │ │ ├── envvar.go │ │ ├── filter.go │ │ ├── first-valid.go │ │ ├── gdrcopy.go │ │ ├── gdrcopy_test.go │ │ ├── gds.go │ │ ├── gds_test.go │ │ ├── graphics.go │ │ ├── graphics_test.go │ │ ├── hooks.go │ │ ├── hooks_test.go │ │ ├── ipc.go │ │ ├── ipc_test.go │ │ ├── ldconfig.go │ │ ├── ldconfig_test.go │ │ ├── list.go │ │ ├── mofed.go │ │ ├── mofed_test.go │ │ ├── mounts-to-container-path.go │ │ ├── mounts-to-container-path_test.go │ │ ├── mounts.go │ │ ├── mounts_test.go │ │ ├── none.go │ │ ├── none_test.go │ │ ├── nvswitch.go │ │ ├── nvswitch_test.go │ │ ├── symlinks.go │ │ └── symlinks_test.go │ ├── dxcore/ │ │ ├── api.go │ │ ├── dxcore.c │ │ ├── dxcore.go │ │ └── dxcore.h │ ├── edits/ │ │ ├── device.go │ │ ├── device_test.go │ │ ├── edits.go │ │ ├── edits_test.go │ │ ├── envvar.go │ │ ├── hook.go │ │ └── mount.go │ ├── info/ │ │ ├── additional_info.go │ │ ├── additional_info_test.go │ │ ├── auto.go │ │ ├── auto_test.go │ │ ├── drm/ │ │ │ └── drm_devices.go │ │ ├── proc/ │ │ │ ├── devices/ │ │ │ │ ├── builder.go │ │ │ │ ├── devices.go │ │ │ │ ├── devices_mock.go │ │ │ │ └── devices_test.go │ │ │ └── information_files.go │ │ └── version.go │ ├── ldcache/ │ │ ├── ldcache.go │ │ └── ldcache_mock.go │ ├── ldconfig/ │ │ ├── ldconfig.go │ │ ├── ldconfig_linux.go │ │ ├── ldconfig_other.go │ │ ├── ldconfig_test.go │ │ ├── safe-exec_linux.go │ │ └── safe-exec_other.go │ ├── logger/ │ │ ├── api.go │ │ └── lib.go │ ├── lookup/ │ │ └── root/ │ │ ├── cuda_test.go │ │ ├── options.go │ │ ├── root.go │ │ ├── root_test.go │ │ └── version.go │ ├── modifier/ │ │ ├── cdi/ │ │ │ ├── builder.go │ │ │ ├── registry.go │ │ │ └── spec.go │ │ ├── cdi.go │ │ ├── cdi_test.go │ │ ├── csv.go │ │ ├── csv_test.go │ │ ├── discover.go │ │ ├── discover_test.go │ │ ├── factory.go │ │ ├── gated.go │ │ ├── graphics.go │ │ ├── graphics_test.go │ │ ├── hook_remover.go │ │ ├── hook_remover_test.go │ │ ├── list.go │ │ ├── mode.go │ │ ├── stable.go │ │ └── stable_test.go │ ├── nvcaps/ │ │ ├── nvcaps.go │ │ └── nvcaps_test.go │ ├── nvsandboxutils/ │ │ ├── api.go │ │ ├── cgo_helpers.h │ │ ├── cgo_helpers_static.go │ │ ├── const.go │ │ ├── doc.go │ │ ├── dynamicLibrary_mock.go │ │ ├── gen/ │ │ │ ├── generate-bindings.sh │ │ │ ├── nvsandboxutils/ │ │ │ │ ├── anonymous_structs.cocci │ │ │ │ ├── generateapi.go │ │ │ │ ├── nvsandboxutils.h │ │ │ │ └── nvsandboxutils.yml │ │ │ └── update-bindings.sh │ │ ├── gpu-resources.go │ │ ├── impl.go │ │ ├── lib.go │ │ ├── lib_test.go │ │ ├── mock/ │ │ │ └── interface.go │ │ ├── nvsandboxutils.go │ │ ├── nvsandboxutils.h │ │ ├── refcount.go │ │ ├── refcount_test.go │ │ ├── return.go │ │ ├── types_gen.go │ │ └── zz_generated.api.go │ ├── oci/ │ │ ├── args.go │ │ ├── args_test.go │ │ ├── options.go │ │ ├── runtime.go │ │ ├── runtime_low_level.go │ │ ├── runtime_mock.go │ │ ├── runtime_modifier.go │ │ ├── runtime_modifier_test.go │ │ ├── runtime_path.go │ │ ├── runtime_path_test.go │ │ ├── runtime_syscall_exec.go │ │ ├── spec.go │ │ ├── spec_file.go │ │ ├── spec_file_test.go │ │ ├── spec_memory.go │ │ ├── spec_memory_test.go │ │ ├── spec_mock.go │ │ ├── spec_test.go │ │ └── state.go │ ├── platform-support/ │ │ ├── dgpu/ │ │ │ ├── by-path-hooks.go │ │ │ ├── dgpu.go │ │ │ ├── dgpu_test.go │ │ │ ├── nvml.go │ │ │ ├── nvml_test.go │ │ │ ├── nvsandboxutils.go │ │ │ ├── nvsandboxutils_test.go │ │ │ └── options.go │ │ └── tegra/ │ │ ├── csv/ │ │ │ ├── csv.go │ │ │ ├── csv_test.go │ │ │ ├── mount_spec.go │ │ │ └── mount_spec_test.go │ │ ├── csv.go │ │ ├── csv_test.go │ │ ├── filter.go │ │ ├── filter_test.go │ │ ├── mount_specs.go │ │ ├── options.go │ │ ├── symlinks.go │ │ ├── tegra.go │ │ └── tegra_test.go │ ├── requirements/ │ │ ├── constants.go │ │ ├── constraints/ │ │ │ ├── binary.go │ │ │ ├── constants.go │ │ │ ├── constraint_mock.go │ │ │ ├── constraints.go │ │ │ ├── constraints_test.go │ │ │ ├── factory.go │ │ │ ├── factory_test.go │ │ │ ├── logical.go │ │ │ ├── logical_test.go │ │ │ ├── property.go │ │ │ └── property_mock.go │ │ └── requirements.go │ ├── runtime/ │ │ ├── api.go │ │ ├── logger.go │ │ ├── logger_test.go │ │ ├── runtime.go │ │ ├── runtime_factory.go │ │ └── runtime_factory_test.go │ └── test/ │ ├── test.go │ └── to/ │ └── to.go ├── packaging/ │ ├── debian/ │ │ ├── changelog.old │ │ ├── compat │ │ ├── control │ │ ├── copyright │ │ ├── nvidia-container-toolkit-base.install │ │ ├── nvidia-container-toolkit-base.postinst │ │ ├── nvidia-container-toolkit-operator-extensions.install │ │ ├── nvidia-container-toolkit.install │ │ ├── nvidia-container-toolkit.lintian-overrides │ │ ├── nvidia-container-toolkit.postinst │ │ ├── nvidia-container-toolkit.postrm │ │ ├── prepare │ │ └── rules │ └── rpm/ │ ├── SOURCES/ │ │ └── LICENSE │ └── SPECS/ │ └── nvidia-container-toolkit.spec ├── pkg/ │ ├── config/ │ │ ├── engine/ │ │ │ ├── api.go │ │ │ ├── config.go │ │ │ ├── containerd/ │ │ │ │ ├── config.go │ │ │ │ ├── config_drop_in.go │ │ │ │ ├── config_drop_in_test.go │ │ │ │ ├── config_test.go │ │ │ │ ├── config_v1.go │ │ │ │ ├── config_v1_test.go │ │ │ │ ├── containerd.go │ │ │ │ └── option.go │ │ │ ├── crio/ │ │ │ │ ├── crio.go │ │ │ │ ├── crio_test.go │ │ │ │ └── option.go │ │ │ ├── docker/ │ │ │ │ ├── docker.go │ │ │ │ ├── docker_test.go │ │ │ │ └── option.go │ │ │ └── engine.go │ │ ├── ocihook/ │ │ │ ├── hooks.go │ │ │ └── oci-hook.go │ │ ├── raw.go │ │ └── toml/ │ │ ├── list.go │ │ ├── source-cli.go │ │ ├── source-empty.go │ │ ├── source-file.go │ │ ├── source-map.go │ │ ├── source-string.go │ │ ├── source.go │ │ └── toml.go │ ├── lookup/ │ │ ├── device.go │ │ ├── device_test.go │ │ ├── dir.go │ │ ├── executable.go │ │ ├── executable_test.go │ │ ├── factory.go │ │ ├── factory_test.go │ │ ├── file.go │ │ ├── file_test.go │ │ ├── ldcache.go │ │ ├── ldcache_test.go │ │ ├── library.go │ │ ├── library_test.go │ │ ├── locator.go │ │ ├── locator_mock.go │ │ ├── merge.go │ │ ├── null.go │ │ ├── optional.go │ │ ├── path.go │ │ ├── symlinks/ │ │ │ └── symlink.go │ │ └── symlinks.go │ ├── nvcdi/ │ │ ├── api.go │ │ ├── common-nvml.go │ │ ├── device-wsl.go │ │ ├── driver-nvml.go │ │ ├── driver-wsl.go │ │ ├── driver-wsl_test.go │ │ ├── full-gpu-nvml.go │ │ ├── gated.go │ │ ├── info-interface_mock.go │ │ ├── lib-csv.go │ │ ├── lib-csv_test.go │ │ ├── lib-imex.go │ │ ├── lib-imex_test.go │ │ ├── lib-nvml.go │ │ ├── lib-nvml_test.go │ │ ├── lib-wsl.go │ │ ├── lib.go │ │ ├── lib_test.go │ │ ├── management.go │ │ ├── mig-device-nvml.go │ │ ├── mocks.go │ │ ├── mode.go │ │ ├── namer.go │ │ ├── namer_nvml_mock.go │ │ ├── namer_test.go │ │ ├── options.go │ │ ├── spec/ │ │ │ ├── api.go │ │ │ ├── builder.go │ │ │ ├── set-minimum-version.go │ │ │ ├── spec.go │ │ │ └── spec_test.go │ │ ├── transform/ │ │ │ ├── api.go │ │ │ ├── deduplicate.go │ │ │ ├── deduplicate_test.go │ │ │ ├── edits.go │ │ │ ├── merge.go │ │ │ ├── merged-device.go │ │ │ ├── merged-device_test.go │ │ │ ├── noop/ │ │ │ │ └── no-op.go │ │ │ ├── remove.go │ │ │ ├── root/ │ │ │ │ ├── builder.go │ │ │ │ ├── container-root.go │ │ │ │ ├── container-root_test.go │ │ │ │ ├── driver-root.go │ │ │ │ ├── driver-root_test.go │ │ │ │ ├── host-root.go │ │ │ │ ├── host-root_test.go │ │ │ │ ├── options.go │ │ │ │ └── root.go │ │ │ ├── simplify.go │ │ │ ├── simplify_test.go │ │ │ ├── sorter.go │ │ │ └── sorter_test.go │ │ ├── workarounds-device-folder-permissions.go │ │ └── wrapper.go │ └── system/ │ ├── nvdevices/ │ │ ├── devices.go │ │ ├── devices_test.go │ │ ├── mknod.go │ │ ├── mknod_mock.go │ │ └── options.go │ └── nvmodules/ │ ├── cmd.go │ ├── cmd_mock.go │ ├── modules.go │ ├── modules_test.go │ └── options.go ├── scripts/ │ ├── Dockerfile.sign.deb │ ├── Dockerfile.sign.rpm │ ├── build-all-components.sh │ ├── build-packages.sh │ ├── extract-packages.sh │ ├── get-component-versions.sh │ ├── packages-sign-all.sh │ ├── publish-image.sh │ ├── release-kitmaker-artifactory.sh │ ├── release-packages-artifactory.sh │ ├── release-packages.sh │ ├── repackage-rpms.sh │ ├── update-components.sh │ └── utils.sh ├── testdata/ │ ├── compat/ │ │ ├── libcuda.so.575.57.08 │ │ └── libcuda.so.590.44.01 │ ├── go.mod │ ├── installer/ │ │ └── artifacts/ │ │ ├── deb/ │ │ │ └── usr/ │ │ │ ├── bin/ │ │ │ │ ├── nvidia-cdi-hook │ │ │ │ ├── nvidia-container-cli │ │ │ │ ├── nvidia-container-runtime │ │ │ │ ├── nvidia-container-runtime-hook │ │ │ │ ├── nvidia-container-runtime.cdi │ │ │ │ ├── nvidia-container-runtime.legacy │ │ │ │ └── nvidia-ctk │ │ │ └── lib/ │ │ │ └── x86_64-linux-gnu/ │ │ │ ├── libnvidia-container-go.so.99.88.77 │ │ │ └── libnvidia-container.so.99.88.77 │ │ └── rpm/ │ │ └── usr/ │ │ ├── bin/ │ │ │ ├── nvidia-cdi-hook │ │ │ ├── nvidia-container-cli │ │ │ ├── nvidia-container-runtime │ │ │ ├── nvidia-container-runtime-hook │ │ │ ├── nvidia-container-runtime.cdi │ │ │ ├── nvidia-container-runtime.legacy │ │ │ └── nvidia-ctk │ │ └── lib64/ │ │ ├── libnvidia-container-go.so.99.88.77 │ │ └── libnvidia-container.so.99.88.77 │ └── lookup/ │ ├── csv-mode/ │ │ ├── dev/ │ │ │ └── nvidia0 │ │ └── etc/ │ │ └── nvidia-container-runtime/ │ │ └── host-files-for-container.d/ │ │ ├── devices.csv │ │ └── drivers.csv │ ├── rootfs-1/ │ │ ├── README.md │ │ ├── dev/ │ │ │ ├── gdrdrv │ │ │ ├── infiniband/ │ │ │ │ ├── rdma_cm │ │ │ │ └── uverbs0 │ │ │ ├── nvidia-caps/ │ │ │ │ └── nvidia-cap1 │ │ │ ├── nvidia-caps-imex-channels/ │ │ │ │ ├── channel0 │ │ │ │ ├── channel1 │ │ │ │ └── channel2047 │ │ │ ├── nvidia-fs0 │ │ │ ├── nvidia-nvswitch0 │ │ │ ├── nvidia-nvswitchctl │ │ │ ├── nvidia0 │ │ │ └── nvidiactl │ │ ├── etc/ │ │ │ ├── cufile.json │ │ │ └── ld.so.cache │ │ ├── lib/ │ │ │ └── x86_64-linux-gnu/ │ │ │ ├── libcuda.so.999.88.77 │ │ │ └── vdpau/ │ │ │ └── libvdpau_nvidia.so.999.88.77 │ │ └── run/ │ │ └── udev/ │ │ └── .gitkeep │ ├── rootfs-2/ │ │ ├── README.md │ │ ├── etc/ │ │ │ └── ld.so.cache │ │ └── var/ │ │ └── lib/ │ │ └── nvidia/ │ │ └── lib64/ │ │ └── libcuda.so.999.88.77 │ ├── rootfs-drm/ │ │ └── dev/ │ │ └── dri/ │ │ ├── card0 │ │ └── renderD128 │ ├── rootfs-empty/ │ │ └── README.md │ ├── rootfs-no-cache-lib64/ │ │ └── usr/ │ │ └── lib64/ │ │ └── libcuda.so.999.88.77 │ ├── rootfs-orin/ │ │ ├── dev/ │ │ │ └── nvidia0 │ │ ├── etc/ │ │ │ └── nvidia-container-runtime/ │ │ │ └── host-files-for-container.d/ │ │ │ ├── devices.csv │ │ │ └── drivers.csv │ │ └── usr/ │ │ └── lib/ │ │ └── aarch64-linux-gnu/ │ │ └── nvidia/ │ │ ├── libcuda.so.1.1 │ │ └── libnvidia-ml.so.1 │ ├── rootfs-split/ │ │ ├── dev-root/ │ │ │ └── dev/ │ │ │ ├── gdrdrv │ │ │ ├── nvidia-caps/ │ │ │ │ └── nvidia-cap1 │ │ │ ├── nvidia-caps-imex-channels/ │ │ │ │ ├── channel0 │ │ │ │ ├── channel1 │ │ │ │ └── channel2047 │ │ │ ├── nvidia-fs0 │ │ │ ├── nvidia0 │ │ │ └── nvidiactl │ │ └── driver-root/ │ │ ├── etc/ │ │ │ ├── cufile.json │ │ │ └── ld.so.cache │ │ ├── lib/ │ │ │ └── x86_64-linux-gnu/ │ │ │ ├── libcuda.so.1 │ │ │ ├── libcuda.so.999.88.77 │ │ │ └── vdpau/ │ │ │ └── libvdpau_nvidia.so.999.88.77 │ │ └── run/ │ │ └── udev/ │ │ └── .gitkeep │ ├── rootfs-thor-dgpu/ │ │ ├── dev/ │ │ │ ├── nvidia0 │ │ │ ├── nvidia1 │ │ │ ├── nvidia2 │ │ │ ├── nvidiactl │ │ │ └── nvmap │ │ └── etc/ │ │ └── nvidia-container-runtime/ │ │ └── host-files-for-container.d/ │ │ ├── devices.csv │ │ └── drivers.csv │ └── rootfs-with-nvswitch/ │ └── dev/ │ ├── nvidia-nvswitch0 │ ├── nvidia-nvswitch1 │ └── nvidia-nvswitchctl ├── tests/ │ ├── bin/ │ │ ├── nvidia-container-runtime-hook │ │ └── runc │ ├── container/ │ │ ├── common.sh │ │ ├── containerd_test.sh │ │ ├── crio_test.sh │ │ ├── docker_test.sh │ │ ├── main.sh │ │ └── shared/ │ │ └── etc/ │ │ ├── containerd/ │ │ │ ├── config_empty.toml │ │ │ ├── config_v1.toml │ │ │ └── config_v2.toml │ │ └── docker/ │ │ └── daemon.json │ ├── e2e/ │ │ ├── Makefile │ │ ├── e2e_test.go │ │ ├── infra/ │ │ │ ├── driver-branch-535.yaml │ │ │ ├── driver-branch-570.yaml │ │ │ └── driver-branch-580.yaml │ │ ├── installer.go │ │ ├── nvidia-cdi-refresh_test.go │ │ ├── nvidia-container-cli_test.go │ │ ├── nvidia-container-toolkit_test.go │ │ ├── nvidia-ctk_containerd_test.go │ │ └── runner.go │ ├── go.mod │ ├── go.sum │ ├── input/ │ │ ├── config.clone3.json │ │ ├── csv_samples/ │ │ │ ├── .csv │ │ │ ├── empty/ │ │ │ │ └── .gitignore │ │ │ ├── jetson.csv │ │ │ ├── other.not_csv │ │ │ ├── simple.csv │ │ │ ├── simple_wrong.csv │ │ │ └── spaced.csv │ │ ├── nvidia-container-runtime/ │ │ │ └── config.toml │ │ └── test_spec.json │ ├── release/ │ │ ├── Makefile │ │ ├── README.md │ │ └── docker/ │ │ ├── centos8/ │ │ │ ├── Dockerfile │ │ │ ├── entrypoint.sh │ │ │ └── install_repo.sh │ │ ├── fedora35/ │ │ │ ├── Dockerfile │ │ │ ├── entrypoint.sh │ │ │ └── install_repo.sh │ │ └── ubuntu18.04/ │ │ ├── Dockerfile │ │ ├── entrypoint.sh │ │ └── install_repo.sh │ └── vendor/ │ ├── github.com/ │ │ ├── Masterminds/ │ │ │ └── semver/ │ │ │ └── v3/ │ │ │ ├── .gitignore │ │ │ ├── .golangci.yml │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE.txt │ │ │ ├── Makefile │ │ │ ├── README.md │ │ │ ├── SECURITY.md │ │ │ ├── collection.go │ │ │ ├── constraints.go │ │ │ ├── doc.go │ │ │ └── version.go │ │ ├── go-logr/ │ │ │ └── logr/ │ │ │ ├── .golangci.yaml │ │ │ ├── CHANGELOG.md │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── SECURITY.md │ │ │ ├── context.go │ │ │ ├── context_noslog.go │ │ │ ├── context_slog.go │ │ │ ├── discard.go │ │ │ ├── funcr/ │ │ │ │ ├── funcr.go │ │ │ │ └── slogsink.go │ │ │ ├── logr.go │ │ │ ├── sloghandler.go │ │ │ ├── slogr.go │ │ │ └── slogsink.go │ │ ├── google/ │ │ │ ├── go-cmp/ │ │ │ │ ├── LICENSE │ │ │ │ └── cmp/ │ │ │ │ ├── compare.go │ │ │ │ ├── export.go │ │ │ │ ├── internal/ │ │ │ │ │ ├── diff/ │ │ │ │ │ │ ├── debug_disable.go │ │ │ │ │ │ ├── debug_enable.go │ │ │ │ │ │ └── diff.go │ │ │ │ │ ├── flags/ │ │ │ │ │ │ └── flags.go │ │ │ │ │ ├── function/ │ │ │ │ │ │ └── func.go │ │ │ │ │ └── value/ │ │ │ │ │ ├── name.go │ │ │ │ │ ├── pointer.go │ │ │ │ │ └── sort.go │ │ │ │ ├── options.go │ │ │ │ ├── path.go │ │ │ │ ├── report.go │ │ │ │ ├── report_compare.go │ │ │ │ ├── report_references.go │ │ │ │ ├── report_reflect.go │ │ │ │ ├── report_slices.go │ │ │ │ ├── report_text.go │ │ │ │ └── report_value.go │ │ │ └── pprof/ │ │ │ ├── AUTHORS │ │ │ ├── CONTRIBUTORS │ │ │ ├── LICENSE │ │ │ └── profile/ │ │ │ ├── encode.go │ │ │ ├── filter.go │ │ │ ├── index.go │ │ │ ├── legacy_java_profile.go │ │ │ ├── legacy_profile.go │ │ │ ├── merge.go │ │ │ ├── profile.go │ │ │ ├── proto.go │ │ │ └── prune.go │ │ ├── onsi/ │ │ │ ├── ginkgo/ │ │ │ │ └── v2/ │ │ │ │ ├── .gitignore │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── CONTRIBUTING.md │ │ │ │ ├── LICENSE │ │ │ │ ├── Makefile │ │ │ │ ├── README.md │ │ │ │ ├── RELEASING.md │ │ │ │ ├── config/ │ │ │ │ │ └── deprecated.go │ │ │ │ ├── core_dsl.go │ │ │ │ ├── decorator_dsl.go │ │ │ │ ├── deprecated_dsl.go │ │ │ │ ├── formatter/ │ │ │ │ │ ├── colorable_others.go │ │ │ │ │ ├── colorable_windows.go │ │ │ │ │ └── formatter.go │ │ │ │ ├── ginkgo/ │ │ │ │ │ ├── automaxprocs/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── automaxprocs.go │ │ │ │ │ │ ├── cgroup.go │ │ │ │ │ │ ├── cgroups.go │ │ │ │ │ │ ├── cgroups2.go │ │ │ │ │ │ ├── cpu_quota_linux.go │ │ │ │ │ │ ├── cpu_quota_unsupported.go │ │ │ │ │ │ ├── errors.go │ │ │ │ │ │ ├── mountpoint.go │ │ │ │ │ │ ├── runtime.go │ │ │ │ │ │ └── subsys.go │ │ │ │ │ ├── automaxprocs.go │ │ │ │ │ ├── build/ │ │ │ │ │ │ └── build_command.go │ │ │ │ │ ├── command/ │ │ │ │ │ │ ├── abort.go │ │ │ │ │ │ ├── command.go │ │ │ │ │ │ └── program.go │ │ │ │ │ ├── generators/ │ │ │ │ │ │ ├── boostrap_templates.go │ │ │ │ │ │ ├── bootstrap_command.go │ │ │ │ │ │ ├── generate_command.go │ │ │ │ │ │ ├── generate_templates.go │ │ │ │ │ │ └── generators_common.go │ │ │ │ │ ├── internal/ │ │ │ │ │ │ ├── compile.go │ │ │ │ │ │ ├── gocovmerge.go │ │ │ │ │ │ ├── profiles_and_reports.go │ │ │ │ │ │ ├── run.go │ │ │ │ │ │ ├── test_suite.go │ │ │ │ │ │ ├── utils.go │ │ │ │ │ │ └── verify_version.go │ │ │ │ │ ├── labels/ │ │ │ │ │ │ └── labels_command.go │ │ │ │ │ ├── main.go │ │ │ │ │ ├── outline/ │ │ │ │ │ │ ├── ginkgo.go │ │ │ │ │ │ ├── import.go │ │ │ │ │ │ ├── outline.go │ │ │ │ │ │ └── outline_command.go │ │ │ │ │ ├── run/ │ │ │ │ │ │ └── run_command.go │ │ │ │ │ ├── unfocus/ │ │ │ │ │ │ └── unfocus_command.go │ │ │ │ │ └── watch/ │ │ │ │ │ ├── delta.go │ │ │ │ │ ├── delta_tracker.go │ │ │ │ │ ├── dependencies.go │ │ │ │ │ ├── package_hash.go │ │ │ │ │ ├── package_hashes.go │ │ │ │ │ ├── suite.go │ │ │ │ │ └── watch_command.go │ │ │ │ ├── ginkgo_cli_dependencies.go │ │ │ │ ├── ginkgo_t_dsl.go │ │ │ │ ├── internal/ │ │ │ │ │ ├── around_node.go │ │ │ │ │ ├── counter.go │ │ │ │ │ ├── failer.go │ │ │ │ │ ├── focus.go │ │ │ │ │ ├── global/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── group.go │ │ │ │ │ ├── interrupt_handler/ │ │ │ │ │ │ ├── interrupt_handler.go │ │ │ │ │ │ ├── sigquit_swallower_unix.go │ │ │ │ │ │ └── sigquit_swallower_windows.go │ │ │ │ │ ├── node.go │ │ │ │ │ ├── ordering.go │ │ │ │ │ ├── output_interceptor.go │ │ │ │ │ ├── output_interceptor_unix.go │ │ │ │ │ ├── output_interceptor_wasm.go │ │ │ │ │ ├── output_interceptor_win.go │ │ │ │ │ ├── parallel_support/ │ │ │ │ │ │ ├── client_server.go │ │ │ │ │ │ ├── http_client.go │ │ │ │ │ │ ├── http_server.go │ │ │ │ │ │ ├── rpc_client.go │ │ │ │ │ │ ├── rpc_server.go │ │ │ │ │ │ └── server_handler.go │ │ │ │ │ ├── progress_report.go │ │ │ │ │ ├── progress_report_bsd.go │ │ │ │ │ ├── progress_report_unix.go │ │ │ │ │ ├── progress_report_wasm.go │ │ │ │ │ ├── progress_report_win.go │ │ │ │ │ ├── progress_reporter_manager.go │ │ │ │ │ ├── report_entry.go │ │ │ │ │ ├── reporters/ │ │ │ │ │ │ ├── gojson.go │ │ │ │ │ │ ├── gojson_event_writer.go │ │ │ │ │ │ └── gojson_reporter.go │ │ │ │ │ ├── spec.go │ │ │ │ │ ├── spec_context.go │ │ │ │ │ ├── suite.go │ │ │ │ │ ├── testingtproxy/ │ │ │ │ │ │ └── testing_t_proxy.go │ │ │ │ │ ├── tree.go │ │ │ │ │ └── writer.go │ │ │ │ ├── reporters/ │ │ │ │ │ ├── default_reporter.go │ │ │ │ │ ├── deprecated_reporter.go │ │ │ │ │ ├── gojson_report.go │ │ │ │ │ ├── json_report.go │ │ │ │ │ ├── junit_report.go │ │ │ │ │ ├── reporter.go │ │ │ │ │ └── teamcity_report.go │ │ │ │ ├── reporting_dsl.go │ │ │ │ ├── table_dsl.go │ │ │ │ └── types/ │ │ │ │ ├── around_node.go │ │ │ │ ├── code_location.go │ │ │ │ ├── config.go │ │ │ │ ├── deprecated_types.go │ │ │ │ ├── deprecation_support.go │ │ │ │ ├── enum_support.go │ │ │ │ ├── errors.go │ │ │ │ ├── file_filter.go │ │ │ │ ├── flags.go │ │ │ │ ├── label_filter.go │ │ │ │ ├── report_entry.go │ │ │ │ ├── semver_filter.go │ │ │ │ ├── types.go │ │ │ │ └── version.go │ │ │ └── gomega/ │ │ │ ├── .gitignore │ │ │ ├── CHANGELOG.md │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── RELEASING.md │ │ │ ├── format/ │ │ │ │ └── format.go │ │ │ ├── gomega_dsl.go │ │ │ ├── internal/ │ │ │ │ ├── assertion.go │ │ │ │ ├── async_assertion.go │ │ │ │ ├── duration_bundle.go │ │ │ │ ├── gomega.go │ │ │ │ ├── gutil/ │ │ │ │ │ ├── post_ioutil.go │ │ │ │ │ └── using_ioutil.go │ │ │ │ ├── polling_signal_error.go │ │ │ │ └── vetoptdesc.go │ │ │ ├── matchers/ │ │ │ │ ├── and.go │ │ │ │ ├── assignable_to_type_of_matcher.go │ │ │ │ ├── attributes_slice.go │ │ │ │ ├── be_a_directory.go │ │ │ │ ├── be_a_regular_file.go │ │ │ │ ├── be_an_existing_file.go │ │ │ │ ├── be_closed_matcher.go │ │ │ │ ├── be_comparable_to_matcher.go │ │ │ │ ├── be_element_of_matcher.go │ │ │ │ ├── be_empty_matcher.go │ │ │ │ ├── be_equivalent_to_matcher.go │ │ │ │ ├── be_false_matcher.go │ │ │ │ ├── be_identical_to.go │ │ │ │ ├── be_key_of_matcher.go │ │ │ │ ├── be_nil_matcher.go │ │ │ │ ├── be_numerically_matcher.go │ │ │ │ ├── be_sent_matcher.go │ │ │ │ ├── be_temporally_matcher.go │ │ │ │ ├── be_true_matcher.go │ │ │ │ ├── be_zero_matcher.go │ │ │ │ ├── consist_of.go │ │ │ │ ├── contain_element_matcher.go │ │ │ │ ├── contain_elements_matcher.go │ │ │ │ ├── contain_substring_matcher.go │ │ │ │ ├── equal_matcher.go │ │ │ │ ├── have_cap_matcher.go │ │ │ │ ├── have_each_matcher.go │ │ │ │ ├── have_exact_elements.go │ │ │ │ ├── have_existing_field_matcher.go │ │ │ │ ├── have_field.go │ │ │ │ ├── have_http_body_matcher.go │ │ │ │ ├── have_http_header_with_value_matcher.go │ │ │ │ ├── have_http_status_matcher.go │ │ │ │ ├── have_key_matcher.go │ │ │ │ ├── have_key_with_value_matcher.go │ │ │ │ ├── have_len_matcher.go │ │ │ │ ├── have_occurred_matcher.go │ │ │ │ ├── have_prefix_matcher.go │ │ │ │ ├── have_suffix_matcher.go │ │ │ │ ├── have_value.go │ │ │ │ ├── internal/ │ │ │ │ │ └── miter/ │ │ │ │ │ ├── type_support_iter.go │ │ │ │ │ └── type_support_noiter.go │ │ │ │ ├── match_error_matcher.go │ │ │ │ ├── match_error_strictly_matcher.go │ │ │ │ ├── match_json_matcher.go │ │ │ │ ├── match_regexp_matcher.go │ │ │ │ ├── match_xml_matcher.go │ │ │ │ ├── match_yaml_matcher.go │ │ │ │ ├── not.go │ │ │ │ ├── or.go │ │ │ │ ├── panic_matcher.go │ │ │ │ ├── receive_matcher.go │ │ │ │ ├── satisfy_matcher.go │ │ │ │ ├── semi_structured_data_support.go │ │ │ │ ├── succeed_matcher.go │ │ │ │ ├── support/ │ │ │ │ │ └── goraph/ │ │ │ │ │ ├── bipartitegraph/ │ │ │ │ │ │ ├── bipartitegraph.go │ │ │ │ │ │ └── bipartitegraphmatching.go │ │ │ │ │ ├── edge/ │ │ │ │ │ │ └── edge.go │ │ │ │ │ ├── node/ │ │ │ │ │ │ └── node.go │ │ │ │ │ └── util/ │ │ │ │ │ └── util.go │ │ │ │ ├── type_support.go │ │ │ │ └── with_transform.go │ │ │ ├── matchers.go │ │ │ └── types/ │ │ │ └── types.go │ │ └── pelletier/ │ │ └── go-toml/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── CONTRIBUTING.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── PULL_REQUEST_TEMPLATE.md │ │ ├── README.md │ │ ├── SECURITY.md │ │ ├── azure-pipelines.yml │ │ ├── benchmark.sh │ │ ├── doc.go │ │ ├── example-crlf.toml │ │ ├── example.toml │ │ ├── fuzz.go │ │ ├── fuzz.sh │ │ ├── keysparsing.go │ │ ├── lexer.go │ │ ├── localtime.go │ │ ├── marshal.go │ │ ├── marshal_OrderPreserve_test.toml │ │ ├── marshal_test.toml │ │ ├── parser.go │ │ ├── position.go │ │ ├── token.go │ │ ├── toml.go │ │ ├── tomlpub.go │ │ ├── tomltree_create.go │ │ ├── tomltree_write.go │ │ └── tomltree_writepub.go │ ├── go.yaml.in/ │ │ └── yaml/ │ │ └── v3/ │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── apic.go │ │ ├── decode.go │ │ ├── emitterc.go │ │ ├── encode.go │ │ ├── parserc.go │ │ ├── readerc.go │ │ ├── resolve.go │ │ ├── scannerc.go │ │ ├── sorter.go │ │ ├── writerc.go │ │ ├── yaml.go │ │ ├── yamlh.go │ │ └── yamlprivateh.go │ ├── golang.org/ │ │ └── x/ │ │ ├── crypto/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ ├── blowfish/ │ │ │ │ ├── block.go │ │ │ │ ├── cipher.go │ │ │ │ └── const.go │ │ │ ├── chacha20/ │ │ │ │ ├── chacha_arm64.go │ │ │ │ ├── chacha_arm64.s │ │ │ │ ├── chacha_generic.go │ │ │ │ ├── chacha_noasm.go │ │ │ │ ├── chacha_ppc64x.go │ │ │ │ ├── chacha_ppc64x.s │ │ │ │ ├── chacha_s390x.go │ │ │ │ ├── chacha_s390x.s │ │ │ │ └── xor.go │ │ │ ├── curve25519/ │ │ │ │ └── curve25519.go │ │ │ ├── internal/ │ │ │ │ ├── alias/ │ │ │ │ │ ├── alias.go │ │ │ │ │ └── alias_purego.go │ │ │ │ └── poly1305/ │ │ │ │ ├── mac_noasm.go │ │ │ │ ├── poly1305.go │ │ │ │ ├── sum_amd64.s │ │ │ │ ├── sum_asm.go │ │ │ │ ├── sum_generic.go │ │ │ │ ├── sum_loong64.s │ │ │ │ ├── sum_ppc64x.s │ │ │ │ ├── sum_s390x.go │ │ │ │ └── sum_s390x.s │ │ │ └── ssh/ │ │ │ ├── buffer.go │ │ │ ├── certs.go │ │ │ ├── channel.go │ │ │ ├── cipher.go │ │ │ ├── client.go │ │ │ ├── client_auth.go │ │ │ ├── common.go │ │ │ ├── connection.go │ │ │ ├── doc.go │ │ │ ├── handshake.go │ │ │ ├── internal/ │ │ │ │ └── bcrypt_pbkdf/ │ │ │ │ └── bcrypt_pbkdf.go │ │ │ ├── kex.go │ │ │ ├── keys.go │ │ │ ├── mac.go │ │ │ ├── messages.go │ │ │ ├── mlkem.go │ │ │ ├── mux.go │ │ │ ├── server.go │ │ │ ├── session.go │ │ │ ├── ssh_gss.go │ │ │ ├── streamlocal.go │ │ │ ├── tcpip.go │ │ │ └── transport.go │ │ ├── mod/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ └── semver/ │ │ │ └── semver.go │ │ ├── net/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ └── html/ │ │ │ ├── atom/ │ │ │ │ ├── atom.go │ │ │ │ └── table.go │ │ │ ├── charset/ │ │ │ │ └── charset.go │ │ │ ├── const.go │ │ │ ├── doc.go │ │ │ ├── doctype.go │ │ │ ├── entity.go │ │ │ ├── escape.go │ │ │ ├── foreign.go │ │ │ ├── iter.go │ │ │ ├── node.go │ │ │ ├── parse.go │ │ │ ├── render.go │ │ │ └── token.go │ │ ├── sync/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ └── errgroup/ │ │ │ └── errgroup.go │ │ ├── sys/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ ├── cpu/ │ │ │ │ ├── asm_aix_ppc64.s │ │ │ │ ├── asm_darwin_x86_gc.s │ │ │ │ ├── byteorder.go │ │ │ │ ├── cpu.go │ │ │ │ ├── cpu_aix.go │ │ │ │ ├── cpu_arm.go │ │ │ │ ├── cpu_arm64.go │ │ │ │ ├── cpu_arm64.s │ │ │ │ ├── cpu_darwin_x86.go │ │ │ │ ├── cpu_gc_arm64.go │ │ │ │ ├── cpu_gc_s390x.go │ │ │ │ ├── cpu_gc_x86.go │ │ │ │ ├── cpu_gc_x86.s │ │ │ │ ├── cpu_gccgo_arm64.go │ │ │ │ ├── cpu_gccgo_s390x.go │ │ │ │ ├── cpu_gccgo_x86.c │ │ │ │ ├── cpu_gccgo_x86.go │ │ │ │ ├── cpu_linux.go │ │ │ │ ├── cpu_linux_arm.go │ │ │ │ ├── cpu_linux_arm64.go │ │ │ │ ├── cpu_linux_loong64.go │ │ │ │ ├── cpu_linux_mips64x.go │ │ │ │ ├── cpu_linux_noinit.go │ │ │ │ ├── cpu_linux_ppc64x.go │ │ │ │ ├── cpu_linux_riscv64.go │ │ │ │ ├── cpu_linux_s390x.go │ │ │ │ ├── cpu_loong64.go │ │ │ │ ├── cpu_loong64.s │ │ │ │ ├── cpu_mips64x.go │ │ │ │ ├── cpu_mipsx.go │ │ │ │ ├── cpu_netbsd_arm64.go │ │ │ │ ├── cpu_openbsd_arm64.go │ │ │ │ ├── cpu_openbsd_arm64.s │ │ │ │ ├── cpu_other_arm.go │ │ │ │ ├── cpu_other_arm64.go │ │ │ │ ├── cpu_other_mips64x.go │ │ │ │ ├── cpu_other_ppc64x.go │ │ │ │ ├── cpu_other_riscv64.go │ │ │ │ ├── cpu_other_x86.go │ │ │ │ ├── cpu_ppc64x.go │ │ │ │ ├── cpu_riscv64.go │ │ │ │ ├── cpu_s390x.go │ │ │ │ ├── cpu_s390x.s │ │ │ │ ├── cpu_wasm.go │ │ │ │ ├── cpu_windows_arm64.go │ │ │ │ ├── cpu_x86.go │ │ │ │ ├── cpu_zos.go │ │ │ │ ├── cpu_zos_s390x.go │ │ │ │ ├── endian_big.go │ │ │ │ ├── endian_little.go │ │ │ │ ├── hwcap_linux.go │ │ │ │ ├── parse.go │ │ │ │ ├── proc_cpuinfo_linux.go │ │ │ │ ├── runtime_auxv.go │ │ │ │ ├── runtime_auxv_go121.go │ │ │ │ ├── syscall_aix_gccgo.go │ │ │ │ ├── syscall_aix_ppc64_gc.go │ │ │ │ └── syscall_darwin_x86_gc.go │ │ │ ├── unix/ │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── affinity_linux.go │ │ │ │ ├── aliases.go │ │ │ │ ├── asm_aix_ppc64.s │ │ │ │ ├── asm_bsd_386.s │ │ │ │ ├── asm_bsd_amd64.s │ │ │ │ ├── asm_bsd_arm.s │ │ │ │ ├── asm_bsd_arm64.s │ │ │ │ ├── asm_bsd_ppc64.s │ │ │ │ ├── asm_bsd_riscv64.s │ │ │ │ ├── asm_linux_386.s │ │ │ │ ├── asm_linux_amd64.s │ │ │ │ ├── asm_linux_arm.s │ │ │ │ ├── asm_linux_arm64.s │ │ │ │ ├── asm_linux_loong64.s │ │ │ │ ├── asm_linux_mips64x.s │ │ │ │ ├── asm_linux_mipsx.s │ │ │ │ ├── asm_linux_ppc64x.s │ │ │ │ ├── asm_linux_riscv64.s │ │ │ │ ├── asm_linux_s390x.s │ │ │ │ ├── asm_openbsd_mips64.s │ │ │ │ ├── asm_solaris_amd64.s │ │ │ │ ├── asm_zos_s390x.s │ │ │ │ ├── auxv.go │ │ │ │ ├── auxv_unsupported.go │ │ │ │ ├── bluetooth_linux.go │ │ │ │ ├── bpxsvc_zos.go │ │ │ │ ├── bpxsvc_zos.s │ │ │ │ ├── cap_freebsd.go │ │ │ │ ├── constants.go │ │ │ │ ├── dev_aix_ppc.go │ │ │ │ ├── dev_aix_ppc64.go │ │ │ │ ├── dev_darwin.go │ │ │ │ ├── dev_dragonfly.go │ │ │ │ ├── dev_freebsd.go │ │ │ │ ├── dev_linux.go │ │ │ │ ├── dev_netbsd.go │ │ │ │ ├── dev_openbsd.go │ │ │ │ ├── dev_zos.go │ │ │ │ ├── dirent.go │ │ │ │ ├── endian_big.go │ │ │ │ ├── endian_little.go │ │ │ │ ├── env_unix.go │ │ │ │ ├── fcntl.go │ │ │ │ ├── fcntl_darwin.go │ │ │ │ ├── fcntl_linux_32bit.go │ │ │ │ ├── fdset.go │ │ │ │ ├── gccgo.go │ │ │ │ ├── gccgo_c.c │ │ │ │ ├── gccgo_linux_amd64.go │ │ │ │ ├── ifreq_linux.go │ │ │ │ ├── ioctl_linux.go │ │ │ │ ├── ioctl_signed.go │ │ │ │ ├── ioctl_unsigned.go │ │ │ │ ├── ioctl_zos.go │ │ │ │ ├── mkall.sh │ │ │ │ ├── mkerrors.sh │ │ │ │ ├── mmap_nomremap.go │ │ │ │ ├── mremap.go │ │ │ │ ├── pagesize_unix.go │ │ │ │ ├── pledge_openbsd.go │ │ │ │ ├── ptrace_darwin.go │ │ │ │ ├── ptrace_ios.go │ │ │ │ ├── race.go │ │ │ │ ├── race0.go │ │ │ │ ├── readdirent_getdents.go │ │ │ │ ├── readdirent_getdirentries.go │ │ │ │ ├── sockcmsg_dragonfly.go │ │ │ │ ├── sockcmsg_linux.go │ │ │ │ ├── sockcmsg_unix.go │ │ │ │ ├── sockcmsg_unix_other.go │ │ │ │ ├── sockcmsg_zos.go │ │ │ │ ├── symaddr_zos_s390x.s │ │ │ │ ├── syscall.go │ │ │ │ ├── syscall_aix.go │ │ │ │ ├── syscall_aix_ppc.go │ │ │ │ ├── syscall_aix_ppc64.go │ │ │ │ ├── syscall_bsd.go │ │ │ │ ├── syscall_darwin.go │ │ │ │ ├── syscall_darwin_amd64.go │ │ │ │ ├── syscall_darwin_arm64.go │ │ │ │ ├── syscall_darwin_libSystem.go │ │ │ │ ├── syscall_dragonfly.go │ │ │ │ ├── syscall_dragonfly_amd64.go │ │ │ │ ├── syscall_freebsd.go │ │ │ │ ├── syscall_freebsd_386.go │ │ │ │ ├── syscall_freebsd_amd64.go │ │ │ │ ├── syscall_freebsd_arm.go │ │ │ │ ├── syscall_freebsd_arm64.go │ │ │ │ ├── syscall_freebsd_riscv64.go │ │ │ │ ├── syscall_hurd.go │ │ │ │ ├── syscall_hurd_386.go │ │ │ │ ├── syscall_illumos.go │ │ │ │ ├── syscall_linux.go │ │ │ │ ├── syscall_linux_386.go │ │ │ │ ├── syscall_linux_alarm.go │ │ │ │ ├── syscall_linux_amd64.go │ │ │ │ ├── syscall_linux_amd64_gc.go │ │ │ │ ├── syscall_linux_arm.go │ │ │ │ ├── syscall_linux_arm64.go │ │ │ │ ├── syscall_linux_gc.go │ │ │ │ ├── syscall_linux_gc_386.go │ │ │ │ ├── syscall_linux_gc_arm.go │ │ │ │ ├── syscall_linux_gccgo_386.go │ │ │ │ ├── syscall_linux_gccgo_arm.go │ │ │ │ ├── syscall_linux_loong64.go │ │ │ │ ├── syscall_linux_mips64x.go │ │ │ │ ├── syscall_linux_mipsx.go │ │ │ │ ├── syscall_linux_ppc.go │ │ │ │ ├── syscall_linux_ppc64x.go │ │ │ │ ├── syscall_linux_riscv64.go │ │ │ │ ├── syscall_linux_s390x.go │ │ │ │ ├── syscall_linux_sparc64.go │ │ │ │ ├── syscall_netbsd.go │ │ │ │ ├── syscall_netbsd_386.go │ │ │ │ ├── syscall_netbsd_amd64.go │ │ │ │ ├── syscall_netbsd_arm.go │ │ │ │ ├── syscall_netbsd_arm64.go │ │ │ │ ├── syscall_openbsd.go │ │ │ │ ├── syscall_openbsd_386.go │ │ │ │ ├── syscall_openbsd_amd64.go │ │ │ │ ├── syscall_openbsd_arm.go │ │ │ │ ├── syscall_openbsd_arm64.go │ │ │ │ ├── syscall_openbsd_libc.go │ │ │ │ ├── syscall_openbsd_mips64.go │ │ │ │ ├── syscall_openbsd_ppc64.go │ │ │ │ ├── syscall_openbsd_riscv64.go │ │ │ │ ├── syscall_solaris.go │ │ │ │ ├── syscall_solaris_amd64.go │ │ │ │ ├── syscall_unix.go │ │ │ │ ├── syscall_unix_gc.go │ │ │ │ ├── syscall_unix_gc_ppc64x.go │ │ │ │ ├── syscall_zos_s390x.go │ │ │ │ ├── sysvshm_linux.go │ │ │ │ ├── sysvshm_unix.go │ │ │ │ ├── sysvshm_unix_other.go │ │ │ │ ├── timestruct.go │ │ │ │ ├── unveil_openbsd.go │ │ │ │ ├── vgetrandom_linux.go │ │ │ │ ├── vgetrandom_unsupported.go │ │ │ │ ├── xattr_bsd.go │ │ │ │ ├── zerrors_aix_ppc.go │ │ │ │ ├── zerrors_aix_ppc64.go │ │ │ │ ├── zerrors_darwin_amd64.go │ │ │ │ ├── zerrors_darwin_arm64.go │ │ │ │ ├── zerrors_dragonfly_amd64.go │ │ │ │ ├── zerrors_freebsd_386.go │ │ │ │ ├── zerrors_freebsd_amd64.go │ │ │ │ ├── zerrors_freebsd_arm.go │ │ │ │ ├── zerrors_freebsd_arm64.go │ │ │ │ ├── zerrors_freebsd_riscv64.go │ │ │ │ ├── zerrors_linux.go │ │ │ │ ├── zerrors_linux_386.go │ │ │ │ ├── zerrors_linux_amd64.go │ │ │ │ ├── zerrors_linux_arm.go │ │ │ │ ├── zerrors_linux_arm64.go │ │ │ │ ├── zerrors_linux_loong64.go │ │ │ │ ├── zerrors_linux_mips.go │ │ │ │ ├── zerrors_linux_mips64.go │ │ │ │ ├── zerrors_linux_mips64le.go │ │ │ │ ├── zerrors_linux_mipsle.go │ │ │ │ ├── zerrors_linux_ppc.go │ │ │ │ ├── zerrors_linux_ppc64.go │ │ │ │ ├── zerrors_linux_ppc64le.go │ │ │ │ ├── zerrors_linux_riscv64.go │ │ │ │ ├── zerrors_linux_s390x.go │ │ │ │ ├── zerrors_linux_sparc64.go │ │ │ │ ├── zerrors_netbsd_386.go │ │ │ │ ├── zerrors_netbsd_amd64.go │ │ │ │ ├── zerrors_netbsd_arm.go │ │ │ │ ├── zerrors_netbsd_arm64.go │ │ │ │ ├── zerrors_openbsd_386.go │ │ │ │ ├── zerrors_openbsd_amd64.go │ │ │ │ ├── zerrors_openbsd_arm.go │ │ │ │ ├── zerrors_openbsd_arm64.go │ │ │ │ ├── zerrors_openbsd_mips64.go │ │ │ │ ├── zerrors_openbsd_ppc64.go │ │ │ │ ├── zerrors_openbsd_riscv64.go │ │ │ │ ├── zerrors_solaris_amd64.go │ │ │ │ ├── zerrors_zos_s390x.go │ │ │ │ ├── zptrace_armnn_linux.go │ │ │ │ ├── zptrace_linux_arm64.go │ │ │ │ ├── zptrace_mipsnn_linux.go │ │ │ │ ├── zptrace_mipsnnle_linux.go │ │ │ │ ├── zptrace_x86_linux.go │ │ │ │ ├── zsymaddr_zos_s390x.s │ │ │ │ ├── zsyscall_aix_ppc.go │ │ │ │ ├── zsyscall_aix_ppc64.go │ │ │ │ ├── zsyscall_aix_ppc64_gc.go │ │ │ │ ├── zsyscall_aix_ppc64_gccgo.go │ │ │ │ ├── zsyscall_darwin_amd64.go │ │ │ │ ├── zsyscall_darwin_amd64.s │ │ │ │ ├── zsyscall_darwin_arm64.go │ │ │ │ ├── zsyscall_darwin_arm64.s │ │ │ │ ├── zsyscall_dragonfly_amd64.go │ │ │ │ ├── zsyscall_freebsd_386.go │ │ │ │ ├── zsyscall_freebsd_amd64.go │ │ │ │ ├── zsyscall_freebsd_arm.go │ │ │ │ ├── zsyscall_freebsd_arm64.go │ │ │ │ ├── zsyscall_freebsd_riscv64.go │ │ │ │ ├── zsyscall_illumos_amd64.go │ │ │ │ ├── zsyscall_linux.go │ │ │ │ ├── zsyscall_linux_386.go │ │ │ │ ├── zsyscall_linux_amd64.go │ │ │ │ ├── zsyscall_linux_arm.go │ │ │ │ ├── zsyscall_linux_arm64.go │ │ │ │ ├── zsyscall_linux_loong64.go │ │ │ │ ├── zsyscall_linux_mips.go │ │ │ │ ├── zsyscall_linux_mips64.go │ │ │ │ ├── zsyscall_linux_mips64le.go │ │ │ │ ├── zsyscall_linux_mipsle.go │ │ │ │ ├── zsyscall_linux_ppc.go │ │ │ │ ├── zsyscall_linux_ppc64.go │ │ │ │ ├── zsyscall_linux_ppc64le.go │ │ │ │ ├── zsyscall_linux_riscv64.go │ │ │ │ ├── zsyscall_linux_s390x.go │ │ │ │ ├── zsyscall_linux_sparc64.go │ │ │ │ ├── zsyscall_netbsd_386.go │ │ │ │ ├── zsyscall_netbsd_amd64.go │ │ │ │ ├── zsyscall_netbsd_arm.go │ │ │ │ ├── zsyscall_netbsd_arm64.go │ │ │ │ ├── zsyscall_openbsd_386.go │ │ │ │ ├── zsyscall_openbsd_386.s │ │ │ │ ├── zsyscall_openbsd_amd64.go │ │ │ │ ├── zsyscall_openbsd_amd64.s │ │ │ │ ├── zsyscall_openbsd_arm.go │ │ │ │ ├── zsyscall_openbsd_arm.s │ │ │ │ ├── zsyscall_openbsd_arm64.go │ │ │ │ ├── zsyscall_openbsd_arm64.s │ │ │ │ ├── zsyscall_openbsd_mips64.go │ │ │ │ ├── zsyscall_openbsd_mips64.s │ │ │ │ ├── zsyscall_openbsd_ppc64.go │ │ │ │ ├── zsyscall_openbsd_ppc64.s │ │ │ │ ├── zsyscall_openbsd_riscv64.go │ │ │ │ ├── zsyscall_openbsd_riscv64.s │ │ │ │ ├── zsyscall_solaris_amd64.go │ │ │ │ ├── zsyscall_zos_s390x.go │ │ │ │ ├── zsysctl_openbsd_386.go │ │ │ │ ├── zsysctl_openbsd_amd64.go │ │ │ │ ├── zsysctl_openbsd_arm.go │ │ │ │ ├── zsysctl_openbsd_arm64.go │ │ │ │ ├── zsysctl_openbsd_mips64.go │ │ │ │ ├── zsysctl_openbsd_ppc64.go │ │ │ │ ├── zsysctl_openbsd_riscv64.go │ │ │ │ ├── zsysnum_darwin_amd64.go │ │ │ │ ├── zsysnum_darwin_arm64.go │ │ │ │ ├── zsysnum_dragonfly_amd64.go │ │ │ │ ├── zsysnum_freebsd_386.go │ │ │ │ ├── zsysnum_freebsd_amd64.go │ │ │ │ ├── zsysnum_freebsd_arm.go │ │ │ │ ├── zsysnum_freebsd_arm64.go │ │ │ │ ├── zsysnum_freebsd_riscv64.go │ │ │ │ ├── zsysnum_linux_386.go │ │ │ │ ├── zsysnum_linux_amd64.go │ │ │ │ ├── zsysnum_linux_arm.go │ │ │ │ ├── zsysnum_linux_arm64.go │ │ │ │ ├── zsysnum_linux_loong64.go │ │ │ │ ├── zsysnum_linux_mips.go │ │ │ │ ├── zsysnum_linux_mips64.go │ │ │ │ ├── zsysnum_linux_mips64le.go │ │ │ │ ├── zsysnum_linux_mipsle.go │ │ │ │ ├── zsysnum_linux_ppc.go │ │ │ │ ├── zsysnum_linux_ppc64.go │ │ │ │ ├── zsysnum_linux_ppc64le.go │ │ │ │ ├── zsysnum_linux_riscv64.go │ │ │ │ ├── zsysnum_linux_s390x.go │ │ │ │ ├── zsysnum_linux_sparc64.go │ │ │ │ ├── zsysnum_netbsd_386.go │ │ │ │ ├── zsysnum_netbsd_amd64.go │ │ │ │ ├── zsysnum_netbsd_arm.go │ │ │ │ ├── zsysnum_netbsd_arm64.go │ │ │ │ ├── zsysnum_openbsd_386.go │ │ │ │ ├── zsysnum_openbsd_amd64.go │ │ │ │ ├── zsysnum_openbsd_arm.go │ │ │ │ ├── zsysnum_openbsd_arm64.go │ │ │ │ ├── zsysnum_openbsd_mips64.go │ │ │ │ ├── zsysnum_openbsd_ppc64.go │ │ │ │ ├── zsysnum_openbsd_riscv64.go │ │ │ │ ├── zsysnum_zos_s390x.go │ │ │ │ ├── ztypes_aix_ppc.go │ │ │ │ ├── ztypes_aix_ppc64.go │ │ │ │ ├── ztypes_darwin_amd64.go │ │ │ │ ├── ztypes_darwin_arm64.go │ │ │ │ ├── ztypes_dragonfly_amd64.go │ │ │ │ ├── ztypes_freebsd_386.go │ │ │ │ ├── ztypes_freebsd_amd64.go │ │ │ │ ├── ztypes_freebsd_arm.go │ │ │ │ ├── ztypes_freebsd_arm64.go │ │ │ │ ├── ztypes_freebsd_riscv64.go │ │ │ │ ├── ztypes_linux.go │ │ │ │ ├── ztypes_linux_386.go │ │ │ │ ├── ztypes_linux_amd64.go │ │ │ │ ├── ztypes_linux_arm.go │ │ │ │ ├── ztypes_linux_arm64.go │ │ │ │ ├── ztypes_linux_loong64.go │ │ │ │ ├── ztypes_linux_mips.go │ │ │ │ ├── ztypes_linux_mips64.go │ │ │ │ ├── ztypes_linux_mips64le.go │ │ │ │ ├── ztypes_linux_mipsle.go │ │ │ │ ├── ztypes_linux_ppc.go │ │ │ │ ├── ztypes_linux_ppc64.go │ │ │ │ ├── ztypes_linux_ppc64le.go │ │ │ │ ├── ztypes_linux_riscv64.go │ │ │ │ ├── ztypes_linux_s390x.go │ │ │ │ ├── ztypes_linux_sparc64.go │ │ │ │ ├── ztypes_netbsd_386.go │ │ │ │ ├── ztypes_netbsd_amd64.go │ │ │ │ ├── ztypes_netbsd_arm.go │ │ │ │ ├── ztypes_netbsd_arm64.go │ │ │ │ ├── ztypes_openbsd_386.go │ │ │ │ ├── ztypes_openbsd_amd64.go │ │ │ │ ├── ztypes_openbsd_arm.go │ │ │ │ ├── ztypes_openbsd_arm64.go │ │ │ │ ├── ztypes_openbsd_mips64.go │ │ │ │ ├── ztypes_openbsd_ppc64.go │ │ │ │ ├── ztypes_openbsd_riscv64.go │ │ │ │ ├── ztypes_solaris_amd64.go │ │ │ │ └── ztypes_zos_s390x.go │ │ │ └── windows/ │ │ │ ├── aliases.go │ │ │ ├── dll_windows.go │ │ │ ├── env_windows.go │ │ │ ├── eventlog.go │ │ │ ├── exec_windows.go │ │ │ ├── memory_windows.go │ │ │ ├── mkerrors.bash │ │ │ ├── mkknownfolderids.bash │ │ │ ├── mksyscall.go │ │ │ ├── race.go │ │ │ ├── race0.go │ │ │ ├── security_windows.go │ │ │ ├── service.go │ │ │ ├── setupapi_windows.go │ │ │ ├── str.go │ │ │ ├── syscall.go │ │ │ ├── syscall_windows.go │ │ │ ├── types_windows.go │ │ │ ├── types_windows_386.go │ │ │ ├── types_windows_amd64.go │ │ │ ├── types_windows_arm.go │ │ │ ├── types_windows_arm64.go │ │ │ ├── zerrors_windows.go │ │ │ ├── zknownfolderids_windows.go │ │ │ └── zsyscall_windows.go │ │ ├── text/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ ├── encoding/ │ │ │ │ ├── charmap/ │ │ │ │ │ ├── charmap.go │ │ │ │ │ └── tables.go │ │ │ │ ├── encoding.go │ │ │ │ ├── htmlindex/ │ │ │ │ │ ├── htmlindex.go │ │ │ │ │ ├── map.go │ │ │ │ │ └── tables.go │ │ │ │ ├── internal/ │ │ │ │ │ ├── identifier/ │ │ │ │ │ │ ├── identifier.go │ │ │ │ │ │ └── mib.go │ │ │ │ │ └── internal.go │ │ │ │ ├── japanese/ │ │ │ │ │ ├── all.go │ │ │ │ │ ├── eucjp.go │ │ │ │ │ ├── iso2022jp.go │ │ │ │ │ ├── shiftjis.go │ │ │ │ │ └── tables.go │ │ │ │ ├── korean/ │ │ │ │ │ ├── euckr.go │ │ │ │ │ └── tables.go │ │ │ │ ├── simplifiedchinese/ │ │ │ │ │ ├── all.go │ │ │ │ │ ├── gbk.go │ │ │ │ │ ├── hzgb2312.go │ │ │ │ │ └── tables.go │ │ │ │ ├── traditionalchinese/ │ │ │ │ │ ├── big5.go │ │ │ │ │ └── tables.go │ │ │ │ └── unicode/ │ │ │ │ ├── override.go │ │ │ │ └── unicode.go │ │ │ ├── internal/ │ │ │ │ ├── language/ │ │ │ │ │ ├── common.go │ │ │ │ │ ├── compact/ │ │ │ │ │ │ ├── compact.go │ │ │ │ │ │ ├── language.go │ │ │ │ │ │ ├── parents.go │ │ │ │ │ │ ├── tables.go │ │ │ │ │ │ └── tags.go │ │ │ │ │ ├── compact.go │ │ │ │ │ ├── compose.go │ │ │ │ │ ├── coverage.go │ │ │ │ │ ├── language.go │ │ │ │ │ ├── lookup.go │ │ │ │ │ ├── match.go │ │ │ │ │ ├── parse.go │ │ │ │ │ ├── tables.go │ │ │ │ │ └── tags.go │ │ │ │ ├── tag/ │ │ │ │ │ └── tag.go │ │ │ │ └── utf8internal/ │ │ │ │ └── utf8internal.go │ │ │ ├── language/ │ │ │ │ ├── coverage.go │ │ │ │ ├── doc.go │ │ │ │ ├── language.go │ │ │ │ ├── match.go │ │ │ │ ├── parse.go │ │ │ │ ├── tables.go │ │ │ │ └── tags.go │ │ │ ├── runes/ │ │ │ │ ├── cond.go │ │ │ │ └── runes.go │ │ │ └── transform/ │ │ │ └── transform.go │ │ └── tools/ │ │ ├── LICENSE │ │ ├── PATENTS │ │ ├── cover/ │ │ │ └── profile.go │ │ ├── go/ │ │ │ ├── ast/ │ │ │ │ ├── edge/ │ │ │ │ │ └── edge.go │ │ │ │ └── inspector/ │ │ │ │ ├── cursor.go │ │ │ │ ├── inspector.go │ │ │ │ ├── iter.go │ │ │ │ ├── typeof.go │ │ │ │ └── walk.go │ │ │ ├── gcexportdata/ │ │ │ │ ├── gcexportdata.go │ │ │ │ └── importer.go │ │ │ ├── packages/ │ │ │ │ ├── doc.go │ │ │ │ ├── external.go │ │ │ │ ├── golist.go │ │ │ │ ├── golist_overlay.go │ │ │ │ ├── loadmode_string.go │ │ │ │ ├── packages.go │ │ │ │ └── visit.go │ │ │ └── types/ │ │ │ ├── objectpath/ │ │ │ │ └── objectpath.go │ │ │ └── typeutil/ │ │ │ ├── callee.go │ │ │ ├── imports.go │ │ │ ├── map.go │ │ │ ├── methodsetcache.go │ │ │ └── ui.go │ │ └── internal/ │ │ ├── aliases/ │ │ │ ├── aliases.go │ │ │ └── aliases_go122.go │ │ ├── event/ │ │ │ ├── core/ │ │ │ │ ├── event.go │ │ │ │ ├── export.go │ │ │ │ └── fast.go │ │ │ ├── doc.go │ │ │ ├── event.go │ │ │ ├── keys/ │ │ │ │ ├── keys.go │ │ │ │ ├── standard.go │ │ │ │ └── util.go │ │ │ └── label/ │ │ │ └── label.go │ │ ├── gcimporter/ │ │ │ ├── bimport.go │ │ │ ├── exportdata.go │ │ │ ├── gcimporter.go │ │ │ ├── iexport.go │ │ │ ├── iimport.go │ │ │ ├── predeclared.go │ │ │ ├── support.go │ │ │ └── ureader_yes.go │ │ ├── gocommand/ │ │ │ ├── invoke.go │ │ │ ├── invoke_notunix.go │ │ │ ├── invoke_unix.go │ │ │ ├── vendor.go │ │ │ └── version.go │ │ ├── packagesinternal/ │ │ │ └── packages.go │ │ ├── pkgbits/ │ │ │ ├── codes.go │ │ │ ├── decoder.go │ │ │ ├── doc.go │ │ │ ├── encoder.go │ │ │ ├── flags.go │ │ │ ├── reloc.go │ │ │ ├── support.go │ │ │ ├── sync.go │ │ │ ├── syncmarker_string.go │ │ │ └── version.go │ │ ├── stdlib/ │ │ │ ├── deps.go │ │ │ ├── import.go │ │ │ ├── manifest.go │ │ │ └── stdlib.go │ │ ├── typeparams/ │ │ │ ├── common.go │ │ │ ├── coretype.go │ │ │ ├── free.go │ │ │ ├── normalize.go │ │ │ ├── termlist.go │ │ │ └── typeterm.go │ │ ├── typesinternal/ │ │ │ ├── classify_call.go │ │ │ ├── element.go │ │ │ ├── errorcode.go │ │ │ ├── errorcode_string.go │ │ │ ├── fx.go │ │ │ ├── isnamed.go │ │ │ ├── qualifier.go │ │ │ ├── recv.go │ │ │ ├── toonew.go │ │ │ ├── types.go │ │ │ ├── varkind.go │ │ │ ├── varkind_go124.go │ │ │ └── zerovalue.go │ │ └── versions/ │ │ ├── features.go │ │ ├── gover.go │ │ ├── types.go │ │ └── versions.go │ └── modules.txt ├── vendor/ │ ├── cyphar.com/ │ │ └── go-pathrs/ │ │ ├── .golangci.yml │ │ ├── COPYING │ │ ├── doc.go │ │ ├── handle_linux.go │ │ ├── internal/ │ │ │ ├── fdutils/ │ │ │ │ └── fd_linux.go │ │ │ └── libpathrs/ │ │ │ ├── error_unix.go │ │ │ └── libpathrs_linux.go │ │ ├── procfs/ │ │ │ └── procfs_linux.go │ │ ├── root_linux.go │ │ └── utils_linux.go │ ├── github.com/ │ │ ├── NVIDIA/ │ │ │ ├── go-nvlib/ │ │ │ │ ├── LICENSE │ │ │ │ ├── NOTICE │ │ │ │ └── pkg/ │ │ │ │ ├── nvlib/ │ │ │ │ │ ├── device/ │ │ │ │ │ │ ├── api.go │ │ │ │ │ │ ├── device.go │ │ │ │ │ │ ├── identifier.go │ │ │ │ │ │ ├── mig_device.go │ │ │ │ │ │ └── mig_profile.go │ │ │ │ │ └── info/ │ │ │ │ │ ├── api.go │ │ │ │ │ ├── builder.go │ │ │ │ │ ├── logger.go │ │ │ │ │ ├── options.go │ │ │ │ │ ├── property-extractor.go │ │ │ │ │ ├── property-extractor_mock.go │ │ │ │ │ ├── resolver.go │ │ │ │ │ └── root.go │ │ │ │ ├── nvpci/ │ │ │ │ │ ├── bytes/ │ │ │ │ │ │ ├── bytes.go │ │ │ │ │ │ ├── native.go │ │ │ │ │ │ └── swapbo.go │ │ │ │ │ ├── config.go │ │ │ │ │ ├── logger.go │ │ │ │ │ ├── mlxpci.go │ │ │ │ │ ├── mmio/ │ │ │ │ │ │ ├── mmio.go │ │ │ │ │ │ └── mock.go │ │ │ │ │ ├── mock.go │ │ │ │ │ ├── nvpci.go │ │ │ │ │ ├── nvpci_mock.go │ │ │ │ │ └── resources.go │ │ │ │ └── pciids/ │ │ │ │ ├── default_pci.ids │ │ │ │ └── pciids.go │ │ │ └── go-nvml/ │ │ │ ├── LICENSE │ │ │ └── pkg/ │ │ │ ├── dl/ │ │ │ │ ├── dl.go │ │ │ │ ├── dl_linux.go │ │ │ │ └── dl_other.go │ │ │ └── nvml/ │ │ │ ├── api.go │ │ │ ├── cgo_helpers.h │ │ │ ├── cgo_helpers_static.go │ │ │ ├── const.go │ │ │ ├── const_static.go │ │ │ ├── device.go │ │ │ ├── doc.go │ │ │ ├── dynamicLibrary_mock.go │ │ │ ├── event_set.go │ │ │ ├── gpm.go │ │ │ ├── init.go │ │ │ ├── lib.go │ │ │ ├── mock/ │ │ │ │ ├── computeinstance.go │ │ │ │ ├── device.go │ │ │ │ ├── dgxa100/ │ │ │ │ │ ├── dgxa100.go │ │ │ │ │ └── mig-profile.go │ │ │ │ ├── eventset.go │ │ │ │ ├── extendedinterface.go │ │ │ │ ├── gpmsample.go │ │ │ │ ├── gpuinstance.go │ │ │ │ ├── interface.go │ │ │ │ ├── unit.go │ │ │ │ ├── vgpuinstance.go │ │ │ │ └── vgputypeid.go │ │ │ ├── nvml.go │ │ │ ├── nvml.h │ │ │ ├── refcount.go │ │ │ ├── return.go │ │ │ ├── system.go │ │ │ ├── types_gen.go │ │ │ ├── unit.go │ │ │ ├── vgpu.go │ │ │ └── zz_generated.api.go │ │ ├── containerd/ │ │ │ ├── log/ │ │ │ │ ├── .golangci.yml │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ └── context.go │ │ │ ├── nri/ │ │ │ │ ├── LICENSE │ │ │ │ └── pkg/ │ │ │ │ ├── api/ │ │ │ │ │ ├── adjustment.go │ │ │ │ │ ├── api.pb.go │ │ │ │ │ ├── api.proto │ │ │ │ │ ├── api_host.pb.go │ │ │ │ │ ├── api_options.pb.go │ │ │ │ │ ├── api_plugin.pb.go │ │ │ │ │ ├── api_service.pb.go │ │ │ │ │ ├── api_ttrpc.pb.go │ │ │ │ │ ├── api_vtproto.pb.go │ │ │ │ │ ├── container.go │ │ │ │ │ ├── device.go │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── env.go │ │ │ │ │ ├── event.go │ │ │ │ │ ├── helpers.go │ │ │ │ │ ├── hooks.go │ │ │ │ │ ├── ioprio.go │ │ │ │ │ ├── linux-scheduler.go │ │ │ │ │ ├── mount.go │ │ │ │ │ ├── namespace.go │ │ │ │ │ ├── net-device.go │ │ │ │ │ ├── optional.go │ │ │ │ │ ├── owners.go │ │ │ │ │ ├── plugin.go │ │ │ │ │ ├── resources.go │ │ │ │ │ ├── seccomp.go │ │ │ │ │ ├── strip.go │ │ │ │ │ ├── timeouts.go │ │ │ │ │ ├── update.go │ │ │ │ │ └── validate.go │ │ │ │ ├── log/ │ │ │ │ │ └── log.go │ │ │ │ ├── net/ │ │ │ │ │ ├── conn.go │ │ │ │ │ ├── multiplex/ │ │ │ │ │ │ ├── mux.go │ │ │ │ │ │ └── ttrpc.go │ │ │ │ │ ├── socketpair.go │ │ │ │ │ ├── socketpair_cloexec_linux.go │ │ │ │ │ ├── socketpair_cloexec_unix.go │ │ │ │ │ └── socketpair_cloexec_windows.go │ │ │ │ ├── plugin/ │ │ │ │ │ └── annotations.go │ │ │ │ └── stub/ │ │ │ │ └── stub.go │ │ │ └── ttrpc/ │ │ │ ├── .gitattributes │ │ │ ├── .gitignore │ │ │ ├── .golangci.yml │ │ │ ├── LICENSE │ │ │ ├── Makefile │ │ │ ├── PROTOCOL.md │ │ │ ├── Protobuild.toml │ │ │ ├── README.md │ │ │ ├── channel.go │ │ │ ├── client.go │ │ │ ├── codec.go │ │ │ ├── config.go │ │ │ ├── doc.go │ │ │ ├── errors.go │ │ │ ├── handshake.go │ │ │ ├── interceptor.go │ │ │ ├── metadata.go │ │ │ ├── request.pb.go │ │ │ ├── request.proto │ │ │ ├── server.go │ │ │ ├── services.go │ │ │ ├── stream.go │ │ │ ├── stream_server.go │ │ │ ├── test.proto │ │ │ └── unixcreds_linux.go │ │ ├── cyphar/ │ │ │ └── filepath-securejoin/ │ │ │ ├── .golangci.yml │ │ │ ├── CHANGELOG.md │ │ │ ├── COPYING.md │ │ │ ├── LICENSE.BSD │ │ │ ├── LICENSE.MPL-2.0 │ │ │ ├── README.md │ │ │ ├── VERSION │ │ │ ├── codecov.yml │ │ │ ├── doc.go │ │ │ ├── internal/ │ │ │ │ └── consts/ │ │ │ │ └── consts.go │ │ │ ├── join.go │ │ │ ├── pathrs-lite/ │ │ │ │ ├── README.md │ │ │ │ ├── doc.go │ │ │ │ ├── internal/ │ │ │ │ │ ├── assert/ │ │ │ │ │ │ └── assert.go │ │ │ │ │ ├── errors_linux.go │ │ │ │ │ ├── fd/ │ │ │ │ │ │ ├── at_linux.go │ │ │ │ │ │ ├── fd.go │ │ │ │ │ │ ├── fd_linux.go │ │ │ │ │ │ ├── mount_linux.go │ │ │ │ │ │ └── openat2_linux.go │ │ │ │ │ ├── gocompat/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── doc.go │ │ │ │ │ │ ├── gocompat_atomic_go119.go │ │ │ │ │ │ ├── gocompat_atomic_unsupported.go │ │ │ │ │ │ ├── gocompat_errors_go120.go │ │ │ │ │ │ ├── gocompat_errors_unsupported.go │ │ │ │ │ │ ├── gocompat_generics_go121.go │ │ │ │ │ │ └── gocompat_generics_unsupported.go │ │ │ │ │ ├── gopathrs/ │ │ │ │ │ │ ├── doc.go │ │ │ │ │ │ ├── lookup_linux.go │ │ │ │ │ │ ├── mkdir_linux.go │ │ │ │ │ │ ├── open_linux.go │ │ │ │ │ │ └── openat2_linux.go │ │ │ │ │ ├── kernelversion/ │ │ │ │ │ │ └── kernel_linux.go │ │ │ │ │ ├── linux/ │ │ │ │ │ │ ├── doc.go │ │ │ │ │ │ ├── mount_linux.go │ │ │ │ │ │ └── openat2_linux.go │ │ │ │ │ └── procfs/ │ │ │ │ │ ├── procfs_linux.go │ │ │ │ │ └── procfs_lookup_linux.go │ │ │ │ ├── mkdir.go │ │ │ │ ├── mkdir_libpathrs.go │ │ │ │ ├── mkdir_purego.go │ │ │ │ ├── open.go │ │ │ │ ├── open_libpathrs.go │ │ │ │ ├── open_purego.go │ │ │ │ └── procfs/ │ │ │ │ ├── procfs_libpathrs.go │ │ │ │ └── procfs_purego.go │ │ │ └── vfs.go │ │ ├── davecgh/ │ │ │ └── go-spew/ │ │ │ ├── LICENSE │ │ │ └── spew/ │ │ │ ├── bypass.go │ │ │ ├── bypasssafe.go │ │ │ ├── common.go │ │ │ ├── config.go │ │ │ ├── doc.go │ │ │ ├── dump.go │ │ │ ├── format.go │ │ │ └── spew.go │ │ ├── fsnotify/ │ │ │ └── fsnotify/ │ │ │ ├── .cirrus.yml │ │ │ ├── .editorconfig │ │ │ ├── .gitattributes │ │ │ ├── .gitignore │ │ │ ├── .mailmap │ │ │ ├── CHANGELOG.md │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── backend_fen.go │ │ │ ├── backend_inotify.go │ │ │ ├── backend_kqueue.go │ │ │ ├── backend_other.go │ │ │ ├── backend_windows.go │ │ │ ├── fsnotify.go │ │ │ ├── mkdoc.zsh │ │ │ ├── system_bsd.go │ │ │ └── system_darwin.go │ │ ├── golang/ │ │ │ └── protobuf/ │ │ │ ├── AUTHORS │ │ │ ├── CONTRIBUTORS │ │ │ ├── LICENSE │ │ │ ├── proto/ │ │ │ │ ├── buffer.go │ │ │ │ ├── defaults.go │ │ │ │ ├── deprecated.go │ │ │ │ ├── discard.go │ │ │ │ ├── extensions.go │ │ │ │ ├── properties.go │ │ │ │ ├── proto.go │ │ │ │ ├── registry.go │ │ │ │ ├── text_decode.go │ │ │ │ ├── text_encode.go │ │ │ │ ├── wire.go │ │ │ │ └── wrappers.go │ │ │ └── ptypes/ │ │ │ ├── any/ │ │ │ │ └── any.pb.go │ │ │ ├── any.go │ │ │ ├── doc.go │ │ │ ├── duration/ │ │ │ │ └── duration.pb.go │ │ │ ├── duration.go │ │ │ ├── timestamp/ │ │ │ │ └── timestamp.pb.go │ │ │ └── timestamp.go │ │ ├── google/ │ │ │ └── uuid/ │ │ │ ├── CHANGELOG.md │ │ │ ├── CONTRIBUTING.md │ │ │ ├── CONTRIBUTORS │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── dce.go │ │ │ ├── doc.go │ │ │ ├── hash.go │ │ │ ├── marshal.go │ │ │ ├── node.go │ │ │ ├── node_js.go │ │ │ ├── node_net.go │ │ │ ├── null.go │ │ │ ├── sql.go │ │ │ ├── time.go │ │ │ ├── util.go │ │ │ ├── uuid.go │ │ │ ├── version1.go │ │ │ ├── version4.go │ │ │ ├── version6.go │ │ │ └── version7.go │ │ ├── knqyf263/ │ │ │ └── go-plugin/ │ │ │ ├── LICENSE │ │ │ └── wasm/ │ │ │ ├── host.go │ │ │ ├── plugin.go │ │ │ └── plugin_tinygo.go │ │ ├── moby/ │ │ │ └── sys/ │ │ │ ├── capability/ │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── capability.go │ │ │ │ ├── capability_linux.go │ │ │ │ ├── capability_noop.go │ │ │ │ ├── enum.go │ │ │ │ ├── enum_gen.go │ │ │ │ └── syscall_linux.go │ │ │ ├── mountinfo/ │ │ │ │ ├── LICENSE │ │ │ │ ├── doc.go │ │ │ │ ├── mounted_linux.go │ │ │ │ ├── mounted_unix.go │ │ │ │ ├── mountinfo.go │ │ │ │ ├── mountinfo_bsd.go │ │ │ │ ├── mountinfo_filters.go │ │ │ │ ├── mountinfo_freebsdlike.go │ │ │ │ ├── mountinfo_linux.go │ │ │ │ ├── mountinfo_openbsd.go │ │ │ │ ├── mountinfo_unsupported.go │ │ │ │ └── mountinfo_windows.go │ │ │ ├── reexec/ │ │ │ │ ├── LICENSE │ │ │ │ ├── reexec.go │ │ │ │ ├── reexec_linux.go │ │ │ │ └── reexec_other.go │ │ │ └── symlink/ │ │ │ ├── LICENSE │ │ │ ├── LICENSE.APACHE │ │ │ ├── LICENSE.BSD │ │ │ ├── doc.go │ │ │ ├── fs.go │ │ │ ├── fs_unix.go │ │ │ └── fs_windows.go │ │ ├── opencontainers/ │ │ │ ├── cgroups/ │ │ │ │ ├── LICENSE │ │ │ │ └── devices/ │ │ │ │ └── config/ │ │ │ │ ├── device.go │ │ │ │ └── mknod_unix.go │ │ │ ├── runc/ │ │ │ │ ├── LICENSE │ │ │ │ ├── NOTICE │ │ │ │ ├── internal/ │ │ │ │ │ ├── linux/ │ │ │ │ │ │ ├── doc.go │ │ │ │ │ │ ├── eintr.go │ │ │ │ │ │ └── linux.go │ │ │ │ │ └── pathrs/ │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── mkdirall.go │ │ │ │ │ ├── mkdirall_pathrslite.go │ │ │ │ │ ├── path.go │ │ │ │ │ ├── procfs_pathrslite.go │ │ │ │ │ ├── retry.go │ │ │ │ │ └── root_pathrslite.go │ │ │ │ └── libcontainer/ │ │ │ │ ├── devices/ │ │ │ │ │ ├── device_deprecated.go │ │ │ │ │ └── device_unix.go │ │ │ │ ├── exeseal/ │ │ │ │ │ ├── cloned_binary_linux.go │ │ │ │ │ └── overlayfs_linux.go │ │ │ │ ├── system/ │ │ │ │ │ ├── linux.go │ │ │ │ │ ├── proc.go │ │ │ │ │ └── rlimit_linux.go │ │ │ │ └── utils/ │ │ │ │ ├── cmsg.go │ │ │ │ ├── utils.go │ │ │ │ └── utils_unix.go │ │ │ ├── runtime-spec/ │ │ │ │ ├── LICENSE │ │ │ │ └── specs-go/ │ │ │ │ ├── config.go │ │ │ │ ├── state.go │ │ │ │ └── version.go │ │ │ └── runtime-tools/ │ │ │ ├── LICENSE │ │ │ ├── generate/ │ │ │ │ ├── config.go │ │ │ │ ├── generate.go │ │ │ │ └── seccomp/ │ │ │ │ ├── consts.go │ │ │ │ ├── parse_action.go │ │ │ │ ├── parse_architecture.go │ │ │ │ ├── parse_arguments.go │ │ │ │ ├── parse_remove.go │ │ │ │ ├── seccomp_default.go │ │ │ │ ├── seccomp_default_linux.go │ │ │ │ ├── seccomp_default_unsupported.go │ │ │ │ └── syscall_compare.go │ │ │ └── validate/ │ │ │ └── capabilities/ │ │ │ ├── lastcap.go │ │ │ └── validate.go │ │ ├── pelletier/ │ │ │ └── go-toml/ │ │ │ ├── .dockerignore │ │ │ ├── .gitignore │ │ │ ├── CONTRIBUTING.md │ │ │ ├── Dockerfile │ │ │ ├── LICENSE │ │ │ ├── Makefile │ │ │ ├── PULL_REQUEST_TEMPLATE.md │ │ │ ├── README.md │ │ │ ├── SECURITY.md │ │ │ ├── azure-pipelines.yml │ │ │ ├── benchmark.sh │ │ │ ├── doc.go │ │ │ ├── example-crlf.toml │ │ │ ├── example.toml │ │ │ ├── fuzz.go │ │ │ ├── fuzz.sh │ │ │ ├── keysparsing.go │ │ │ ├── lexer.go │ │ │ ├── localtime.go │ │ │ ├── marshal.go │ │ │ ├── marshal_OrderPreserve_test.toml │ │ │ ├── marshal_test.toml │ │ │ ├── parser.go │ │ │ ├── position.go │ │ │ ├── token.go │ │ │ ├── toml.go │ │ │ ├── tomlpub.go │ │ │ ├── tomltree_create.go │ │ │ ├── tomltree_write.go │ │ │ └── tomltree_writepub.go │ │ ├── pmezard/ │ │ │ └── go-difflib/ │ │ │ ├── LICENSE │ │ │ └── difflib/ │ │ │ └── difflib.go │ │ ├── prometheus/ │ │ │ └── procfs/ │ │ │ ├── .gitignore │ │ │ ├── .golangci.yml │ │ │ ├── CODE_OF_CONDUCT.md │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE │ │ │ ├── MAINTAINERS.md │ │ │ ├── Makefile │ │ │ ├── Makefile.common │ │ │ ├── NOTICE │ │ │ ├── README.md │ │ │ ├── SECURITY.md │ │ │ ├── arp.go │ │ │ ├── buddyinfo.go │ │ │ ├── cmdline.go │ │ │ ├── cpuinfo.go │ │ │ ├── cpuinfo_armx.go │ │ │ ├── cpuinfo_loong64.go │ │ │ ├── cpuinfo_mipsx.go │ │ │ ├── cpuinfo_others.go │ │ │ ├── cpuinfo_ppcx.go │ │ │ ├── cpuinfo_riscvx.go │ │ │ ├── cpuinfo_s390x.go │ │ │ ├── cpuinfo_x86.go │ │ │ ├── crypto.go │ │ │ ├── doc.go │ │ │ ├── fs.go │ │ │ ├── fs_statfs_notype.go │ │ │ ├── fs_statfs_type.go │ │ │ ├── fscache.go │ │ │ ├── internal/ │ │ │ │ ├── fs/ │ │ │ │ │ └── fs.go │ │ │ │ └── util/ │ │ │ │ ├── parse.go │ │ │ │ ├── readfile.go │ │ │ │ ├── sysreadfile.go │ │ │ │ ├── sysreadfile_compat.go │ │ │ │ └── valueparser.go │ │ │ ├── ipvs.go │ │ │ ├── kernel_hung.go │ │ │ ├── kernel_random.go │ │ │ ├── loadavg.go │ │ │ ├── mdstat.go │ │ │ ├── meminfo.go │ │ │ ├── mountinfo.go │ │ │ ├── mountstats.go │ │ │ ├── net_conntrackstat.go │ │ │ ├── net_dev.go │ │ │ ├── net_dev_snmp6.go │ │ │ ├── net_ip_socket.go │ │ │ ├── net_protocols.go │ │ │ ├── net_route.go │ │ │ ├── net_sockstat.go │ │ │ ├── net_softnet.go │ │ │ ├── net_tcp.go │ │ │ ├── net_tls_stat.go │ │ │ ├── net_udp.go │ │ │ ├── net_unix.go │ │ │ ├── net_wireless.go │ │ │ ├── net_xfrm.go │ │ │ ├── netstat.go │ │ │ ├── nfnetlink_queue.go │ │ │ ├── proc.go │ │ │ ├── proc_cgroup.go │ │ │ ├── proc_cgroups.go │ │ │ ├── proc_environ.go │ │ │ ├── proc_fdinfo.go │ │ │ ├── proc_interrupts.go │ │ │ ├── proc_io.go │ │ │ ├── proc_limits.go │ │ │ ├── proc_maps.go │ │ │ ├── proc_netstat.go │ │ │ ├── proc_ns.go │ │ │ ├── proc_psi.go │ │ │ ├── proc_smaps.go │ │ │ ├── proc_snmp.go │ │ │ ├── proc_snmp6.go │ │ │ ├── proc_stat.go │ │ │ ├── proc_statm.go │ │ │ ├── proc_status.go │ │ │ ├── proc_sys.go │ │ │ ├── schedstat.go │ │ │ ├── slab.go │ │ │ ├── softirqs.go │ │ │ ├── stat.go │ │ │ ├── swaps.go │ │ │ ├── thread.go │ │ │ ├── ttar │ │ │ ├── vm.go │ │ │ └── zoneinfo.go │ │ ├── stretchr/ │ │ │ └── testify/ │ │ │ ├── LICENSE │ │ │ ├── assert/ │ │ │ │ ├── assertion_compare.go │ │ │ │ ├── assertion_format.go │ │ │ │ ├── assertion_format.go.tmpl │ │ │ │ ├── assertion_forward.go │ │ │ │ ├── assertion_forward.go.tmpl │ │ │ │ ├── assertion_order.go │ │ │ │ ├── assertions.go │ │ │ │ ├── doc.go │ │ │ │ ├── errors.go │ │ │ │ ├── forward_assertions.go │ │ │ │ ├── http_assertions.go │ │ │ │ └── yaml/ │ │ │ │ ├── yaml_custom.go │ │ │ │ ├── yaml_default.go │ │ │ │ └── yaml_fail.go │ │ │ └── require/ │ │ │ ├── doc.go │ │ │ ├── forward_requirements.go │ │ │ ├── require.go │ │ │ ├── require.go.tmpl │ │ │ ├── require_forward.go │ │ │ ├── require_forward.go.tmpl │ │ │ └── requirements.go │ │ └── tetratelabs/ │ │ └── wazero/ │ │ ├── .editorconfig │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── .gitmodules │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── NOTICE │ │ ├── RATIONALE.md │ │ ├── README.md │ │ ├── api/ │ │ │ ├── features.go │ │ │ └── wasm.go │ │ ├── builder.go │ │ ├── cache.go │ │ ├── codecov.yml │ │ ├── config.go │ │ ├── experimental/ │ │ │ ├── checkpoint.go │ │ │ ├── close.go │ │ │ ├── compilationworkers.go │ │ │ ├── experimental.go │ │ │ ├── features.go │ │ │ ├── importresolver.go │ │ │ ├── listener.go │ │ │ ├── memory.go │ │ │ └── sys/ │ │ │ ├── dir.go │ │ │ ├── errno.go │ │ │ ├── error.go │ │ │ ├── file.go │ │ │ ├── fs.go │ │ │ ├── oflag.go │ │ │ ├── syscall_errno.go │ │ │ ├── syscall_errno_notwindows.go │ │ │ ├── syscall_errno_unsupported.go │ │ │ ├── syscall_errno_windows.go │ │ │ ├── time.go │ │ │ └── unimplemented.go │ │ ├── fsconfig.go │ │ ├── imports/ │ │ │ └── wasi_snapshot_preview1/ │ │ │ ├── args.go │ │ │ ├── clock.go │ │ │ ├── environ.go │ │ │ ├── fs.go │ │ │ ├── poll.go │ │ │ ├── proc.go │ │ │ ├── random.go │ │ │ ├── sched.go │ │ │ ├── sock.go │ │ │ └── wasi.go │ │ ├── internal/ │ │ │ ├── descriptor/ │ │ │ │ └── table.go │ │ │ ├── engine/ │ │ │ │ ├── interpreter/ │ │ │ │ │ ├── compiler.go │ │ │ │ │ ├── format.go │ │ │ │ │ ├── interpreter.go │ │ │ │ │ ├── operations.go │ │ │ │ │ └── signature.go │ │ │ │ └── wazevo/ │ │ │ │ ├── backend/ │ │ │ │ │ ├── abi.go │ │ │ │ │ ├── backend.go │ │ │ │ │ ├── compiler.go │ │ │ │ │ ├── compiler_lower.go │ │ │ │ │ ├── go_call.go │ │ │ │ │ ├── isa/ │ │ │ │ │ │ ├── amd64/ │ │ │ │ │ │ │ ├── abi.go │ │ │ │ │ │ │ ├── abi_entry_amd64.go │ │ │ │ │ │ │ ├── abi_entry_amd64.s │ │ │ │ │ │ │ ├── abi_entry_preamble.go │ │ │ │ │ │ │ ├── abi_go_call.go │ │ │ │ │ │ │ ├── cond.go │ │ │ │ │ │ │ ├── ext.go │ │ │ │ │ │ │ ├── instr.go │ │ │ │ │ │ │ ├── instr_encoding.go │ │ │ │ │ │ │ ├── lower_constant.go │ │ │ │ │ │ │ ├── lower_mem.go │ │ │ │ │ │ │ ├── machine.go │ │ │ │ │ │ │ ├── machine_pro_epi_logue.go │ │ │ │ │ │ │ ├── machine_regalloc.go │ │ │ │ │ │ │ ├── machine_vec.go │ │ │ │ │ │ │ ├── operands.go │ │ │ │ │ │ │ ├── reg.go │ │ │ │ │ │ │ └── stack.go │ │ │ │ │ │ └── arm64/ │ │ │ │ │ │ ├── abi.go │ │ │ │ │ │ ├── abi_entry_arm64.go │ │ │ │ │ │ ├── abi_entry_arm64.s │ │ │ │ │ │ ├── abi_entry_preamble.go │ │ │ │ │ │ ├── abi_go_call.go │ │ │ │ │ │ ├── cond.go │ │ │ │ │ │ ├── instr.go │ │ │ │ │ │ ├── instr_encoding.go │ │ │ │ │ │ ├── lower_constant.go │ │ │ │ │ │ ├── lower_instr.go │ │ │ │ │ │ ├── lower_instr_operands.go │ │ │ │ │ │ ├── lower_mem.go │ │ │ │ │ │ ├── machine.go │ │ │ │ │ │ ├── machine_pro_epi_logue.go │ │ │ │ │ │ ├── machine_regalloc.go │ │ │ │ │ │ ├── machine_relocation.go │ │ │ │ │ │ ├── reg.go │ │ │ │ │ │ └── unwind_stack.go │ │ │ │ │ ├── machine.go │ │ │ │ │ ├── regalloc/ │ │ │ │ │ │ ├── api.go │ │ │ │ │ │ ├── reg.go │ │ │ │ │ │ ├── regalloc.go │ │ │ │ │ │ └── regset.go │ │ │ │ │ └── vdef.go │ │ │ │ ├── call_engine.go │ │ │ │ ├── engine.go │ │ │ │ ├── engine_cache.go │ │ │ │ ├── entrypoint_amd64.go │ │ │ │ ├── entrypoint_arm64.go │ │ │ │ ├── entrypoint_others.go │ │ │ │ ├── frontend/ │ │ │ │ │ ├── frontend.go │ │ │ │ │ ├── lower.go │ │ │ │ │ ├── misc.go │ │ │ │ │ └── sort_id.go │ │ │ │ ├── hostmodule.go │ │ │ │ ├── isa_amd64.go │ │ │ │ ├── isa_arm64.go │ │ │ │ ├── isa_other.go │ │ │ │ ├── memmove.go │ │ │ │ ├── module_engine.go │ │ │ │ ├── ssa/ │ │ │ │ │ ├── basic_block.go │ │ │ │ │ ├── basic_block_sort.go │ │ │ │ │ ├── builder.go │ │ │ │ │ ├── cmp.go │ │ │ │ │ ├── funcref.go │ │ │ │ │ ├── instructions.go │ │ │ │ │ ├── pass.go │ │ │ │ │ ├── pass_blk_layouts.go │ │ │ │ │ ├── pass_cfg.go │ │ │ │ │ ├── signature.go │ │ │ │ │ ├── ssa.go │ │ │ │ │ ├── type.go │ │ │ │ │ └── vs.go │ │ │ │ └── wazevoapi/ │ │ │ │ ├── debug_options.go │ │ │ │ ├── exitcode.go │ │ │ │ ├── offsetdata.go │ │ │ │ ├── perfmap.go │ │ │ │ ├── perfmap_disabled.go │ │ │ │ ├── perfmap_enabled.go │ │ │ │ ├── pool.go │ │ │ │ ├── ptr.go │ │ │ │ ├── queue.go │ │ │ │ └── resetmap.go │ │ │ ├── expctxkeys/ │ │ │ │ ├── checkpoint.go │ │ │ │ ├── close.go │ │ │ │ ├── compilationworkers.go │ │ │ │ ├── expctxkeys.go │ │ │ │ ├── importresolver.go │ │ │ │ ├── listener.go │ │ │ │ └── memory.go │ │ │ ├── filecache/ │ │ │ │ ├── compilationcache.go │ │ │ │ └── file_cache.go │ │ │ ├── fsapi/ │ │ │ │ ├── file.go │ │ │ │ ├── poll.go │ │ │ │ └── unimplemented.go │ │ │ ├── ieee754/ │ │ │ │ └── ieee754.go │ │ │ ├── internalapi/ │ │ │ │ └── internal.go │ │ │ ├── leb128/ │ │ │ │ └── leb128.go │ │ │ ├── moremath/ │ │ │ │ └── moremath.go │ │ │ ├── platform/ │ │ │ │ ├── cpuid.go │ │ │ │ ├── cpuid_amd64.go │ │ │ │ ├── cpuid_amd64.s │ │ │ │ ├── cpuid_arm64.go │ │ │ │ ├── cpuid_arm64.s │ │ │ │ ├── cpuid_unsupported.go │ │ │ │ ├── crypto.go │ │ │ │ ├── mmap_linux.go │ │ │ │ ├── mmap_other.go │ │ │ │ ├── mmap_unix.go │ │ │ │ ├── mmap_unsupported.go │ │ │ │ ├── mmap_windows.go │ │ │ │ ├── mprotect_bsd.go │ │ │ │ ├── mprotect_syscall.go │ │ │ │ ├── mprotect_unsupported.go │ │ │ │ ├── path.go │ │ │ │ ├── path_windows.go │ │ │ │ ├── platform.go │ │ │ │ ├── time.go │ │ │ │ ├── time_cgo.go │ │ │ │ ├── time_notcgo.go │ │ │ │ └── time_windows.go │ │ │ ├── sock/ │ │ │ │ ├── sock.go │ │ │ │ ├── sock_supported.go │ │ │ │ └── sock_unsupported.go │ │ │ ├── sys/ │ │ │ │ ├── fs.go │ │ │ │ ├── lazy.go │ │ │ │ ├── stdio.go │ │ │ │ └── sys.go │ │ │ ├── sysfs/ │ │ │ │ ├── adapter.go │ │ │ │ ├── datasync_linux.go │ │ │ │ ├── datasync_tinygo.go │ │ │ │ ├── datasync_unsupported.go │ │ │ │ ├── dir.go │ │ │ │ ├── dirfs.go │ │ │ │ ├── dirfs_supported.go │ │ │ │ ├── dirfs_unsupported.go │ │ │ │ ├── file.go │ │ │ │ ├── file_unix.go │ │ │ │ ├── file_unsupported.go │ │ │ │ ├── file_windows.go │ │ │ │ ├── futimens.go │ │ │ │ ├── futimens_darwin.go │ │ │ │ ├── futimens_darwin.s │ │ │ │ ├── futimens_linux.go │ │ │ │ ├── futimens_unsupported.go │ │ │ │ ├── futimens_windows.go │ │ │ │ ├── ino.go │ │ │ │ ├── ino_plan9.go │ │ │ │ ├── ino_tinygo.go │ │ │ │ ├── ino_windows.go │ │ │ │ ├── nonblock_unix.go │ │ │ │ ├── nonblock_unsupported.go │ │ │ │ ├── nonblock_windows.go │ │ │ │ ├── oflag.go │ │ │ │ ├── open_file_darwin.go │ │ │ │ ├── open_file_freebsd.go │ │ │ │ ├── open_file_linux.go │ │ │ │ ├── open_file_notwindows.go │ │ │ │ ├── open_file_sun.go │ │ │ │ ├── open_file_tinygo.go │ │ │ │ ├── open_file_unsupported.go │ │ │ │ ├── open_file_windows.go │ │ │ │ ├── osfile.go │ │ │ │ ├── poll.go │ │ │ │ ├── poll_darwin.go │ │ │ │ ├── poll_darwin.s │ │ │ │ ├── poll_linux.go │ │ │ │ ├── poll_unsupported.go │ │ │ │ ├── poll_windows.go │ │ │ │ ├── readfs.go │ │ │ │ ├── rename.go │ │ │ │ ├── rename_plan9.go │ │ │ │ ├── rename_windows.go │ │ │ │ ├── sock.go │ │ │ │ ├── sock_supported.go │ │ │ │ ├── sock_unix.go │ │ │ │ ├── sock_unsupported.go │ │ │ │ ├── sock_windows.go │ │ │ │ ├── stat.go │ │ │ │ ├── stat_bsd.go │ │ │ │ ├── stat_linux.go │ │ │ │ ├── stat_unsupported.go │ │ │ │ ├── stat_windows.go │ │ │ │ ├── sync.go │ │ │ │ ├── sync_windows.go │ │ │ │ ├── syscall6_darwin.go │ │ │ │ ├── sysfs.go │ │ │ │ ├── unlink.go │ │ │ │ ├── unlink_plan9.go │ │ │ │ └── unlink_windows.go │ │ │ ├── u32/ │ │ │ │ └── u32.go │ │ │ ├── u64/ │ │ │ │ └── u64.go │ │ │ ├── version/ │ │ │ │ └── version.go │ │ │ ├── wasip1/ │ │ │ │ ├── args.go │ │ │ │ ├── clock.go │ │ │ │ ├── environ.go │ │ │ │ ├── errno.go │ │ │ │ ├── fs.go │ │ │ │ ├── poll.go │ │ │ │ ├── proc.go │ │ │ │ ├── random.go │ │ │ │ ├── rights.go │ │ │ │ ├── sched.go │ │ │ │ ├── sock.go │ │ │ │ └── wasi.go │ │ │ ├── wasm/ │ │ │ │ ├── binary/ │ │ │ │ │ ├── code.go │ │ │ │ │ ├── const_expr.go │ │ │ │ │ ├── custom.go │ │ │ │ │ ├── data.go │ │ │ │ │ ├── decoder.go │ │ │ │ │ ├── element.go │ │ │ │ │ ├── errors.go │ │ │ │ │ ├── export.go │ │ │ │ │ ├── function.go │ │ │ │ │ ├── global.go │ │ │ │ │ ├── header.go │ │ │ │ │ ├── import.go │ │ │ │ │ ├── limits.go │ │ │ │ │ ├── memory.go │ │ │ │ │ ├── names.go │ │ │ │ │ ├── section.go │ │ │ │ │ ├── table.go │ │ │ │ │ └── value.go │ │ │ │ ├── counts.go │ │ │ │ ├── engine.go │ │ │ │ ├── func_validation.go │ │ │ │ ├── function_definition.go │ │ │ │ ├── global.go │ │ │ │ ├── gofunc.go │ │ │ │ ├── host.go │ │ │ │ ├── instruction.go │ │ │ │ ├── memory.go │ │ │ │ ├── memory_definition.go │ │ │ │ ├── module.go │ │ │ │ ├── module_instance.go │ │ │ │ ├── module_instance_lookup.go │ │ │ │ ├── store.go │ │ │ │ ├── store_module_list.go │ │ │ │ └── table.go │ │ │ ├── wasmdebug/ │ │ │ │ ├── debug.go │ │ │ │ └── dwarf.go │ │ │ └── wasmruntime/ │ │ │ └── errors.go │ │ ├── netlify.toml │ │ ├── runtime.go │ │ └── sys/ │ │ ├── clock.go │ │ ├── error.go │ │ ├── stat.go │ │ ├── stat_bsd.go │ │ ├── stat_linux.go │ │ ├── stat_unsupported.go │ │ └── stat_windows.go │ ├── golang.org/ │ │ └── x/ │ │ ├── mod/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ └── semver/ │ │ │ └── semver.go │ │ └── sys/ │ │ ├── LICENSE │ │ ├── PATENTS │ │ ├── unix/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── affinity_linux.go │ │ │ ├── aliases.go │ │ │ ├── asm_aix_ppc64.s │ │ │ ├── asm_bsd_386.s │ │ │ ├── asm_bsd_amd64.s │ │ │ ├── asm_bsd_arm.s │ │ │ ├── asm_bsd_arm64.s │ │ │ ├── asm_bsd_ppc64.s │ │ │ ├── asm_bsd_riscv64.s │ │ │ ├── asm_linux_386.s │ │ │ ├── asm_linux_amd64.s │ │ │ ├── asm_linux_arm.s │ │ │ ├── asm_linux_arm64.s │ │ │ ├── asm_linux_loong64.s │ │ │ ├── asm_linux_mips64x.s │ │ │ ├── asm_linux_mipsx.s │ │ │ ├── asm_linux_ppc64x.s │ │ │ ├── asm_linux_riscv64.s │ │ │ ├── asm_linux_s390x.s │ │ │ ├── asm_openbsd_mips64.s │ │ │ ├── asm_solaris_amd64.s │ │ │ ├── asm_zos_s390x.s │ │ │ ├── auxv.go │ │ │ ├── auxv_unsupported.go │ │ │ ├── bluetooth_linux.go │ │ │ ├── bpxsvc_zos.go │ │ │ ├── bpxsvc_zos.s │ │ │ ├── cap_freebsd.go │ │ │ ├── constants.go │ │ │ ├── dev_aix_ppc.go │ │ │ ├── dev_aix_ppc64.go │ │ │ ├── dev_darwin.go │ │ │ ├── dev_dragonfly.go │ │ │ ├── dev_freebsd.go │ │ │ ├── dev_linux.go │ │ │ ├── dev_netbsd.go │ │ │ ├── dev_openbsd.go │ │ │ ├── dev_zos.go │ │ │ ├── dirent.go │ │ │ ├── endian_big.go │ │ │ ├── endian_little.go │ │ │ ├── env_unix.go │ │ │ ├── fcntl.go │ │ │ ├── fcntl_darwin.go │ │ │ ├── fcntl_linux_32bit.go │ │ │ ├── fdset.go │ │ │ ├── gccgo.go │ │ │ ├── gccgo_c.c │ │ │ ├── gccgo_linux_amd64.go │ │ │ ├── ifreq_linux.go │ │ │ ├── ioctl_linux.go │ │ │ ├── ioctl_signed.go │ │ │ ├── ioctl_unsigned.go │ │ │ ├── ioctl_zos.go │ │ │ ├── mkall.sh │ │ │ ├── mkerrors.sh │ │ │ ├── mmap_nomremap.go │ │ │ ├── mremap.go │ │ │ ├── pagesize_unix.go │ │ │ ├── pledge_openbsd.go │ │ │ ├── ptrace_darwin.go │ │ │ ├── ptrace_ios.go │ │ │ ├── race.go │ │ │ ├── race0.go │ │ │ ├── readdirent_getdents.go │ │ │ ├── readdirent_getdirentries.go │ │ │ ├── sockcmsg_dragonfly.go │ │ │ ├── sockcmsg_linux.go │ │ │ ├── sockcmsg_unix.go │ │ │ ├── sockcmsg_unix_other.go │ │ │ ├── sockcmsg_zos.go │ │ │ ├── symaddr_zos_s390x.s │ │ │ ├── syscall.go │ │ │ ├── syscall_aix.go │ │ │ ├── syscall_aix_ppc.go │ │ │ ├── syscall_aix_ppc64.go │ │ │ ├── syscall_bsd.go │ │ │ ├── syscall_darwin.go │ │ │ ├── syscall_darwin_amd64.go │ │ │ ├── syscall_darwin_arm64.go │ │ │ ├── syscall_darwin_libSystem.go │ │ │ ├── syscall_dragonfly.go │ │ │ ├── syscall_dragonfly_amd64.go │ │ │ ├── syscall_freebsd.go │ │ │ ├── syscall_freebsd_386.go │ │ │ ├── syscall_freebsd_amd64.go │ │ │ ├── syscall_freebsd_arm.go │ │ │ ├── syscall_freebsd_arm64.go │ │ │ ├── syscall_freebsd_riscv64.go │ │ │ ├── syscall_hurd.go │ │ │ ├── syscall_hurd_386.go │ │ │ ├── syscall_illumos.go │ │ │ ├── syscall_linux.go │ │ │ ├── syscall_linux_386.go │ │ │ ├── syscall_linux_alarm.go │ │ │ ├── syscall_linux_amd64.go │ │ │ ├── syscall_linux_amd64_gc.go │ │ │ ├── syscall_linux_arm.go │ │ │ ├── syscall_linux_arm64.go │ │ │ ├── syscall_linux_gc.go │ │ │ ├── syscall_linux_gc_386.go │ │ │ ├── syscall_linux_gc_arm.go │ │ │ ├── syscall_linux_gccgo_386.go │ │ │ ├── syscall_linux_gccgo_arm.go │ │ │ ├── syscall_linux_loong64.go │ │ │ ├── syscall_linux_mips64x.go │ │ │ ├── syscall_linux_mipsx.go │ │ │ ├── syscall_linux_ppc.go │ │ │ ├── syscall_linux_ppc64x.go │ │ │ ├── syscall_linux_riscv64.go │ │ │ ├── syscall_linux_s390x.go │ │ │ ├── syscall_linux_sparc64.go │ │ │ ├── syscall_netbsd.go │ │ │ ├── syscall_netbsd_386.go │ │ │ ├── syscall_netbsd_amd64.go │ │ │ ├── syscall_netbsd_arm.go │ │ │ ├── syscall_netbsd_arm64.go │ │ │ ├── syscall_openbsd.go │ │ │ ├── syscall_openbsd_386.go │ │ │ ├── syscall_openbsd_amd64.go │ │ │ ├── syscall_openbsd_arm.go │ │ │ ├── syscall_openbsd_arm64.go │ │ │ ├── syscall_openbsd_libc.go │ │ │ ├── syscall_openbsd_mips64.go │ │ │ ├── syscall_openbsd_ppc64.go │ │ │ ├── syscall_openbsd_riscv64.go │ │ │ ├── syscall_solaris.go │ │ │ ├── syscall_solaris_amd64.go │ │ │ ├── syscall_unix.go │ │ │ ├── syscall_unix_gc.go │ │ │ ├── syscall_unix_gc_ppc64x.go │ │ │ ├── syscall_zos_s390x.go │ │ │ ├── sysvshm_linux.go │ │ │ ├── sysvshm_unix.go │ │ │ ├── sysvshm_unix_other.go │ │ │ ├── timestruct.go │ │ │ ├── unveil_openbsd.go │ │ │ ├── vgetrandom_linux.go │ │ │ ├── vgetrandom_unsupported.go │ │ │ ├── xattr_bsd.go │ │ │ ├── zerrors_aix_ppc.go │ │ │ ├── zerrors_aix_ppc64.go │ │ │ ├── zerrors_darwin_amd64.go │ │ │ ├── zerrors_darwin_arm64.go │ │ │ ├── zerrors_dragonfly_amd64.go │ │ │ ├── zerrors_freebsd_386.go │ │ │ ├── zerrors_freebsd_amd64.go │ │ │ ├── zerrors_freebsd_arm.go │ │ │ ├── zerrors_freebsd_arm64.go │ │ │ ├── zerrors_freebsd_riscv64.go │ │ │ ├── zerrors_linux.go │ │ │ ├── zerrors_linux_386.go │ │ │ ├── zerrors_linux_amd64.go │ │ │ ├── zerrors_linux_arm.go │ │ │ ├── zerrors_linux_arm64.go │ │ │ ├── zerrors_linux_loong64.go │ │ │ ├── zerrors_linux_mips.go │ │ │ ├── zerrors_linux_mips64.go │ │ │ ├── zerrors_linux_mips64le.go │ │ │ ├── zerrors_linux_mipsle.go │ │ │ ├── zerrors_linux_ppc.go │ │ │ ├── zerrors_linux_ppc64.go │ │ │ ├── zerrors_linux_ppc64le.go │ │ │ ├── zerrors_linux_riscv64.go │ │ │ ├── zerrors_linux_s390x.go │ │ │ ├── zerrors_linux_sparc64.go │ │ │ ├── zerrors_netbsd_386.go │ │ │ ├── zerrors_netbsd_amd64.go │ │ │ ├── zerrors_netbsd_arm.go │ │ │ ├── zerrors_netbsd_arm64.go │ │ │ ├── zerrors_openbsd_386.go │ │ │ ├── zerrors_openbsd_amd64.go │ │ │ ├── zerrors_openbsd_arm.go │ │ │ ├── zerrors_openbsd_arm64.go │ │ │ ├── zerrors_openbsd_mips64.go │ │ │ ├── zerrors_openbsd_ppc64.go │ │ │ ├── zerrors_openbsd_riscv64.go │ │ │ ├── zerrors_solaris_amd64.go │ │ │ ├── zerrors_zos_s390x.go │ │ │ ├── zptrace_armnn_linux.go │ │ │ ├── zptrace_linux_arm64.go │ │ │ ├── zptrace_mipsnn_linux.go │ │ │ ├── zptrace_mipsnnle_linux.go │ │ │ ├── zptrace_x86_linux.go │ │ │ ├── zsymaddr_zos_s390x.s │ │ │ ├── zsyscall_aix_ppc.go │ │ │ ├── zsyscall_aix_ppc64.go │ │ │ ├── zsyscall_aix_ppc64_gc.go │ │ │ ├── zsyscall_aix_ppc64_gccgo.go │ │ │ ├── zsyscall_darwin_amd64.go │ │ │ ├── zsyscall_darwin_amd64.s │ │ │ ├── zsyscall_darwin_arm64.go │ │ │ ├── zsyscall_darwin_arm64.s │ │ │ ├── zsyscall_dragonfly_amd64.go │ │ │ ├── zsyscall_freebsd_386.go │ │ │ ├── zsyscall_freebsd_amd64.go │ │ │ ├── zsyscall_freebsd_arm.go │ │ │ ├── zsyscall_freebsd_arm64.go │ │ │ ├── zsyscall_freebsd_riscv64.go │ │ │ ├── zsyscall_illumos_amd64.go │ │ │ ├── zsyscall_linux.go │ │ │ ├── zsyscall_linux_386.go │ │ │ ├── zsyscall_linux_amd64.go │ │ │ ├── zsyscall_linux_arm.go │ │ │ ├── zsyscall_linux_arm64.go │ │ │ ├── zsyscall_linux_loong64.go │ │ │ ├── zsyscall_linux_mips.go │ │ │ ├── zsyscall_linux_mips64.go │ │ │ ├── zsyscall_linux_mips64le.go │ │ │ ├── zsyscall_linux_mipsle.go │ │ │ ├── zsyscall_linux_ppc.go │ │ │ ├── zsyscall_linux_ppc64.go │ │ │ ├── zsyscall_linux_ppc64le.go │ │ │ ├── zsyscall_linux_riscv64.go │ │ │ ├── zsyscall_linux_s390x.go │ │ │ ├── zsyscall_linux_sparc64.go │ │ │ ├── zsyscall_netbsd_386.go │ │ │ ├── zsyscall_netbsd_amd64.go │ │ │ ├── zsyscall_netbsd_arm.go │ │ │ ├── zsyscall_netbsd_arm64.go │ │ │ ├── zsyscall_openbsd_386.go │ │ │ ├── zsyscall_openbsd_386.s │ │ │ ├── zsyscall_openbsd_amd64.go │ │ │ ├── zsyscall_openbsd_amd64.s │ │ │ ├── zsyscall_openbsd_arm.go │ │ │ ├── zsyscall_openbsd_arm.s │ │ │ ├── zsyscall_openbsd_arm64.go │ │ │ ├── zsyscall_openbsd_arm64.s │ │ │ ├── zsyscall_openbsd_mips64.go │ │ │ ├── zsyscall_openbsd_mips64.s │ │ │ ├── zsyscall_openbsd_ppc64.go │ │ │ ├── zsyscall_openbsd_ppc64.s │ │ │ ├── zsyscall_openbsd_riscv64.go │ │ │ ├── zsyscall_openbsd_riscv64.s │ │ │ ├── zsyscall_solaris_amd64.go │ │ │ ├── zsyscall_zos_s390x.go │ │ │ ├── zsysctl_openbsd_386.go │ │ │ ├── zsysctl_openbsd_amd64.go │ │ │ ├── zsysctl_openbsd_arm.go │ │ │ ├── zsysctl_openbsd_arm64.go │ │ │ ├── zsysctl_openbsd_mips64.go │ │ │ ├── zsysctl_openbsd_ppc64.go │ │ │ ├── zsysctl_openbsd_riscv64.go │ │ │ ├── zsysnum_darwin_amd64.go │ │ │ ├── zsysnum_darwin_arm64.go │ │ │ ├── zsysnum_dragonfly_amd64.go │ │ │ ├── zsysnum_freebsd_386.go │ │ │ ├── zsysnum_freebsd_amd64.go │ │ │ ├── zsysnum_freebsd_arm.go │ │ │ ├── zsysnum_freebsd_arm64.go │ │ │ ├── zsysnum_freebsd_riscv64.go │ │ │ ├── zsysnum_linux_386.go │ │ │ ├── zsysnum_linux_amd64.go │ │ │ ├── zsysnum_linux_arm.go │ │ │ ├── zsysnum_linux_arm64.go │ │ │ ├── zsysnum_linux_loong64.go │ │ │ ├── zsysnum_linux_mips.go │ │ │ ├── zsysnum_linux_mips64.go │ │ │ ├── zsysnum_linux_mips64le.go │ │ │ ├── zsysnum_linux_mipsle.go │ │ │ ├── zsysnum_linux_ppc.go │ │ │ ├── zsysnum_linux_ppc64.go │ │ │ ├── zsysnum_linux_ppc64le.go │ │ │ ├── zsysnum_linux_riscv64.go │ │ │ ├── zsysnum_linux_s390x.go │ │ │ ├── zsysnum_linux_sparc64.go │ │ │ ├── zsysnum_netbsd_386.go │ │ │ ├── zsysnum_netbsd_amd64.go │ │ │ ├── zsysnum_netbsd_arm.go │ │ │ ├── zsysnum_netbsd_arm64.go │ │ │ ├── zsysnum_openbsd_386.go │ │ │ ├── zsysnum_openbsd_amd64.go │ │ │ ├── zsysnum_openbsd_arm.go │ │ │ ├── zsysnum_openbsd_arm64.go │ │ │ ├── zsysnum_openbsd_mips64.go │ │ │ ├── zsysnum_openbsd_ppc64.go │ │ │ ├── zsysnum_openbsd_riscv64.go │ │ │ ├── zsysnum_zos_s390x.go │ │ │ ├── ztypes_aix_ppc.go │ │ │ ├── ztypes_aix_ppc64.go │ │ │ ├── ztypes_darwin_amd64.go │ │ │ ├── ztypes_darwin_arm64.go │ │ │ ├── ztypes_dragonfly_amd64.go │ │ │ ├── ztypes_freebsd_386.go │ │ │ ├── ztypes_freebsd_amd64.go │ │ │ ├── ztypes_freebsd_arm.go │ │ │ ├── ztypes_freebsd_arm64.go │ │ │ ├── ztypes_freebsd_riscv64.go │ │ │ ├── ztypes_linux.go │ │ │ ├── ztypes_linux_386.go │ │ │ ├── ztypes_linux_amd64.go │ │ │ ├── ztypes_linux_arm.go │ │ │ ├── ztypes_linux_arm64.go │ │ │ ├── ztypes_linux_loong64.go │ │ │ ├── ztypes_linux_mips.go │ │ │ ├── ztypes_linux_mips64.go │ │ │ ├── ztypes_linux_mips64le.go │ │ │ ├── ztypes_linux_mipsle.go │ │ │ ├── ztypes_linux_ppc.go │ │ │ ├── ztypes_linux_ppc64.go │ │ │ ├── ztypes_linux_ppc64le.go │ │ │ ├── ztypes_linux_riscv64.go │ │ │ ├── ztypes_linux_s390x.go │ │ │ ├── ztypes_linux_sparc64.go │ │ │ ├── ztypes_netbsd_386.go │ │ │ ├── ztypes_netbsd_amd64.go │ │ │ ├── ztypes_netbsd_arm.go │ │ │ ├── ztypes_netbsd_arm64.go │ │ │ ├── ztypes_openbsd_386.go │ │ │ ├── ztypes_openbsd_amd64.go │ │ │ ├── ztypes_openbsd_arm.go │ │ │ ├── ztypes_openbsd_arm64.go │ │ │ ├── ztypes_openbsd_mips64.go │ │ │ ├── ztypes_openbsd_ppc64.go │ │ │ ├── ztypes_openbsd_riscv64.go │ │ │ ├── ztypes_solaris_amd64.go │ │ │ └── ztypes_zos_s390x.go │ │ └── windows/ │ │ ├── aliases.go │ │ ├── dll_windows.go │ │ ├── env_windows.go │ │ ├── eventlog.go │ │ ├── exec_windows.go │ │ ├── memory_windows.go │ │ ├── mkerrors.bash │ │ ├── mkknownfolderids.bash │ │ ├── mksyscall.go │ │ ├── race.go │ │ ├── race0.go │ │ ├── security_windows.go │ │ ├── service.go │ │ ├── setupapi_windows.go │ │ ├── str.go │ │ ├── syscall.go │ │ ├── syscall_windows.go │ │ ├── types_windows.go │ │ ├── types_windows_386.go │ │ ├── types_windows_amd64.go │ │ ├── types_windows_arm.go │ │ ├── types_windows_arm64.go │ │ ├── zerrors_windows.go │ │ ├── zknownfolderids_windows.go │ │ └── zsyscall_windows.go │ ├── google.golang.org/ │ │ ├── genproto/ │ │ │ └── googleapis/ │ │ │ └── rpc/ │ │ │ ├── LICENSE │ │ │ └── status/ │ │ │ └── status.pb.go │ │ ├── grpc/ │ │ │ ├── AUTHORS │ │ │ ├── LICENSE │ │ │ ├── NOTICE.txt │ │ │ ├── attributes/ │ │ │ │ └── attributes.go │ │ │ ├── codes/ │ │ │ │ ├── code_string.go │ │ │ │ └── codes.go │ │ │ ├── connectivity/ │ │ │ │ └── connectivity.go │ │ │ ├── credentials/ │ │ │ │ ├── credentials.go │ │ │ │ └── tls.go │ │ │ ├── grpclog/ │ │ │ │ ├── component.go │ │ │ │ ├── grpclog.go │ │ │ │ ├── logger.go │ │ │ │ └── loggerv2.go │ │ │ ├── internal/ │ │ │ │ ├── credentials/ │ │ │ │ │ ├── credentials.go │ │ │ │ │ ├── spiffe.go │ │ │ │ │ ├── syscallconn.go │ │ │ │ │ └── util.go │ │ │ │ ├── grpclog/ │ │ │ │ │ ├── grpclog.go │ │ │ │ │ └── prefixLogger.go │ │ │ │ ├── internal.go │ │ │ │ ├── status/ │ │ │ │ │ └── status.go │ │ │ │ └── xds_handshake_cluster.go │ │ │ ├── resolver/ │ │ │ │ ├── map.go │ │ │ │ └── resolver.go │ │ │ ├── serviceconfig/ │ │ │ │ └── serviceconfig.go │ │ │ └── status/ │ │ │ └── status.go │ │ └── protobuf/ │ │ ├── LICENSE │ │ ├── PATENTS │ │ ├── encoding/ │ │ │ ├── prototext/ │ │ │ │ ├── decode.go │ │ │ │ ├── doc.go │ │ │ │ └── encode.go │ │ │ └── protowire/ │ │ │ └── wire.go │ │ ├── internal/ │ │ │ ├── descfmt/ │ │ │ │ └── stringer.go │ │ │ ├── descopts/ │ │ │ │ └── options.go │ │ │ ├── detrand/ │ │ │ │ └── rand.go │ │ │ ├── editiondefaults/ │ │ │ │ ├── defaults.go │ │ │ │ └── editions_defaults.binpb │ │ │ ├── editionssupport/ │ │ │ │ └── editions.go │ │ │ ├── encoding/ │ │ │ │ ├── defval/ │ │ │ │ │ └── default.go │ │ │ │ ├── messageset/ │ │ │ │ │ └── messageset.go │ │ │ │ ├── tag/ │ │ │ │ │ └── tag.go │ │ │ │ └── text/ │ │ │ │ ├── decode.go │ │ │ │ ├── decode_number.go │ │ │ │ ├── decode_string.go │ │ │ │ ├── decode_token.go │ │ │ │ ├── doc.go │ │ │ │ └── encode.go │ │ │ ├── errors/ │ │ │ │ └── errors.go │ │ │ ├── filedesc/ │ │ │ │ ├── build.go │ │ │ │ ├── desc.go │ │ │ │ ├── desc_init.go │ │ │ │ ├── desc_lazy.go │ │ │ │ ├── desc_list.go │ │ │ │ ├── desc_list_gen.go │ │ │ │ ├── editions.go │ │ │ │ ├── placeholder.go │ │ │ │ └── presence.go │ │ │ ├── filetype/ │ │ │ │ └── build.go │ │ │ ├── flags/ │ │ │ │ ├── flags.go │ │ │ │ ├── proto_legacy_disable.go │ │ │ │ └── proto_legacy_enable.go │ │ │ ├── genid/ │ │ │ │ ├── any_gen.go │ │ │ │ ├── api_gen.go │ │ │ │ ├── descriptor_gen.go │ │ │ │ ├── doc.go │ │ │ │ ├── duration_gen.go │ │ │ │ ├── empty_gen.go │ │ │ │ ├── field_mask_gen.go │ │ │ │ ├── go_features_gen.go │ │ │ │ ├── goname.go │ │ │ │ ├── map_entry.go │ │ │ │ ├── name.go │ │ │ │ ├── source_context_gen.go │ │ │ │ ├── struct_gen.go │ │ │ │ ├── timestamp_gen.go │ │ │ │ ├── type_gen.go │ │ │ │ ├── wrappers.go │ │ │ │ └── wrappers_gen.go │ │ │ ├── impl/ │ │ │ │ ├── api_export.go │ │ │ │ ├── api_export_opaque.go │ │ │ │ ├── bitmap.go │ │ │ │ ├── bitmap_race.go │ │ │ │ ├── checkinit.go │ │ │ │ ├── codec_extension.go │ │ │ │ ├── codec_field.go │ │ │ │ ├── codec_field_opaque.go │ │ │ │ ├── codec_gen.go │ │ │ │ ├── codec_map.go │ │ │ │ ├── codec_message.go │ │ │ │ ├── codec_message_opaque.go │ │ │ │ ├── codec_messageset.go │ │ │ │ ├── codec_tables.go │ │ │ │ ├── codec_unsafe.go │ │ │ │ ├── convert.go │ │ │ │ ├── convert_list.go │ │ │ │ ├── convert_map.go │ │ │ │ ├── decode.go │ │ │ │ ├── encode.go │ │ │ │ ├── enum.go │ │ │ │ ├── equal.go │ │ │ │ ├── extension.go │ │ │ │ ├── lazy.go │ │ │ │ ├── legacy_enum.go │ │ │ │ ├── legacy_export.go │ │ │ │ ├── legacy_extension.go │ │ │ │ ├── legacy_file.go │ │ │ │ ├── legacy_message.go │ │ │ │ ├── merge.go │ │ │ │ ├── merge_gen.go │ │ │ │ ├── message.go │ │ │ │ ├── message_opaque.go │ │ │ │ ├── message_opaque_gen.go │ │ │ │ ├── message_reflect.go │ │ │ │ ├── message_reflect_field.go │ │ │ │ ├── message_reflect_field_gen.go │ │ │ │ ├── message_reflect_gen.go │ │ │ │ ├── pointer_unsafe.go │ │ │ │ ├── pointer_unsafe_opaque.go │ │ │ │ ├── presence.go │ │ │ │ └── validate.go │ │ │ ├── order/ │ │ │ │ ├── order.go │ │ │ │ └── range.go │ │ │ ├── pragma/ │ │ │ │ └── pragma.go │ │ │ ├── protolazy/ │ │ │ │ ├── bufferreader.go │ │ │ │ ├── lazy.go │ │ │ │ └── pointer_unsafe.go │ │ │ ├── set/ │ │ │ │ └── ints.go │ │ │ ├── strs/ │ │ │ │ ├── strings.go │ │ │ │ └── strings_unsafe.go │ │ │ └── version/ │ │ │ └── version.go │ │ ├── proto/ │ │ │ ├── checkinit.go │ │ │ ├── decode.go │ │ │ ├── decode_gen.go │ │ │ ├── doc.go │ │ │ ├── encode.go │ │ │ ├── encode_gen.go │ │ │ ├── equal.go │ │ │ ├── extension.go │ │ │ ├── merge.go │ │ │ ├── messageset.go │ │ │ ├── proto.go │ │ │ ├── proto_methods.go │ │ │ ├── proto_reflect.go │ │ │ ├── reset.go │ │ │ ├── size.go │ │ │ ├── size_gen.go │ │ │ ├── wrapperopaque.go │ │ │ └── wrappers.go │ │ ├── reflect/ │ │ │ ├── protodesc/ │ │ │ │ ├── desc.go │ │ │ │ ├── desc_init.go │ │ │ │ ├── desc_resolve.go │ │ │ │ ├── desc_validate.go │ │ │ │ ├── editions.go │ │ │ │ └── proto.go │ │ │ ├── protoreflect/ │ │ │ │ ├── methods.go │ │ │ │ ├── proto.go │ │ │ │ ├── source.go │ │ │ │ ├── source_gen.go │ │ │ │ ├── type.go │ │ │ │ ├── value.go │ │ │ │ ├── value_equal.go │ │ │ │ ├── value_union.go │ │ │ │ └── value_unsafe.go │ │ │ └── protoregistry/ │ │ │ └── registry.go │ │ ├── runtime/ │ │ │ ├── protoiface/ │ │ │ │ ├── legacy.go │ │ │ │ └── methods.go │ │ │ └── protoimpl/ │ │ │ ├── impl.go │ │ │ └── version.go │ │ └── types/ │ │ ├── descriptorpb/ │ │ │ └── descriptor.pb.go │ │ ├── gofeaturespb/ │ │ │ └── go_features.pb.go │ │ └── known/ │ │ ├── anypb/ │ │ │ └── any.pb.go │ │ ├── durationpb/ │ │ │ └── duration.pb.go │ │ └── timestamppb/ │ │ └── timestamp.pb.go │ ├── gopkg.in/ │ │ └── yaml.v3/ │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── apic.go │ │ ├── decode.go │ │ ├── emitterc.go │ │ ├── encode.go │ │ ├── parserc.go │ │ ├── readerc.go │ │ ├── resolve.go │ │ ├── scannerc.go │ │ ├── sorter.go │ │ ├── writerc.go │ │ ├── yaml.go │ │ ├── yamlh.go │ │ └── yamlprivateh.go │ ├── modules.txt │ ├── sigs.k8s.io/ │ │ └── yaml/ │ │ ├── .gitignore │ │ ├── .travis.yml │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE │ │ ├── OWNERS │ │ ├── README.md │ │ ├── RELEASE.md │ │ ├── SECURITY_CONTACTS │ │ ├── code-of-conduct.md │ │ ├── fields.go │ │ ├── goyaml.v2/ │ │ │ ├── LICENSE │ │ │ ├── LICENSE.libyaml │ │ │ ├── NOTICE │ │ │ ├── OWNERS │ │ │ ├── README.md │ │ │ ├── apic.go │ │ │ ├── decode.go │ │ │ ├── emitterc.go │ │ │ ├── encode.go │ │ │ ├── parserc.go │ │ │ ├── readerc.go │ │ │ ├── resolve.go │ │ │ ├── scannerc.go │ │ │ ├── sorter.go │ │ │ ├── writerc.go │ │ │ ├── yaml.go │ │ │ ├── yamlh.go │ │ │ └── yamlprivateh.go │ │ ├── yaml.go │ │ └── yaml_go110.go │ └── tags.cncf.io/ │ └── container-device-interface/ │ ├── LICENSE │ ├── internal/ │ │ └── validation/ │ │ ├── k8s/ │ │ │ ├── objectmeta.go │ │ │ └── validation.go │ │ └── validate.go │ ├── pkg/ │ │ ├── cdi/ │ │ │ ├── annotations.go │ │ │ ├── cache.go │ │ │ ├── container-edits.go │ │ │ ├── container-edits_unix.go │ │ │ ├── container-edits_windows.go │ │ │ ├── default-cache.go │ │ │ ├── device.go │ │ │ ├── doc.go │ │ │ ├── oci.go │ │ │ ├── spec-dirs.go │ │ │ ├── spec.go │ │ │ ├── spec_linux.go │ │ │ └── spec_other.go │ │ └── parser/ │ │ └── parser.go │ └── specs-go/ │ ├── LICENSE │ ├── config.go │ └── version.go └── versions.mk
Copy disabled (too large)
Download .txt
Showing preview only (19,170K chars total). Download the full file to get everything.
SYMBOL INDEX (224624 symbols across 2308 files)
FILE: api/config/v1/cli.go
type ContainerCLIConfig (line 26) | type ContainerCLIConfig struct
method NormalizeLDConfigPath (line 52) | func (c *ContainerCLIConfig) NormalizeLDConfigPath() string {
type ldconfigPath (line 57) | type ldconfigPath
method assertValid (line 59) | func (p ldconfigPath) assertValid(allowContainerRelativePath bool) err...
method isHostRelative (line 69) | func (p ldconfigPath) isHostRelative() bool {
method normalize (line 76) | func (p ldconfigPath) normalize() ldconfigPath {
function NormalizeLDConfigPath (line 94) | func NormalizeLDConfigPath(path string) string {
FILE: api/config/v1/cli_test.go
function TestNormalizeLDConfigPath (line 27) | func TestNormalizeLDConfigPath(t *testing.T) {
FILE: api/config/v1/config.go
constant FilePathOverrideEnvVar (line 34) | FilePathOverrideEnvVar = "NVIDIA_CTK_CONFIG_FILE_PATH"
constant RelativeFilePath (line 35) | RelativeFilePath = "nvidia-container-runtime/config.toml"
constant configRootOverride (line 37) | configRootOverride = "XDG_CONFIG_HOME"
constant nvidiaCTKExecutable (line 39) | nvidiaCTKExecutable = "nvidia-ctk"
constant nvidiaCTKDefaultFilePath (line 40) | nvidiaCTKDefaultFilePath = "/usr/bin/nvidia-ctk"
constant nvidiaCDIHookDefaultFilePath (line 41) | nvidiaCDIHookDefaultFilePath = "/usr/bin/nvidia-cdi-hook"
constant nvidiaContainerRuntimeHookExecutable (line 43) | nvidiaContainerRuntimeHookExecutable = "nvidia-container-runtime-hook"
constant nvidiaContainerRuntimeHookDefaultPath (line 44) | nvidiaContainerRuntimeHookDefaultPath = "/usr/bin/nvidia-container-runti...
type Config (line 61) | type Config struct
method assertValid (line 143) | func (c *Config) assertValid() error {
function GetConfigFilePath (line 78) | func GetConfigFilePath() string {
function GetConfig (line 92) | func GetConfig() (*Config, error) {
function GetDefault (line 104) | func GetDefault() (*Config, error) {
function getLdConfigPathStub (line 154) | func getLdConfigPathStub() ldconfigPath {
function getUserGroup (line 158) | func getUserGroup() string {
function isSuse (line 166) | func isSuse() bool {
function ResolveNVIDIACTKPath (line 207) | func ResolveNVIDIACTKPath(logger logger.Interface, nvidiaCTKPath string)...
function ResolveNVIDIACDIHookPath (line 220) | func ResolveNVIDIACDIHookPath(logger logger.Interface, nvidiaCDIHookPath...
function ResolveNVIDIAContainerRuntimeHookPath (line 238) | func ResolveNVIDIAContainerRuntimeHookPath(logger logger.Interface, nvid...
function resolveWithDefault (line 250) | func resolveWithDefault(logger logger.Interface, label string, path stri...
FILE: api/config/v1/config_test.go
function TestGetConfigWithCustomConfig (line 30) | func TestGetConfigWithCustomConfig(t *testing.T) {
function TestGetConfigWithConfigFilePathOverride (line 47) | func TestGetConfigWithConfigFilePathOverride(t *testing.T) {
function TestGetConfig (line 64) | func TestGetConfig(t *testing.T) {
function TestAssertValid (line 399) | func TestAssertValid(t *testing.T) {
function setGetDistIDLikeForTest (line 452) | func setGetDistIDLikeForTest(ids []string) func() {
function setGetLdConfigPathForTest (line 467) | func setGetLdConfigPathForTest() func() {
FILE: api/config/v1/features.go
type features (line 20) | type features struct
type feature (line 55) | type feature
method IsEnabled (line 58) | func (f *feature) IsEnabled() bool {
FILE: api/config/v1/hook.go
type RuntimeHookConfig (line 20) | type RuntimeHookConfig struct
FILE: api/config/v1/runtime.go
type RuntimeConfig (line 22) | type RuntimeConfig struct
type modesConfig (line 33) | type modesConfig struct
type cdiModeConfig (line 40) | type cdiModeConfig struct
type jitCDIModeConfig (line 49) | type jitCDIModeConfig struct
type csvModeConfig (line 54) | type csvModeConfig struct
type legacyModeConfig (line 61) | type legacyModeConfig struct
type cudaCompatMode (line 67) | type cudaCompatMode
constant defaultCUDACompatMode (line 70) | defaultCUDACompatMode = CUDACompatModeLdconfig
constant CUDACompatModeDisabled (line 74) | CUDACompatModeDisabled = cudaCompatMode("disabled")
constant CUDACompatModeHook (line 79) | CUDACompatModeHook = cudaCompatMode("hook")
constant CUDACompatModeLdconfig (line 83) | CUDACompatModeLdconfig = cudaCompatMode("ldconfig")
constant CUDACompatModeMount (line 86) | CUDACompatModeMount = cudaCompatMode("mount")
FILE: api/config/v1/toml.go
type Toml (line 30) | type Toml struct
method Config (line 133) | func (t *Toml) Config() (*Config, error) {
method configNoOverrides (line 146) | func (t *Toml) configNoOverrides() (*Config, error) {
method Unmarshal (line 161) | func (t *Toml) Unmarshal(v interface{}) error {
method Save (line 166) | func (t *Toml) Save(w io.Writer) (int64, error) {
method contents (line 178) | func (t Toml) contents() ([]byte, error) {
method format (line 192) | func (t Toml) format(contents []byte) ([]byte, error) {
method Delete (line 200) | func (t *Toml) Delete(key string) error {
method Get (line 206) | func (t *Toml) Get(key string) interface{} {
method GetDefault (line 211) | func (t *Toml) GetDefault(key string, def interface{}) interface{} {
method Set (line 216) | func (t *Toml) Set(key string, value interface{}) {
method WriteTo (line 223) | func (t *Toml) WriteTo(w io.Writer) (int64, error) {
method commentDefaults (line 228) | func (t *Toml) commentDefaults() *Toml {
function TreeFromMap (line 37) | func TreeFromMap(m map[string]any) (*Toml, error) {
function fromTree (line 45) | func fromTree(t *toml.Tree) *Toml {
type options (line 49) | type options struct
method loadConfigToml (line 82) | func (o options) loadConfigToml() (*Toml, error) {
type Option (line 55) | type Option
function WithConfigFile (line 58) | func WithConfigFile(configFile string) Option {
function WithRequired (line 66) | func WithRequired(required bool) Option {
function New (line 73) | func New(opts ...Option) (*Toml, error) {
function defaultToml (line 105) | func defaultToml() (*Toml, error) {
function loadConfigTomlFrom (line 118) | func loadConfigTomlFrom(reader io.Reader) (*Toml, error) {
function shouldComment (line 258) | func shouldComment(key string, defaultValue interface{}, setTo interface...
FILE: api/config/v1/toml_test.go
function TestTomlSave (line 29) | func TestTomlSave(t *testing.T) {
function TestFormat (line 161) | func TestFormat(t *testing.T) {
function TestGetFormattedConfig (line 202) | func TestGetFormattedConfig(t *testing.T) {
function TestTomlContents (line 218) | func TestTomlContents(t *testing.T) {
function TestConfigFromToml (line 259) | func TestConfigFromToml(t *testing.T) {
function createEmpty (line 329) | func createEmpty() *Toml {
FILE: api/config/v1/toolkit-cli.go
type CTKConfig (line 20) | type CTKConfig struct
FILE: cmd/nvidia-cdi-hook/chmod/chmod.go
type command (line 35) | type command struct
method build (line 55) | func (m command) build() *cli.Command {
method validateFlags (line 90) | func (m command) validateFlags(_ *cli.Command, cfg *config) error {
method run (line 110) | func (m command) run(_ *cli.Command, cfg *config) error {
method getPaths (line 143) | func (m command) getPaths(root string, paths []string, desiredMode fs....
type config (line 39) | type config struct
function NewCommand (line 47) | func NewCommand(logger logger.Interface) *cli.Command {
FILE: cmd/nvidia-cdi-hook/commands/commands.go
function ConfigureCDIHookCommand (line 37) | func ConfigureCDIHookCommand(logger logger.Interface, base *cli.Command)...
function issueUnsupportedHookWarning (line 110) | func issueUnsupportedHookWarning(logger logger.Interface, c *cli.Command...
FILE: cmd/nvidia-cdi-hook/create-symlinks/create-symlinks.go
type command (line 35) | type command struct
method build (line 53) | func (m command) build() *cli.Command {
method run (line 81) | func (m command) run(_ *cli.Command, cfg *config) error {
method createLink (line 124) | func (m command) createLink(containerRoot string, targetPath string, l...
type config (line 39) | type config struct
function NewCommand (line 45) | func NewCommand(logger logger.Interface) *cli.Command {
function linkExists (line 160) | func linkExists(target string, link string) (bool, error) {
FILE: cmd/nvidia-cdi-hook/create-symlinks/create-symlinks_test.go
function TestLinkExist (line 15) | func TestLinkExist(t *testing.T) {
function TestCreateLink (line 46) | func TestCreateLink(t *testing.T) {
function TestCreateLinkRelativePath (line 160) | func TestCreateLinkRelativePath(t *testing.T) {
function TestCreateLinkAbsolutePath (line 177) | func TestCreateLinkAbsolutePath(t *testing.T) {
function TestCreateLinkAlreadyExists (line 194) | func TestCreateLinkAlreadyExists(t *testing.T) {
function TestCreateLinkOutOfBounds (line 234) | func TestCreateLinkOutOfBounds(t *testing.T) {
type dirOrLink (line 266) | type dirOrLink struct
function makeFs (line 271) | func makeFs(tmpdir string, fs ...dirOrLink) error {
function getTestCommand (line 292) | func getTestCommand() *command {
FILE: cmd/nvidia-cdi-hook/cudacompat/container-root.go
type containerRoot (line 27) | type containerRoot
method hasPath (line 30) | func (r containerRoot) hasPath(path string) bool {
method globFiles (line 43) | func (r containerRoot) globFiles(pattern string) ([]string, error) {
method resolve (line 73) | func (r containerRoot) resolve(path string) (string, error) {
FILE: cmd/nvidia-cdi-hook/cudacompat/cuda-elf-header.go
type compatElfHeader (line 32) | type compatElfHeader struct
method UseCompat (line 123) | func (h *compatElfHeader) UseCompat(hostCUDAVersion string) bool {
type elf32_Nhdr (line 43) | type elf32_Nhdr struct
method sizeof (line 49) | func (h elf32_Nhdr) sizeof() int {
function GetCUDACompatElfHeader (line 53) | func GetCUDACompatElfHeader(libraryPath string) (*compatElfHeader, error) {
function alignUp (line 98) | func alignUp[T uint32 | uint64, S uint64](size T, to S) int {
function trim (line 102) | func trim(data []byte, from int, len int) []byte {
function getCUDAFwdCompatibilitySection (line 106) | func getCUDAFwdCompatibilitySection(lib *elf.File) *elf.Section {
type cudaVersion (line 131) | type cudaVersion
method UseCompat (line 135) | func (containerVersion cudaVersion) UseCompat(hostVersion string) bool {
function normalizeVersion (line 143) | func normalizeVersion[T string | cudaVersion](v T) string {
FILE: cmd/nvidia-cdi-hook/cudacompat/cuda-elf-header_test.go
function TestGetCUDACompatElfHeader (line 29) | func TestGetCUDACompatElfHeader(t *testing.T) {
FILE: cmd/nvidia-cdi-hook/cudacompat/cudacompat.go
constant defaultCudaCompatPath (line 34) | defaultCudaCompatPath = "/usr/local/cuda/compat"
constant cudaCompatLdsoconfdFilenamePattern (line 39) | cudaCompatLdsoconfdFilenamePattern = "00-compat-*.conf"
type command (line 42) | type command struct
method build (line 64) | func (m command) build() *cli.Command {
method validateFlags (line 107) | func (m command) validateFlags(_ *cli.Command, _ *options) error {
method run (line 111) | func (m command) run(_ *cli.Command, o *options) error {
method getContainerForwardCompatDir (line 139) | func (m command) getContainerForwardCompatDir(containerRoot containerR...
method useCompatLibraries (line 179) | func (m command) useCompatLibraries(libcudaCompatPath string, hostDriv...
method createLdsoconfdFile (line 221) | func (m command) createLdsoconfdFile(in containerRoot, pattern string,...
type options (line 46) | type options struct
function NewCommand (line 56) | func NewCommand(logger logger.Interface) *cli.Command {
function extractMajorVersion (line 264) | func extractMajorVersion(version string) (int, error) {
FILE: cmd/nvidia-cdi-hook/cudacompat/cudacompat_test.go
function TestCompatLibs (line 29) | func TestCompatLibs(t *testing.T) {
function TestUpdateLdconfig (line 175) | func TestUpdateLdconfig(t *testing.T) {
FILE: cmd/nvidia-cdi-hook/disable-device-node-modification/disable-device-node-modification.go
constant nvidiaDriverParamsPath (line 37) | nvidiaDriverParamsPath = "/proc/driver/nvidia/params"
type options (line 40) | type options struct
function NewCommand (line 45) | func NewCommand(logger logger.Interface) *cli.Command {
function validateFlags (line 70) | func validateFlags(_ *cli.Command, _ *options) error {
function run (line 74) | func run(_ context.Context, _ *cli.Command, cfg *options) error {
function getModifiedNVIDIAParamsContents (line 102) | func getModifiedNVIDIAParamsContents() ([]byte, error) {
function getModifiedParamsFileContentsFromReader (line 121) | func getModifiedParamsFileContentsFromReader(r io.Reader) ([]byte, error) {
FILE: cmd/nvidia-cdi-hook/disable-device-node-modification/disable-device-node-modification_test.go
function TestGetModifiedParamsFileContentsFromReader (line 27) | func TestGetModifiedParamsFileContentsFromReader(t *testing.T) {
FILE: cmd/nvidia-cdi-hook/disable-device-node-modification/params_linux.go
function createParamsFileInContainer (line 32) | func createParamsFileInContainer(containerRoot *os.Root, contents []byte...
function createTmpFs (line 82) | func createTmpFs(target string, size int) error {
FILE: cmd/nvidia-cdi-hook/disable-device-node-modification/params_other.go
function createParamsFileInContainer (line 27) | func createParamsFileInContainer(containerRootDirPath *os.Root, contents...
FILE: cmd/nvidia-cdi-hook/main.go
type options (line 34) | type options struct
function main (line 41) | func main() {
FILE: cmd/nvidia-cdi-hook/update-ldcache/update-ldcache.go
constant reexecUpdateLdCacheCommandName (line 35) | reexecUpdateLdCacheCommandName = "reexec-update-ldcache"
type command (line 38) | type command struct
method build (line 64) | func (m command) build() *cli.Command {
method validateFlags (line 100) | func (m command) validateFlags(_ *cli.Command, cfg *options) error {
method run (line 107) | func (m command) run(_ *cli.Command, cfg *options) error {
type options (line 42) | type options struct
function init (line 48) | func init() {
function NewCommand (line 56) | func NewCommand(logger logger.Interface) *cli.Command {
function updateLdCacheHandler (line 131) | func updateLdCacheHandler() {
function updateLdCache (line 143) | func updateLdCache(args []string) error {
FILE: cmd/nvidia-container-runtime-hook/capabilities.go
function capabilityToCLI (line 7) | func capabilityToCLI(cap string) string {
FILE: cmd/nvidia-container-runtime-hook/container_config.go
type nvidiaConfig (line 16) | type nvidiaConfig struct
type containerConfig (line 28) | type containerConfig struct
type Root (line 37) | type Root struct
type Process (line 43) | type Process struct
type LinuxCapabilities (line 50) | type LinuxCapabilities struct
type Spec (line 61) | type Spec struct
method GetCapabilities (line 102) | func (s *Spec) GetCapabilities() []string {
type HookState (line 69) | type HookState struct
function loadSpec (line 80) | func loadSpec(path string) (spec *Spec) {
function isPrivileged (line 131) | func isPrivileged(s *Spec) bool {
function getMigConfigDevices (line 135) | func getMigConfigDevices(i image.CUDA) *string {
function getMigMonitorDevices (line 139) | func getMigMonitorDevices(i image.CUDA) *string {
function getMigDevices (line 143) | func getMigDevices(image image.CUDA, envvar string) *string {
method getDriverCapabilities (line 151) | func (hookConfig *hookConfig) getDriverCapabilities(cudaImage image.CUDA...
method getNvidiaConfig (line 177) | func (hookConfig *hookConfig) getNvidiaConfig(image image.CUDA, privileg...
method getContainerConfig (line 219) | func (hookConfig *hookConfig) getContainerConfig() (config *containerCon...
FILE: cmd/nvidia-container-runtime-hook/container_config_test.go
function TestGetNvidiaConfig (line 12) | func TestGetNvidiaConfig(t *testing.T) {
function TestGetDriverCapabilities (line 522) | func TestGetDriverCapabilities(t *testing.T) {
FILE: cmd/nvidia-container-runtime-hook/hook_config.go
type hookConfig (line 17) | type hookConfig struct
method getConfigOption (line 71) | func (c *hookConfig) getConfigOption(fieldName string) string {
method getSwarmResource (line 85) | func (c *hookConfig) getSwarmResource() string {
method nvidiaContainerCliCUDACompatModeFlags (line 94) | func (c *hookConfig) nvidiaContainerCliCUDACompatModeFlags() []string {
method assertModeIsLegacy (line 115) | func (c *hookConfig) assertModeIsLegacy() error {
function loadConfig (line 24) | func loadConfig() (*config.Config, error) {
function getConfigFilePath (line 38) | func getConfigFilePath() (string, bool) {
function getHookConfig (line 48) | func getHookConfig() (*hookConfig, error) {
FILE: cmd/nvidia-container-runtime-hook/hook_config_test.go
function TestGetHookConfig (line 29) | func TestGetHookConfig(t *testing.T) {
FILE: cmd/nvidia-container-runtime-hook/hook_test.go
function TestIsPrivileged (line 10) | func TestIsPrivileged(t *testing.T) {
FILE: cmd/nvidia-container-runtime-hook/main.go
function exit (line 28) | func exit() {
function getCLIPath (line 41) | func getCLIPath(config config.ContainerCLIConfig) string {
function getRootfsPath (line 58) | func getRootfsPath(config *containerConfig) string {
function doPrestart (line 66) | func doPrestart() {
function usage (line 158) | func usage() {
function main (line 167) | func main() {
type logInterceptor (line 197) | type logInterceptor struct
method Infof (line 201) | func (l *logInterceptor) Infof(format string, args ...interface{}) {
FILE: cmd/nvidia-container-runtime.cdi/main.go
function main (line 25) | func main() {
FILE: cmd/nvidia-container-runtime.legacy/main.go
function main (line 25) | func main() {
FILE: cmd/nvidia-container-runtime/main.go
function main (line 9) | func main() {
FILE: cmd/nvidia-container-runtime/main_test.go
constant nvidiaRuntime (line 22) | nvidiaRuntime = "nvidia-container-runtime"
constant nvidiaHook (line 23) | nvidiaHook = "nvidia-container-runtime-hook"
constant bundlePathSuffix (line 24) | bundlePathSuffix = "tests/output/bundle/"
constant specFile (line 25) | specFile = "config.json"
constant unmodifiedSpecFileSuffix (line 26) | unmodifiedSpecFileSuffix = "tests/input/test_spec.json"
constant runcExecutableName (line 30) | runcExecutableName = "runc"
type testConfig (line 33) | type testConfig struct
method getRuntimeSpec (line 192) | func (c testConfig) getRuntimeSpec() (specs.Spec, error) {
method bundlePath (line 221) | func (c testConfig) bundlePath() string {
method specFilePath (line 225) | func (c testConfig) specFilePath() string {
method unmodifiedSpecFile (line 229) | func (c testConfig) unmodifiedSpecFile() string {
method generateNewRuntimeSpec (line 233) | func (c testConfig) generateNewRuntimeSpec() error {
function TestMain (line 40) | func TestMain(m *testing.M) {
function TestBadInput (line 83) | func TestBadInput(t *testing.T) {
function TestGoodInput (line 101) | func TestGoodInput(t *testing.T) {
function TestDuplicateHook (line 131) | func TestDuplicateHook(t *testing.T) {
function addNVIDIAHook (line 177) | func addNVIDIAHook(spec *specs.Spec) error {
FILE: cmd/nvidia-ctk-installer/container/container.go
constant restartModeNone (line 34) | restartModeNone = "none"
constant restartModeSignal (line 35) | restartModeSignal = "signal"
constant restartModeSystemd (line 36) | restartModeSystemd = "systemd"
type Options (line 40) | type Options struct
method Configure (line 63) | func (o Options) Configure(cfg engine.Interface) error {
method Unconfigure (line 72) | func (o Options) Unconfigure(cfg engine.Interface) error {
method Flush (line 97) | func (o Options) Flush(cfg engine.Interface) error {
method UpdateConfig (line 114) | func (o Options) UpdateConfig(cfg engine.Interface) error {
method RevertConfig (line 135) | func (o Options) RevertConfig(cfg engine.Interface) error {
method Restart (line 152) | func (o Options) Restart(service string, withSignal func(string) error...
method SystemdRestart (line 167) | func (o Options) SystemdRestart(service string) error {
method GetConfigLoaders (line 195) | func (o Options) GetConfigLoaders(commandSourceFunc func(string, strin...
FILE: cmd/nvidia-ctk-installer/container/operator/operator.go
constant defaultRuntimeName (line 22) | defaultRuntimeName = "nvidia"
type Runtime (line 27) | type Runtime struct
type Runtimes (line 34) | type Runtimes
method DefaultRuntimeName (line 64) | func (r Runtimes) DefaultRuntimeName() string {
method add (line 74) | func (r Runtimes) add(runtime Runtime) {
type config (line 36) | type config struct
method nvidiaRuntime (line 80) | func (c config) nvidiaRuntime() Runtime {
method modeRuntime (line 93) | func (c config) modeRuntime(mode string) Runtime {
method newRuntime (line 98) | func (c config) newRuntime(name string, binary string) Runtime {
function GetRuntimes (line 43) | func GetRuntimes(opts ...Option) Runtimes {
type Option (line 107) | type Option
function WithRoot (line 110) | func WithRoot(root string) Option {
function WithNvidiaRuntimeName (line 117) | func WithNvidiaRuntimeName(name string) Option {
function WithSetAsDefault (line 124) | func WithSetAsDefault(set bool) Option {
FILE: cmd/nvidia-ctk-installer/container/operator/operator_test.go
function TestOptions (line 26) | func TestOptions(t *testing.T) {
FILE: cmd/nvidia-ctk-installer/container/runtime/containerd/config_test.go
function TestContainerdConfigLifecycle (line 32) | func TestContainerdConfigLifecycle(t *testing.T) {
FILE: cmd/nvidia-ctk-installer/container/runtime/containerd/containerd.go
constant Name (line 34) | Name = "containerd"
constant DefaultConfig (line 36) | DefaultConfig = "/etc/containerd/config.toml"
constant DefaultDropInConfig (line 37) | DefaultDropInConfig = "/etc/containerd/conf.d/99-nvidia.toml"
constant DefaultSocket (line 39) | DefaultSocket = "/run/containerd/containerd.sock"
constant DefaultRestartMode (line 40) | DefaultRestartMode = "signal"
constant defaultRuntimeType (line 42) | defaultRuntimeType = "io.containerd.runc.v2"
type Options (line 46) | type Options struct
method containerAnnotationsFromCDIPrefixes (line 144) | func (o *Options) containerAnnotationsFromCDIPrefixes() []string {
method runtimeConfigOverride (line 153) | func (o *Options) runtimeConfigOverride() (map[string]interface{}, err...
function Flags (line 55) | func Flags(opts *Options) []cli.Flag {
function Setup (line 91) | func Setup(c *cli.Command, o *container.Options, co *Options) error {
function Cleanup (line 115) | func Cleanup(c *cli.Command, o *container.Options, co *Options) error {
function RestartContainerd (line 139) | func RestartContainerd(o *container.Options) error {
function GetLowlevelRuntimePaths (line 166) | func GetLowlevelRuntimePaths(o *container.Options, co *Options) ([]strin...
function getRuntimeConfig (line 174) | func getRuntimeConfig(o *container.Options, co *Options) (engine.Interfa...
FILE: cmd/nvidia-ctk-installer/container/runtime/containerd/containerd_linux.go
constant reloadBackoff (line 29) | reloadBackoff = 5 * time.Second
constant maxReloadAttempts (line 30) | maxReloadAttempts = 6
constant socketMessageToGetPID (line 32) | socketMessageToGetPID = ""
function SignalContainerd (line 36) | func SignalContainerd(socket string) error {
FILE: cmd/nvidia-ctk-installer/container/runtime/containerd/containerd_other.go
function SignalContainerd (line 26) | func SignalContainerd(socket string) error {
FILE: cmd/nvidia-ctk-installer/container/runtime/containerd/containerd_test.go
function TestRuntimeOptions (line 25) | func TestRuntimeOptions(t *testing.T) {
FILE: cmd/nvidia-ctk-installer/container/runtime/crio/config_test.go
function TestCrioConfigLifecycle (line 32) | func TestCrioConfigLifecycle(t *testing.T) {
FILE: cmd/nvidia-ctk-installer/container/runtime/crio/crio.go
constant Name (line 37) | Name = "crio"
constant defaultConfigMode (line 39) | defaultConfigMode = configModeConfig
constant configModeConfig (line 41) | configModeConfig = "config"
constant configModeHook (line 42) | configModeHook = "hook"
constant defaultHooksDir (line 45) | defaultHooksDir = "/usr/share/containers/oci/hooks.d"
constant defaultHookFilename (line 46) | defaultHookFilename = "oci-nvidia-hook.json"
constant DefaultConfig (line 49) | DefaultConfig = "/etc/crio/crio.conf"
constant DefaultDropInConfig (line 50) | DefaultDropInConfig = "/etc/crio/conf.d/99-nvidia.toml"
constant DefaultSocket (line 52) | DefaultSocket = "/var/run/crio/crio.sock"
constant DefaultRestartMode (line 53) | DefaultRestartMode = "systemd"
type Options (line 57) | type Options struct
method Validate (line 95) | func (opts *Options) Validate(logger logger.Interface, _ *cli.Command)...
function Flags (line 65) | func Flags(opts *Options) []cli.Flag {
function Setup (line 106) | func Setup(c *cli.Command, o *container.Options, co *Options) error {
function setupHook (line 120) | func setupHook(o *container.Options, co *Options) error {
function setupConfig (line 133) | func setupConfig(o *container.Options) error {
function Cleanup (line 155) | func Cleanup(c *cli.Command, o *container.Options, co *Options) error {
function cleanupHook (line 169) | func cleanupHook(co *Options) error {
function cleanupConfig (line 182) | func cleanupConfig(o *container.Options) error {
function RestartCrio (line 212) | func RestartCrio(o *container.Options) error {
function GetLowlevelRuntimePaths (line 216) | func GetLowlevelRuntimePaths(o *container.Options) ([]string, error) {
function getRuntimeConfig (line 224) | func getRuntimeConfig(o *container.Options, loadDestinationConfig bool) ...
FILE: cmd/nvidia-ctk-installer/container/runtime/docker/docker.go
constant Name (line 31) | Name = "docker"
constant DefaultConfig (line 33) | DefaultConfig = "/etc/docker/daemon.json"
constant DefaultSocket (line 34) | DefaultSocket = "/var/run/docker.sock"
constant DefaultRestartMode (line 35) | DefaultRestartMode = "signal"
type Options (line 38) | type Options struct
function Flags (line 40) | func Flags(opts *Options) []cli.Flag {
function Setup (line 45) | func Setup(c *cli.Command, o *container.Options) error {
function Cleanup (line 69) | func Cleanup(c *cli.Command, o *container.Options) error {
function RestartDocker (line 93) | func RestartDocker(o *container.Options) error {
function GetLowlevelRuntimePaths (line 97) | func GetLowlevelRuntimePaths(o *container.Options) ([]string, error) {
function getRuntimeConfig (line 107) | func getRuntimeConfig(o *container.Options) (engine.Interface, error) {
FILE: cmd/nvidia-ctk-installer/container/runtime/docker/docker_linux.go
constant reloadBackoff (line 29) | reloadBackoff = 5 * time.Second
constant maxReloadAttempts (line 30) | maxReloadAttempts = 6
constant socketMessageToGetPID (line 32) | socketMessageToGetPID = "GET /info HTTP/1.0\r\n\r\n"
function SignalDocker (line 36) | func SignalDocker(socket string) error {
FILE: cmd/nvidia-ctk-installer/container/runtime/docker/docker_other.go
function SignalDocker (line 26) | func SignalDocker(socket string) error {
FILE: cmd/nvidia-ctk-installer/container/runtime/docker/docker_test.go
function TestUpdateConfigDefaultRuntime (line 29) | func TestUpdateConfigDefaultRuntime(t *testing.T) {
function TestUpdateConfig (line 71) | func TestUpdateConfig(t *testing.T) {
function TestRevertConfig (line 258) | func TestRevertConfig(t *testing.T) {
FILE: cmd/nvidia-ctk-installer/container/runtime/nri/logger.go
type toNriLogger (line 9) | type toNriLogger struct
method Debugf (line 13) | func (l toNriLogger) Debugf(_ context.Context, fmt string, args ...int...
method Errorf (line 17) | func (l toNriLogger) Errorf(_ context.Context, fmt string, args ...int...
method Infof (line 21) | func (l toNriLogger) Infof(_ context.Context, fmt string, args ...inte...
method Warnf (line 25) | func (l toNriLogger) Warnf(_ context.Context, fmt string, args ...inte...
FILE: cmd/nvidia-ctk-installer/container/runtime/nri/plugin.go
constant nriCDIAnnotationDomain (line 39) | nriCDIAnnotationDomain = "nvidia.cdi.k8s.io"
type Plugin (line 42) | type Plugin struct
method CreateContainer (line 60) | func (p *Plugin) CreateContainer(_ context.Context, pod *api.PodSandbo...
method injectCDIDevices (line 70) | func (p *Plugin) injectCDIDevices(pod *api.PodSandbox, ctr *api.Contai...
method parseCDIDevices (line 93) | func (p *Plugin) parseCDIDevices(pod *api.PodSandbox, key, container s...
method Start (line 117) | func (p *Plugin) Start(ctx context.Context, nriSocketPath, nriPluginId...
method Stop (line 145) | func (p *Plugin) Stop() {
function NewPlugin (line 51) | func NewPlugin(ctx context.Context, logger logger.Interface, namespace s...
function containerName (line 109) | func containerName(pod *api.PodSandbox, container *api.Container) string {
FILE: cmd/nvidia-ctk-installer/container/runtime/runtime.go
constant defaultSetAsDefault (line 33) | defaultSetAsDefault = true
constant defaultRuntimeName (line 35) | defaultRuntimeName = "nvidia"
constant defaultHostRootMount (line 36) | defaultHostRootMount = "/host"
constant runtimeSpecificDefault (line 38) | runtimeSpecificDefault = "RUNTIME_SPECIFIC_DEFAULT"
type Options (line 41) | type Options struct
method Validate (line 140) | func (opts *Options) Validate(logger logger.Interface, c *cli.Command,...
function Flags (line 48) | func Flags(opts *Options) []cli.Flag {
type Configurer (line 224) | type Configurer interface
type runtime (line 230) | type runtime
method Setup (line 241) | func (r runtime) Setup(c *cli.Command, opts *Options) error {
method Cleanup (line 254) | func (r runtime) Cleanup(c *cli.Command, opts *Options) error {
method GetLowlevelRuntimePaths (line 267) | func (r runtime) GetLowlevelRuntimePaths(opts *Options) ([]string, err...
type noopRuntimeConfigurer (line 231) | type noopRuntimeConfigurer struct
method Cleanup (line 280) | func (r noopRuntimeConfigurer) Cleanup(_ *cli.Command, _ *Options) err...
method GetLowlevelRuntimePaths (line 284) | func (r noopRuntimeConfigurer) GetLowlevelRuntimePaths(_ *Options) ([]...
method Setup (line 288) | func (r noopRuntimeConfigurer) Setup(_ *cli.Command, _ *Options) error {
function NewConfigurer (line 234) | func NewConfigurer(name string, noConfigureRuntime bool, nriEnabled bool...
FILE: cmd/nvidia-ctk-installer/main.go
constant toolkitPidFilename (line 25) | toolkitPidFilename = "toolkit.pid"
constant defaultPidFile (line 26) | defaultPidFile = "/run/nvidia/toolkit/" + toolkitPidFilename
constant defaultToolkitInstallDir (line 28) | defaultToolkitInstallDir = "/usr/local/nvidia"
constant toolkitSubDir (line 29) | toolkitSubDir = "toolkit"
constant defaultRuntime (line 31) | defaultRuntime = "docker"
constant defaultNRIPluginIdx (line 33) | defaultNRIPluginIdx uint = 10
type options (line 43) | type options struct
method toolkitRoot (line 65) | func (o options) toolkitRoot() string {
function main (line 69) | func main() {
type app (line 84) | type app struct
method build (line 98) | func (a app) build() *cli.Command {
method Before (line 220) | func (a *app) Before(c *cli.Command, o *options) error {
method validateFlags (line 241) | func (a *app) validateFlags(c *cli.Command, o *options) error {
method Run (line 267) | func (a *app) Run(ctx context.Context, c *cli.Command, o *options) err...
method initialize (line 321) | func (a *app) initialize(pidFile string) error {
method waitForSignal (line 365) | func (a *app) waitForSignal() error {
method startNRIPluginServer (line 372) | func (a *app) startNRIPluginServer(ctx context.Context, opts *options)...
method shutdown (line 403) | func (a *app) shutdown(pidFile string) {
method resolveSourceRoot (line 412) | func (a *app) resolveSourceRoot(hostRoot string, packageType string) (...
method resolvePackageType (line 427) | func (a *app) resolvePackageType(hostRoot string, packageType string) ...
function NewApp (line 91) | func NewApp(logger *logrus.Logger) *cli.Command {
FILE: cmd/nvidia-ctk-installer/main_test.go
function TestApp (line 33) | func TestApp(t *testing.T) {
FILE: cmd/nvidia-ctk-installer/toolkit/installer/artifact-root.go
type artifactRoot (line 30) | type artifactRoot struct
method findLibrary (line 63) | func (r *artifactRoot) findLibrary(name string) (string, error) {
method findExecutable (line 75) | func (r *artifactRoot) findExecutable(name string) (string, error) {
function newArtifactRoot (line 36) | func newArtifactRoot(logger logger.Interface, rootDirectoryPath string) ...
FILE: cmd/nvidia-ctk-installer/toolkit/installer/directory.go
type createDirectory (line 27) | type createDirectory struct
method Install (line 37) | func (d *createDirectory) Install(dir string) error {
method createDirectory (line 31) | func (t *ToolkitInstaller) createDirectory() Installer {
FILE: cmd/nvidia-ctk-installer/toolkit/installer/executables.go
type executable (line 34) | type executable struct
method collectExecutables (line 41) | func (t *ToolkitInstaller) collectExecutables(destDir string) ([]Install...
type wrapper (line 127) | type wrapper struct
method Install (line 140) | func (w *wrapper) Install(destDir string) error {
type render (line 135) | type render struct
method render (line 160) | func (w *render) render() (io.Reader, error) {
FILE: cmd/nvidia-ctk-installer/toolkit/installer/executables_test.go
function TestWrapperRender (line 27) | func TestWrapperRender(t *testing.T) {
FILE: cmd/nvidia-ctk-installer/toolkit/installer/file-installer_mock.go
type fileInstallerMock (line 37) | type fileInstallerMock struct
method installContent (line 79) | func (mock *fileInstallerMock) installContent(reader io.Reader, s stri...
method installContentCalls (line 102) | func (mock *fileInstallerMock) installContentCalls() []struct {
method installFile (line 119) | func (mock *fileInstallerMock) installFile(s1 string, s2 string) (os.F...
method installFileCalls (line 140) | func (mock *fileInstallerMock) installFileCalls() []struct {
method installSymlink (line 155) | func (mock *fileInstallerMock) installSymlink(s1 string, s2 string) er...
method installSymlinkCalls (line 176) | func (mock *fileInstallerMock) installSymlinkCalls() []struct {
FILE: cmd/nvidia-ctk-installer/toolkit/installer/installer.go
type Installer (line 32) | type Installer interface
type ToolkitInstaller (line 36) | type ToolkitInstaller struct
method Install (line 78) | func (t *ToolkitInstaller) Install(destDir string) error {
method ConfigFilePath (line 103) | func (t *ToolkitInstaller) ConfigFilePath(destDir string) string {
function New (line 51) | func New(opts ...Option) (*ToolkitInstaller, error) {
type symlink (line 108) | type symlink struct
method Install (line 113) | func (s symlink) Install(destDir string) error {
type fileInstaller (line 119) | type fileInstaller interface
function installSymlinkStub (line 127) | func installSymlinkStub(target string, link string) error {
function installFileStub (line 137) | func installFileStub(src string, dest string) (os.FileMode, error) {
function installContentStub (line 158) | func installContentStub(content io.Reader, dest string, mode fs.FileMode...
FILE: cmd/nvidia-ctk-installer/toolkit/installer/installer_mock.go
type InstallerMock (line 29) | type InstallerMock struct
method Install (line 45) | func (mock *InstallerMock) Install(s string) error {
method InstallCalls (line 64) | func (mock *InstallerMock) InstallCalls() []struct {
FILE: cmd/nvidia-ctk-installer/toolkit/installer/installer_test.go
function TestToolkitInstaller (line 35) | func TestToolkitInstaller(t *testing.T) {
FILE: cmd/nvidia-ctk-installer/toolkit/installer/libraries.go
method collectLibraries (line 31) | func (t *ToolkitInstaller) collectLibraries() ([]Installer, error) {
type library (line 64) | type library
method Install (line 68) | func (l library) Install(destinationDir string) error {
FILE: cmd/nvidia-ctk-installer/toolkit/installer/options.go
type Option (line 22) | type Option
function WithLogger (line 24) | func WithLogger(logger logger.Interface) Option {
function WithArtifactRoot (line 30) | func WithArtifactRoot(artifactRoot *artifactRoot) Option {
function WithIgnoreErrors (line 36) | func WithIgnoreErrors(ignoreErrors bool) Option {
function WithSourceRoot (line 43) | func WithSourceRoot(sourceRoot string) Option {
function WithDefaultRuntimeExecutablePath (line 49) | func WithDefaultRuntimeExecutablePath(path string) Option {
FILE: cmd/nvidia-ctk-installer/toolkit/options.go
type Option (line 22) | type Option
function WithLogger (line 24) | func WithLogger(logger logger.Interface) Option {
function WithToolkitRoot (line 30) | func WithToolkitRoot(toolkitRoot string) Option {
function WithSourceRoot (line 36) | func WithSourceRoot(sourceRoot string) Option {
FILE: cmd/nvidia-ctk-installer/toolkit/toolkit.go
constant DefaultNvidiaDriverRoot (line 40) | DefaultNvidiaDriverRoot = "/run/nvidia/driver"
type cdiOptions (line 43) | type cdiOptions struct
type Options (line 51) | type Options struct
function Flags (line 83) | func Flags(opts *Options) []cli.Flag {
type Installer (line 216) | type Installer struct
method ValidateOptions (line 239) | func (t *Installer) ValidateOptions(opts *Options) error {
method Install (line 285) | func (t *Installer) Install(cli *cli.Command, opts *Options, runtime s...
method installToolkitConfig (line 362) | func (t *Installer) installToolkitConfig(c *cli.Command, opts *Options...
method createDirectories (line 471) | func (t *Installer) createDirectories(dir ...string) error {
method createDeviceNodes (line 482) | func (t *Installer) createDeviceNodes(opts *Options) error {
method generateCDISpec (line 509) | func (t *Installer) generateCDISpec(opts *Options, nvidiaCDIHookPath s...
function NewInstaller (line 225) | func NewInstaller(opts ...Option) *Installer {
FILE: cmd/nvidia-ctk-installer/toolkit/toolkit_test.go
function TestInstall (line 36) | func TestInstall(t *testing.T) {
function requireWrappedExecutable (line 216) | func requireWrappedExecutable(t *testing.T, toolkitRoot string, expected...
function requireExecutable (line 221) | func requireExecutable(t *testing.T, toolkitRoot string, expectedExecuta...
function requireSymlink (line 230) | func requireSymlink(t *testing.T, toolkitRoot string, expectedLink strin...
FILE: cmd/nvidia-ctk/cdi/cdi.go
type command (line 28) | type command struct
method build (line 43) | func (m command) build() *cli.Command {
function NewCommand (line 34) | func NewCommand(logger logger.Interface, configFilePath *string) *cli.Co...
FILE: cmd/nvidia-ctk/cdi/generate/config.go
function New (line 31) | func New(config *string) *configAsValueSource {
type configAsValueSource (line 39) | type configAsValueSource struct
method ValueFrom (line 47) | func (c *configAsValueSource) ValueFrom(key string) cli.ValueSource {
method Get (line 54) | func (c *configAsValueSource) Get(key string) interface{} {
method loadFromConfig (line 73) | func (c *configAsValueSource) loadFromConfig() error {
type configValueLookup (line 94) | type configValueLookup struct
method Lookup (line 100) | func (c *configValueLookup) Lookup() (string, bool) {
method GoString (line 112) | func (c *configValueLookup) GoString() string {
method String (line 117) | func (c *configValueLookup) String() string {
FILE: cmd/nvidia-ctk/cdi/generate/generate.go
constant allDeviceName (line 44) | allDeviceName = "all"
type command (line 47) | type command struct
method build (line 95) | func (m command) build() *cli.Command {
method validateFlags (line 266) | func (m command) validateFlags(c *cli.Command, opts *options) error {
method run (line 318) | func (m command) run(opts *options) error {
method generateSpecs (line 374) | func (m command) generateSpecs(opts *options) ([]generatedSpecs, error) {
type options (line 53) | type options struct
function NewCommand (line 86) | func NewCommand(logger logger.Interface, configFilePath *string) *cli.Co...
function formatFromFilename (line 335) | func formatFromFilename(filename string) string {
type generatedSpecs (line 347) | type generatedSpecs struct
method Save (line 352) | func (g *generatedSpecs) Save(filename string) error {
method updateFilename (line 366) | func (g generatedSpecs) updateFilename(filename string) string {
type deviceSpecs (line 482) | type deviceSpecs
method splitOnAnnotation (line 484) | func (d deviceSpecs) splitOnAnnotation(key string) map[string][]specs....
FILE: cmd/nvidia-ctk/cdi/generate/generate_test.go
function TestGenerateSpec (line 36) | func TestGenerateSpec(t *testing.T) {
function TestSplitOnAnnotation (line 525) | func TestSplitOnAnnotation(t *testing.T) {
FILE: cmd/nvidia-ctk/cdi/list/list.go
type command (line 30) | type command struct
method build (line 47) | func (m command) build() *cli.Command {
method validateFlags (line 74) | func (m command) validateFlags(cfg *config) error {
method run (line 81) | func (m command) run(cfg *config) error {
type config (line 34) | type config struct
function NewCommand (line 39) | func NewCommand(logger logger.Interface) *cli.Command {
FILE: cmd/nvidia-ctk/cdi/transform/root/root.go
type command (line 33) | type command struct
method build (line 58) | func (m command) build() *cli.Command {
method validateFlags (line 107) | func (m command) validateFlags(opts *options) error {
method run (line 117) | func (m command) run(opts *options) error {
type transformOptions (line 37) | type transformOptions struct
method Load (line 136) | func (o transformOptions) Load() (spec.Interface, error) {
method getContents (line 152) | func (o transformOptions) getContents() ([]byte, error) {
method Save (line 161) | func (o transformOptions) Save(s spec.Interface) error {
type options (line 42) | type options struct
function NewCommand (line 50) | func NewCommand(logger logger.Interface) *cli.Command {
FILE: cmd/nvidia-ctk/cdi/transform/transform.go
type command (line 26) | type command struct
method build (line 39) | func (m command) build() *cli.Command {
function NewCommand (line 31) | func NewCommand(logger logger.Interface) *cli.Command {
FILE: cmd/nvidia-ctk/config/config.go
type command (line 35) | type command struct
method build (line 55) | func (m command) build() *cli.Command {
method validateFlags (line 115) | func (m command) validateFlags(opts *options) error {
method run (line 122) | func (m command) run(opts *options) error {
type options (line 40) | type options struct
function NewCommand (line 47) | func NewCommand(logger logger.Interface) *cli.Command {
function setFlagToKeyValue (line 165) | func setFlagToKeyValue(setFlag string, setListSeparator string) (string,...
function getField (line 224) | func getField(key string) (reflect.Type, error) {
function getStruct (line 232) | func getStruct(current reflect.Type, paths ...string) (reflect.StructFie...
FILE: cmd/nvidia-ctk/config/config_test.go
function TestSetFlagToKeyValue (line 25) | func TestSetFlagToKeyValue(t *testing.T) {
FILE: cmd/nvidia-ctk/config/create-default/create-default.go
type command (line 30) | type command struct
method build (line 43) | func (m command) build() *cli.Command {
method validateFlags (line 70) | func (m command) validateFlags(c *cli.Command, opts *flags.Options) er...
method run (line 74) | func (m command) run(c *cli.Command, opts *flags.Options) error {
function NewCommand (line 35) | func NewCommand(logger logger.Interface) *cli.Command {
FILE: cmd/nvidia-ctk/config/flags/options.go
type Options (line 27) | type Options struct
method Validate (line 34) | func (o Options) Validate() error {
method GetOutput (line 43) | func (o Options) GetOutput() string {
method EnsureOutputFolder (line 53) | func (o Options) EnsureOutputFolder() error {
method CreateOutput (line 65) | func (o Options) CreateOutput() (io.WriteCloser, error) {
type nullCloser (line 75) | type nullCloser struct
method Close (line 80) | func (d nullCloser) Close() error {
FILE: cmd/nvidia-ctk/hook/hook.go
type hookCommand (line 26) | type hookCommand struct
method build (line 39) | func (m hookCommand) build() *cli.Command {
function NewCommand (line 31) | func NewCommand(logger logger.Interface) *cli.Command {
FILE: cmd/nvidia-ctk/info/info.go
type command (line 25) | type command struct
method build (line 38) | func (m command) build() *cli.Command {
function NewCommand (line 30) | func NewCommand(logger logger.Interface) *cli.Command {
FILE: cmd/nvidia-ctk/main.go
type options (line 39) | type options struct
function main (line 48) | func main() {
function getCommands (line 108) | func getCommands(logger logger.Interface, configFilePath *string) []*cli...
FILE: cmd/nvidia-ctk/runtime/configure/configure.go
constant defaultRuntime (line 36) | defaultRuntime = "docker"
constant defaultNVIDIARuntimeName (line 39) | defaultNVIDIARuntimeName = "nvidia"
constant defaultNVIDIARuntimeExecutable (line 41) | defaultNVIDIARuntimeExecutable = "nvidia-container-runtime"
constant defaultNVIDIARuntimeExpecutablePath (line 42) | defaultNVIDIARuntimeExpecutablePath = "/usr/bin/nvidia-container-run...
constant defaultNVIDIARuntimeHookExpecutablePath (line 43) | defaultNVIDIARuntimeHookExpecutablePath = "/usr/bin/nvidia-container-run...
constant defaultContainerdConfigFilePath (line 45) | defaultContainerdConfigFilePath = "/etc/containerd/config.toml"
constant defaultCrioConfigFilePath (line 46) | defaultCrioConfigFilePath = "/etc/crio/crio.conf"
constant defaultDockerConfigFilePath (line 47) | defaultDockerConfigFilePath = "/etc/docker/daemon.json"
constant defaultContainerdDropInConfigFilePath (line 49) | defaultContainerdDropInConfigFilePath = "/etc/containerd/conf.d/99-nvidi...
constant defaultCrioDropInConfigFilePath (line 50) | defaultCrioDropInConfigFilePath = "/etc/crio/conf.d/99-nvidia.toml"
constant defaultConfigSource (line 52) | defaultConfigSource = configSourceFile
constant configSourceCommand (line 53) | configSourceCommand = "command"
constant configSourceFile (line 54) | configSourceFile = "file"
constant runtimeSpecificDefault (line 58) | runtimeSpecificDefault = "RUNTIME_SPECIFIC_DEFAULT"
type command (line 61) | type command struct
method build (line 98) | func (m command) build() *cli.Command {
method validateFlags (line 193) | func (m command) validateFlags(config *config) error {
method configureWrapper (line 281) | func (m command) configureWrapper(config *config) error {
method configureConfigFile (line 292) | func (m command) configureConfigFile(config *config) error {
method configureOCIHook (line 390) | func (m *command) configureOCIHook(config *config) error {
function NewCommand (line 66) | func NewCommand(logger logger.Interface) *cli.Command {
type config (line 75) | type config struct
method resolveConfigSource (line 356) | func (c *config) resolveConfigSource() (toml.Loader, error) {
method getCommandConfigSource (line 368) | func (c *config) getCommandConfigSource() toml.Loader {
method getOutputConfigPath (line 379) | func (c *config) getOutputConfigPath() string {
FILE: cmd/nvidia-ctk/runtime/configure/configure_test.go
function TestConfigureLifecycle (line 35) | func TestConfigureLifecycle(t *testing.T) {
function TestConfigureCommandLineSource (line 526) | func TestConfigureCommandLineSource(t *testing.T) {
function errUnrecognizedRuntime (line 645) | func errUnrecognizedRuntime(runtime string) error {
FILE: cmd/nvidia-ctk/runtime/runtime.go
type runtimeCommand (line 26) | type runtimeCommand struct
method build (line 38) | func (m runtimeCommand) build() *cli.Command {
function NewCommand (line 31) | func NewCommand(logger logger.Interface) *cli.Command {
FILE: cmd/nvidia-ctk/system/create-dev-char-symlinks/all.go
type allPossible (line 30) | type allPossible struct
method DeviceNodes (line 74) | func (m allPossible) DeviceNodes() ([]deviceNode, error) {
method getControlDeviceNodes (line 103) | func (m allPossible) getControlDeviceNodes() ([]deviceNode, error) {
method getGPUDeviceNodes (line 135) | func (m allPossible) getGPUDeviceNodes(gpu int) []deviceNode {
method getNVCapDeviceNodes (line 146) | func (m allPossible) getNVCapDeviceNodes(gpu int) []deviceNode {
method newDeviceNode (line 180) | func (m allPossible) newDeviceNode(deviceName devices.Name, path strin...
function newAllPossible (line 39) | func newAllPossible(logger logger.Interface, devRoot string) (nodeLister...
FILE: cmd/nvidia-ctk/system/create-dev-char-symlinks/create-dev-char-symlinks.go
constant defaultDevCharPath (line 33) | defaultDevCharPath = "/dev/char"
type command (line 36) | type command struct
method build (line 58) | func (m command) build() *cli.Command {
method validateFlags (line 117) | func (m command) validateFlags(cfg *config) error {
method run (line 131) | func (m command) run(cfg *config) error {
type config (line 40) | type config struct
function NewCommand (line 50) | func NewCommand(logger logger.Interface) *cli.Command {
type linkCreator (line 152) | type linkCreator struct
method setup (line 207) | func (m linkCreator) setup() error {
method CreateLinks (line 297) | func (m linkCreator) CreateLinks() error {
type Creator (line 165) | type Creator interface
type Option (line 170) | type Option
function NewSymlinkCreator (line 173) | func NewSymlinkCreator(opts ...Option) (Creator, error) {
function WithDriverRoot (line 241) | func WithDriverRoot(root string) Option {
function WithDevRoot (line 248) | func WithDevRoot(root string) Option {
function WithDevCharPath (line 255) | func WithDevCharPath(path string) Option {
function WithDryRun (line 262) | func WithDryRun(dryRun bool) Option {
function WithLogger (line 269) | func WithLogger(logger logger.Interface) Option {
function WithCreateAll (line 276) | func WithCreateAll(createAll bool) Option {
function WithLoadKernelModules (line 283) | func WithLoadKernelModules(loadKernelModules bool) Option {
function WithCreateDeviceNodes (line 290) | func WithCreateDeviceNodes(createDeviceNodes bool) Option {
type deviceNode (line 328) | type deviceNode struct
method devCharName (line 334) | func (d deviceNode) devCharName() string {
FILE: cmd/nvidia-ctk/system/create-dev-char-symlinks/existing.go
type nodeLister (line 29) | type nodeLister interface
type existing (line 33) | type existing struct
method DeviceNodes (line 40) | func (m existing) DeviceNodes() ([]deviceNode, error) {
method nodeIsBlocked (line 81) | func (m existing) nodeIsBlocked(path string) bool {
FILE: cmd/nvidia-ctk/system/create-dev-char-symlinks/existing_linux.go
function newDeviceNode (line 21) | func newDeviceNode(d string, stat unix.Stat_t) deviceNode {
FILE: cmd/nvidia-ctk/system/create-dev-char-symlinks/existing_other.go
function newDeviceNode (line 23) | func newDeviceNode(d string, stat unix.Stat_t) deviceNode {
FILE: cmd/nvidia-ctk/system/create-device-nodes/create-device-nodes.go
type command (line 30) | type command struct
method build (line 54) | func (m command) build() *cli.Command {
method validateFlags (line 107) | func (m command) validateFlags(opts *options) error {
method run (line 115) | func (m command) run(opts *options) error {
type options (line 34) | type options struct
function NewCommand (line 46) | func NewCommand(logger logger.Interface) *cli.Command {
FILE: cmd/nvidia-ctk/system/system.go
type command (line 27) | type command struct
method build (line 39) | func (m command) build() *cli.Command {
function NewCommand (line 32) | func NewCommand(logger logger.Interface) *cli.Command {
FILE: internal/config/image/builder.go
type builder (line 28) | type builder struct
method build (line 61) | func (b builder) build() (CUDA, error) {
type Option (line 35) | type Option
function New (line 38) | func New(opt ...Option) (CUDA, error) {
function WithAcceptDeviceListAsVolumeMounts (line 69) | func WithAcceptDeviceListAsVolumeMounts(acceptDeviceListAsVolumeMounts b...
function WithAcceptEnvvarUnprivileged (line 76) | func WithAcceptEnvvarUnprivileged(acceptEnvvarUnprivileged bool) Option {
function WithAnnotations (line 83) | func WithAnnotations(annotations map[string]string) Option {
function WithAnnotationsPrefixes (line 90) | func WithAnnotationsPrefixes(annotationsPrefixes ...string) Option {
function WithDisableRequire (line 98) | func WithDisableRequire(disableRequire bool) Option {
function WithEnv (line 107) | func WithEnv(env []string) Option {
function WithEnvMap (line 123) | func WithEnvMap(env map[string]string) Option {
function WithIgnoreImexChannelRequests (line 132) | func WithIgnoreImexChannelRequests(ignoreImexChannelRequests bool) Option {
function WithLogger (line 140) | func WithLogger(logger logger.Interface) Option {
function WithMounts (line 148) | func WithMounts(mounts []specs.Mount) Option {
function WithPreferredVisibleDevicesEnvVars (line 157) | func WithPreferredVisibleDevicesEnvVars(preferredVisibleDeviceEnvVars .....
function WithPrivileged (line 175) | func WithPrivileged(isPrivileged bool) Option {
FILE: internal/config/image/capabilities.go
type DriverCapability (line 25) | type DriverCapability
constant DriverCapabilityAll (line 29) | DriverCapabilityAll DriverCapability = "all"
constant DriverCapabilityNone (line 30) | DriverCapabilityNone DriverCapability = "none"
constant DriverCapabilityCompat32 (line 31) | DriverCapabilityCompat32 DriverCapability = "compat32"
constant DriverCapabilityCompute (line 32) | DriverCapabilityCompute DriverCapability = "compute"
constant DriverCapabilityDisplay (line 33) | DriverCapabilityDisplay DriverCapability = "display"
constant DriverCapabilityGraphics (line 34) | DriverCapabilityGraphics DriverCapability = "graphics"
constant DriverCapabilityNgx (line 35) | DriverCapabilityNgx DriverCapability = "ngx"
constant DriverCapabilityUtility (line 36) | DriverCapabilityUtility DriverCapability = "utility"
constant DriverCapabilityVideo (line 37) | DriverCapabilityVideo DriverCapability = "video"
function NewDriverCapabilities (line 51) | func NewDriverCapabilities(capabilities ...string) DriverCapabilities {
type DriverCapabilities (line 66) | type DriverCapabilities
method Has (line 69) | func (c DriverCapabilities) Has(capability DriverCapability) bool {
method Any (line 77) | func (c DriverCapabilities) Any(capabilities ...DriverCapability) bool {
method List (line 91) | func (c DriverCapabilities) List() []string {
method String (line 101) | func (c DriverCapabilities) String() string {
method IsAll (line 109) | func (c DriverCapabilities) IsAll() bool {
method Intersection (line 115) | func (c DriverCapabilities) Intersection(s2 DriverCapabilities) Driver...
method IsSuperset (line 134) | func (c DriverCapabilities) IsSuperset(s2 DriverCapabilities) bool {
FILE: internal/config/image/capabilities_test.go
function TestDriverCapabilitiesIntersection (line 26) | func TestDriverCapabilitiesIntersection(t *testing.T) {
function TestDriverCapabilitiesList (line 97) | func TestDriverCapabilitiesList(t *testing.T) {
FILE: internal/config/image/cuda_image.go
constant DeviceListAsVolumeMountsRoot (line 34) | DeviceListAsVolumeMountsRoot = "/var/run/nvidia-container-devices"
constant volumeMountDevicePrefixCDI (line 36) | volumeMountDevicePrefixCDI = "cdi/"
constant volumeMountDevicePrefixImex (line 37) | volumeMountDevicePrefixImex = "imex/"
type CUDA (line 43) | type CUDA struct
method Getenv (line 88) | func (i CUDA) Getenv(key string) string {
method HasEnvvar (line 93) | func (i CUDA) HasEnvvar(key string) bool {
method IsLegacy (line 101) | func (i CUDA) IsLegacy() bool {
method IsPrivileged (line 107) | func (i CUDA) IsPrivileged() bool {
method GetRequirements (line 113) | func (i CUDA) GetRequirements() ([]string, error) {
method HasDisableRequire (line 138) | func (i CUDA) HasDisableRequire() bool {
method devicesFromEnvvars (line 149) | func (i CUDA) devicesFromEnvvars(envVars ...string) []string {
method GetDriverCapabilities (line 182) | func (i CUDA) GetDriverCapabilities() DriverCapabilities {
method legacyVersion (line 193) | func (i CUDA) legacyVersion() (string, error) {
method OnlyFullyQualifiedCDIDevices (line 226) | func (i CUDA) OnlyFullyQualifiedCDIDevices() bool {
method visibleEnvVars (line 239) | func (i CUDA) visibleEnvVars() []string {
method VisibleDevices (line 258) | func (i CUDA) VisibleDevices() []string {
method cdiDeviceRequestsFromAnnotations (line 300) | func (i CUDA) cdiDeviceRequestsFromAnnotations() []string {
method visibleDevicesFromEnvVar (line 330) | func (i CUDA) visibleDevicesFromEnvVar() []string {
method visibleDevicesFromMounts (line 336) | func (i CUDA) visibleDevicesFromMounts() []string {
method requestsFromMounts (line 358) | func (i CUDA) requestsFromMounts() []string {
method ImexChannelRequests (line 416) | func (i CUDA) ImexChannelRequests() []string {
method imexChannelsFromEnvVar (line 451) | func (i CUDA) imexChannelsFromEnvVar() []string {
method imexChannelsFromMounts (line 460) | func (i CUDA) imexChannelsFromMounts() []string {
function NewCUDAImageFromSpec (line 60) | func NewCUDAImageFromSpec(spec *specs.Spec, opts ...Option) (CUDA, error) {
function newCUDAImageFromEnv (line 82) | func newCUDAImageFromEnv(env []string) (CUDA, error) {
function parseMajorMinorVersion (line 203) | func parseMajorMinorVersion(version string) (string, error) {
type cdiDeviceMountRequest (line 396) | type cdiDeviceMountRequest
method qualifiedName (line 399) | func (m cdiDeviceMountRequest) qualifiedName() (string, error) {
FILE: internal/config/image/cuda_image_test.go
function TestNewCUDAImageFromSpec (line 28) | func TestNewCUDAImageFromSpec(t *testing.T) {
function TestParseMajorMinorVersionValid (line 109) | func TestParseMajorMinorVersionValid(t *testing.T) {
function TestParseMajorMinorVersionInvalid (line 131) | func TestParseMajorMinorVersionInvalid(t *testing.T) {
function TestGetRequirements (line 157) | func TestGetRequirements(t *testing.T) {
function TestGetDevicesFromEnvvar (line 218) | func TestGetDevicesFromEnvvar(t *testing.T) {
function TestGetVisibleDevicesFromMounts (line 438) | func TestGetVisibleDevicesFromMounts(t *testing.T) {
function TestVisibleDevices (line 509) | func TestVisibleDevices(t *testing.T) {
function TestImexChannelsFromEnvVar (line 695) | func TestImexChannelsFromEnvVar(t *testing.T) {
function TestCDIDeviceRequestsFromAnnotations (line 726) | func TestCDIDeviceRequestsFromAnnotations(t *testing.T) {
function makeTestMounts (line 793) | func makeTestMounts(paths ...string) []specs.Mount {
FILE: internal/config/image/devices.go
type VisibleDevices (line 25) | type VisibleDevices interface
function NewVisibleDevices (line 36) | func NewVisibleDevices(envvars ...string) VisibleDevices {
type all (line 52) | type all struct
method List (line 55) | func (a all) List() []string {
method Has (line 60) | func (a all) Has(id string) bool {
type none (line 64) | type none struct
method List (line 67) | func (n none) List() []string {
method Has (line 72) | func (n none) Has(id string) bool {
type void (line 76) | type void struct
method List (line 81) | func (v void) List() []string {
type devices (line 85) | type devices struct
method List (line 109) | func (d devices) List() []string {
method Has (line 120) | func (d devices) Has(id string) bool {
function newDevices (line 90) | func newDevices(idOrCommaSeparated ...string) devices {
FILE: internal/config/image/envvars.go
constant EnvVarCudaVersion (line 20) | EnvVarCudaVersion = "CUDA_VERSION"
constant EnvVarNvidiaDisableRequire (line 21) | EnvVarNvidiaDisableRequire = "NVIDIA_DISABLE_REQUIRE"
constant EnvVarNvidiaDriverCapabilities (line 22) | EnvVarNvidiaDriverCapabilities = "NVIDIA_DRIVER_CAPABILITIES"
constant EnvVarNvidiaImexChannels (line 23) | EnvVarNvidiaImexChannels = "NVIDIA_IMEX_CHANNELS"
constant EnvVarNvidiaMigConfigDevices (line 24) | EnvVarNvidiaMigConfigDevices = "NVIDIA_MIG_CONFIG_DEVICES"
constant EnvVarNvidiaMigMonitorDevices (line 25) | EnvVarNvidiaMigMonitorDevices = "NVIDIA_MIG_MONITOR_DEVICES"
constant EnvVarNvidiaRequireCuda (line 26) | EnvVarNvidiaRequireCuda = NvidiaRequirePrefix + "CUDA"
constant EnvVarNvidiaRequireJetpack (line 27) | EnvVarNvidiaRequireJetpack = NvidiaRequirePrefix + "JETPACK"
constant EnvVarNvidiaVisibleDevices (line 28) | EnvVarNvidiaVisibleDevices = "NVIDIA_VISIBLE_DEVICES"
constant NvidiaRequirePrefix (line 30) | NvidiaRequirePrefix = "NVIDIA_REQUIRE_"
FILE: internal/config/image/privileged.go
constant capSysAdmin (line 24) | capSysAdmin = "CAP_SYS_ADMIN"
type CapabilitiesGetter (line 27) | type CapabilitiesGetter interface
type OCISpec (line 31) | type OCISpec
method GetCapabilities (line 49) | func (s OCISpec) GetCapabilities() []string {
type OCISpecCapabilities (line 33) | type OCISpecCapabilities
method GetCapabilities (line 56) | func (c OCISpecCapabilities) GetCapabilities() []string {
function IsPrivileged (line 36) | func IsPrivileged(s CapabilitiesGetter) bool {
FILE: internal/config/image/privileged_test.go
function TestIsPrivileged (line 26) | func TestIsPrivileged(t *testing.T) {
FILE: internal/cuda/cuda.go
constant libraryName (line 54) | libraryName = "libcuda.so.1"
constant libraryLoadFlags (line 55) | libraryLoadFlags = dl.RTLD_LAZY | dl.RTLD_GLOBAL
function Version (line 63) | func Version() (string, error) {
function ComputeCapability (line 87) | func ComputeCapability(index int) (string, error) {
function load (line 127) | func load() (*dl.DynamicLibrary, error) {
FILE: internal/devices/devices.go
type Device (line 28) | type Device
function DeviceFromPath (line 32) | func DeviceFromPath(path string, permissions string) (*Device, error) {
function AssertCharDevice (line 42) | func AssertCharDevice(path string) error {
function IsOverrideApplied (line 57) | func IsOverrideApplied() bool {
FILE: internal/devices/devices_mock.go
type InterfaceMock (line 35) | type InterfaceMock struct
method AssertCharDevice (line 69) | func (mock *InterfaceMock) AssertCharDevice(s string) error {
method AssertCharDeviceCalls (line 88) | func (mock *InterfaceMock) AssertCharDeviceCalls() []struct {
method DeviceFromPath (line 101) | func (mock *InterfaceMock) DeviceFromPath(s1 string, s2 string) (*Devi...
method DeviceFromPathCalls (line 122) | func (mock *InterfaceMock) DeviceFromPathCalls() []struct {
method IsOverrideApplied (line 137) | func (mock *InterfaceMock) IsOverrideApplied() bool {
method IsOverrideAppliedCalls (line 153) | func (mock *InterfaceMock) IsOverrideAppliedCalls() []struct {
FILE: internal/devices/devices_tests.go
type Interface (line 29) | type Interface interface
type testDefaults (line 35) | type testDefaults struct
method DeviceFromPath (line 99) | func (t *testDefaults) DeviceFromPath(path string, permissions string)...
method AssertCharDevice (line 116) | func (t *testDefaults) AssertCharDevice(path string) error {
method IsOverrideApplied (line 129) | func (t *testDefaults) IsOverrideApplied() bool {
function SetAllForTest (line 39) | func SetAllForTest() func() {
function SetInterfaceForTests (line 44) | func SetInterfaceForTests(m Interface) func() {
function SetDeviceFromPathForTest (line 60) | func SetDeviceFromPathForTest(testFunc func(string, string) (*Device, er...
function SetAssertCharDeviceForTest (line 68) | func SetAssertCharDeviceForTest(testFunc func(string) error) func() {
function SetIsOverrideAppliedForTest (line 76) | func SetIsOverrideAppliedForTest(testFunc func() bool) func() {
type testDevice (line 84) | type testDevice struct
method load (line 88) | func (t *testDevice) load() error {
FILE: internal/discover/cache.go
type cache (line 21) | type cache struct
method Devices (line 41) | func (c *cache) Devices() ([]Device, error) {
method EnvVars (line 55) | func (c *cache) EnvVars() ([]EnvVar, error) {
method Hooks (line 69) | func (c *cache) Hooks() ([]Hook, error) {
method Mounts (line 83) | func (c *cache) Mounts() ([]Mount, error) {
function WithCache (line 34) | func WithCache(d Discover) Discover {
FILE: internal/discover/char_devices.go
type charDevices (line 25) | type charDevices
method Mounts (line 41) | func (d *charDevices) Mounts() ([]Mount, error) {
method Devices (line 47) | func (d *charDevices) Devices() ([]Device, error) {
function NewCharDeviceDiscoverer (line 30) | func NewCharDeviceDiscoverer(logger logger.Interface, devRoot string, de...
FILE: internal/discover/char_devices_test.go
function TestCharDevices (line 29) | func TestCharDevices(t *testing.T) {
FILE: internal/discover/compat_libs.go
type EnableCUDACompatHookOptions (line 11) | type EnableCUDACompatHookOptions struct
method args (line 23) | func (o *EnableCUDACompatHookOptions) args() []string {
function NewCUDACompatHookDiscoverer (line 19) | func NewCUDACompatHookDiscoverer(logger logger.Interface, hookCreator Ho...
FILE: internal/discover/discover.go
type Device (line 20) | type Device struct
type EnvVar (line 26) | type EnvVar struct
type Mount (line 32) | type Mount struct
type Hook (line 39) | type Hook struct
type Discover (line 49) | type Discover interface
FILE: internal/discover/discover_mock.go
type DiscoverMock (line 38) | type DiscoverMock struct
method Devices (line 73) | func (mock *DiscoverMock) Devices() ([]Device, error) {
method DevicesCalls (line 93) | func (mock *DiscoverMock) DevicesCalls() []struct {
method EnvVars (line 104) | func (mock *DiscoverMock) EnvVars() ([]EnvVar, error) {
method EnvVarsCalls (line 124) | func (mock *DiscoverMock) EnvVarsCalls() []struct {
method Hooks (line 135) | func (mock *DiscoverMock) Hooks() ([]Hook, error) {
method HooksCalls (line 155) | func (mock *DiscoverMock) HooksCalls() []struct {
method Mounts (line 166) | func (mock *DiscoverMock) Mounts() ([]Mount, error) {
method MountsCalls (line 186) | func (mock *DiscoverMock) MountsCalls() []struct {
FILE: internal/discover/envvar.go
method Devices (line 23) | func (e EnvVar) Devices() ([]Device, error) {
method EnvVars (line 28) | func (e EnvVar) EnvVars() ([]EnvVar, error) {
method Mounts (line 33) | func (e EnvVar) Mounts() ([]Mount, error) {
method Hooks (line 39) | func (e EnvVar) Hooks() ([]Hook, error) {
FILE: internal/discover/filter.go
type Filter (line 22) | type Filter interface
type filtered (line 27) | type filtered struct
method Devices (line 43) | func (d filtered) Devices() ([]Device, error) {
function newFilteredDiscoverer (line 34) | func newFilteredDiscoverer(logger logger.Interface, applyTo Discover, fi...
FILE: internal/discover/first-valid.go
type firstOf (line 21) | type firstOf
method Devices (line 35) | func (f firstOf) Devices() ([]Device, error) {
method EnvVars (line 48) | func (f firstOf) EnvVars() ([]EnvVar, error) {
method Hooks (line 61) | func (f firstOf) Hooks() ([]Hook, error) {
method Mounts (line 74) | func (f firstOf) Mounts() ([]Mount, error) {
function FirstValid (line 24) | func FirstValid(discoverers ...Discover) Discover {
FILE: internal/discover/gdrcopy.go
function NewGDRCopyDiscoverer (line 24) | func NewGDRCopyDiscoverer(logger logger.Interface, driver *root.Driver) ...
FILE: internal/discover/gdrcopy_test.go
function TestNewGDRCopyDiscoverer (line 33) | func TestNewGDRCopyDiscoverer(t *testing.T) {
FILE: internal/discover/gds.go
type gdsDeviceDiscoverer (line 25) | type gdsDeviceDiscoverer struct
method Devices (line 67) | func (d *gdsDeviceDiscoverer) Devices() ([]Device, error) {
method Mounts (line 73) | func (d *gdsDeviceDiscoverer) Mounts() ([]Mount, error) {
function NewGDSDiscoverer (line 33) | func NewGDSDiscoverer(logger logger.Interface, driver *root.Driver) (Dis...
FILE: internal/discover/gds_test.go
function TestNewGDSDiscoverer (line 33) | func TestNewGDSDiscoverer(t *testing.T) {
FILE: internal/discover/graphics.go
function NewDRMNodesDiscoverer (line 39) | func NewDRMNodesDiscoverer(logger logger.Interface, devices image.Visibl...
function NewGraphicsMountsDiscoverer (line 52) | func NewGraphicsMountsDiscoverer(logger logger.Interface, driver *root.D...
function newVulkanConfigsDiscover (line 85) | func newVulkanConfigsDiscover(logger logger.Interface, driver *root.Driv...
type graphicsDriverLibraries (line 110) | type graphicsDriverLibraries struct
method Mounts (line 175) | func (d graphicsDriverLibraries) Mounts() ([]Mount, error) {
method Hooks (line 192) | func (d graphicsDriverLibraries) Hooks() ([]Hook, error) {
method isDriverLibrary (line 233) | func (d graphicsDriverLibraries) isDriverLibrary(filename string, libr...
function newGraphicsLibrariesDiscoverer (line 118) | func newGraphicsLibrariesDiscoverer(logger logger.Interface, driver *roo...
function buildXOrgSearchPaths (line 241) | func buildXOrgSearchPaths(libRoot string) []string {
type drmDevicesByPath (line 273) | type drmDevicesByPath struct
method Hooks (line 294) | func (d drmDevicesByPath) Hooks() ([]Hook, error) {
method getSpecificLinkArgs (line 316) | func (d drmDevicesByPath) getSpecificLinkArgs(devices []Device) ([]str...
function newCreateDRMByPathSymlinks (line 282) | func newCreateDRMByPathSymlinks(logger logger.Interface, devices Discove...
function newDRMDeviceDiscoverer (line 350) | func newDRMDeviceDiscoverer(logger logger.Interface, devices image.Visib...
function newDRMDeviceFilter (line 376) | func newDRMDeviceFilter(devices image.VisibleDevices, devRoot string) (F...
type selectDeviceByPath (line 412) | type selectDeviceByPath
method DeviceIsSelected (line 417) | func (s selectDeviceByPath) DeviceIsSelected(device Device) bool {
method MountIsSelected (line 422) | func (s selectDeviceByPath) MountIsSelected(Mount) bool {
method HookIsSelected (line 427) | func (s selectDeviceByPath) HookIsSelected(Hook) bool {
FILE: internal/discover/graphics_test.go
function TestGraphicsLibrariesDiscoverer (line 31) | func TestGraphicsLibrariesDiscoverer(t *testing.T) {
function TestDrmDevicesByPath (line 172) | func TestDrmDevicesByPath(t *testing.T) {
FILE: internal/discover/hooks.go
type HookName (line 27) | type HookName
constant AllHooks (line 31) | AllHooks = HookName("all")
constant ChmodHook (line 36) | ChmodHook = HookName("chmod")
constant CreateSymlinksHook (line 38) | CreateSymlinksHook = HookName("create-symlinks")
constant DisableDeviceNodeModificationHook (line 43) | DisableDeviceNodeModificationHook = HookName("disable-device-node-modifi...
constant EnableCudaCompatHook (line 46) | EnableCudaCompatHook = HookName("enable-cuda-compat")
constant UpdateLDCacheHook (line 49) | UpdateLDCacheHook = HookName("update-ldcache")
constant defaultNvidiaCDIHookPath (line 51) | defaultNvidiaCDIHookPath = "/usr/bin/nvidia-cdi-hook"
method Devices (line 65) | func (h *Hook) Devices() ([]Device, error) {
method EnvVars (line 70) | func (h *Hook) EnvVars() ([]EnvVar, error) {
method Mounts (line 75) | func (h *Hook) Mounts() ([]Mount, error) {
method Hooks (line 81) | func (h *Hook) Hooks() ([]Hook, error) {
type hookCreatorOptions (line 89) | type hookCreatorOptions struct
type Option (line 97) | type Option
type cdiHookCreator (line 99) | type cdiHookCreator struct
method Create (line 192) | func (c cdiHookCreator) Create(name HookName, args ...string) *Hook {
method isDisabled (line 205) | func (c cdiHookCreator) isDisabled(name HookName, args ...string) bool {
method requiredArgs (line 222) | func (c cdiHookCreator) requiredArgs(name HookName) []string {
method transformArgs (line 226) | func (c cdiHookCreator) transformArgs(name HookName, args ...string) [...
type allDisabledHookCreator (line 109) | type allDisabledHookCreator struct
method Create (line 112) | func (a *allDisabledHookCreator) Create(name HookName, args ...string)...
type HookCreator (line 117) | type HookCreator interface
function WithDebugLogging (line 121) | func WithDebugLogging(debugLogging bool) Option {
function WithDisabledHooks (line 129) | func WithDisabledHooks(hooks ...HookName) Option {
function WithEnabledHooks (line 137) | func WithEnabledHooks(hooks ...HookName) Option {
function WithLdconfigPath (line 143) | func WithLdconfigPath(ldconfigPath string) Option {
function WithNVIDIACDIHookPath (line 150) | func WithNVIDIACDIHookPath(nvidiaCDIHookPath string) Option {
function NewHookCreator (line 156) | func NewHookCreator(opts ...Option) HookCreator {
function getFixedArgsForCDIHookCLI (line 256) | func getFixedArgsForCDIHookCLI(nvidiaCDIHookPath string) []string {
FILE: internal/discover/hooks_test.go
function TestNewHookCreator (line 25) | func TestNewHookCreator(t *testing.T) {
function TestCDIHookCreator_Create (line 163) | func TestCDIHookCreator_Create(t *testing.T) {
function TestCDIHookCreator_isDisabled (line 331) | func TestCDIHookCreator_isDisabled(t *testing.T) {
FILE: internal/discover/ipc.go
type ipcMounts (line 33) | type ipcMounts
method Mounts (line 73) | func (d *ipcMounts) Mounts() ([]Mount, error) {
function NewIPCDiscoverer (line 36) | func NewIPCDiscoverer(logger logger.Interface, driverRoot string) (Disco...
FILE: internal/discover/ipc_test.go
function TestIPCMounts (line 28) | func TestIPCMounts(t *testing.T) {
FILE: internal/discover/ldconfig.go
function NewLDCacheUpdateHook (line 28) | func NewLDCacheUpdateHook(logger logger.Interface, mounts Discover, hook...
type ldconfig (line 38) | type ldconfig struct
method Hooks (line 46) | func (d ldconfig) Hooks() ([]Hook, error) {
function getLibraryPaths (line 58) | func getLibraryPaths(mounts []Mount) []string {
function isLibName (line 70) | func isLibName(filename string) bool {
function uniqueFolders (line 87) | func uniqueFolders(libraries []string) []string {
FILE: internal/discover/ldconfig_test.go
constant testNvidiaCDIHookPath (line 28) | testNvidiaCDIHookPath = "/foo/bar/nvidia-cdi-hook"
constant testLdconfigPath (line 29) | testLdconfigPath = "/bar/baz/ldconfig"
function TestLDCacheUpdateHook (line 32) | func TestLDCacheUpdateHook(t *testing.T) {
function TestIsLibName (line 152) | func TestIsLibName(t *testing.T) {
FILE: internal/discover/list.go
type list (line 24) | type list
method Devices (line 42) | func (d list) Devices() ([]Device, error) {
method EnvVars (line 57) | func (d list) EnvVars() ([]EnvVar, error) {
method Mounts (line 72) | func (d list) Mounts() ([]Mount, error) {
method Hooks (line 87) | func (d list) Hooks() ([]Hook, error) {
function Merge (line 29) | func Merge(discoverers ...Discover) Discover {
FILE: internal/discover/mofed.go
function NewMOFEDDiscoverer (line 25) | func NewMOFEDDiscoverer(logger logger.Interface, driver *root.Driver) (D...
FILE: internal/discover/mofed_test.go
function TestNewMOFEDDiscoverer (line 33) | func TestNewMOFEDDiscoverer(t *testing.T) {
FILE: internal/discover/mounts-to-container-path.go
type mountsToContainerPath (line 31) | type mountsToContainerPath struct
method Mounts (line 39) | func (d *mountsToContainerPath) Mounts() ([]Mount, error) {
FILE: internal/discover/mounts-to-container-path_test.go
function TestMountsToContainerPath (line 29) | func TestMountsToContainerPath(t *testing.T) {
FILE: internal/discover/mounts.go
type mounts (line 31) | type mounts struct
method Mounts (line 56) | func (d *mounts) Mounts() ([]Mount, error) {
method relativeTo (line 107) | func (d *mounts) relativeTo(path string) string {
function NewMounts (line 42) | func NewMounts(logger logger.Interface, lookup lookup.Locator, root stri...
function newMounts (line 47) | func newMounts(logger logger.Interface, lookup lookup.Locator, root stri...
FILE: internal/discover/mounts_test.go
function TestMountsReturnsEmptyDevices (line 30) | func TestMountsReturnsEmptyDevices(t *testing.T) {
function TestMounts (line 38) | func TestMounts(t *testing.T) {
FILE: internal/discover/none.go
type None (line 21) | type None struct
method Devices (line 26) | func (e None) Devices() ([]Device, error) {
method EnvVars (line 31) | func (e None) EnvVars() ([]EnvVar, error) {
method Mounts (line 36) | func (e None) Mounts() ([]Mount, error) {
method Hooks (line 41) | func (e None) Hooks() ([]Hook, error) {
FILE: internal/discover/none_test.go
function TestNone (line 25) | func TestNone(t *testing.T) {
FILE: internal/discover/nvswitch.go
function NewNvSwitchDiscoverer (line 25) | func NewNvSwitchDiscoverer(logger logger.Interface, driver *root.Driver)...
FILE: internal/discover/nvswitch_test.go
function TestNewNvSwitchDiscoverer (line 33) | func TestNewNvSwitchDiscoverer(t *testing.T) {
FILE: internal/discover/symlinks.go
type Symlink (line 29) | type Symlink struct
method String (line 34) | func (s *Symlink) String() string {
type additionalSymlinks (line 38) | type additionalSymlinks struct
method Hooks (line 60) | func (d *additionalSymlinks) Hooks() ([]Hook, error) {
method getLinksForMount (line 108) | func (d additionalSymlinks) getLinksForMount(path string) []string {
method isDriverLibrary (line 131) | func (d additionalSymlinks) isDriverLibrary(libraryName string, filena...
method getDotSoSymlinks (line 137) | func (d *additionalSymlinks) getDotSoSymlinks(hostLibraryPath string, ...
method linkExistsInDir (line 178) | func (d *additionalSymlinks) linkExistsInDir(dir string, link string) ...
function WithDriverDotSoSymlinks (line 47) | func WithDriverDotSoSymlinks(logger logger.Interface, mounts Discover, v...
function getSoLink (line 235) | func getSoLink(soname string) string {
FILE: internal/discover/symlinks_test.go
function TestWithWithDriverDotSoSymlinks (line 27) | func TestWithWithDriverDotSoSymlinks(t *testing.T) {
function TestGetDotSoSymlinks (line 342) | func TestGetDotSoSymlinks(t *testing.T) {
function TestGetSoLink (line 446) | func TestGetSoLink(t *testing.T) {
function setGetSoname (line 494) | func setGetSoname(override func(string) (string, error)) func() {
function setLinkExists (line 503) | func setLinkExists(override func(string) (bool, error)) func() {
FILE: internal/dxcore/api.go
function Init (line 23) | func Init() error {
function Shutdown (line 33) | func Shutdown() error {
function GetDriverStorePaths (line 41) | func GetDriverStorePaths() []string {
FILE: internal/dxcore/dxcore.c
type dxcore_enumAdapters2 (line 43) | struct dxcore_enumAdapters2
type dxcore_enumAdapters3 (line 44) | struct dxcore_enumAdapters3
type dxcore_queryAdapterInfo (line 45) | struct dxcore_queryAdapterInfo
type dxcore_enumAdapters2 (line 47) | struct dxcore_enumAdapters2
type dxcore_enumAdapters3 (line 48) | struct dxcore_enumAdapters3
type dxcore_queryAdapterInfo (line 49) | struct dxcore_queryAdapterInfo
type dxcore_lib (line 51) | struct dxcore_lib {
type dxcore_adapterInfo (line 58) | struct dxcore_adapterInfo
type dxcore_enumAdapters2 (line 66) | struct dxcore_enumAdapters2
type dxcore_enumAdapters3 (line 74) | struct dxcore_enumAdapters3
type dxcore_kmtqueryAdapterInfoType (line 81) | enum dxcore_kmtqueryAdapterInfoType
type dxcore_queryregistry_type (line 87) | enum dxcore_queryregistry_type {
type dxcore_queryregistry_status (line 92) | enum dxcore_queryregistry_status {
type dxcore_queryregistry_info (line 98) | struct dxcore_queryregistry_info {
type dxcore_queryAdapterInfo (line 112) | struct dxcore_queryAdapterInfo
function dxcore_query_adapter_info_helper (line 120) | static int dxcore_query_adapter_info_helper(struct dxcore_lib* pLib,
function dxcore_query_adapter_wddm_version (line 136) | static int dxcore_query_adapter_wddm_version(struct dxcore_lib* pLib, un...
function dxcore_query_adapter_driverstore (line 145) | static int dxcore_query_adapter_driverstore(struct dxcore_lib* pLib, uns...
function dxcore_add_adapter (line 211) | static void dxcore_add_adapter(struct dxcore_context* pCtx, struct dxcor...
function dxcore_enum_adapters3 (line 254) | static int dxcore_enum_adapters3(struct dxcore_context* pCtx, struct dxc...
function dxcore_enum_adapters2 (line 284) | static int dxcore_enum_adapters2(struct dxcore_context* pCtx, struct dxc...
function dxcore_enum_adapters (line 312) | static void dxcore_enum_adapters(struct dxcore_context* pCtx, struct dxc...
function dxcore_init_context (line 332) | int dxcore_init_context(struct dxcore_context* pCtx)
function dxcore_deinit_adapter (line 376) | static void dxcore_deinit_adapter(struct dxcore_adapter* pAdapter)
function dxcore_deinit_context (line 384) | void dxcore_deinit_context(struct dxcore_context* pCtx)
FILE: internal/dxcore/dxcore.go
type context (line 31) | type context
method deinitContext (line 45) | func (c context) deinitContext() {
method getAdapterCount (line 50) | func (c context) getAdapterCount() int {
method getAdapter (line 54) | func (c context) getAdapter(index int) adapter {
type adapter (line 32) | type adapter
method getDriverStorePath (line 59) | func (a adapter) getDriverStorePath() string {
function initContext (line 35) | func initContext() (*context, error) {
FILE: internal/dxcore/dxcore.h
type dxcore_luid (line 10) | struct dxcore_luid
type dxcore_adapter (line 16) | struct dxcore_adapter
type dxcore_context (line 26) | struct dxcore_context
type dxcore_context (line 36) | struct dxcore_context
type dxcore_context (line 37) | struct dxcore_context
FILE: internal/edits/device.go
type device (line 30) | type device struct
method toEdits (line 36) | func (d device) toEdits() (*cdi.ContainerEdits, error) {
method toSpec (line 53) | func (d device) toSpec() (*specs.DeviceNode, error) {
method fromPathOrDefault (line 71) | func (d device) fromPathOrDefault() *specs.DeviceNode {
method getAdditionalGIDs (line 121) | func (d *device) getAdditionalGIDs(dn *specs.DeviceNode) []uint32 {
function ptrIfNonZero (line 111) | func ptrIfNonZero[T uint32 | os.FileMode](id T) *T {
function isWorldReadable (line 142) | func isWorldReadable(m fs.FileMode) bool {
function isWorldWriteable (line 146) | func isWorldWriteable(m fs.FileMode) bool {
FILE: internal/edits/device_test.go
function TestDeviceToSpec (line 33) | func TestDeviceToSpec(t *testing.T) {
function TestGetAdditionalGIDs (line 146) | func TestGetAdditionalGIDs(t *testing.T) {
FILE: internal/edits/edits.go
constant EmptyFactory (line 32) | EmptyFactory = empty("empty")
type Factory (line 35) | type Factory interface
type empty (line 40) | type empty
method New (line 119) | func (e empty) New() *cdi.ContainerEdits {
method FromDiscoverer (line 127) | func (e empty) FromDiscoverer(_ discover.Discover) (*cdi.ContainerEdit...
type factory (line 42) | type factory struct
method New (line 62) | func (f *factory) New() *cdi.ContainerEdits {
method FromDiscoverer (line 66) | func (f *factory) FromDiscoverer(d discover.Discover) (*cdi.ContainerE...
method device (line 111) | func (f *factory) device(d discover.Device) *device {
type Option (line 50) | type Option
function NewFactory (line 52) | func NewFactory(opts ...Option) Factory {
function WithLogger (line 131) | func WithLogger(logger logger.Interface) Option {
function WithNoAdditionalGIDsForDeviceNodes (line 137) | func WithNoAdditionalGIDsForDeviceNodes(noAdditionalGIDsForDeviceNodes b...
FILE: internal/edits/edits_test.go
function TestFromDiscovererAllowsMountsToIterate (line 28) | func TestFromDiscovererAllowsMountsToIterate(t *testing.T) {
FILE: internal/edits/envvar.go
type envvar (line 29) | type envvar
method toEdits (line 32) | func (d envvar) toEdits() *cdi.ContainerEdits {
FILE: internal/edits/hook.go
type hook (line 26) | type hook
method toEdits (line 29) | func (d hook) toEdits() *cdi.ContainerEdits {
method toSpec (line 40) | func (d hook) toSpec() *specs.Hook {
FILE: internal/edits/mount.go
type mount (line 26) | type mount
method toEdits (line 29) | func (d mount) toEdits() *cdi.ContainerEdits {
method toSpec (line 40) | func (d mount) toSpec() *specs.Mount {
FILE: internal/info/additional_info.go
type additionalInfo (line 29) | type additionalInfo struct
method UsesNVGPUModule (line 42) | func (i additionalInfo) UsesNVGPUModule() (uses bool, reason string) {
FILE: internal/info/additional_info_test.go
function TestUsesNVGPUModule (line 28) | func TestUsesNVGPUModule(t *testing.T) {
FILE: internal/info/auto.go
type RuntimeMode (line 27) | type RuntimeMode
constant LegacyRuntimeMode (line 34) | LegacyRuntimeMode = RuntimeMode("legacy")
constant CSVRuntimeMode (line 39) | CSVRuntimeMode = RuntimeMode("csv")
constant CDIRuntimeMode (line 43) | CDIRuntimeMode = RuntimeMode("cdi")
constant JitCDIRuntimeMode (line 46) | JitCDIRuntimeMode = RuntimeMode("jit-cdi")
type RuntimeModeResolver (line 49) | type RuntimeModeResolver interface
type modeResolver (line 53) | type modeResolver struct
method ResolveRuntimeMode (line 111) | func (m *modeResolver) ResolveRuntimeMode(mode string) (rmode RuntimeM...
type Option (line 61) | type Option
function WithDefaultMode (line 63) | func WithDefaultMode(defaultMode RuntimeMode) Option {
function WithLogger (line 69) | func WithLogger(logger logger.Interface) Option {
function WithImage (line 75) | func WithImage(image *image.CUDA) Option {
function WithPropertyExtractor (line 81) | func WithPropertyExtractor(propertyExtractor info.PropertyExtractor) Opt...
function NewRuntimeModeResolver (line 87) | func NewRuntimeModeResolver(opts ...Option) RuntimeModeResolver {
function ResolveAutoMode (line 102) | func ResolveAutoMode(logger logger.Interface, mode string, image image.C...
FILE: internal/info/auto_test.go
function TestResolveAutoMode (line 30) | func TestResolveAutoMode(t *testing.T) {
FILE: internal/info/drm/drm_devices.go
function GetDeviceNodesByBusID (line 25) | func GetDeviceNodesByBusID(busID string) ([]string, error) {
FILE: internal/info/proc/devices/builder.go
type builder (line 19) | type builder struct
function New (line 25) | func New(opts ...Option) Devices {
type Option (line 45) | type Option
function WithDeviceToMajor (line 48) | func WithDeviceToMajor(deviceToMajor map[string]int) Option {
function WithFilter (line 58) | func WithFilter(filter func(string) bool) Option {
FILE: internal/info/proc/devices/devices.go
constant NVIDIAUVMMinor (line 30) | NVIDIAUVMMinor = 0
constant NVIDIAUVMToolsMinor (line 31) | NVIDIAUVMToolsMinor = 1
constant NVIDIACTLMinor (line 32) | NVIDIACTLMinor = 255
constant NVIDIAModesetMinor (line 33) | NVIDIAModesetMinor = 254
constant NVIDIAFrontend (line 35) | NVIDIAFrontend = Name("nvidia-frontend")
constant NVIDIAGPU (line 36) | NVIDIAGPU = Name("nvidia")
constant NVIDIACaps (line 37) | NVIDIACaps = Name("nvidia-caps")
constant NVIDIAUVM (line 38) | NVIDIAUVM = Name("nvidia-uvm")
constant procDevicesPath (line 40) | procDevicesPath = "/proc/devices"
constant nvidiaDevicePrefix (line 41) | nvidiaDevicePrefix = "nvidia"
type Name (line 45) | type Name
method getWithFallback (line 88) | func (n Name) getWithFallback() []Name {
type Major (line 48) | type Major
type Devices (line 53) | type Devices interface
type devices (line 59) | type devices
method Count (line 64) | func (d devices) Count() int {
method Exists (line 69) | func (d devices) Exists(name Name) bool {
method Get (line 76) | func (d devices) Get(name Name) (Major, bool) {
function GetNVIDIADevices (line 96) | func GetNVIDIADevices() (Devices, error) {
function nvidiaDevices (line 103) | func nvidiaDevices(devicesPath string) (Devices, error) {
function nvidiaDeviceFrom (line 118) | func nvidiaDeviceFrom(reader io.Reader) (Devices, error) {
function devicesFrom (line 133) | func devicesFrom(reader io.Reader) map[string]int {
function processProcDeviceLine (line 146) | func processProcDeviceLine(line string) (string, int, error) {
FILE: internal/info/proc/devices/devices_mock.go
type DevicesMock (line 35) | type DevicesMock struct
method Count (line 67) | func (mock *DevicesMock) Count() int {
method CountCalls (line 86) | func (mock *DevicesMock) CountCalls() []struct {
method Exists (line 97) | func (mock *DevicesMock) Exists(name Name) bool {
method ExistsCalls (line 119) | func (mock *DevicesMock) ExistsCalls() []struct {
method Get (line 132) | func (mock *DevicesMock) Get(name Name) (Major, bool) {
method GetCalls (line 155) | func (mock *DevicesMock) GetCalls() []struct {
FILE: internal/info/proc/devices/devices_test.go
function TestNvidiaDevices (line 27) | func TestNvidiaDevices(t *testing.T) {
function TestProcessDeviceFile (line 70) | func TestProcessDeviceFile(t *testing.T) {
function TestProcessDeviceFileLine (line 99) | func TestProcessDeviceFileLine(t *testing.T) {
FILE: internal/info/proc/information_files.go
type GPUInfoField (line 29) | type GPUInfoField
constant GPUInfoModel (line 33) | GPUInfoModel = GPUInfoField("Model")
constant GPUInfoGPUUUID (line 34) | GPUInfoGPUUUID = GPUInfoField("GPU UUID")
constant GPUInfoBusLocation (line 35) | GPUInfoBusLocation = GPUInfoField("Bus Location")
constant GPUInfoDeviceMinor (line 36) | GPUInfoDeviceMinor = GPUInfoField("Device Minor")
type GPUInfo (line 40) | type GPUInfo
function GetInformationFilePaths (line 43) | func GetInformationFilePaths(root string) ([]string, error) {
function ParseGPUInformationFile (line 48) | func ParseGPUInformationFile(path string) (GPUInfo, error) {
function gpuInfoFrom (line 71) | func gpuInfoFrom(reader io.Reader) GPUInfo {
FILE: internal/info/version.go
function GetVersionParts (line 29) | func GetVersionParts() []string {
function GetVersionString (line 40) | func GetVersionString(more ...string) string {
FILE: internal/ldcache/ldcache.go
constant ldcachePath (line 33) | ldcachePath = "/etc/ld.so.cache"
constant magicString1 (line 36) | magicString1 = "ld.so-1.7.0"
constant magicString2 (line 37) | magicString2 = "glibc-ld.so.cache"
constant magicVersion (line 38) | magicVersion = "1.1"
constant flagTypeMask (line 42) | flagTypeMask = 0x00ff
constant flagTypeELF (line 43) | flagTypeELF = 0x0001
constant flagArchMask (line 45) | flagArchMask = 0xff00
constant flagArchI386 (line 46) | flagArchI386 = 0x0000
constant flagArchX8664 (line 47) | flagArchX8664 = 0x0300
constant flagArchX32 (line 48) | flagArchX32 = 0x0800
constant flagArchPpc64le (line 49) | flagArchPpc64le = 0x0500
constant flagArch_ARM_LIBHF (line 52) | flagArch_ARM_LIBHF = 0x0900
constant flagArch_AARCH64_LIB64 (line 54) | flagArch_AARCH64_LIB64 = 0x0a00
type header1 (line 59) | type header1 struct
type entry1 (line 64) | type entry1 struct
type header2 (line 69) | type header2 struct
type entry2 (line 78) | type entry2 struct
type LDCache (line 88) | type LDCache interface
type ldcache (line 92) | type ldcache struct
method Close (line 133) | func (c *ldcache) Close() error {
method Magic (line 137) | func (c *ldcache) Magic() string {
method Version (line 141) | func (c *ldcache) Version() string {
method parse (line 149) | func (c *ldcache) parse() error {
method getEntries (line 193) | func (c *ldcache) getEntries() []entry {
method List (line 241) | func (c *ldcache) List() ([]string, []string) {
function New (line 104) | func New(logger logger.Interface, root string) (LDCache, error) {
function strn (line 145) | func strn(b []byte, n int) string {
type entry (line 186) | type entry struct
function bytesToString (line 259) | func bytesToString(value []byte) string {
FILE: internal/ldcache/ldcache_mock.go
type LDCacheMock (line 29) | type LDCacheMock struct
method List (line 43) | func (mock *LDCacheMock) List() ([]string, []string) {
method ListCalls (line 59) | func (mock *LDCacheMock) ListCalls() []struct {
FILE: internal/ldconfig/ldconfig.go
constant ldsoconfdFilenamePattern (line 42) | ldsoconfdFilenamePattern = "00-nvcr-*.conf"
constant ldsoconfdSystemDirsFilenamePattern (line 48) | ldsoconfdSystemDirsFilenamePattern = "zz-nvcr-*.conf"
constant defaultTopLevelLdsoconfFilePath (line 52) | defaultTopLevelLdsoconfFilePath = "/etc/ld.so.conf"
constant defaultLdsoconfdDir (line 57) | defaultLdsoconfdDir = "/etc/ld.so.conf.d"
type Ldconfig (line 60) | type Ldconfig struct
method UpdateLDCache (line 142) | func (l *Ldconfig) UpdateLDCache() error {
method prepareRoot (line 193) | func (l *Ldconfig) prepareRoot() (string, error) {
method filterDirectories (line 222) | func (l *Ldconfig) filterDirectories(configFilePath string, directorie...
method getLdsoconfDirectories (line 304) | func (l *Ldconfig) getLdsoconfDirectories(configFilePath string) (map[...
method getSystemSearchPaths (line 335) | func (l *Ldconfig) getSystemSearchPaths() []string {
method pivotRoot (line 524) | func (l *Ldconfig) pivotRoot(root *os.Root) error {
function NewRunner (line 70) | func NewRunner(id string, ldconfigPath string, containerRoot string, add...
function NewFromArgs (line 109) | func NewFromArgs(args ...string) (*Ldconfig, error) {
function createLdsoconfdFile (line 241) | func createLdsoconfdFile(ldsoconfdDir, pattern string, dirs ...string) e...
function outputListToFile (line 268) | func outputListToFile(w io.Writer, dirs ...string) error {
function ensureLdsoconfFile (line 286) | func ensureLdsoconfFile(topLevelLdsoconfFilePath, ldsoconfdDir string) e...
function processLdsoconfFile (line 344) | func processLdsoconfFile(ldsoconfFilename string) ([]string, []string, e...
function createMuslPathFileIfRequired (line 381) | func createMuslPathFileIfRequired(dirs ...string) error {
function isMusl (line 408) | func isMusl() bool {
function isDebianLike (line 419) | func isDebianLike() bool {
function nonDebianSystemSearchPaths (line 458) | func nonDebianSystemSearchPaths() []string {
function debianSystemSearchPaths (line 506) | func debianSystemSearchPaths() []string {
function noPivotRoot (line 544) | func noPivotRoot() bool {
function getRootfsType (line 552) | func getRootfsType(path string) (string, error) {
FILE: internal/ldconfig/ldconfig_linux.go
function pivotRoot (line 47) | func pivotRoot(rootfs string) error {
function msMoveRoot (line 111) | func msMoveRoot(rootfs string) error {
function chroot (line 174) | func chroot() error {
function mountLdConfig (line 187) | func mountLdConfig(hostLdconfigPath string, containerRoot *os.Root) (str...
function mountProc (line 225) | func mountProc(newroot *os.Root) error {
function createTmpFs (line 235) | func createTmpFs(target string, size int) error {
function createReexecCommand (line 242) | func createReexecCommand(args []string) (*exec.Cmd, error) {
FILE: internal/ldconfig/ldconfig_other.go
function pivotRoot (line 28) | func pivotRoot(newroot string) error {
function msMoveRoot (line 32) | func msMoveRoot(rootfs string) error {
function mountLdConfig (line 36) | func mountLdConfig(hostLdconfigPath string, containerRoot *os.Root) (str...
function mountProc (line 40) | func mountProc(newroot *os.Root) error {
function createReexecCommand (line 44) | func createReexecCommand(args []string) (*exec.Cmd, error) {
FILE: internal/ldconfig/ldconfig_test.go
function TestFilterDirectories (line 29) | func TestFilterDirectories(t *testing.T) {
function TestCreateLdsoconfdFile (line 129) | func TestCreateLdsoconfdFile(t *testing.T) {
function TestEnsureLdsoconfFile (line 202) | func TestEnsureLdsoconfFile(t *testing.T) {
FILE: internal/ldconfig/safe-exec_linux.go
function SafeExec (line 31) | func SafeExec(path string, args []string, envv []string) error {
function cloneBinary (line 44) | func cloneBinary(path string) (*os.File, error) {
FILE: internal/ldconfig/safe-exec_other.go
function SafeExec (line 25) | func SafeExec(path string, args []string, envv []string) error {
FILE: internal/logger/api.go
type Interface (line 20) | type Interface interface
FILE: internal/logger/lib.go
function New (line 22) | func New() Interface {
type NullLogger (line 27) | type NullLogger struct
method Debugf (line 32) | func (l *NullLogger) Debugf(string, ...interface{}) {}
method Errorf (line 35) | func (l *NullLogger) Errorf(string, ...interface{}) {}
method Infof (line 38) | func (l *NullLogger) Infof(string, ...interface{}) {}
method Warningf (line 41) | func (l *NullLogger) Warningf(string, ...interface{}) {}
method Tracef (line 44) | func (l *NullLogger) Tracef(string, ...interface{}) {}
FILE: internal/lookup/root/cuda_test.go
function TestLocate (line 32) | func TestLocate(t *testing.T) {
function setupDriverRoot (line 84) | func setupDriverRoot(t *testing.T, libCudaPath string) (string, error) {
FILE: internal/lookup/root/options.go
type options (line 21) | type options struct
type Option (line 34) | type Option
function WithLogger (line 36) | func WithLogger(logger logger.Interface) Option {
function WithDevRoot (line 42) | func WithDevRoot(devRoot string) Option {
function WithDriverRoot (line 48) | func WithDriverRoot(root string) Option {
function WithLibrarySearchPaths (line 54) | func WithLibrarySearchPaths(paths ...string) Option {
function WithConfigSearchPaths (line 60) | func WithConfigSearchPaths(paths ...string) Option {
function WithVersioner (line 66) | func WithVersioner(versioner Versioner) Option {
FILE: internal/lookup/root/root.go
type Driver (line 32) | type Driver struct
method Version (line 87) | func (r *Driver) Version() (string, error) {
method GetDriverLibDirectory (line 103) | func (r *Driver) GetDriverLibDirectory() (string, error) {
method DriverLibraryLocator (line 116) | func (r *Driver) DriverLibraryLocator(additionalDirs ...string) (looku...
method updateInfo (line 143) | func (r *Driver) updateInfo() error {
method inferVersion (line 160) | func (r *Driver) inferVersion() (string, string, error) {
method RelativeToRoot (line 186) | func (r *Driver) RelativeToRoot(path string) string {
method Files (line 198) | func (r *Driver) Files(opts ...lookup.Option) lookup.Locator {
method Libraries (line 208) | func (r *Driver) Libraries() lookup.Locator {
method Configs (line 219) | func (r *Driver) Configs() lookup.Locator {
method configSearchOptions (line 223) | func (r *Driver) configSearchOptions() []lookup.Option {
function New (line 51) | func New(opts ...Option) *Driver {
function xdgDataDirs (line 242) | func xdgDataDirs() []string {
FILE: internal/lookup/root/root_test.go
function TestDriverLibrariesLocate (line 30) | func TestDriverLibrariesLocate(t *testing.T) {
FILE: internal/lookup/root/version.go
type Versioner (line 22) | type Versioner interface
function FirstOf (line 26) | func FirstOf(v ...Versioner) Versioner {
type firstVersion (line 30) | type firstVersion
method Version (line 34) | func (f firstVersion) Version() (string, error) {
FILE: internal/modifier/cdi.go
constant automaticDeviceVendor (line 34) | automaticDeviceVendor = "runtime.nvidia.com"
constant automaticDeviceClass (line 35) | automaticDeviceClass = "gpu"
constant automaticDeviceKind (line 36) | automaticDeviceKind = automaticDeviceVendor + "/" + automaticDeviceClass
constant automaticDevicePrefix (line 37) | automaticDevicePrefix = automaticDeviceKind + "="
method newCDIModifier (line 43) | func (f *Factory) newCDIModifier(isJitCDI bool) (oci.SpecModifier, error) {
method newJitCDIModifier (line 81) | func (f *Factory) newJitCDIModifier(automaticDevices []string) (oci.Spec...
type deviceRequestor (line 89) | type deviceRequestor interface
type cdiDeviceRequestor (line 93) | type cdiDeviceRequestor struct
method DeviceRequests (line 108) | func (c *cdiDeviceRequestor) DeviceRequests() []string {
function newCDIDeviceRequestor (line 99) | func newCDIDeviceRequestor(logger logger.Interface, image *image.CUDA, d...
type gatedDevices (line 126) | type gatedDevices
method DeviceRequests (line 129) | func (g gatedDevices) DeviceRequests() []string {
type imexDevices (line 149) | type imexDevices
method DeviceRequests (line 151) | func (d imexDevices) DeviceRequests() []string {
function filterAutomaticDevices (line 164) | func filterAutomaticDevices(devices []string) []string {
method newAutomaticCDISpecModifier (line 175) | func (f *Factory) newAutomaticCDISpecModifier(devices []string) (oci.Spe...
type cdiModeIdentifiers (line 226) | type cdiModeIdentifiers struct
function cdiModeIdentfiersFromDevices (line 232) | func cdiModeIdentfiersFromDevices(devices ...string) *cdiModeIdentifiers {
function getModeIdentifier (line 255) | func getModeIdentifier(device string) (string, string) {
type deduplicatedDeviceRequestor (line 267) | type deduplicatedDeviceRequestor struct
method DeviceRequests (line 275) | func (d *deduplicatedDeviceRequestor) DeviceRequests() []string {
function withUniqueDevices (line 271) | func withUniqueDevices(deviceRequestor deviceRequestor) deviceRequestor {
FILE: internal/modifier/cdi/builder.go
type builder (line 29) | type builder struct
method build (line 52) | func (m builder) build() (oci.SpecModifier, error) {
type Option (line 37) | type Option
function New (line 40) | func New(opts ...Option) (oci.SpecModifier, error) {
function WithLogger (line 82) | func WithLogger(logger logger.Interface) Option {
function WithSpecDirs (line 89) | func WithSpecDirs(specDirs ...string) Option {
function WithDevices (line 96) | func WithDevices(devices ...string) Option {
function WithSpec (line 103) | func WithSpec(spec *specs.Spec) Option {
FILE: internal/modifier/cdi/registry.go
type fromRegistry (line 31) | type fromRegistry struct
method Modify (line 40) | func (m fromRegistry) Modify(spec *specs.Spec) error {
FILE: internal/modifier/cdi/spec.go
type fromCDISpec (line 31) | type fromCDISpec struct
method Modify (line 38) | func (m fromCDISpec) Modify(spec *specs.Spec) error {
method enrichDevice (line 52) | func (m fromCDISpec) enrichDevice(device cdi.Device) cdi.Device {
FILE: internal/modifier/cdi_test.go
function TestDeviceRequests (line 29) | func TestDeviceRequests(t *testing.T) {
function Test_cdiModeIdentfiersFromDevices (line 218) | func Test_cdiModeIdentfiersFromDevices(t *testing.T) {
FILE: internal/modifier/csv.go
method newCSVModifier (line 31) | func (f *Factory) newCSVModifier() (oci.SpecModifier, error) {
function checkRequirements (line 46) | func checkRequirements(logger logger.Interface, image *image.CUDA) error {
type csvDevices (line 78) | type csvDevices
method DeviceRequests (line 80) | func (d csvDevices) DeviceRequests() []string {
FILE: internal/modifier/csv_test.go
function TestNewCSVModifier (line 35) | func TestNewCSVModifier(t *testing.T) {
FILE: internal/modifier/discover.go
type discoverModifier (line 30) | type discoverModifier struct
method Modify (line 49) | func (m discoverModifier) Modify(spec *ocispecs.Spec) error {
method newModifierFromDiscoverer (line 38) | func (f *Factory) newModifierFromDiscoverer(d discover.Discover) (oci.Sp...
FILE: internal/modifier/discover_test.go
function TestDiscoverModifier (line 31) | func TestDiscoverModifier(t *testing.T) {
FILE: internal/modifier/factory.go
type factoryOptions (line 37) | type factoryOptions struct
type Factory (line 46) | type Factory struct
method validate (line 80) | func (f *Factory) validate() error {
method Modify (line 96) | func (f *Factory) Modify(s *specs.Spec) error {
method create (line 105) | func (f *Factory) create() (oci.SpecModifier, error) {
function New (line 56) | func New(opts ...Option) (oci.SpecModifier, error) {
function createFactory (line 66) | func createFactory(opts ...Option) *Factory {
type Option (line 136) | type Option
function WithConfig (line 138) | func WithConfig(cfg *config.Config) Option {
function WithDriver (line 144) | func WithDriver(driver *root.Driver) Option {
function WithHookCreator (line 149) | func WithHookCreator(hookCreator discover.HookCreator) Option {
function WithImage (line 155) | func WithImage(image *image.CUDA) Option {
function WithLogger (line 161) | func WithLogger(logger logger.Interface) Option {
function WithRuntimeMode (line 167) | func WithRuntimeMode(runtimeMode info.RuntimeMode) Option {
FILE: internal/modifier/gated.go
method newFeatureGatedModifier (line 36) | func (f *Factory) newFeatureGatedModifier() (oci.SpecModifier, error) {
method getCudaCompatModeModifier (line 63) | func (f *Factory) getCudaCompatModeModifier() (oci.SpecModifier, error) {
FILE: internal/modifier/graphics.go
method newGraphicsModifier (line 29) | func (f *Factory) newGraphicsModifier() (oci.SpecModifier, error) {
function requiresGraphicsModifier (line 65) | func requiresGraphicsModifier(cudaImage image.CUDA) ([]string, string) {
FILE: internal/modifier/graphics_test.go
function TestGraphicsModifier (line 27) | func TestGraphicsModifier(t *testing.T) {
FILE: internal/modifier/hook_remover.go
type nvidiaContainerRuntimeHookRemover (line 30) | type nvidiaContainerRuntimeHookRemover struct
method Modify (line 44) | func (m nvidiaContainerRuntimeHookRemover) Modify(spec *specs.Spec) er...
method newNvidiaContainerRuntimeHookRemover (line 37) | func (f *Factory) newNvidiaContainerRuntimeHookRemover() oci.SpecModifier {
function isNVIDIAContainerRuntimeHook (line 79) | func isNVIDIAContainerRuntimeHook(hook *specs.Hook) bool {
FILE: internal/modifier/hook_remover_test.go
function TestHookRemover (line 27) | func TestHookRemover(t *testing.T) {
FILE: internal/modifier/list.go
type list (line 25) | type list
method Modify (line 28) | func (m list) Modify(spec *specs.Spec) error {
FILE: internal/modifier/mode.go
method newModeModifier (line 11) | func (f *Factory) newModeModifier() (oci.SpecModifier, error) {
function supportedModifierTypes (line 24) | func supportedModifierTypes(mode info.RuntimeMode) []string {
FILE: internal/modifier/stable.go
method newStableRuntimeModifier (line 30) | func (f *Factory) newStableRuntimeModifier() oci.SpecModifier {
type stableRuntimeModifier (line 41) | type stableRuntimeModifier struct
method Modify (line 48) | func (m stableRuntimeModifier) Modify(spec *specs.Spec) error {
FILE: internal/modifier/stable_test.go
type testConfig (line 33) | type testConfig struct
function TestMain (line 40) | func TestMain(m *testing.M) {
function TestAddHookModifier (line 65) | func TestAddHookModifier(t *testing.T) {
FILE: internal/nvcaps/nvcaps.go
constant nvidiaProcDriverPath (line 31) | nvidiaProcDriverPath = "/proc/driver/nvidia"
constant nvidiaCapabilitiesPath (line 32) | nvidiaCapabilitiesPath = nvidiaProcDriverPath + "/capabilities"
constant nvcapsProcDriverPath (line 34) | nvcapsProcDriverPath = "/proc/driver/nvidia-caps"
constant nvcapsMigMinorsPath (line 35) | nvcapsMigMinorsPath = nvcapsProcDriverPath + "/mig-minors"
constant nvcapsDevicePath (line 36) | nvcapsDevicePath = "/dev/nvidia-caps"
type MigMinor (line 40) | type MigMinor
method DevicePath (line 164) | func (m MigMinor) DevicePath() string {
type MigCap (line 43) | type MigCap
method isValid (line 124) | func (m MigCap) isValid() bool {
method ProcPath (line 148) | func (m MigCap) ProcPath() string {
type MigCaps (line 46) | type MigCaps
method GetCapDevicePath (line 62) | func (m MigCaps) GetCapDevicePath(cap MigCap) (string, error) {
function NewGPUInstanceCap (line 50) | func NewGPUInstanceCap(gpu, gi int) MigCap {
function NewComputeInstanceCap (line 56) | func NewComputeInstanceCap(gpu, gi, ci int) MigCap {
function NewMigCaps (line 71) | func NewMigCaps() (MigCaps, error) {
function processMinorsFile (line 89) | func processMinorsFile(minorsFile io.Reader) MigCaps {
function processMigMinorsLine (line 105) | func processMigMinorsLine(line string) (MigCap, MigMinor, error) {
FILE: internal/nvcaps/nvcaps_test.go
function TestProcessMinorsFile (line 27) | func TestProcessMinorsFile(t *testing.T) {
function TestProcessMigMinorsLine (line 48) | func TestProcessMigMinorsLine(t *testing.T) {
function TestMigCapProcPaths (line 79) | func TestMigCapProcPaths(t *testing.T) {
function TestMigMinorDevicePath (line 97) | func TestMigMinorDevicePath(t *testing.T) {
FILE: internal/nvsandboxutils/api.go
type libraryOptions (line 20) | type libraryOptions struct
type LibraryOption (line 26) | type LibraryOption
function WithLibraryPath (line 29) | func WithLibraryPath(path string) LibraryOption {
function SetLibraryOptions (line 37) | func SetLibraryOptions(opts ...LibraryOption) error {
FILE: internal/nvsandboxutils/cgo_helpers_static.go
function clen (line 21) | func clen(n []byte) int {
function convertStringToFixedArray (line 32) | func convertStringToFixedArray(str string) [INPUT_LENGTH]int8 {
FILE: internal/nvsandboxutils/const.go
constant INPUT_LENGTH (line 33) | INPUT_LENGTH = 256
constant MAX_FILE_PATH (line 35) | MAX_FILE_PATH = 256
constant MAX_NAME_LENGTH (line 37) | MAX_NAME_LENGTH = 256
type Ret (line 41) | type Ret
constant SUCCESS (line 45) | SUCCESS Ret = iota
constant ERROR_UNINITIALIZED (line 46) | ERROR_UNINITIALIZED Ret = 1
constant ERROR_NOT_SUPPORTED (line 47) | ERROR_NOT_SUPPORTED Ret = 2
constant ERROR_INVALID_ARG (line 48) | ERROR_INVALID_ARG Ret = 3
constant ERROR_INSUFFICIENT_SIZE (line 49) | ERROR_INSUFFICIENT_SIZE Ret = 4
constant ERROR_VERSION_NOT_SUPPORTED (line 50) | ERROR_VERSION_NOT_SUPPORTED Ret = 5
constant ERROR_LIBRARY_LOAD (line 51) | ERROR_LIBRARY_LOAD Ret = 6
constant ERROR_FUNCTION_NOT_FOUND (line 52) | ERROR_FUNCTION_NOT_FOUND Ret = 7
constant ERROR_DEVICE_NOT_FOUND (line 53) | ERROR_DEVICE_NOT_FOUND Ret = 8
constant ERROR_NVML_LIB_CALL (line 54) | ERROR_NVML_LIB_CALL Ret = 9
constant ERROR_OUT_OF_MEMORY (line 55) | ERROR_OUT_OF_MEMORY Ret = 10
constant ERROR_FILEPATH_NOT_FOUND (line 56) | ERROR_FILEPATH_NOT_FOUND Ret = 11
constant ERROR_UNKNOWN (line 57) | ERROR_UNKNOWN Ret = 65535
type LogLevel (line 61) | type LogLevel
constant LOG_LEVEL_FATAL (line 65) | LOG_LEVEL_FATAL LogLevel = iota
constant LOG_LEVEL_ERROR (line 66) | LOG_LEVEL_ERROR LogLevel = 1
constant LOG_LEVEL_WARN (line 67) | LOG_LEVEL_WARN LogLevel = 2
constant LOG_LEVEL_DEBUG (line 68) | LOG_LEVEL_DEBUG LogLevel = 3
constant LOG_LEVEL_INFO (line 69) | LOG_LEVEL_INFO LogLevel = 4
constant LOG_LEVEL_NONE (line 70) | LOG_LEVEL_NONE LogLevel = 65535
type RootfsInputType (line 74) | type RootfsInputType
constant NV_ROOTFS_DEFAULT (line 78) | NV_ROOTFS_DEFAULT RootfsInputType = iota
constant NV_ROOTFS_PATH (line 79) | NV_ROOTFS_PATH RootfsInputType = 1
constant NV_ROOTFS_PID (line 80) | NV_ROOTFS_PID RootfsInputType = 2
type FileType (line 84) | type FileType
constant NV_DEV (line 88) | NV_DEV FileType = iota
constant NV_PROC (line 89) | NV_PROC FileType = 1
constant NV_SYS (line 90) | NV_SYS FileType = 2
type FileSystemSubType (line 94) | type FileSystemSubType
constant NV_DEV_NVIDIA (line 98) | NV_DEV_NVIDIA FileSystemSubType ...
constant NV_DEV_DRI_CARD (line 99) | NV_DEV_DRI_CARD FileSystemSubType = 1
constant NV_DEV_DRI_RENDERD (line 100) | NV_DEV_DRI_RENDERD FileSystemSubType = 2
constant NV_DEV_DRI_CARD_SYMLINK (line 101) | NV_DEV_DRI_CARD_SYMLINK FileSystemSubType = 3
constant NV_DEV_DRI_RENDERD_SYMLINK (line 102) | NV_DEV_DRI_RENDERD_SYMLINK FileSystemSubType = 4
constant NV_DEV_NVIDIA_UVM (line 103) | NV_DEV_NVIDIA_UVM FileSystemSubType = 5
constant NV_DEV_NVIDIA_UVM_TOOLS (line 104) | NV_DEV_NVIDIA_UVM_TOOLS FileSystemSubType = 6
constant NV_DEV_NVIDIA_MODESET (line 105) | NV_DEV_NVIDIA_MODESET FileSystemSubType = 7
constant NV_DEV_NVIDIA_CTL (line 106) | NV_DEV_NVIDIA_CTL FileSystemSubType = 8
constant NV_DEV_GDRDRV (line 107) | NV_DEV_GDRDRV FileSystemSubType = 9
constant NV_DEV_NVIDIA_CAPS_NVIDIA_CAP (line 108) | NV_DEV_NVIDIA_CAPS_NVIDIA_CAP FileSystemSubType ...
constant NV_PROC_DRIVER_NVIDIA_GPUS_PCIBUSID (line 109) | NV_PROC_DRIVER_NVIDIA_GPUS_PCIBUSID FileSystemSubType ...
constant NV_PROC_DRIVER_NVIDIA_GPUS (line 110) | NV_PROC_DRIVER_NVIDIA_GPUS FileSystemSubType ...
constant NV_PROC_NVIDIA_PARAMS (line 111) | NV_PROC_NVIDIA_PARAMS FileSystemSubType ...
constant NV_PROC_NVIDIA_CAPS_MIG_MINORS (line 112) | NV_PROC_NVIDIA_CAPS_MIG_MINORS FileSystemSubType ...
constant NV_PROC_DRIVER_NVIDIA_CAPABILITIES_GPU (line 113) | NV_PROC_DRIVER_NVIDIA_CAPABILITIES_GPU FileSystemSubType ...
constant NV_PROC_DRIVER_NVIDIA_CAPABILITIES (line 114) | NV_PROC_DRIVER_NVIDIA_CAPABILITIES FileSystemSubType ...
constant NV_PROC_DRIVER_NVIDIA_CAPABILITIIES_GPU_MIG_CI_ACCESS (line 115) | NV_PROC_DRIVER_NVIDIA_CAPABILITIIES_GPU_MIG_CI_ACCESS FileSystemSubType ...
constant NV_SYS_MODULE_NVIDIA_DRIVER_PCIBUSID (line 116) | NV_SYS_MODULE_NVIDIA_DRIVER_PCIBUSID FileSystemSubType ...
constant NV_SYS_MODULE_NVIDIA_DRIVER (line 117) | NV_SYS_MODULE_NVIDIA_DRIVER FileSystemSubType ...
constant NV_NUM_SUBTYPE (line 118) | NV_NUM_SUBTYPE FileSystemSubType ...
type FileModule (line 122) | type FileModule
constant NV_GPU (line 126) | NV_GPU FileModule = iota
constant NV_MIG (line 127) | NV_MIG FileModule = 1
constant NV_DRIVER_NVIDIA (line 128) | NV_DRIVER_NVIDIA FileModule = 2
constant NV_DRIVER_NVIDIA_UVM (line 129) | NV_DRIVER_NVIDIA_UVM FileModule = 3
constant NV_DRIVER_NVIDIA_MODESET (line 130) | NV_DRIVER_NVIDIA_MODESET FileModule = 4
constant NV_DRIVER_GDRDRV (line 131) | NV_DRIVER_GDRDRV FileModule = 5
constant NV_SYSTEM (line 132) | NV_SYSTEM FileModule = 6
type FileFlag (line 136) | type FileFlag
constant NV_FILE_FLAG_HINT (line 140) | NV_FILE_FLAG_HINT FileFlag = 1
constant NV_FILE_FLAG_MASKOUT (line 141) | NV_FILE_FLAG_MASKOUT FileFlag = 2
constant NV_FILE_FLAG_CONTENT (line 142) | NV_FILE_FLAG_CONTENT FileFlag = 4
constant NV_FILE_FLAG_DEPRECTATED (line 143) | NV_FILE_FLAG_DEPRECTATED FileFlag = 8
constant NV_FILE_FLAG_CANDIDATES (line 144) | NV_FILE_FLAG_CANDIDATES FileFlag = 16
type GpuInputType (line 148) | type GpuInputType
constant NV_GPU_INPUT_GPU_UUID (line 152) | NV_GPU_INPUT_GPU_UUID GpuInputType = iota
constant NV_GPU_INPUT_MIG_UUID (line 153) | NV_GPU_INPUT_MIG_UUID GpuInputType = 1
constant NV_GPU_INPUT_PCI_ID (line 154) | NV_GPU_INPUT_PCI_ID GpuInputType = 2
constant NV_GPU_INPUT_PCI_INDEX (line 155) | NV_GPU_INPUT_PCI_INDEX GpuInputType = 3
FILE: internal/nvsandboxutils/dynamicLibrary_mock.go
type dynamicLibraryMock (line 35) | type dynamicLibraryMock struct
method Close (line 65) | func (mock *dynamicLibraryMock) Close() error {
method CloseCalls (line 84) | func (mock *dynamicLibraryMock) CloseCalls() []struct {
method Lookup (line 95) | func (mock *dynamicLibraryMock) Lookup(s string) error {
method LookupCalls (line 117) | func (mock *dynamicLibraryMock) LookupCalls() []struct {
method Open (line 130) | func (mock *dynamicLibraryMock) Open() error {
method OpenCalls (line 149) | func (mock *dynamicLibraryMock) OpenCalls() []struct {
FILE: internal/nvsandboxutils/gen/nvsandboxutils/generateapi.go
type GeneratableInterfacePoperties (line 35) | type GeneratableInterfacePoperties struct
function main (line 50) | func main() {
function getWriter (line 114) | func getWriter(outputFile string) (io.Writer, func() error, error) {
function generateHeader (line 127) | func generateHeader() (string, error) {
function generatePackageMethodsComment (line 154) | func generatePackageMethodsComment(input GeneratableInterfacePoperties) ...
function generateInterfaceComment (line 166) | func generateInterfaceComment(input GeneratableInterfacePoperties) (stri...
function generatePackageMethods (line 180) | func generatePackageMethods(sourceDir string, input GeneratableInterface...
function generateInterface (line 200) | func generateInterface(sourceDir string, input GeneratableInterfacePoper...
function getGoFiles (line 219) | func getGoFiles(sourceDir string) (map[string][]byte, error) {
function extractMethodsFromPackage (line 248) | func extractMethodsFromPackage(sourceDir string, input GeneratableInterf...
function extractMethods (line 270) | func extractMethods(sourceFile string, sourceContent []byte, input Gener...
function formatMethodSignature (line 330) | func formatMethodSignature(decl *ast.FuncDecl) string {
function formatFieldList (line 369) | func formatFieldList(field *ast.Field) string {
function isPublic (line 384) | func isPublic(name string) bool {
FILE: internal/nvsandboxutils/gen/nvsandboxutils/nvsandboxutils.h
type nvSandboxUtilsRet_t (line 38) | typedef enum
type nvSandboxUtilsLogLevel_t (line 67) | typedef enum
type nvSandboxUtilsRootfsInputType_t (line 80) | typedef enum
type nvSandboxUtilsFileType_t (line 90) | typedef enum
type nvSandboxUtilsFileSystemSubType_t (line 100) | typedef enum
type nvSandboxUtilsFileModule_t (line 128) | typedef enum
type nvSandboxUtilsFileFlag_t (line 142) | typedef enum
type nvSandboxUtilsGpuInputType_t (line 156) | typedef enum
type nvSandboxUtilsInitInput_v1_t (line 175) | typedef struct
type nvSandboxUtilsInitInput_v1_t (line 182) | typedef nvSandboxUtilsInitInput_v1_t nvSandboxUtilsInitInput_t;
type nvSandboxUtilsGpuFileInfo_v1_t (line 187) | typedef struct nvSandboxUtilsGpuFileInfo_v1_t
type nvSandboxUtilsGpuRes_v1_t (line 200) | typedef struct
type nvSandboxUtilsGpuRes_v1_t (line 208) | typedef nvSandboxUtilsGpuRes_v1_t nvSandboxUtilsGpuRes_t;
FILE: internal/nvsandboxutils/gpu-resources.go
type GpuResource (line 26) | type GpuResource struct
type GpuFileInfo (line 30) | type GpuFileInfo struct
method GetGpuResource (line 38) | func (l *library) GetGpuResource(uuid string) ([]GpuFileInfo, Ret) {
FILE: internal/nvsandboxutils/impl.go
method Init (line 21) | func (l *library) Init(path string) Ret {
method Shutdown (line 35) | func (l *library) Shutdown() Ret {
constant VERSION_LENGTH (line 50) | VERSION_LENGTH = 100
method GetDriverVersion (line 52) | func (l *library) GetDriverVersion() (string, Ret) {
method GetFileContent (line 58) | func (l *library) GetFileContent(path string) (string, Ret) {
FILE: internal/nvsandboxutils/lib.go
constant defaultNvSandboxUtilsLibraryName (line 28) | defaultNvSandboxUtilsLibraryName = "libnvidia-sandboxutils.so.1"
constant defaultNvSandboxUtilsLibraryLoadFlags (line 29) | defaultNvSandboxUtilsLibraryLoadFlags = dl.RTLD_LAZY | dl.RTLD_GLOBAL
type dynamicLibrary (line 39) | type dynamicLibrary interface
type library (line 47) | type library struct
method init (line 67) | func (l *library) init(opts ...LibraryOption) {
method LookupSymbol (line 86) | func (l *library) LookupSymbol(name string) error {
method load (line 95) | func (l *library) load() (rerr error) {
method close (line 120) | func (l *library) close() (rerr error) {
method updateVersionedSymbols (line 150) | func (l *library) updateVersionedSymbols() {
function New (line 57) | func New(opts ...LibraryOption) Interface {
function newLibrary (line 61) | func newLibrary(opts ...LibraryOption) *library {
FILE: internal/nvsandboxutils/lib_test.go
function newTestLibrary (line 27) | func newTestLibrary(dl dynamicLibrary) *library {
function TestLookupFromDefault (line 31) | func TestLookupFromDefault(t *testing.T) {
function TestLoadAndCloseNesting (line 139) | func TestLoadAndCloseNesting(t *testing.T) {
function TestLoadAndCloseWithErrors (line 175) | func TestLoadAndCloseWithErrors(t *testing.T) {
FILE: internal/nvsandboxutils/mock/interface.go
type Interface (line 49) | type Interface struct
method ErrorString (line 115) | func (mock *Interface) ErrorString(ret nvsandboxutils.Ret) string {
method ErrorStringCalls (line 134) | func (mock *Interface) ErrorStringCalls() []struct {
method GetDriverVersion (line 147) | func (mock *Interface) GetDriverVersion() (string, nvsandboxutils.Ret) {
method GetDriverVersionCalls (line 163) | func (mock *Interface) GetDriverVersionCalls() []struct {
method GetFileContent (line 174) | func (mock *Interface) GetFileContent(s string) (string, nvsandboxutil...
method GetFileContentCalls (line 193) | func (mock *Interface) GetFileContentCalls() []struct {
method GetGpuResource (line 206) | func (mock *Interface) GetGpuResource(s string) ([]nvsandboxutils.GpuF...
method GetGpuResourceCalls (line 225) | func (mock *Interface) GetGpuResourceCalls() []struct {
method Init (line 238) | func (mock *Interface) Init(s string) nvsandboxutils.Ret {
method InitCalls (line 257) | func (mock *Interface) InitCalls() []struct {
method LookupSymbol (line 270) | func (mock *Interface) LookupSymbol(s string) error {
method LookupSymbolCalls (line 289) | func (mock *Interface) LookupSymbolCalls() []struct {
method Shutdown (line 302) | func (mock *Interface) Shutdown() nvsandboxutils.Ret {
method ShutdownCalls (line 318) | func (mock *Interface) ShutdownCalls() []struct {
FILE: internal/nvsandboxutils/nvsandboxutils.go
function nvSandboxUtilsInit (line 33) | func nvSandboxUtilsInit(Input *InitInput) Ret {
function nvSandboxUtilsShutdown (line 41) | func nvSandboxUtilsShutdown() Ret {
function nvSandboxUtilsGetDriverVersion (line 48) | func nvSandboxUtilsGetDriverVersion(Version *byte, Length uint32) Ret {
function nvSandboxUtilsGetGpuResource (line 57) | func nvSandboxUtilsGetGpuResource(Request *GpuRes) Ret {
function nvSandboxUtilsGetFileContent (line 65) | func nvSandboxUtilsGetFileContent(FilePath *byte, Content *byte, Content...
FILE: internal/nvsandboxutils/nvsandboxutils.h
type nvSandboxUtilsRet_t (line 38) | typedef enum
type nvSandboxUtilsLogLevel_t (line 67) | typedef enum
type nvSandboxUtilsRootfsInputType_t (line 80) | typedef enum
type nvSandboxUtilsFileType_t (line 90) | typedef enum
type nvSandboxUtilsFileSystemSubType_t (line 100) | typedef enum
type nvSandboxUtilsFileModule_t (line 128) | typedef enum
type nvSandboxUtilsFileFlag_t (line 142) | typedef enum
type nvSandboxUtilsGpuInputType_t (line 156) | typedef enum
type nvSandboxUtilsInitInput_v1_t (line 175) | typedef struct
type nvSandboxUtilsInitInput_v1_t (line 182) | typedef nvSandboxUtilsInitInput_v1_t nvSandboxUtilsInitInput_t;
type nvSandboxUtilsGpuFileInfo_v1_t (line 187) | typedef struct nvSandboxUtilsGpuFileInfo_v1_t
type nvSandboxUtilsGpuRes_v1_t (line 200) | typedef struct
type nvSandboxUtilsGpuRes_v1_t (line 208) | typedef nvSandboxUtilsGpuRes_v1_t nvSandboxUtilsGpuRes_t;
FILE: internal/nvsandboxutils/refcount.go
type refcount (line 19) | type refcount
method IncOnNoError (line 21) | func (r *refcount) IncOnNoError(err error) {
method DecOnNoError (line 27) | func (r *refcount) DecOnNoError(err error) {
FILE: internal/nvsandboxutils/refcount_test.go
function TestRefcount (line 26) | func TestRefcount(t *testing.T) {
FILE: internal/nvsandboxutils/return.go
method ErrorString (line 24) | func (l *library) ErrorString(r Ret) string {
method String (line 29) | func (r Ret) String() string {
method Error (line 34) | func (r Ret) Error() string {
FILE: internal/nvsandboxutils/types_gen.go
type InitInput_v1 (line 6) | type InitInput_v1 struct
type InitInput (line 12) | type InitInput struct
type GpuFileInfo_v1 (line 18) | type GpuFileInfo_v1 struct
type GpuRes_v1 (line 27) | type GpuRes_v1 struct
type GpuRes (line 34) | type GpuRes struct
FILE: internal/nvsandboxutils/zz_generated.api.go
type Interface (line 35) | type Interface interface
FILE: internal/oci/args.go
constant specFileName (line 26) | specFileName = "config.json"
function GetBundleDir (line 31) | func GetBundleDir(args []string) (string, error) {
function GetBundleDirFromArgs (line 46) | func GetBundleDirFromArgs(args []string) (string, error) {
function GetSpecFilePath (line 79) | func GetSpecFilePath(bundleDir string) string {
function IsBundleFlag (line 86) | func IsBundleFlag(arg string) bool {
function HasCreateSubcommand (line 96) | func HasCreateSubcommand(args []string) bool {
FILE: internal/oci/args_test.go
function TestGetBundleDir (line 9) | func TestGetBundleDir(t *testing.T) {
function TestGetSpecFilePathAppendsFilename (line 129) | func TestGetSpecFilePathAppendsFilename(t *testing.T) {
function TestHasCreateSubcommand (line 155) | func TestHasCreateSubcommand(t *testing.T) {
FILE: internal/oci/options.go
type options (line 22) | type options struct
type Option (line 27) | type Option
function WithLogger (line 29) | func WithLogger(logger logger.Interface) Option {
function WithAllowUnknownFields (line 35) | func WithAllowUnknownFields(allowUnknownFields bool) Option {
FILE: internal/oci/runtime.go
type Runtime (line 23) | type Runtime interface
FILE: internal/oci/runtime_low_level.go
function NewLowLevelRuntime (line 29) | func NewLowLevelRuntime(logger logger.Interface, candidates []string) (R...
function findRuntime (line 39) | func findRuntime(logger logger.Interface, candidates []string) (string, ...
FILE: internal/oci/runtime_mock.go
type RuntimeMock (line 32) | type RuntimeMock struct
method Exec (line 55) | func (mock *RuntimeMock) Exec(strings []string) error {
method ExecCalls (line 77) | func (mock *RuntimeMock) ExecCalls() []struct {
method String (line 90) | func (mock *RuntimeMock) String() string {
method StringCalls (line 109) | func (mock *RuntimeMock) StringCalls() []struct {
FILE: internal/oci/runtime_modifier.go
type modifyingRuntimeWrapper (line 25) | type modifyingRuntimeWrapper struct
method Exec (line 53) | func (r *modifyingRuntimeWrapper) Exec(args []string) error {
method modify (line 68) | func (r *modifyingRuntimeWrapper) modify() error {
method String (line 87) | func (r *modifyingRuntimeWrapper) String() string {
function NewModifyingRuntimeWrapper (line 36) | func NewModifyingRuntimeWrapper(logger logger.Interface, runtime Runtime...
FILE: internal/oci/runtime_modifier_test.go
function TestExec (line 28) | func TestExec(t *testing.T) {
function TestNilModiferReturnsRuntime (line 143) | func TestNilModiferReturnsRuntime(t *testing.T) {
type modiferMock (line 159) | type modiferMock struct
method Modify (line 161) | func (m modiferMock) Modify(*specs.Spec) error {
FILE: internal/oci/runtime_path.go
type pathRuntime (line 29) | type pathRuntime struct
method Exec (line 58) | func (s pathRuntime) Exec(args []string) error {
method String (line 68) | func (s pathRuntime) String() string {
function NewRuntimeForPath (line 38) | func NewRuntimeForPath(logger logger.Interface, path string) (Runtime, e...
FILE: internal/oci/runtime_path_test.go
function TestPathRuntimeConstructor (line 26) | func TestPathRuntimeConstructor(t *testing.T) {
function TestPathRuntimeForwardsArgs (line 50) | func TestPathRuntimeForwardsArgs(t *testing.T) {
FILE: internal/oci/runtime_syscall_exec.go
type syscallExec (line 25) | type syscallExec struct
method Exec (line 29) | func (r syscallExec) Exec(args []string) error {
method String (line 41) | func (r syscallExec) String() string {
FILE: internal/oci/spec.go
type SpecModifier (line 26) | type SpecModifier interface
type SpecModifiers (line 34) | type SpecModifiers
method Modify (line 73) | func (ms SpecModifiers) Modify(s *specs.Spec) error {
type Spec (line 41) | type Spec interface
function NewSpec (line 50) | func NewSpec(args []string, opts ...Option) (Spec, error) {
FILE: internal/oci/spec_file.go
type fileSpec (line 28) | type fileSpec struct
method Load (line 60) | func (s *fileSpec) Load() (*specs.Spec, error) {
method Modify (line 93) | func (s *fileSpec) Modify(m SpecModifier) error {
method Flush (line 99) | func (s fileSpec) Flush() error {
type loader (line 34) | type loader
method loadFrom (line 76) | func (isStrict loader) loadFrom(reader io.Reader) (*specs.Spec, error) {
constant strictLoader (line 37) | strictLoader = loader(true)
function NewFileSpec (line 45) | func NewFileSpec(filepath string, isStrict bool) Spec {
function flushTo (line 114) | func flushTo(spec *specs.Spec, writer io.Writer) error {
FILE: internal/oci/spec_file_test.go
function TestLoadFrom (line 28) | func TestLoadFrom(t *testing.T) {
function TestFlushTo (line 63) | func TestFlushTo(t *testing.T) {
type errorWriter (line 99) | type errorWriter struct
method Write (line 101) | func (e errorWriter) Write([]byte) (int, error) {
FILE: internal/oci/spec_memory.go
type memorySpec (line 26) | type memorySpec struct
method Load (line 40) | func (s *memorySpec) Load() (*specs.Spec, error) {
method Flush (line 45) | func (s *memorySpec) Flush() error {
method Modify (line 50) | func (s *memorySpec) Modify(m SpecModifier) error {
method LookupEnv (line 63) | func (s memorySpec) LookupEnv(key string) (string, bool) {
function NewMemorySpec (line 31) | func NewMemorySpec(spec *specs.Spec) Spec {
FILE: internal/oci/spec_memory_test.go
function TestLookupEnv (line 27) | func TestLookupEnv(t *testing.T) {
function TestModify (line 132) | func TestModify(t *testing.T) {
type modifier (line 170) | type modifier struct
method Modify (line 174) | func (m modifier) Modify(spec *specs.Spec) error {
FILE: internal/oci/spec_mock.go
type SpecMock (line 40) | type SpecMock struct
method Flush (line 79) | func (mock *SpecMock) Flush() error {
method FlushCalls (line 98) | func (mock *SpecMock) FlushCalls() []struct {
method Load (line 109) | func (mock *SpecMock) Load() (*specs.Spec, error) {
method LoadCalls (line 129) | func (mock *SpecMock) LoadCalls() []struct {
method LookupEnv (line 140) | func (mock *SpecMock) LookupEnv(s string) (string, bool) {
method LookupEnvCalls (line 163) | func (mock *SpecMock) LookupEnvCalls() []struct {
method Modify (line 176) | func (mock *SpecMock) Modify(specModifier SpecModifier) error {
method ModifyCalls (line 198) | func (mock *SpecMock) ModifyCalls() []struct {
FILE: internal/oci/spec_test.go
function TestMaintainSpec (line 13) | func TestMaintainSpec(t *testing.T) {
FILE: internal/oci/state.go
type State (line 30) | type State
method GetContainerRoot (line 61) | func (s *State) GetContainerRoot() (string, error) {
method loadMinimalSpec (line 80) | func (s *State) loadMinimalSpec() (*minimalSpec, error) {
function LoadContainerState (line 33) | func LoadContainerState(filename string) (*State, error) {
function ReadContainerState (line 48) | func ReadContainerState(reader io.Reader) (*State, error) {
type minimalSpec (line 98) | type minimalSpec struct
FILE: internal/platform-support/dgpu/by-path-hooks.go
type byPathHookDiscoverer (line 29) | type byPathHookDiscoverer struct
method Devices (line 40) | func (d *byPathHookDiscoverer) Devices() ([]discover.Device, error) {
method EnvVars (line 45) | func (d *byPathHookDiscoverer) EnvVars() ([]discover.EnvVar, error) {
method Hooks (line 52) | func (d *byPathHookDiscoverer) Hooks() ([]discover.Hook, error) {
method Mounts (line 67) | func (d *byPathHookDiscoverer) Mounts() ([]discover.Mount, error) {
method deviceNodeLinks (line 71) | func (d *byPathHookDiscoverer) deviceNodeLinks() ([]string, error) {
FILE: internal/platform-support/dgpu/dgpu.go
function NewForDevice (line 32) | func NewForDevice(d device.Device, opts ...Option) (discover.Discover, e...
function NewForMigDevice (line 69) | func NewForMigDevice(d device.Device, mig device.MigDevice, opts ...Opti...
function new (line 111) | func new(opts ...Option) (*options, error) {
FILE: internal/platform-support/dgpu/dgpu_test.go
function TestNewForDevice (line 38) | func TestNewForDevice(t *testing.T) {
type mocks (line 119) | type mocks struct
function mocksServerForTest (line 124) | func mocksServerForTest() mocks {
FILE: internal/platform-support/dgpu/nvml.go
type requiredInfo (line 30) | type requiredInfo interface
method newNvmlDGPUDiscoverer (line 36) | func (o *options) newNvmlDGPUDiscoverer(d requiredInfo) (discover.Discov...
type requiredMigInfo (line 75) | type requiredMigInfo interface
method newNvmlMigDiscoverer (line 80) | func (o *options) newNvmlMigDiscoverer(d requiredMigInfo) (discover.Disc...
type toRequiredInfo (line 120) | type toRequiredInfo struct
method GetMinorNumber (line 124) | func (d *toRequiredInfo) GetMinorNumber() (int, error) {
method getDevNodePath (line 132) | func (d *toRequiredInfo) getDevNodePath() (string, error) {
type toRequiredMigInfo (line 141) | type toRequiredMigInfo struct
method getPlacementInfo (line 146) | func (d *toRequiredMigInfo) getPlacementInfo() (int, int, int, error) {
method getDevNodePath (line 165) | func (d *toRequiredMigInfo) getDevNodePath() (string, error) {
FILE: internal/platform-support/dgpu/nvml_test.go
function TestNewNvmlDGPUDiscoverer (line 35) | func TestNewNvmlDGPUDiscoverer(t *testing.T) {
function TestNewNvmlMIGDiscoverer (line 92) | func TestNewNvmlMIGDiscoverer(t *testing.T) {
FILE: internal/platform-support/dgpu/nvsandboxutils.go
type nvsandboxutilsDGPU (line 30) | type nvsandboxutilsDGPU struct
method Devices (line 66) | func (d *nvsandboxutilsDGPU) Devices() ([]discover.Device, error) {
method EnvVars (line 109) | func (d *nvsandboxutilsDGPU) EnvVars() ([]discover.EnvVar, error) {
method Hooks (line 114) | func (d *nvsandboxutilsDGPU) Hooks() ([]discover.Hook, error) {
method Mounts (line 124) | func (d *nvsandboxutilsDGPU) Mounts() ([]discover.Mount, error) {
type UUIDer (line 41) | type UUIDer interface
method newNvsandboxutilsDGPUDiscoverer (line 45) | func (o *options) newNvsandboxutilsDGPUDiscoverer(d UUIDer) (discover.Di...
FILE: internal/platform-support/dgpu/nvsandboxutils_test.go
function TestNewNvsandboxutilsDGPUDiscoverer (line 34) | func TestNewNvsandboxutilsDGPUDiscoverer(t *testing.T) {
FILE: internal/platform-support/dgpu/options.go
type options (line 27) | type options struct
type Option (line 41) | type Option
function WithDriver (line 44) | func WithDriver(driver *root.Driver) Option {
function WithLogger (line 51) | func WithLogger(logger logger.Interface) Option {
function WithHookCreator (line 58) | func WithHookCreator(hookCreator discover.HookCreator) Option {
function WithMIGCaps (line 65) | func WithMIGCaps(migCaps nvcaps.MigCaps) Option {
function WithNvsandboxuitilsLib (line 72) | func WithNvsandboxuitilsLib(nvsandboxutilslib nvsandboxutils.Interface) ...
FILE: internal/platform-support/tegra/csv.go
method newDiscovererFromMountSpecs (line 29) | func (o options) newDiscovererFromMountSpecs(targetsByType MountSpecPath...
function MountSpecsFromCSVFiles (line 82) | func MountSpecsFromCSVFiles(logger logger.Interface, csvFilePaths ...str...
function loadCSVFile (line 101) | func loadCSVFile(logger logger.Interface, filename string) ([]*csv.Mount...
FILE: internal/platform-support/tegra/csv/csv.go
constant DefaultMountSpecPath (line 33) | DefaultMountSpecPath = "/etc/nvidia-container-runtime/host-files-for-con...
function DefaultFileList (line 37) | func DefaultFileList() []string {
function GetFileList (line 54) | func GetFileList(root string) ([]string, error) {
function BaseFilesOnly (line 82) | func BaseFilesOnly(filenames []string) []string {
type Parser (line 101) | type Parser interface
type csv (line 105) | type csv struct
method Parse (line 121) | func (p csv) Parse() ([]*MountSpec, error) {
method parseFromReader (line 132) | func (p csv) parseFromReader(reader io.Reader) []*MountSpec {
function NewCSVFileParser (line 111) | func NewCSVFileParser(logger logger.Interface, filename string) Parser {
FILE: internal/platform-support/tegra/csv/csv_test.go
function TestGetFileList (line 28) | func TestGetFileList(t *testing.T) {
FILE: internal/platform-support/tegra/csv/mount_spec.go
type MountSpecType (line 25) | type MountSpecType
constant MountSpecDev (line 29) | MountSpecDev = MountSpecType("dev")
constant MountSpecDir (line 31) | MountSpecDir = MountSpecType("dir")
constant MountSpecLib (line 33) | MountSpecLib = MountSpecType("lib")
constant MountSpecSym (line 35) | MountSpecSym = MountSpecType("sym")
type MountSpec (line 39) | type MountSpec struct
function NewMountSpecFromLine (line 45) | func NewMountSpecFromLine(line string) (*MountSpec, error) {
function NewMountSpec (line 57) | func NewMountSpec(mountType string, path string) (*MountSpec, error) {
FILE: internal/platform-support/tegra/csv/mount_spec_test.go
function TestNewMountSpecFromLine (line 26) | func TestNewMountSpecFromLine(t *testing.T) {
FILE: internal/platform-support/tegra/csv_test.go
function TestDiscovererFromCSVFiles (line 31) | func TestDiscovererFromCSVFiles(t *testing.T) {
FILE: internal/platform-support/tegra/filter.go
type ignoreSymlinkMountSpecPatterns (line 26) | type ignoreSymlinkMountSpecPatterns
method match (line 28) | func (d ignoreSymlinkMountSpecPatterns) match(name string) bool {
method filter (line 42) | func (d ignoreSymlinkMountSpecPatterns) filter(input ...string) []stri...
method Apply (line 53) | func (d ignoreSymlinkMountSpecPatterns) Apply(input MountSpecPathsByTy...
type filter (line 65) | type filter interface
type stringMatcher (line 70) | type stringMatcher interface
type matcherAsFilter (line 75) | type matcherAsFilter struct
method apply (line 142) | func (f *matcherAsFilter) apply(input ...string) []string {
type filterByMountSpecType (line 79) | type filterByMountSpecType
method Apply (line 120) | func (p filterByMountSpecType) Apply(input MountSpecPathsByTyper) Moun...
type filterByMountSpecPathsByTyper (line 80) | type filterByMountSpecPathsByTyper struct
method Apply (line 131) | func (p filterByMountSpecPathsByTyper) Apply(input MountSpecPathsByTyp...
type pathPatterns (line 84) | type pathPatterns
method MatchString (line 90) | func (d pathPatterns) MatchString(input string) bool {
type pathPattern (line 85) | type pathPattern
method MatchString (line 102) | func (d pathPattern) MatchString(input string) bool {
type basenamePattern (line 86) | type basenamePattern
method MatchString (line 113) | func (d basenamePattern) MatchString(input string) bool {
type removeAll (line 154) | type removeAll struct
method apply (line 156) | func (a removeAll) apply(...string) []string {
FILE: internal/platform-support/tegra/filter_test.go
function TestIgnorePatterns (line 25) | func TestIgnorePatterns(t *testing.T) {
FILE: internal/platform-support/tegra/mount_specs.go
type MountSpecPathsByTyper (line 26) | type MountSpecPathsByTyper interface
type mountSpecPathsByTypers (line 31) | type mountSpecPathsByTypers
method MountSpecPathsByType (line 51) | func (collection mountSpecPathsByTypers) MountSpecPathsByType() MountS...
type MountSpecPathsByType (line 37) | type MountSpecPathsByType
method MountSpecPathsByType (line 45) | func (m MountSpecPathsByType) MountSpecPathsByType() MountSpecPathsByT...
type Transformer (line 67) | type Transformer interface
function Transform (line 73) | func Transform(input MountSpecPathsByTyper, t ...Transformer) MountSpecP...
type allTransformers (line 80) | type allTransformers
method Apply (line 82) | func (ts allTransformers) Apply(input MountSpecPathsByTyper) MountSpec...
type transformMountSpecByPathsByType (line 92) | type transformMountSpecByPathsByType struct
method MountSpecPathsByType (line 119) | func (m transformMountSpecByPathsByType) MountSpecPathsByType() MountS...
type merge (line 97) | type merge
method MountSpecPathsByType (line 106) | func (ts merge) MountSpecPathsByType() MountSpecPathsByType {
function Merge (line 100) | func Merge(sources ...MountSpecPathsByTyper) MountSpecPathsByTyper {
function IgnoreSymlinkMountSpecsByPattern (line 123) | func IgnoreSymlinkMountSpecsByPattern(ignorePatterns ...string) Transfor...
function OnlyDeviceNodes (line 129) | func OnlyDeviceNodes() Transformer {
function WithoutDeviceNodes (line 139) | func WithoutDeviceNodes() Transformer {
function Without (line 145) | func Without(m MountSpecPathsByTyper) Transformer {
function WithoutRegularDeviceNodes (line 151) | func WithoutRegularDeviceNodes() Transformer {
function DeviceNodes (line 159) | func DeviceNodes(dn ...string) MountSpecPathsByTyper {
function Symlinks (line 167) | func Symlinks(s ...string) MountSpecPathsByTyper {
FILE: internal/platform-support/tegra/options.go
type options (line 27) | type options struct
type Option (line 43) | type Option
function WithLogger (line 46) | func WithLogger(logger logger.Interface) Option {
function WithDriver (line 53) | func WithDriver(driver *root.Driver) Option {
function WithHookCreator (line 60) | func WithHookCreator(hookCreator discover.HookCreator) Option {
function WithLibrarySearchPaths (line 67) | func WithLibrarySearchPaths(librarySearchPaths ...string) Option {
function WithMountSpecs (line 73) | func WithMountSpecs(mountSpecs ...MountSpecPathsByTyper) Option {
FILE: internal/platform-support/tegra/symlinks.go
type symlinkHook (line 27) | type symlinkHook struct
method Hooks (line 50) | func (d symlinkHook) Hooks() ([]discover.Hook, error) {
method getSymlinkCandidates (line 55) | func (d symlinkHook) getSymlinkCandidates() []string {
method getCSVFileSymlinks (line 68) | func (d symlinkHook) getCSVFileSymlinks() []string {
method createCSVSymlinkHooks (line 39) | func (o options) createCSVSymlinkHooks(targets []string) discover.Discov...
FILE: internal/platform-support/tegra/tegra.go
function New (line 29) | func New(opts ...Option) (discover.Discover, error) {
FILE: internal/platform-support/tegra/tegra_test.go
function TestTegraNew (line 35) | func TestTegraNew(t *testing.T) {
function TestOptions (line 150) | func TestOptions(t *testing.T) {
FILE: internal/requirements/constants.go
constant ARCH (line 21) | ARCH = "arch"
constant BRAND (line 22) | BRAND = "brand"
constant CUDA (line 23) | CUDA = "cuda"
constant DRIVER (line 24) | DRIVER = "driver"
FILE: internal/requirements/constraints/binary.go
type binary (line 25) | type binary struct
method String (line 32) | func (c binary) String() string {
method Assert (line 37) | func (c binary) Assert() error {
method eval (line 50) | func (c binary) eval() (bool, error) {
FILE: internal/requirements/constraints/constants.go
constant equal (line 20) | equal = "="
constant notEqual (line 21) | notEqual = "!="
constant less (line 22) | less = "<"
constant lessEqual (line 23) | lessEqual = "<="
constant greater (line 24) | greater = ">"
constant greaterEqual (line 25) | greaterEqual = ">="
type always (line 29) | type always struct
method Assert (line 31) | func (c always) Assert() error {
method String (line 35) | func (c always) String() string {
FILE: internal/requirements/constraints/constraint_mock.go
type ConstraintMock (line 32) | type ConstraintMock struct
method Assert (line 53) | func (mock *ConstraintMock) Assert() error {
method AssertCalls (line 72) | func (mock *ConstraintMock) AssertCalls() []struct {
method String (line 83) | func (mock *ConstraintMock) String() string {
method StringCalls (line 102) | func (mock *ConstraintMock) StringCalls() []struct {
FILE: internal/requirements/constraints/constraints.go
type Constraint (line 22) | type Constraint interface
FILE: internal/requirements/constraints/factory.go
type factory (line 26) | type factory struct
method newConstraintFromRequirement (line 61) | func (r factory) newConstraintFromRequirement(requirement string) (Con...
method parse (line 101) | func (r factory) parse(condition string) (Constraint, error) {
function New (line 32) | func New(logger logger.Interface, requirements []string, properties map[...
FILE: internal/requirements/constraints/factory_test.go
function TestParse (line 26) | func TestParse(t *testing.T) {
function TestNewConstraintFromRequirement (line 110) | func TestNewConstraintFromRequirement(t *testing.T) {
FILE: internal/requirements/constraints/logical.go
type or (line 25) | type or
method Assert (line 53) | func (operands or) Assert() error {
method String (line 63) | func (operands or) String() string {
type and (line 28) | type and
method Assert (line 73) | func (operands and) Assert() error {
method String (line 83) | func (operands and) String() string {
function AND (line 31) | func AND(constraints []Constraint) Constraint {
function OR (line 42) | func OR(constraints []Constraint) Constraint {
FILE: internal/requirements/constraints/logical_test.go
function TestANDConstraint (line 26) | func TestANDConstraint(t *testing.T) {
function TestORConstraint (line 90) | func TestORConstraint(t *testing.T) {
FILE: internal/requirements/constraints/property.go
type Property (line 29) | type Property interface
function NewStringProperty (line 38) | func NewStringProperty(name string, value string) Property {
function NewVersionProperty (line 48) | func NewVersionProperty(name string, value string) Property {
type stringProperty (line 60) | type stringProperty struct
method Name (line 70) | func (p stringProperty) Name() string {
method Value (line 75) | func (p stringProperty) Value() (string, error) {
method CompareTo (line 80) | func (p stringProperty) CompareTo(other string) (int, error) {
method Validate (line 95) | func (p stringProperty) Validate(string) error {
method String (line 100) | func (p stringProperty) String() string {
type versionProperty (line 65) | type versionProperty struct
method CompareTo (line 109) | func (p versionProperty) CompareTo(other string) (int, error) {
method Validate (line 120) | func (p versionProperty) Validate(value string) error {
function ensurePrefix (line 128) | func ensurePrefix(s string, prefix string) string {
FILE: internal/requirements/constraints/property_mock.go
type PropertyMock (line 41) | type PropertyMock struct
method CompareTo (line 87) | func (mock *PropertyMock) CompareTo(s string) (int, error) {
method CompareToCalls (line 110) | func (mock *PropertyMock) CompareToCalls() []struct {
method Name (line 123) | func (mock *PropertyMock) Name() string {
method NameCalls (line 142) | func (mock *PropertyMock) NameCalls() []struct {
method String (line 153) | func (mock *PropertyMock) String() string {
method StringCalls (line 172) | func (mock *PropertyMock) StringCalls() []struct {
method Validate (line 183) | func (mock *PropertyMock) Validate(s string) error {
method ValidateCalls (line 205) | func (mock *PropertyMock) ValidateCalls() []struct {
method Value (line 218) | func (mock *PropertyMock) Value() (string, error) {
method ValueCalls (line 238) | func (mock *PropertyMock) ValueCalls() []struct {
FILE: internal/requirements/requirements.go
type Requirements (line 25) | type Requirements struct
method AddVersionProperty (line 49) | func (r *Requirements) AddVersionProperty(name string, value string) {
method AddStringProperty (line 54) | func (r *Requirements) AddStringProperty(name string, value string) {
method Assert (line 59) | func (r Requirements) Assert() error {
function New (line 32) | func New(logger logger.Interface, requirements []string) *Requirements {
FILE: internal/runtime/api.go
type rt (line 3) | type rt struct
type Interface (line 9) | type Interface interface
type Option (line 14) | type Option
function New (line 17) | func New(opts ...Option) Interface {
function WithModeOverride (line 29) | func WithModeOverride(mode string) Option {
FILE: internal/runtime/logger.go
type Logger (line 35) | type Logger struct
method Update (line 49) | func (l *Logger) Update(filename string, logLevel string, argv []strin...
method Reset (line 130) | func (l *Logger) Reset() error {
function NewLogger (line 42) | func NewLogger() *Logger {
function createLogFile (line 161) | func createLogFile(filename string) (*os.File, error) {
type loggerConfig (line 174) | type loggerConfig struct
method getLevel (line 181) | func (c loggerConfig) getLevel(logLevel string) (logrus.Level, error) {
function parseArgs (line 194) | func parseArgs(args []string) loggerConfig {
FILE: internal/runtime/logger_test.go
function TestLogger (line 26) | func TestLogger(t *testing.T) {
FILE: internal/runtime/runtime.go
method Run (line 34) | func (r rt) Run(argv []string) (rerr error) {
method Errorf (line 94) | func (r rt) Errorf(format string, args ...interface{}) {
function hasVersionFlag (line 99) | func hasVersionFlag(args []string) bool {
FILE: internal/runtime/runtime_factory.go
function newNVIDIAContainerRuntime (line 33) | func newNVIDIAContainerRuntime(logger logger.Interface, driver *root.Dri...
function newSpecModifier (line 70) | func newSpecModifier(logger logger.Interface, driver *root.Driver, cfg *...
function initRuntimeModeAndImage (line 92) | func initRuntimeModeAndImage(logger logger.Interface, cfg *config.Config...
FILE: internal/runtime/runtime_factory_test.go
constant runcExecutableName (line 40) | runcExecutableName = "runc"
function TestMain (line 43) | func TestMain(m *testing.M) {
function TestFactoryMethod (line 68) | func TestFactoryMethod(t *testing.T) {
function TestNewSpecModifier (line 172) | func TestNewSpecModifier(t *testing.T) {
function TestInitRuntimeModeAndImage (line 350) | func TestInitRuntimeModeAndImage(t *testing.T) {
FILE: internal/test/test.go
function GetModuleRoot (line 30) | func GetModuleRoot() (string, error) {
function PrependToPath (line 37) | func PrependToPath(additionalPaths ...string) string {
function hasGoMod (line 44) | func hasGoMod(dir string) (string, error) {
function StripRoot (line 58) | func StripRoot[T any](v T, root string) T {
FILE: internal/test/to/to.go
function Ptr (line 21) | func Ptr[T any](x T) *T {
FILE: pkg/config/engine/api.go
constant SaveToSTDOUT (line 22) | SaveToSTDOUT = ""
constant UpdateActionSet (line 25) | UpdateActionSet = "set"
constant UpdateActionUnset (line 28) | UpdateActionUnset = "unset"
type Interface (line 32) | type Interface interface
type RuntimeConfig (line 44) | type RuntimeConfig interface
FILE: pkg/config/engine/config.go
type Config (line 26) | type Config struct
method AddRuntime (line 54) | func (c *Config) AddRuntime(name string, path string, setAsDefault boo...
method RemoveRuntime (line 60) | func (c *Config) RemoveRuntime(runtime string) error {
method UpdateDefaultRuntime (line 68) | func (c *Config) UpdateDefaultRuntime(runtime string, action string) e...
method EnableCDI (line 73) | func (c *Config) EnableCDI() {
method DefaultRuntime (line 78) | func (c *Config) DefaultRuntime() string {
method GetRuntimeConfig (line 83) | func (c *Config) GetRuntimeConfig(runtime string) (RuntimeConfig, erro...
method Save (line 88) | func (c *Config) Save(path string) (int64, error) {
method String (line 92) | func (c *Config) String() string {
type RuntimeConfigSource (line 33) | type RuntimeConfigSource interface
type RuntimeConfigDestination (line 42) | type RuntimeConfigDestination interface
FILE: pkg/config/engine/containerd/config.go
method AddRuntime (line 27) | func (c *Config) AddRuntime(name string, path string, setAsDefault bool)...
method GetDefaultRuntimeOptions (line 35) | func (c *Config) GetDefaultRuntimeOptions() interface{} {
method AddRuntimeWithOptions (line 54) | func (c *Config) AddRuntimeWithOptions(name string, path string, setAsDe...
method getStringArrayValue (line 85) | func (c *Config) getStringArrayValue(path []string) ([]string, error) {
method DefaultRuntime (line 112) | func (c Config) DefaultRuntime() string {
method EnableCDI (line 120) | func (c *Config) EnableCDI() {
method RemoveRuntime (line 127) | func (c *Config) RemoveRuntime(name string) error {
method UpdateDefaultRuntime (line 162) | func (c *Config) UpdateDefaultRuntime(name string, action string) error {
FILE: pkg/config/engine/containerd/config_drop_in.go
type ConfigWithDropIn (line 31) | type ConfigWithDropIn struct
method Save (line 64) | func (c *ConfigWithDropIn) Save(dropInPath string) (int64, error) {
method RemoveRuntime (line 92) | func (c *ConfigWithDropIn) RemoveRuntime(name string) error {
method UpdateDefaultRuntime (line 103) | func (c *ConfigWithDropIn) UpdateDefaultRuntime(name string, action st...
type topLevelConfig (line 41) | type topLevelConfig struct
method Save (line 109) | func (c *topLevelConfig) Save(dropInPath string) (int64, error) {
method simplify (line 118) | func (c *topLevelConfig) simplify(dropInFilename string) {
method removeImports (line 126) | func (c *topLevelConfig) removeImports(dropInFilename string) {
method importPattern (line 146) | func (c *topLevelConfig) importPattern(dropInFilename string) string {
method asHostPath (line 155) | func (c *topLevelConfig) asHostPath(path string) string {
method removeVersion (line 166) | func (c *topLevelConfig) removeVersion() {
method getCurrentImports (line 176) | func (c *topLevelConfig) getCurrentImports() []string {
method ensureImports (line 202) | func (c *topLevelConfig) ensureImports(dropInFilename string) {
method RemoveRuntime (line 224) | func (c *topLevelConfig) RemoveRuntime(name string) error {
function NewConfigWithDropIn (line 48) | func NewConfigWithDropIn(logger logger.Interface, topLevelConfigPath str...
FILE: pkg/config/engine/containerd/config_drop_in_test.go
function TestEnsureImports (line 28) | func TestEnsureImports(t *testing.T) {
FILE: pkg/config/engine/containerd/config_test.go
function TestAddRuntime (line 28) | func TestAddRuntime(t *testing.T) {
function TestGetRuntimeConfig (line 370) | func TestGetRuntimeConfig(t *testing.T) {
FILE: pkg/config/engine/containerd/config_v1.go
type ConfigV1 (line 27) | type ConfigV1
method AddRuntime (line 32) | func (c *ConfigV1) AddRuntime(name string, path string, setAsDefault b...
method GetDefaultRuntimeOptions (line 40) | func (c *ConfigV1) GetDefaultRuntimeOptions() interface{} {
method AddRuntimeWithOptions (line 44) | func (c *ConfigV1) AddRuntimeWithOptions(name string, path string, set...
method DefaultRuntime (line 71) | func (c ConfigV1) DefaultRuntime() string {
method RemoveRuntime (line 79) | func (c *ConfigV1) RemoveRuntime(name string) error {
method UpdateDefaultRuntime (line 123) | func (c *ConfigV1) UpdateDefaultRuntime(name string, action string) er...
method Save (line 128) | func (c ConfigV1) Save(path string) (int64, error) {
method GetRuntimeConfig (line 132) | func (c *ConfigV1) GetRuntimeConfig(name string) (engine.RuntimeConfig...
method EnableCDI (line 143) | func (c *ConfigV1) EnableCDI() {
FILE: pkg/config/engine/containerd/config_v1_test.go
function TestAddRuntimeV1 (line 28) | func TestAddRuntimeV1(t *testing.T) {
FILE: pkg/config/engine/containerd/containerd.go
constant defaultConfigVersion (line 28) | defaultConfigVersion = 2
constant defaultRuntimeType (line 29) | defaultRuntimeType = "io.containerd.runc.v2"
type Config (line 33) | type Config struct
method GetRuntimeConfig (line 187) | func (c *Config) GetRuntimeConfig(name string) (engine.RuntimeConfig, ...
type configOptions (line 38) | type configOptions struct
type containerdCfgRuntime (line 57) | type containerdCfgRuntime struct
method GetBinaryPath (line 65) | func (c *containerdCfgRuntime) GetBinaryPath() string {
function New (line 75) | func New(opts ...Option) (engine.Interface, error) {
method parseVersion (line 155) | func (b *builder) parseVersion(c *toml.Tree) (int64, error) {
method criRuntimePluginName (line 176) | func (b *builder) criRuntimePluginName(configVersion int64) (string, err...
function CommandLineSource (line 198) | func CommandLineSource(hostRoot string, executablePath string) toml.Load...
function chrootIfRequired (line 205) | func chrootIfRequired(hostRoot string, commandLine ...string) []string {
function getBaseDropInConfigTree (line 218) | func getBaseDropInConfigTree(sourceConfig *Config) *toml.Tree {
FILE: pkg/config/engine/containerd/option.go
type builder (line 24) | type builder struct
type Option (line 37) | type Option
function WithContainerPathAsHostPath (line 40) | func WithContainerPathAsHostPath(containerPath string, hostPath string) ...
function WithLogger (line 53) | func WithLogger(logger logger.Interface) Option {
function WithTopLevelConfigPath (line 60) | func WithTopLevelConfigPath(path string) Option {
function WithConfigSource (line 67) | func WithConfigSource(configSource toml.Loader) Option {
function WithRuntimeType (line 74) | func WithRuntimeType(runtimeType string) Option {
function WithUseLegacyConfig (line 81) | func WithUseLegacyConfig(useLegacyConfig bool) Option {
function WithConfigVersion (line 88) | func WithConfigVersion(configVersion int) Option {
function WithContainerAnnotations (line 95) | func WithContainerAnnotations(containerAnnotations ...string) Option {
FILE: pkg/config/engine/crio/crio.go
type Config (line 28) | type Config struct
method AddRuntime (line 97) | func (c *Config) AddRuntime(name string, path string, setAsDefault boo...
method GetDefaultRuntimeOptions (line 105) | func (c *Config) GetDefaultRuntimeOptions() interface{} {
method AddRuntimeWithOptions (line 118) | func (c *Config) AddRuntimeWithOptions(name string, path string, setAs...
method DefaultRuntime (line 141) | func (c *Config) DefaultRuntime() string {
method RemoveRuntime (line 152) | func (c *Config) RemoveRuntime(name string) error {
method UpdateDefaultRuntime (line 184) | func (c *Config) UpdateDefaultRuntime(name string, action string) error {
method GetRuntimeConfig (line 212) | func (c *Config) GetRuntimeConfig(name string) (engine.RuntimeConfig, ...
method EnableCDI (line 223) | func (c *Config) EnableCDI() {}
type crioRuntime (line 33) | type crioRuntime struct
method GetBinaryPath (line 41) | func (c *crioRuntime) GetBinaryPath() string {
function New (line 53) | func New(opts ...Option) (engine.Interface, error) {
function CommandLineSource (line 226) | func CommandLineSource(hostRoot string, executablePath string) toml.Load...
function chrootIfRequired (line 236) | func chrootIfRequired(hostRoot string, commandLine ...string) []string {
FILE: pkg/config/engine/crio/crio_test.go
function TestAddRuntime (line 28) | func TestAddRuntime(t *testing.T) {
function TestGetRuntimeConfig (line 183) | func TestGetRuntimeConfig(t *testing.T) {
FILE: pkg/config/engine/crio/option.go
type builder (line 24) | type builder struct
type Option (line 32) | type Option
function WithLogger (line 35) | func WithLogger(logger logger.Interface) Option {
function WithTopLevelConfigPath (line 42) | func WithTopLevelConfigPath(path string) Option {
function WithConfigSource (line 49) | func WithConfigSource(configSource toml.Loader) Option {
function WithConfigDestination (line 56) | func WithConfigDestination(configDestination toml.Loader) Option {
FILE: pkg/config/engine/docker/docker.go
constant defaultDockerRuntime (line 29) | defaultDockerRuntime = "runc"
type Config (line 34) | type Config
method AddRuntime (line 68) | func (c *Config) AddRuntime(name string, path string, setAsDefault boo...
method DefaultRuntime (line 98) | func (c Config) DefaultRuntime() string {
method EnableCDI (line 107) | func (c *Config) EnableCDI() {
method RemoveRuntime (line 125) | func (c *Config) RemoveRuntime(name string) error {
method UpdateDefaultRuntime (line 157) | func (c *Config) UpdateDefaultRuntime(name string, action string) error {
method Save (line 187) | func (c Config) Save(path string) (int64, error) {
method GetRuntimeConfig (line 198) | func (c *Config) GetRuntimeConfig(name string) (engine.RuntimeConfig, ...
method String (line 217) | func (c Config) String() string {
type dockerRuntime (line 38) | type dockerRuntime
method GetBinaryPath (line 44) | func (d dockerRuntime) GetBinaryPath() string {
function New (line 54) | func New(opts ...Option) (engine.Interface, error) {
FILE: pkg/config/engine/docker/docker_test.go
function TestUpdateConfigDefaultRuntime (line 27) | func TestUpdateConfigDefaultRuntime(t *testing.T) {
function TestUpdateConfigRuntimes (line 75) | func TestUpdateConfigRuntimes(t *testing.T) {
function TestGetRuntimeConfig (line 217) | func TestGetRuntimeConfig(t *testing.T) {
FILE: pkg/config/engine/docker/option.go
type builder (line 28) | type builder struct
method build (line 50) | func (b *builder) build() (*Config, error) {
method loadConfig (line 60) | func (b *builder) loadConfig(config string) (*Config, error) {
type Option (line 34) | type Option
function WithLogger (line 37) | func WithLogger(logger logger.Interface) Option {
function WithPath (line 44) | func WithPath(path string) Option {
FILE: pkg/config/engine/engine.go
function GetBinaryPathsForRuntimes (line 27) | func GetBinaryPathsForRuntimes(cfg defaultRuntimesGetter) []string {
type defaultRuntimesGetter (line 48) | type defaultRuntimesGetter interface
function GetLowLevelRuntimes (line 55) | func GetLowLevelRuntimes(cfg defaultRuntimesGetter) []string {
FILE: pkg/config/ocihook/hooks.go
type podmanHook (line 21) | type podmanHook struct
type specHook (line 30) | type specHook struct
type When (line 39) | type When struct
FILE: pkg/config/ocihook/oci-hook.go
function CreateHook (line 29) | func CreateHook(hookFilePath string, nvidiaContainerRuntimeHookExecutabl...
function generateOciHook (line 57) | func generateOciHook(executablePath string) podmanHook {
FILE: pkg/config/raw.go
type Raw (line 26) | type Raw
method Write (line 29) | func (c Raw) Write(output []byte) (int, error) {
FILE: pkg/config/toml/list.go
type firstOf (line 21) | type firstOf
method Load (line 27) | func (loaders firstOf) Load() (*Tree, error) {
function LoadFirst (line 23) | func LoadFirst(loaders ...Loader) Loader {
FILE: pkg/config/toml/source-cli.go
type tomlCliSource (line 25) | type tomlCliSource struct
method Load (line 30) | func (c tomlCliSource) Load() (*Tree, error) {
FILE: pkg/config/toml/source-empty.go
type empty (line 23) | type empty
method Load (line 28) | func (e empty) Load() (*Tree, error) {
function NewEmpty (line 32) | func NewEmpty() *Tree {
FILE: pkg/config/toml/source-file.go
type tomlFile (line 24) | type tomlFile
method Load (line 29) | func (f tomlFile) Load() (*Tree, error) {
FILE: pkg/config/toml/source-map.go
type tomlMap (line 19) | type tomlMap
method Load (line 24) | func (l tomlMap) Load() (*Tree, error) {
FILE: pkg/config/toml/source-string.go
type tomlString (line 19) | type tomlString
method Load (line 24) | func (l tomlString) Load() (*Tree, error) {
FILE: pkg/config/toml/source.go
constant Empty (line 20) | Empty = empty("")
type Loader (line 24) | type Loader interface
function FromCommandLine (line 30) | func FromCommandLine(cmds ...string) Loader {
function FromFile (line 42) | func FromFile(path string) Loader {
function FromMap (line 51) | func FromMap(m map[string]interface{}) Loader {
function FromString (line 60) | func FromString(contents string) Loader {
FILE: pkg/config/toml/toml.go
type Tree (line 27) | type Tree
method Copy (line 30) | func (t *Tree) Copy() *Tree {
method GetSubtreeByPath (line 35) | func (t *Tree) GetSubtreeByPath(keys []string) *Tree {
method DeletePath (line 51) | func (t *Tree) DeletePath(keys []string) error {
method HasPath (line 55) | func (t *Tree) HasPath(keys []string) bool {
method Get (line 59) | func (t *Tree) Get(key string) interface{} {
method GetPath (line 63) | func (t *Tree) GetPath(keys []string) interface{} {
method SetPath (line 67) | func (t *Tree) SetPath(keys []string, value interface{}) {
method Set (line 71) | func (t *Tree) Set(key string, value interface{}) {
method Delete (line 75) | func (t *Tree) Delete(key string) error {
method Keys (line 79) | func (t *Tree) Keys() []string {
method String (line 83) | func (t *Tree) String() string {
method ToMap (line 87) | func (t *Tree) ToMap() map[string]interface{} {
method Raw (line 91) | func (t *Tree) Raw() *toml.Tree {
method Save (line 150) | func (t *Tree) Save(path string) (int64, error) {
function toRawFromTree (line 95) | func toRawFromTree(value interface{}) interface{} {
function toTreeFromRaw (line 102) | func toTreeFromRaw(value interface{}) interface{} {
function TreeFromMap (line 109) | func TreeFromMap(m map[string]interface{}) (*Tree, error) {
function Load (line 115) | func Load(content string) (*Tree, error) {
function LoadBytes (line 121) | func LoadBytes(b []byte) (*Tree, error) {
function LoadFile (line 127) | func LoadFile(path string) (*Tree, error) {
function LoadMap (line 133) | func LoadMap(m map[string]interface{}) (*Tree, error) {
function Marshal (line 137) | func Marshal(v interface{}) ([]byte, error) {
function new (line 141) | func new(construct func() (*toml.Tree, error)) (*Tree, error) {
FILE: pkg/lookup/device.go
function NewCharDeviceLocator (line 25) | func NewCharDeviceLocator(opts ...Option) Locator {
FILE: pkg/lookup/device_test.go
function TestCharDeviceLocator (line 27) | func TestCharDeviceLocator(t *testing.T) {
FILE: pkg/lookup/dir.go
function NewDirectoryLocator (line 25) | func NewDirectoryLocator(opts ...Option) Locator {
function assertDirectory (line 35) | func assertDirectory(filename string) error {
FILE: pkg/lookup/executable.go
type executable (line 27) | type executable struct
method Locate (line 57) | func (p executable) Locate(pattern string) ([]string, error) {
function NewExecutableLocator (line 32) | func NewExecutableLocator(logger logger.Interface, root string) Locator {
function newExecutableLocator (line 38) | func newExecutableLocator(logger logger.Interface, root string, paths .....
function assertExecutable (line 71) | func assertExecutable(filename string) error {
FILE: pkg/lookup/executable_test.go
function TestExecutableLocator (line 27) | func TestExecutableLocator(t *testing.T) {
FILE: pkg/lookup/factory.go
type Factory (line 23) | type Factory struct
type Option (line 31) | type Option
function NewFactory (line 33) | func NewFactory(opts ...Option) *Factory {
function WithRoot (line 48) | func WithRoot(root string) Option {
function WithLogger (line 55) | func WithLogger(logger logger.Interface) Option {
function WithSearchPaths (line 62) | func WithSearchPaths(paths ...string) Option {
function WithFilter (line 70) | func WithFilter(assert func(string) error) Option {
function WithCount (line 77) | func WithCount(count int) Option {
FILE: pkg/lookup/factory_test.go
function TestNewFactory (line 26) | func TestNewFactory(t *testing.T) {
FILE: pkg/lookup/file.go
type file (line 29) | type file struct
method Locate (line 89) | func (p file) Locate(pattern string) ([]string, error) {
function NewFileLocator (line 37) | func NewFileLocator(opts ...Option) Locator {
method NewFileLocator (line 41) | func (o Factory) NewFileLocator() Locator {
function getSearchPrefixes (line 67) | func getSearchPrefixes(root string, prefixes ...string) []string {
function assertFile (line 120) | func assertFile(filename string) error {
FILE: pkg/lookup/file_test.go
function TestGetSearchPrefixes (line 26) | func TestGetSearchPrefixes(t *testing.T) {
FILE: pkg/lookup/ldcache.go
type ldcacheLocator (line 29) | type ldcacheLocator struct
method Locate (line 72) | func (l *ldcacheLocator) Locate(pattern string) ([]string, error) {
method newPathPatternMatcher (line 96) | func (l *ldcacheLocator) newPathPatternMatcher(pattern string) matcher {
method newLdcacheLocator (line 40) | func (f *Factory) newLdcacheLocator() Locator {
type fullMatcher (line 90) | type fullMatcher
method Match (line 103) | func (m fullMatcher) Match(input string) bool {
type basenameMatcher (line 91) | type basenameMatcher
method Match (line 111) | func (m basenameMatcher) Match(input string) bool {
type matcher (line 92) | type matcher interface
FILE: pkg/lookup/ldcache_test.go
function TestLDCacheLookup (line 13) | func TestLDCacheLookup(t *testing.T) {
FILE: pkg/lookup/library.go
function NewLibraryLocator (line 27) | func NewLibraryLocator(opts ...Option) Locator {
FILE: pkg/lookup/library_test.go
function TestLibraryLocator (line 29) | func TestLibraryLocator(t *testing.T) {
FILE: pkg/lookup/locator.go
type Locator (line 24) | type Locator interface
FILE: pkg/lookup/locator_mock.go
type LocatorMock (line 29) | type LocatorMock struct
method Locate (line 45) | func (mock *LocatorMock) Locate(s string) ([]string, error) {
method LocateCalls (line 68) | func (mock *LocatorMock) LocateCalls() []struct {
FILE: pkg/lookup/merge.go
type first (line 23) | type first
method Locate (line 42) | func (f first) Locate(pattern string) ([]string, error) {
type unique (line 25) | type unique struct
method Locate (line 68) | func (l *unique) Locate(pattern string) ([]string, error) {
function First (line 30) | func First(locators ...Locator) Locator {
function AsUnique (line 61) | func AsUnique(locator Locator) Locator {
FILE: pkg/lookup/null.go
constant notFound (line 22) | notFound = notFoundLocator("")
type notFoundLocator (line 26) | type notFoundLocator
method Locate (line 28) | func (l notFoundLocator) Locate(s string) ([]string, error) {
method NewError (line 32) | func (l notFoundLocator) NewError(s string) error {
FILE: pkg/lookup/optional.go
type optionalLocator (line 24) | type optionalLocator struct
method Locate (line 36) | func (l *optionalLocator) Locate(pattern string) ([]string, error) {
function AsOptional (line 30) | func AsOptional(l Locator) Locator {
type requiredLocator (line 44) | type requiredLocator struct
method Locate (line 54) | func (l *requiredLocator) Locate(pattern string) ([]string, error) {
function asRequired (line 48) | func asRequired(l Locator) Locator {
FILE: pkg/lookup/path.go
constant envPath (line 27) | envPath = "PATH"
function GetPaths (line 36) | func GetPaths(root string) []string {
function GetPath (line 67) | func GetPath(root string) string {
function NormalizePaths (line 77) | func NormalizePaths(paths ...string) []string {
FILE: pkg/lookup/symlinks.go
type symlinkChain (line 28) | type symlinkChain struct
method Locate (line 65) | func (p symlinkChain) Locate(pattern string) ([]string, error) {
type symlink (line 33) | type symlink struct
method Locate (line 97) | func (p symlink) Locate(pattern string) ([]string, error) {
function NewSymlinkChainLocator (line 38) | func NewSymlinkChainLocator(opts ...Option) Locator {
function NewSymlinkLocator (line 49) | func NewSymlinkLocator(opts ...Option) Locator {
function WithEvaluatedSymlinks (line 56) | func WithEvaluatedSymlinks(locator Locator) Locator {
FILE: pkg/lookup/symlinks/symlink.go
function Resolve (line 26) | func Resolve(filename string) (string, error) {
function ResolveChain (line 41) | func ResolveChain(filename string) ([]string, error) {
function ForceCreate (line 67) | func ForceCreate(target string, link string) error {
FILE: pkg/nvcdi/api.go
type Interface (line 28) | type Interface interface
type SpecGenerator (line 38) | type SpecGenerator interface
type DeviceSpecGenerator (line 43) | type DeviceSpecGenerator interface
constant AllHooks (line 52) | AllHooks = discover.AllHooks
constant CreateSymlinksHook (line 55) | CreateSymlinksHook = discover.CreateSymlinksHook
constant DisableDeviceNodeModificationHook (line 60) | DisableDeviceNodeModificationHook = discover.DisableDeviceNodeModificati...
constant EnableCudaCompatHook (line 63) | EnableCudaCompatHook = discover.EnableCudaCompatHook
constant UpdateLDCacheHook (line 65) | UpdateLDCacheHook = discover.UpdateLDCacheHook
constant HookCreateSymlinks (line 68) | HookCreateSymlinks = CreateSymlinksHook
constant HookEnableCudaCompat (line 70) | HookEnableCudaCompat = EnableCudaCompatHook
constant HookUpdateLDCache (line 72) | HookUpdateLDCache = UpdateLDCacheHook
type FeatureFlag (line 77) | type FeatureFlag
constant FeatureEnableExplicitDriverLibraries (line 82) | FeatureEnableExplicitDriverLibraries = FeatureFlag("enable-explicit-driv...
constant FeatureDisableNvsandboxUtils (line 86) | FeatureDisableNvsandboxUtils = FeatureFlag("disable-nvsandboxutils")
constant FeatureEnableCoherentAnnotations (line 90) | FeatureEnableCoherentAnnotations = FeatureFlag("enable-coherent-annotati...
constant FeatureDisableMultipleCSVDevices (line 94) | FeatureDisableMultipleCSVDevices = FeatureFlag("disable-multiple-csv-dev...
constant FeatureNoAdditionalGIDsForDeviceNodes (line 98) | FeatureNoAdditionalGIDsForDeviceNodes = FeatureFlag("no-additional-gids-...
FILE: pkg/nvcdi/common-nvml.go
method newCommonNVMLDiscoverer (line 27) | func (l *nvmllib) newCommonNVMLDiscoverer() (discover.Discover, error) {
method controlDeviceNodeDiscoverer (line 49) | func (l *nvmllib) controlDeviceNodeDiscoverer() discover.Discover {
FILE: pkg/nvcdi/device-wsl.go
constant dxgDeviceNode (line 24) | dxgDeviceNode = "/dev/dxg"
method newDXGDeviceDiscoverer (line 28) | func (l *wsllib) newDXGDeviceDiscoverer() discover.Discover {
FILE: pkg/nvcdi/driver-nvml.go
method NewDriverDiscoverer (line 34) | func (l *nvmllib) NewDriverDiscoverer() (discover.Discover, error) {
method newDriverVersionDiscoverer (line 38) | func (l *nvcdilib) newDriverVersionDiscoverer() (discover.Discover, erro...
method NewDriverLibraryDiscoverer (line 77) | func (l *nvcdilib) NewDriverLibraryDiscoverer(version string, libcudaSoP...
method getVersionSuffixDriverLibraryMounts (line 127) | func (l *nvcdilib) getVersionSuffixDriverLibraryMounts(version string) (...
method getExplicitDriverLibraryMounts (line 146) | func (l *nvcdilib) getExplicitDriverLibraryMounts() (discover.Discover, ...
function getUTSRelease (line 184) | func getUTSRelease() (string, error) {
function getFirmwareSearchPaths (line 192) | func getFirmwareSearchPaths(logger logger.Interface) ([]string, error) {
function getCustomFirmwareClassPath (line 216) | func getCustomFirmwareClassPath(logger logger.Interface) string {
method newDriverFirmwareDiscoverer (line 227) | func (l *nvcdilib) newDriverFirmwareDiscoverer(version string) (discover...
method newDriverBinariesDiscoverer (line 246) | func (l *nvcdilib) newDriverBinariesDiscoverer() discover.Discover {
method getVersionLibs (line 266) | func (l *nvcdilib) getVersionLibs(version string) ([]string, error) {
FILE: pkg/nvcdi/driver-wsl.go
method newWSLDriverDiscoverer (line 42) | func (l *wsllib) newWSLDriverDiscoverer() (discover.Discover, error) {
type nvidiaSMISimlinkHook (line 93) | type nvidiaSMISimlinkHook struct
method Hooks (line 104) | func (m nvidiaSMISimlinkHook) Hooks() ([]discover.Hook, error) {
FILE: pkg/nvcdi/driver-wsl_test.go
function TestNvidiaSMISymlinkHook (line 30) | func TestNvidiaSMISymlinkHook(t *testing.T) {
FILE: pkg/nvcdi/full-gpu-nvml.go
type fullGPUDeviceSpecGenerator (line 34) | type fullGPUDeviceSpecGenerator struct
method GetUUID (line 45) | func (l *fullGPUDeviceSpecGenerator) GetUUID() (string, error) {
method GetDeviceSpecs (line 81) | func (l *fullGPUDeviceSpecGenerator) GetDeviceSpecs() ([]specs.Device,...
method device (line 110) | func (l *fullGPUDeviceSpecGenerator) device() (device.Device, error) {
method getDeviceAnnotations (line 114) | func (l *fullGPUDeviceSpecGenerator) getDeviceAnnotations() (map[strin...
method getDeviceEdits (line 138) | func (l *fullGPUDeviceSpecGenerator) getDeviceEdits() (*cdi.ContainerE...
method getNames (line 156) | func (l *fullGPUDeviceSpecGenerator) getNames() ([]string, error) {
method newFullGPUDiscoverer (line 161) | func (l *fullGPUDeviceSpecGenerator) newFullGPUDiscoverer(d device.Dev...
method newFullGPUDeviceSpecGeneratorFromDevice (line 49) | func (l *nvmllib) newFullGPUDeviceSpecGeneratorFromDevice(index int, d d...
method newFullGPUDeviceSpecGeneratorFromNVMLDevice (line 65) | func (l *nvmllib) newFullGPUDeviceSpecGeneratorFromNVMLDevice(uuid strin...
FILE: pkg/nvcdi/gated.go
type gatedlib (line 28) | type gatedlib struct
method DeviceSpecGenerators (line 35) | func (l *gatedlib) DeviceSpecGenerators(...string) (DeviceSpecGenerato...
method GetDeviceSpecs (line 40) | func (l *gatedlib) GetDeviceSpecs() ([]specs.Device, error) {
method getModeDiscoverer (line 58) | func (l *gatedlib) getModeDiscoverer() (discover.Discover, error) {
method GetCommonEdits (line 74) | func (l *gatedlib) GetCommonEdits() (*cdi.ContainerEdits, error) {
FILE: pkg/nvcdi/info-interface_mock.go
type infoInterfaceMock (line 43) | type infoInterfaceMock struct
method HasAnIntegratedGPU (line 85) | func (mock *infoInterfaceMock) HasAnIntegratedGPU() (bool, string) {
method HasAnIntegratedGPUCalls (line 105) | func (mock *infoInterfaceMock) HasAnIntegratedGPUCalls() []struct {
method HasDXCore (line 116) | func (mock *infoInterfaceMock) HasDXCore() (bool, string) {
method HasDXCoreCalls (line 136) | func (mock *infoInterfaceMock) HasDXCoreCalls() []struct {
method HasNvml (line 147) | func (mock *infoInterfaceMock) HasNvml() (bool, string) {
method HasNvmlCalls (line 167) | func (mock *infoInterfaceMock) HasNvmlCalls() []struct {
method HasTegraFiles (line 178) | func (mock *infoInterfaceMock) HasTegraFiles() (bool, string) {
method HasTegraFilesCalls (line 198) | func (mock *infoInterfaceMock) HasTegraFilesCalls() []struct {
method ResolvePlatform (line 209) | func (mock *infoInterfaceMock) ResolvePlatform() info.Platform {
method ResolvePlatformCalls (line 228) | func (mock *infoInterfaceMock) ResolvePlatformCalls() []struct {
FILE: pkg/nvcdi/lib-csv.go
constant defaultOrinCompatContainerRoot (line 38) | defaultOrinCompatContainerRoot = "/usr/local/cuda/compat_orin"
type csvOptions (line 41) | type csvOptions struct
type csvlib (line 47) | type csvlib
method DeviceSpecGenerators (line 56) | func (l *csvlib) DeviceSpecGenerators(ids ...string) (DeviceSpecGenera...
method usePureCSVDeviceSpecGenerator (line 68) | func (l *csvlib) usePureCSVDeviceSpecGenerator() bool {
method purecsvDeviceSpecGenerators (line 91) | func (l *csvlib) purecsvDeviceSpecGenerators(ids ...string) (DeviceSpe...
method mixedDeviceSpecGenerators (line 108) | func (l *csvlib) mixedDeviceSpecGenerators(ids ...string) (DeviceSpecG...
method GetCommonEdits (line 222) | func (l *csvlib) GetCommonEdits() (*cdi.ContainerEdits, error) {
method driverDiscoverer (line 404) | func (l *csvlib) driverDiscoverer() (discover.Discover, error) {
method cudaCompatDiscoverer (line 444) | func (l *csvlib) cudaCompatDiscoverer() discover.Discover {
method getEnableCUDACompatHookOptions (line 456) | func (l *csvlib) getEnableCUDACompatHookOptions() (*discover.EnableCUD...
method hasOrinDevices (line 489) | func (l *csvlib) hasOrinDevices() bool {
method getCUDAVersionString (line 513) | func (l *csvlib) getCUDAVersionString() (string, error) {
type mixedcsvlib (line 48) | type mixedcsvlib
method DeviceSpecGenerators (line 230) | func (l *mixedcsvlib) DeviceSpecGenerators(ids ...string) (DeviceSpecG...
method getAllDeviceIndices (line 257) | func (l *mixedcsvlib) getAllDeviceIndices() ([]string, error) {
method deviceSpecGeneratorForId (line 270) | func (l *mixedcsvlib) deviceSpecGeneratorForId(id device.Identifier) (...
method csvDeviceSpecGenerator (line 305) | func (l *mixedcsvlib) csvDeviceSpecGenerator(index int, uuid string, d...
method dGPUDeviceSpecGenerator (line 318) | func (l *mixedcsvlib) dGPUDeviceSpecGenerator(index int, uuid string) ...
method iGPUDeviceSpecGenerator (line 351) | func (l *mixedcsvlib) iGPUDeviceSpecGenerator(index int, uuid string) ...
type csvDeviceGenerator (line 114) | type csvDeviceGenerator struct
method GetUUID (line 128) | func (l *csvDeviceGenerator) GetUUID() (string, error) {
method GetDeviceSpecs (line 133) | func (l *csvDeviceGenerator) GetDeviceSpecs() ([]specs.Device, error) {
method deviceNodeDiscoverer (line 168) | func (l *csvDeviceGenerator) deviceNodeDiscoverer() (discover.Discover...
method deviceNodeMountSpecs (line 178) | func (l *csvDeviceGenerator) deviceNodeMountSpecs() tegra.MountSpecPat...
type csvGeneratorMode (line 121) | type csvGeneratorMode
constant iGPUGeneratorMode (line 124) | iGPUGeneratorMode = csvGeneratorMode("igpu")
constant dGPUGeneratorMode (line 125) | dGPUGeneratorMode = csvGeneratorMode("dgpu")
function isOrinGPUID (line 370) | func isOrinGPUID(id device.Identifier) bool {
function isIntegratedGPU (line 383) | func isIntegratedGPU(d nvml.Device) (bool, error) {
FILE: pkg/nvcdi/lib-csv_test.go
function TestDeviceSpecGenerators (line 43) | func TestDeviceSpecGenerators(t *testing.T) {
function stripRoot (line 268) | func stripRoot[T any](root string, v T) T {
function mockOrinServer (line 284) | func mockOrinServer() nvml.Interface {
function mockIGXServer (line 322) | func mockIGXServer() nvml.Interface {
FILE: pkg/nvcdi/lib-imex.go
type imexlib (line 31) | type imexlib
method GetCommonEdits (line 45) | func (l *imexlib) GetCommonEdits() (*cdi.ContainerEdits, error) {
method DeviceSpecGenerators (line 55) | func (l *imexlib) DeviceSpecGenerators(ids ...string) (DeviceSpecGener...
method getChannelIDs (line 69) | func (l *imexlib) getChannelIDs(ids ...string) ([]string, error) {
method getAllChannelIDs (line 86) | func (l *imexlib) getAllChannelIDs() ([]string, error) {
type imexChannel (line 33) | type imexChannel struct
method GetDeviceSpecs (line 108) | func (l *imexChannel) GetDeviceSpecs() ([]specs.Device, error) {
constant classImexChannel (line 41) | classImexChannel = "imex-channel"
FILE: pkg/nvcdi/lib-imex_test.go
function TestImexMode (line 32) | func TestImexMode(t *testing.T) {
FILE: pkg/nvcdi/lib-nvml.go
type nvmllib (line 32) | type nvmllib
method GetCommonEdits (line 37) | func (l *nvmllib) GetCommonEdits() (*cdi.ContainerEdits, error) {
method DeviceSpecGenerators (line 52) | func (l *nvmllib) DeviceSpecGenerators(ids ...string) (DeviceSpecGener...
method getDeviceSpecGeneratorsForIDs (line 65) | func (l *nvmllib) getDeviceSpecGeneratorsForIDs(ids ...string) (Device...
method newDeviceSpecGeneratorFromNVMLDevice (line 98) | func (l *nvmllib) newDeviceSpecGeneratorFromNVMLDevice(id string, nvml...
method getDeviceSpecGeneratorsForAllDevices (line 113) | func (l *nvmllib) getDeviceSpecGeneratorsForAllDevices() (DeviceSpecGe...
method normalizeDeviceIDs (line 151) | func (l *nvmllib) normalizeDeviceIDs(identifiers ...device.Identifier)...
method normalizeDeviceID (line 163) | func (l *nvmllib) normalizeDeviceID(id device.Identifier) (device.Iden...
method init (line 214) | func (l *nvmllib) init() error {
method tryShutdown (line 229) | func (l *nvmllib) tryShutdown() {
method withInit (line 245) | func (l *nvmllib) withInit(dsg DeviceSpecGenerator) DeviceSpecGenerator {
type deviceSpecGeneratorsWithAndShutdown (line 240) | type deviceSpecGeneratorsWithAndShutdown struct
method GetDeviceSpecs (line 254) | func (d *deviceSpecGeneratorsWithAndShutdown) GetDeviceSpecs() ([]spec...
type emptyDeviceSpecGenerator (line 263) | type emptyDeviceSpecGenerator
method GetDeviceSpecs (line 265) | func (d emptyDeviceSpecGenerator) GetDeviceSpecs() ([]specs.Device, er...
FILE: pkg/nvcdi/lib-nvml_test.go
function TestNvmllibGetDeviceSpecGeneratorsForIDs (line 31) | func TestNvmllibGetDeviceSpecGeneratorsForIDs(t *testing.T) {
function mockOverrides (line 146) | func mockOverrides(server *dgxa100.Server) {
FILE: pkg/nvcdi/lib-wsl.go
type wsllib (line 26) | type wsllib
method DeviceSpecGenerators (line 30) | func (l *wsllib) DeviceSpecGenerators(...string) (DeviceSpecGenerator,...
method GetDeviceSpecs (line 35) | func (l *wsllib) GetDeviceSpecs() ([]specs.Device, error) {
method GetCommonEdits (line 51) | func (l *wsllib) GetCommonEdits() (*cdi.ContainerEdits, error) {
FILE: pkg/nvcdi/lib.go
type nvcdilib (line 32) | type nvcdilib struct
function New (line 51) | func New(opts ...Option) (Interface, error) {
type nvmllibAsVersioner (line 107) | type nvmllibAsVersioner struct
method Version (line 120) | func (l *nvmllibAsVersioner) Version() (string, error) {
function nvmllibWithVersion (line 111) | func nvmllibWithVersion(nvmllib nvml.Interface) *nvmllibAsVersioner {
type nvsandboxutilslibAsVersioner (line 140) | type nvsandboxutilslibAsVersioner struct
method Version (line 153) | func (l *nvsandboxutilslibAsVersioner) Version() (string, error) {
function nvsandboxutilslibWithVersion (line 144) | func nvsandboxutilslibWithVersion(nvsandboxutilslib nvsandboxutils.Inter...
method getNvmlLib (line 166) | func (o *options) getNvmlLib() nvml.Interface {
method getNvsandboxUtilsLib (line 185) | func (o *options) getNvsandboxUtilsLib() nvsandboxutils.Interface {
method getDriverOptions (line 218) | func (o *options) getDriverOptions() []root.Option {
FILE: pkg/nvcdi/lib_test.go
function TestNew (line 32) | func TestNew(t *testing.T) {
FILE: pkg/nvcdi/management.go
type managementlib (line 31) | type managementlib
method DeviceSpecGenerators (line 35) | func (l *managementlib) DeviceSpecGenerators(...string) (DeviceSpecGen...
method GetDeviceSpecs (line 40) | func (l *managementlib) GetDeviceSpecs() ([]specs.Device, error) {
method GetCommonEdits (line 63) | func (l *managementlib) GetCommonEdits() (*cdi.ContainerEdits, error) {
method newManagementDeviceDiscoverer (line 96) | func (l *managementlib) newManagementDeviceDiscoverer() (discover.Disc...
type managementDiscoverer (line 90) | type managementDiscoverer struct
method Devices (line 122) | func (m *managementDiscoverer) Devices() ([]discover.Device, error) {
method nodeIsBlocked (line 140) | func (m managementDiscoverer) nodeIsBlocked(path string) bool {
FILE: pkg/nvcdi/mig-device-nvml.go
type migDeviceSpecGenerator (line 30) | type migDeviceSpecGenerator struct
method GetUUID (line 38) | func (l *migDeviceSpecGenerator) GetUUID() (string, error) {
method GetDeviceSpecs (line 89) | func (l *migDeviceSpecGenerator) GetDeviceSpecs() ([]specs.Device, err...
method migDevice (line 112) | func (l *migDeviceSpecGenerator) migDevice() (device.MigDevice, error) {
method getDeviceEdits (line 117) | func (l *migDeviceSpecGenerator) getDeviceEdits() (*cdi.ContainerEdits...
method getNames (line 144) | func (l *migDeviceSpecGenerator) getNames() ([]string, error) {
method newMIGDeviceSpecGeneratorFromDevice (line 42) | func (l *nvmllib) newMIGDeviceSpecGeneratorFromDevice(i int, d device.De...
method newMIGDeviceSpecGeneratorFromNVMLDevice (line 62) | func (l *nvmllib) newMIGDeviceSpecGeneratorFromNVMLDevice(uuid string, n...
FILE: pkg/nvcdi/mocks.go
type infoInterface (line 23) | type infoInterface
FILE: pkg/nvcdi/mode.go
type Mode (line 25) | type Mode
constant ModeAuto (line 29) | ModeAuto = Mode("auto")
constant ModeNvml (line 31) | ModeNvml = Mode("nvml")
constant ModeWsl (line 33) | ModeWsl = Mode("wsl")
constant ModeManagement (line 35) | ModeManagement = Mode("management")
constant ModeGdrcopy (line 37) | ModeGdrcopy = Mode("gdrcopy")
constant ModeGds (line 39) | ModeGds = Mode("gds")
constant ModeMofed (line 41) | ModeMofed = Mode("mofed")
constant ModeCSV (line 44) | ModeCSV = Mode("csv")
constant ModeImex (line 46) | ModeImex = Mode("imex")
constant ModeNvswitch (line 48) | ModeNvswitch = Mode("nvswitch")
type modeConstraint (line 51) | type modeConstraint interface
type modes (line 55) | type modes struct
function getModes (line 63) | func getModes() modes {
function AllModes (line 93) | func AllModes[T modeConstraint]() []T {
function IsValidMode (line 102) | func IsValidMode[T modeConstraint](mode T) bool {
method resolveMode (line 107) | func (o *options) resolveMode() (rmode Mode) {
FILE: pkg/nvcdi/namer.go
type UUIDer (line 27) | type UUIDer interface
type DeviceNamers (line 32) | type DeviceNamers
method GetDeviceNames (line 127) | func (l DeviceNamers) GetDeviceNames(i int, d UUIDer) ([]string, error) {
method GetMigDeviceNames (line 145) | func (l DeviceNamers) GetMigDeviceNames(i int, d UUIDer, j int, mig UU...
type DeviceNamer (line 35) | type DeviceNamer interface
constant DeviceNameStrategyIndex (line 43) | DeviceNameStrategyIndex = "index"
constant DeviceNameStrategyTypeIndex (line 45) | DeviceNameStrategyTypeIndex = "type-index"
constant DeviceNameStrategyUUID (line 47) | DeviceNameStrategyUUID = "uuid"
type deviceNameIndex (line 50) | type deviceNameIndex struct
method GetDeviceName (line 72) | func (s deviceNameIndex) GetDeviceName(i int, _ UUIDer) (string, error) {
method GetMigDeviceName (line 77) | func (s deviceNameIndex) GetMigDeviceName(i int, _ UUIDer, j int, _ UU...
type deviceNameUUID (line 54) | type deviceNameUUID struct
method GetDeviceName (line 82) | func (s deviceNameUUID) GetDeviceName(i int, d UUIDer) (string, error) {
method GetMigDeviceName (line 91) | func (s deviceNameUUID) GetMigDeviceName(i int, _ UUIDer, j int, mig U...
function NewDeviceNamer (line 58) | func NewDeviceNamer(strategy string) (DeviceNamer, error) {
type nvmlUUIDer (line 100) | type nvmlUUIDer interface
type convert (line 104) | type convert struct
method GetUUID (line 110) | func (m convert) GetUUID() (string, error) {
type uuidUnsupported (line 108) | type uuidUnsupported struct
method GetUUID (line 123) | func (m uuidUnsupported) GetUUID() (string, error) {
FILE: pkg/nvcdi/namer_nvml_mock.go
type nvmlUUIDerMock (line 31) | type nvmlUUIDerMock struct
method GetUUID (line 45) | func (mock *nvmlUUIDerMock) GetUUID() (string, nvml.Return) {
method GetUUIDCalls (line 65) | func (mock *nvmlUUIDerMock) GetUUIDCalls() []struct {
FILE: pkg/nvcdi/namer_test.go
function TestConvert (line 26) | func TestConvert(t *testing.T) {
FILE: pkg/nvcdi/options.go
type options (line 33) | type options struct
method driverLibraryLocator (line 132) | func (o *options) driverLibraryLocator() lookup.Locator {
method getVendorOrDefault (line 140) | func (o *options) getVendorOrDefault() string {
method getClassOrDefault (line 152) | func (o *options) getClassOrDefault() string {
type platformlibs (line 60) | type platformlibs struct
function populateOptions (line 70) | func populateOptions(opts ...Option) *options {
type Option (line 167) | type Option
function WithDeviceLib (line 170) | func WithDeviceLib(devicelib device.Interface) Option {
function WithInfoLib (line 177) | func WithInfoLib(infolib info.Interface) Option {
function WithDeviceNamers (line 184) | func WithDeviceNamers(namers ...DeviceNamer) Option {
function WithDriverRoot (line 191) | func WithDriverRoot(root string) Option {
function WithDevRoot (line 198) | func WithDevRoot(root string) Option {
function WithEditsFactory (line 204) | func WithEditsFactory(editsFactory edits.Factory) Option {
function WithLogger (line 211) | func WithLogger(logger logger.Interface) Option {
function WithNVIDIACTKPath (line 220) | func WithNVIDIACTKPath(path string) Option {
function WithNVIDIACDIHookPath (line 225) | func WithNVIDIACDIHookPath(path string) Option {
function WithLdconfigPath (line 232) | func WithLdconfigPath(path string) Option {
function WithNvmlLib (line 239) | func WithNvmlLib(nvmllib nvml.Interface) Option {
function WithMode (line 246) | func WithMode[m modeConstraint](mode m) Option {
function WithVendor (line 253) | func WithVendor(vendor string) Option {
function WithClass (line 260) | func WithClass(class string) Option {
function WithMergedDeviceOptions (line 268) | func WithMergedDeviceOptions(opts ...transform.MergedDeviceOption) Option {
function WithCSVFiles (line 275) | func WithCSVFiles(csvFiles []string) Option {
function WithCSVIgnorePatterns (line 282) | func WithCSVIgnorePatterns(csvIgnorePatterns []string) Option {
function WithCSVCompatContainerRoot (line 290) | func WithCSVCompatContainerRoot(csvCompatContainerRoot string) Option {
function WithConfigSearchPaths (line 297) | func WithConfigSearchPaths(paths []string) Option {
function WithLibrarySearchPaths (line 305) | func WithLibrarySearchPaths(paths []string) Option {
function WithDisabledHooks (line 312) | func WithDisabledHooks[T string | HookName](hooks ...T) Option {
function WithEnabledHooks (line 322) | func WithEnabledHooks[T string | HookName](hooks ...T) Option {
function WithFeatureFlags (line 331) | func WithFeatureFlags[T string | FeatureFlag](featureFlags ...T) Option {
function WithDisabledHook (line 351) | func WithDisabledHook[T string | HookName](hook T) Option {
function WithFeatureFlag (line 359) | func WithFeatureFlag[T string | FeatureFlag](featureFlag T) Option {
FILE: pkg/nvcdi/spec/api.go
constant DetectMinimumVersion (line 29) | DetectMinimumVersion = "DETECT_MINIMUM_VERSION"
constant FormatJSON (line 32) | FormatJSON = "json"
constant FormatYAML (line 34) | FormatYAML = "yaml"
type Interface (line 38) | type Interface interface
FILE: pkg/nvcdi/spec/builder.go
type builder (line 29) | type builder struct
method Build (line 85) | func (o *builder) Build() (*spec, error) {
function newBuilder (line 46) | func newBuilder(opts ...Option) *builder {
type Option (line 126) | type Option
function WithDeviceSpecs (line 129) | func WithDeviceSpecs(deviceSpecs []cdi.Device) Option {
function WithEdits (line 136) | func WithEdits(edits cdi.ContainerEdits) Option {
function WithVersion (line 143) | func WithVersion(version string) Option {
function WithVendor (line 150) | func WithVendor(vendor string) Option {
function WithClass (line 157) | func WithClass(class string) Option {
function WithFormat (line 164) | func WithFormat(format string) Option {
function WithNoSimplify (line 171) | func WithNoSimplify(noSimplify bool) Option {
function WithRawSpec (line 178) | func WithRawSpec(raw *cdi.Spec) Option {
function WithPermissions (line 185) | func WithPermissions(permissions os.FileMode) Option {
function WithMergedDeviceOptions (line 192) | func WithMergedDeviceOptions(opts ...transform.MergedDeviceOption) Option {
FILE: pkg/nvcdi/spec/set-minimum-version.go
type setMinimumRequiredVersion (line 26) | type setMinimumRequiredVersion struct
method Transform (line 28) | func (d setMinimumRequiredVersion) Transform(spec *specs.Spec) error {
FILE: pkg/nvcdi/spec/spec.go
type spec (line 31) | type spec struct
method Save (line 46) | func (s *spec) Save(path string) error {
method WriteTo (line 81) | func (s *spec) WriteTo(w io.Writer) (int64, error) {
method Raw (line 115) | func (s *spec) Raw() *specs.Spec {
method normalizePath (line 120) | func (s *spec) normalizePath(path string) (string, error) {
method extension (line 136) | func (s *spec) extension() string {
function New (line 41) | func New(opts ...Option) (Interface, error) {
FILE: pkg/nvcdi/spec/spec_test.go
function TestSpec (line 30) | func TestSpec(t *testing.T) {
FILE: pkg/nvcdi/transform/api.go
type Transformer (line 22) | type Transformer interface
FILE: pkg/nvcdi/transform/deduplicate.go
type dedupe (line 25) | type dedupe struct
method Transform (line 35) | func (d dedupe) Transform(spec *specs.Spec) error {
method transformEdits (line 54) | func (d dedupe) transformEdits(edits *specs.ContainerEdits) error {
method deduplicateDeviceNodes (line 88) | func (d dedupe) deduplicateDeviceNodes(entities []*specs.DeviceNode) (...
method deduplicateEnvs (line 108) | func (d dedupe) deduplicateEnvs(entities []string) ([]
Copy disabled (too large)
Download .json
Condensed preview — 2913 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (41,841K chars).
[
{
"path": ".dockerignore",
"chars": 29,
"preview": ".git\n/shared-*\nrelease-v*/**\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 1239,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: '[Bug]: '\nlabels: [\"bug\", \"needs-triage\"]\ntype: bu"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 28,
"preview": "blank_issues_enabled: false\n"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 421,
"preview": "---\nname: Feature request\nabout: Submit a feature request\ntitle: \"[Feature]: \"\nlabels: [\"feature\", \"needs-triage\", \"life"
},
{
"path": ".github/ISSUE_TEMPLATE/question.md",
"chars": 215,
"preview": "---\nname: Question / General Discussion\nabout: Ask a question or raise a discussion\ntitle: \"[Question]: \"\nlabels: [\"ques"
},
{
"path": ".github/copy-pr-bot.yaml",
"chars": 85,
"preview": "# https://docs.gha-runners.nvidia.com/apps/copy-pr-bot/#configuration\n\nenabled: true\n"
},
{
"path": ".github/dependabot.yml",
"chars": 2762,
"preview": "# Please see the documentation for all configuration options:\n# https://docs.github.com/github/administering-a-repositor"
},
{
"path": ".github/scripts/add-labels-from-comment.js",
"chars": 3568,
"preview": "/**\n * Copyright 2025 NVIDIA CORPORATION\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you ma"
},
{
"path": ".github/scripts/backport.js",
"chars": 10631,
"preview": "/**\n * Copyright 2025 NVIDIA CORPORATION\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you ma"
},
{
"path": ".github/scripts/extract-branches.js",
"chars": 1413,
"preview": "/**\n * Copyright 2025 NVIDIA CORPORATION\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you ma"
},
{
"path": ".github/workflows/cherrypick.yml",
"chars": 3108,
"preview": "# Copyright 2025 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not us"
},
{
"path": ".github/workflows/ci.yaml",
"chars": 1549,
"preview": "# Copyright 2025 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not us"
},
{
"path": ".github/workflows/code_scanning.yaml",
"chars": 1287,
"preview": "# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not us"
},
{
"path": ".github/workflows/e2e.yaml",
"chars": 4055,
"preview": "# Copyright 2025 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not us"
},
{
"path": ".github/workflows/golang.yaml",
"chars": 3101,
"preview": "# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not us"
},
{
"path": ".github/workflows/image.yaml",
"chars": 3532,
"preview": "# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not us"
},
{
"path": ".github/workflows/release.yaml",
"chars": 1061,
"preview": "# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not us"
},
{
"path": ".github/workflows/stale.yaml",
"chars": 830,
"preview": "name: Stale issues\n\non:\n workflow_dispatch:\n schedule:\n - cron: \"21 4 * * *\"\n\njobs:\n stale:\n permissions:\n a"
},
{
"path": ".gitignore",
"chars": 109,
"preview": "/dist\n/artifacts\n*.swp\n*.swo\n/coverage.out*\n/tests/output/\n/nvidia-*\n/shared-*\n/release-*\n/bin\n/toolkit-test\n"
},
{
"path": ".gitmodules",
"chars": 158,
"preview": "[submodule \"third_party/libnvidia-container\"]\n\tpath = third_party/libnvidia-container\n\turl = https://github.com/NVIDIA/l"
},
{
"path": ".golangci.yml",
"chars": 2184,
"preview": "# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Identi"
},
{
"path": ".nvidia-ci.yml",
"chars": 9778,
"preview": "# Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "CHANGELOG.md",
"chars": 39720,
"preview": "# NVIDIA Container Toolkit Changelog\n\n## v1.19.0\n- Promote v1.19.0-rc.7 to v1.19.0\n\n## v1.19.0-rc.7\n- fix: Reuse instant"
},
{
"path": "CONTRIBUTING.md",
"chars": 2249,
"preview": "# Contribute to the NVIDIA Container Toolkit\n\nWant to hack on the NVIDIA Container Toolkit Project? Awesome!\nWe only req"
},
{
"path": "DEVELOPMENT.md",
"chars": 2346,
"preview": "# NVIDIA Container Toolkit Release Tooling\n\nThis repository allows for the components of the NVIDIA container stack to b"
},
{
"path": "LICENSE",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "Makefile",
"chars": 4808,
"preview": "# Copyright (c) 2017-2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "README.md",
"chars": 2292,
"preview": "# NVIDIA Container Toolkit\n\n[ 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "api/config/v1/cli_test.go",
"chars": 2201,
"preview": "/**\n# Copyright 2023 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "api/config/v1/config.go",
"chars": 8771,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "api/config/v1/config_test.go",
"chars": 14311,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "api/config/v1/features.go",
"chars": 3058,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "api/config/v1/hook.go",
"chars": 1045,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "api/config/v1/runtime.go",
"chars": 3506,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "api/config/v1/toml.go",
"chars": 7140,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "api/config/v1/toml_test.go",
"chars": 8325,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "api/config/v1/toolkit-cli.go",
"chars": 777,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-cdi-hook/README.md",
"chars": 1422,
"preview": "# NVIDIA CDI Hook\n\nThe CLI `nvidia-cdi-hook` provides container device runtime hook capabilities when\ncalled by a contai"
},
{
"path": "cmd/nvidia-cdi-hook/chmod/chmod.go",
"chars": 4185,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-cdi-hook/commands/commands.go",
"chars": 4542,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "cmd/nvidia-cdi-hook/create-symlinks/create-symlinks.go",
"chars": 5209,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-cdi-hook/create-symlinks/create-symlinks_test.go",
"chars": 8242,
"preview": "package symlinks\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"testing\"\n\n\ttestlog \"github.com/sirupsen/logrus/hooks/test"
},
{
"path": "cmd/nvidia-cdi-hook/cudacompat/container-root.go",
"chars": 2046,
"preview": "/**\n# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-cdi-hook/cudacompat/cuda-elf-header.go",
"chars": 3785,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-cdi-hook/cudacompat/cuda-elf-header_test.go",
"chars": 1924,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-cdi-hook/cudacompat/cudacompat.go",
"chars": 8606,
"preview": "/**\n# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-cdi-hook/cudacompat/cudacompat_test.go",
"chars": 6028,
"preview": "/*\n# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (t"
},
{
"path": "cmd/nvidia-cdi-hook/disable-device-node-modification/disable-device-node-modification.go",
"chars": 4232,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-cdi-hook/disable-device-node-modification/disable-device-node-modification_test.go",
"chars": 2634,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-cdi-hook/disable-device-node-modification/params_linux.go",
"chars": 3204,
"preview": "//go:build linux\n\n/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved."
},
{
"path": "cmd/nvidia-cdi-hook/disable-device-node-modification/params_other.go",
"chars": 902,
"preview": "//go:build !linux\n\n/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved"
},
{
"path": "cmd/nvidia-cdi-hook/main.go",
"chars": 2736,
"preview": "/**\n# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-cdi-hook/update-ldcache/update-ldcache.go",
"chars": 4068,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-container-runtime/README.md",
"chars": 10719,
"preview": "# The NVIDIA Container Runtime\n\nThe NVIDIA Container Runtime is a shim for OCI-compliant low-level runtimes such as [run"
},
{
"path": "cmd/nvidia-container-runtime/main.go",
"chars": 188,
"preview": "package main\n\nimport (\n\t\"os\"\n\n\t\"github.com/NVIDIA/nvidia-container-toolkit/internal/runtime\"\n)\n\nfunc main() {\n\tr := runt"
},
{
"path": "cmd/nvidia-container-runtime/main_test.go",
"chars": 7169,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"test"
},
{
"path": "cmd/nvidia-container-runtime-hook/capabilities.go",
"chars": 422,
"preview": "package main\n\nimport (\n\t\"log\"\n)\n\nfunc capabilityToCLI(cap string) string {\n\tswitch cap {\n\tcase \"compute\":\n\t\treturn \"--co"
},
{
"path": "cmd/nvidia-container-runtime-hook/container_config.go",
"chars": 8235,
"preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"path\"\n\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n"
},
{
"path": "cmd/nvidia-container-runtime-hook/container_config_test.go",
"chars": 20500,
"preview": "package main\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n\n\t\"github.com/NVIDIA/nvidia-container-toolkit/"
},
{
"path": "cmd/nvidia-container-runtime-hook/hook_config.go",
"chars": 3951,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"reflect\"\n\t\"sync\"\n\n\t\"github.com/NVIDIA/nvidia-container-toolkit/api/config/v"
},
{
"path": "cmd/nvidia-container-runtime-hook/hook_config_test.go",
"chars": 2556,
"preview": "/**\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-container-runtime-hook/hook_test.go",
"chars": 1159,
"preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc TestIsPrivileged(t *t"
},
{
"path": "cmd/nvidia-container-runtime-hook/main.go",
"chars": 5015,
"preview": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"runtime/debug\"\n\t\"strconv\"\n\t\""
},
{
"path": "cmd/nvidia-container-runtime.cdi/main.go",
"chars": 841,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-container-runtime.legacy/main.go",
"chars": 844,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-ctk/README.md",
"chars": 2969,
"preview": "# NVIDIA Container Toolkit CLI\n\nThe NVIDIA Container Toolkit CLI `nvidia-ctk` provides a number of utilities that are us"
},
{
"path": "cmd/nvidia-ctk/cdi/cdi.go",
"chars": 1653,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/cdi/generate/config.go",
"chars": 3332,
"preview": "/**\n# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/cdi/generate/generate.go",
"chars": 16830,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/cdi/generate/generate_test.go",
"chars": 19598,
"preview": "/**\n# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/cdi/list/list.go",
"chars": 2615,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/cdi/transform/root/root.go",
"chars": 4444,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/cdi/transform/transform.go",
"chars": 1292,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/config/config.go",
"chars": 7046,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/config/config_test.go",
"chars": 4372,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-ctk/config/create-default/create-default.go",
"chars": 2439,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/config/flags/options.go",
"chars": 1896,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-ctk/hook/hook.go",
"chars": 1259,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/info/info.go",
"chars": 1153,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/main.go",
"chars": 3568,
"preview": "/**\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/runtime/configure/configure.go",
"chars": 12845,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/runtime/configure/configure_test.go",
"chars": 21641,
"preview": "/**\n# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/runtime/runtime.go",
"chars": 1367,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk/system/create-dev-char-symlinks/all.go",
"chars": 5420,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-ctk/system/create-dev-char-symlinks/create-dev-char-symlinks.go",
"chars": 8878,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-ctk/system/create-dev-char-symlinks/existing.go",
"chars": 2413,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-ctk/system/create-dev-char-symlinks/existing_linux.go",
"chars": 849,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-ctk/system/create-dev-char-symlinks/existing_other.go",
"chars": 884,
"preview": "//go:build !linux\n\n/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, "
},
{
"path": "cmd/nvidia-ctk/system/create-device-nodes/create-device-nodes.go",
"chars": 4030,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-ctk/system/system.go",
"chars": 1491,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-ctk-installer/container/README.md",
"chars": 4278,
"preview": "## Introduction\n\nThis repository contains tools that allow docker, containerd, or cri-o to be configured to use the NVID"
},
{
"path": "cmd/nvidia-ctk-installer/container/container.go",
"chars": 6616,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-ctk-installer/container/operator/operator.go",
"chars": 3447,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "cmd/nvidia-ctk-installer/container/operator/operator_test.go",
"chars": 3610,
"preview": "/**\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/containerd/config_test.go",
"chars": 71195,
"preview": "/*\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not"
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/containerd/containerd.go",
"chars": 6181,
"preview": "/**\n# Copyright (c) 2020-2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version "
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/containerd/containerd_linux.go",
"chars": 3095,
"preview": "/**\n# Copyright 2020-2023 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you m"
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/containerd/containerd_other.go",
"chars": 835,
"preview": "//go:build !linux\n\n/**\n# Copyright 2023 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/containerd/containerd_test.go",
"chars": 1777,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/crio/config_test.go",
"chars": 21390,
"preview": "/**\n# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/crio/crio.go",
"chars": 6849,
"preview": "/**\n# Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version "
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/docker/docker.go",
"chars": 2892,
"preview": "/**\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/docker/docker_linux.go",
"chars": 3085,
"preview": "/**\n# Copyright 2021-2023 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you m"
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/docker/docker_other.go",
"chars": 819,
"preview": "//go:build !linux\n\n/**\n# Copyright 2023 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/docker/docker_test.go",
"chars": 10237,
"preview": "/**\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/nri/logger.go",
"chars": 610,
"preview": "package nri\n\nimport (\n\t\"context\"\n\n\t\"github.com/NVIDIA/nvidia-container-toolkit/internal/logger\"\n)\n\ntype toNriLogger stru"
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/nri/plugin.go",
"chars": 4117,
"preview": "/**\n# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk-installer/container/runtime/runtime.go",
"chars": 9927,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "cmd/nvidia-ctk-installer/main.go",
"chars": 13178,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/signal\"\n\t\"path/filepath\"\n\t\"syscall\"\n\t\"time\"\n\n\tnriapi \"github.com/con"
},
{
"path": "cmd/nvidia-ctk-installer/main_test.go",
"chars": 15461,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/installer/artifact-root.go",
"chars": 2433,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/installer/directory.go",
"chars": 1222,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/installer/executables.go",
"chars": 4645,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/installer/executables_test.go",
"chars": 2241,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/installer/file-installer_mock.go",
"chars": 5153,
"preview": "// Code generated by moq; DO NOT EDIT.\n// github.com/matryer/moq\n\npackage installer\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"sync\"\n)\n\n// "
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/installer/installer.go",
"chars": 4369,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/installer/installer_mock.go",
"chars": 1709,
"preview": "// Code generated by moq; DO NOT EDIT.\n// github.com/matryer/moq\n\npackage installer\n\nimport (\n\t\"sync\"\n)\n\n// Ensure, that"
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/installer/installer_test.go",
"chars": 6977,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/installer/libraries.go",
"chars": 2109,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/installer/options.go",
"chars": 1537,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/options.go",
"chars": 1098,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/toolkit.go",
"chars": 19211,
"preview": "/**\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "cmd/nvidia-ctk-installer/toolkit/toolkit_test.go",
"chars": 8473,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "deployments/container/Dockerfile",
"chars": 5609,
"preview": "# SPDX-FileCopyrightText: Copyright (c) 2019 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Identi"
},
{
"path": "deployments/container/Dockerfile.rpmrebuild",
"chars": 1067,
"preview": "# SPDX-FileCopyrightText: Copyright (c) NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Identifier:"
},
{
"path": "deployments/container/Makefile",
"chars": 4165,
"preview": "# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "deployments/container/README.md",
"chars": 135,
"preview": "# NVIDIA Container Toolkit Container\n\nThis folder contains make and docker files for building the NVIDIA Container Toolk"
},
{
"path": "deployments/container/multi-arch.mk",
"chars": 931,
"preview": "# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "deployments/container/native-only.mk",
"chars": 920,
"preview": "# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "deployments/devel/Dockerfile",
"chars": 1009,
"preview": "# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "deployments/devel/Makefile",
"chars": 1178,
"preview": "# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not us"
},
{
"path": "deployments/devel/go.mod",
"chars": 284,
"preview": "module github.com/NVIDIA/k8s-device-plugin/deployments/devel\n\ngo 1.25\n\nrequire github.com/matryer/moq v0.6.0\n\nrequire (\n"
},
{
"path": "deployments/devel/go.sum",
"chars": 972,
"preview": "github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=\ngithub.com/google/go-cmp v0.7.0/go.mod h"
},
{
"path": "deployments/devel/tools.go",
"chars": 737,
"preview": "//go:build tools\n// +build tools\n\n/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version"
},
{
"path": "deployments/systemd/nvidia-cdi-refresh.env",
"chars": 564,
"preview": "# This file can be used to override the configuration of the\n# nvidia-ctk cdi generate\n# command invoked by the nvidia"
},
{
"path": "deployments/systemd/nvidia-cdi-refresh.path",
"chars": 865,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "deployments/systemd/nvidia-cdi-refresh.service",
"chars": 1285,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "docker/Dockerfile.debian",
"chars": 2040,
"preview": "ARG BASEIMAGE\nFROM ${BASEIMAGE}\n\nENV DEBIAN_FRONTEND=noninteractive\nRUN apt-get update && apt-get install -y --no-instal"
},
{
"path": "docker/Dockerfile.devel",
"chars": 1354,
"preview": "# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "docker/Dockerfile.opensuse-leap",
"chars": 1449,
"preview": "ARG BASEIMAGE\nFROM ${BASEIMAGE}\n\nRUN zypper install -y \\\n ca-certificates \\\n wget \\\n git \\\n rpm-build && \\\n "
},
{
"path": "docker/Dockerfile.rpm-yum",
"chars": 2463,
"preview": "# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "docker/Dockerfile.ubuntu",
"chars": 1900,
"preview": "ARG BASEIMAGE\nFROM ${BASEIMAGE}\n\nENV DEBIAN_FRONTEND=noninteractive\nRUN apt-get update && apt-get install -y --no-instal"
},
{
"path": "docker/docker.mk",
"chars": 4730,
"preview": "# Copyright (c) 2017-2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "go.mod",
"chars": 2005,
"preview": "module github.com/NVIDIA/nvidia-container-toolkit\n\ngo 1.25.0\n\nrequire (\n\tgithub.com/NVIDIA/go-nvlib v0.9.1-0.20251202135"
},
{
"path": "go.sum",
"chars": 11098,
"preview": "cyphar.com/go-pathrs v0.2.1 h1:9nx1vOgwVvX1mNBWDu93+vaceedpbsDqo+XuBGL40b8=\ncyphar.com/go-pathrs v0.2.1/go.mod h1:y8f1EM"
},
{
"path": "hack/create-release.sh",
"chars": 1390,
"preview": "# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not us"
},
{
"path": "hack/generate-changelog.sh",
"chars": 3669,
"preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache Licen"
},
{
"path": "hack/golang-version.sh",
"chars": 840,
"preview": "#!/bin/bash\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# yo"
},
{
"path": "hack/prepare-artifacts.sh",
"chars": 2896,
"preview": "#!/bin/bash -e\n\n# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, V"
},
{
"path": "hack/prepare-release.sh",
"chars": 3844,
"preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache Licen"
},
{
"path": "hack/pull-packages.sh",
"chars": 1528,
"preview": "#!/bin/bash\n\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Vers"
},
{
"path": "internal/config/image/builder.go",
"chars": 4574,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "internal/config/image/capabilities.go",
"chars": 4139,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/config/image/capabilities_test.go",
"chars": 4172,
"preview": "/**\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/config/image/cuda_image.go",
"chars": 14657,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/config/image/cuda_image_test.go",
"chars": 23784,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/config/image/devices.go",
"chars": 2680,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/config/image/envvars.go",
"chars": 1199,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "internal/config/image/privileged.go",
"chars": 1655,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "internal/config/image/privileged_test.go",
"chars": 1336,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "internal/cuda/cuda.go",
"chars": 4085,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/devices/devices.go",
"chars": 1870,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "internal/devices/devices_mock.go",
"chars": 4583,
"preview": "// Code generated by moq; DO NOT EDIT.\n// github.com/matryer/moq\n\npackage devices\n\nimport (\n\t\"sync\"\n)\n\n// Ensure, that I"
},
{
"path": "internal/devices/devices_tests.go",
"chars": 2978,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "internal/discover/cache.go",
"chars": 1793,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "internal/discover/char_devices.go",
"chars": 1959,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/discover/char_devices_test.go",
"chars": 2183,
"preview": "/**\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/discover/compat_libs.go",
"chars": 1247,
"preview": "package discover\n\nimport (\n\t\"strings\"\n\n\t\"github.com/NVIDIA/nvidia-container-toolkit/internal/logger\"\n)\n\n// EnableCUDACom"
},
{
"path": "internal/discover/discover.go",
"chars": 1429,
"preview": "/*\n# Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2"
},
{
"path": "internal/discover/discover_mock.go",
"chars": 4423,
"preview": "// Code generated by moq; DO NOT EDIT.\n// github.com/matryer/moq\n\npackage discover\n\nimport (\n\t\"sync\"\n)\n\n// Ensure, that "
},
{
"path": "internal/discover/envvar.go",
"chars": 1312,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "internal/discover/filter.go",
"chars": 1728,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/discover/first-valid.go",
"chars": 1814,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "internal/discover/gdrcopy.go",
"chars": 962,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "internal/discover/gdrcopy_test.go",
"chars": 2421,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "internal/discover/gds.go",
"chars": 2222,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/discover/gds_test.go",
"chars": 3472,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "internal/discover/graphics.go",
"chars": 14743,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/discover/graphics_test.go",
"chars": 6389,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "internal/discover/hooks.go",
"chars": 7474,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "internal/discover/hooks_test.go",
"chars": 14552,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "internal/discover/ipc.go",
"chars": 2053,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "internal/discover/ipc_test.go",
"chars": 1384,
"preview": "/**\n# Copyright (c) NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "internal/discover/ldconfig.go",
"chars": 2694,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/discover/ldconfig_test.go",
"chars": 4414,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/discover/list.go",
"chars": 2549,
"preview": "/*\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (t"
},
{
"path": "internal/discover/mofed.go",
"chars": 1099,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/discover/mofed_test.go",
"chars": 2518,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "internal/discover/mounts-to-container-path.go",
"chars": 2236,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "internal/discover/mounts-to-container-path_test.go",
"chars": 3867,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
},
{
"path": "internal/discover/mounts.go",
"chars": 2932,
"preview": "/*\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (t"
},
{
"path": "internal/discover/mounts_test.go",
"chars": 6203,
"preview": "/*\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (t"
},
{
"path": "internal/discover/none.go",
"chars": 1187,
"preview": "/*\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (t"
},
{
"path": "internal/discover/none_test.go",
"chars": 822,
"preview": "/*\n# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (t"
},
{
"path": "internal/discover/nvswitch.go",
"chars": 1106,
"preview": "/**\n# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 ("
},
{
"path": "internal/discover/nvswitch_test.go",
"chars": 2520,
"preview": "/**\n# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Id"
},
{
"path": "internal/discover/symlinks.go",
"chars": 7196,
"preview": "/**\n# Copyright 2024 NVIDIA CORPORATION\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
}
]
// ... and 2713 more files (download for full content)
About this extraction
This page contains the full source code of the NVIDIA/nvidia-container-toolkit GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2913 files (219.3 MB), approximately 9.9M tokens, and a symbol index with 224624 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.