mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2024-11-28 23:17:24 +00:00
978d439cf8
This change adds the internal bindings for Sandboxutils, some of which have been automatically generated with the help of c-for-go. The format followed is similar to what is used in go-nvml. These would need to be regenerated when the header file is modified and new APIs are added. Signed-off-by: Evan Lezar <elezar@nvidia.com> Signed-off-by: Huy Nguyen <huyn@nvidia.com> Signed-off-by: Sananya Majumder <sananyam@nvidia.com>
299 lines
14 KiB
C
299 lines
14 KiB
C
/*
|
|
* SPDX-FileCopyrightText: Copyright (c) 2024 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.
|
|
*/
|
|
|
|
#ifndef __NVSANDBOXUTILS_H__
|
|
#define __NVSANDBOXUTILS_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define INPUT_LENGTH 256
|
|
#define MAX_FILE_PATH 256
|
|
#define MAX_NAME_LENGTH 256
|
|
|
|
/***************************************************************************************************/
|
|
/** @defgroup enums Enumerations
|
|
* @{
|
|
*/
|
|
/***************************************************************************************************/
|
|
|
|
/**
|
|
* Return types
|
|
*/
|
|
typedef enum
|
|
{
|
|
NVSANDBOXUTILS_SUCCESS = 0, //!< The operation was successful
|
|
NVSANDBOXUTILS_ERROR_UNINITIALIZED = 1, //!< The library wasn't successfully initialized
|
|
NVSANDBOXUTILS_ERROR_NOT_SUPPORTED = 2, //!< The requested operation is not supported on target device
|
|
NVSANDBOXUTILS_ERROR_INVALID_ARG = 3, //!< A supplied argument is invalid
|
|
NVSANDBOXUTILS_ERROR_INSUFFICIENT_SIZE = 4, //!< A supplied argument is not large enough
|
|
NVSANDBOXUTILS_ERROR_VERSION_NOT_SUPPORTED = 5, //!< Requested library version is not supported
|
|
NVSANDBOXUTILS_ERROR_LIBRARY_LOAD = 6, //!< The library load failed
|
|
NVSANDBOXUTILS_ERROR_FUNCTION_NOT_FOUND = 7, //!< Called function was not found
|
|
NVSANDBOXUTILS_ERROR_DEVICE_NOT_FOUND = 8, //!< Target device was not found
|
|
NVSANDBOXUTILS_ERROR_NVML_LIB_CALL = 9, //!< NVML library call failed
|
|
NVSANDBOXUTILS_ERROR_OUT_OF_MEMORY = 10, //!< There is insufficient memory
|
|
NVSANDBOXUTILS_ERROR_FILEPATH_NOT_FOUND = 11, //!< A supplied file path was not found
|
|
NVSANDBOXUTILS_ERROR_UNKNOWN = 0xFFFF, //!< Unknown error occurred
|
|
} nvSandboxUtilsRet_t;
|
|
|
|
/**
|
|
* Return if there is an error
|
|
*/
|
|
#define RETURN_ON_SANDBOX_ERROR(result) \
|
|
if ((result) != NVSANDBOXUTILS_SUCCESS) { \
|
|
NVSANDBOXUTILS_ERROR_MSG("%s %d result=%d", __func__, __LINE__, result); \
|
|
return result; \
|
|
}
|
|
|
|
/**
|
|
* Log levels
|
|
*/
|
|
typedef enum
|
|
{
|
|
NVSANDBOXUTILS_LOG_LEVEL_FATAL = 0, //!< Log fatal errors
|
|
NVSANDBOXUTILS_LOG_LEVEL_ERROR = 1, //!< Log all errors
|
|
NVSANDBOXUTILS_LOG_LEVEL_WARN = 2, //!< Log all warnings
|
|
NVSANDBOXUTILS_LOG_LEVEL_DEBUG = 3, //!< Log all debug messages
|
|
NVSANDBOXUTILS_LOG_LEVEL_INFO = 4, //!< Log all info messages
|
|
NVSANDBOXUTILS_LOG_LEVEL_NONE = 0xFFFF, //!< Log none
|
|
} nvSandboxUtilsLogLevel_t;
|
|
|
|
/**
|
|
* Input rootfs to help access files inside the driver container
|
|
*/
|
|
typedef enum
|
|
{
|
|
NV_ROOTFS_DEFAULT, //!< Default no rootfs
|
|
NV_ROOTFS_PATH, //!< /run/nvidia/driver
|
|
NV_ROOTFS_PID, //!< /proc/PID/mountinfo
|
|
} nvSandboxUtilsRootfsInputType_t;
|
|
|
|
/**
|
|
* File type
|
|
*/
|
|
typedef enum
|
|
{
|
|
NV_DEV, //!< /dev file system
|
|
NV_PROC, //!< /proc file system
|
|
NV_SYS, //!< /sys file system
|
|
} nvSandboxUtilsFileType_t;
|
|
|
|
/**
|
|
* File subtype
|
|
*/
|
|
typedef enum
|
|
{
|
|
NV_DEV_NVIDIA, //!< /dev/nvidia0
|
|
NV_DEV_DRI_CARD, //!< /dev/dri/card1
|
|
NV_DEV_DRI_RENDERD, //!< /dev/dri/renderD128
|
|
NV_DEV_DRI_CARD_SYMLINK, //!< /dev/dri/by-path/pci-0000:41:00.0-card
|
|
NV_DEV_DRI_RENDERD_SYMLINK, //!< /dev/dri/by-path/pci-0000:41:00.0-render
|
|
NV_DEV_NVIDIA_UVM, //!< /dev/nvidia-uvm
|
|
NV_DEV_NVIDIA_UVM_TOOLS, //!< /dev/nvidia-uvm-tools
|
|
NV_DEV_NVIDIA_MODESET, //!< /dev/nvidia-uvm-modeset
|
|
NV_DEV_NVIDIA_CTL, //!< /dev/nvidiactl
|
|
NV_DEV_GDRDRV, //!< /dev/gdrdrv
|
|
NV_DEV_NVIDIA_CAPS_NVIDIA_CAP, //!< /dev/nvidia-caps/nvidia-cap22
|
|
NV_PROC_DRIVER_NVIDIA_GPUS_PCIBUSID, //!< /proc/driver/nvidia/gpus/0000:2d:00.0
|
|
NV_PROC_DRIVER_NVIDIA_GPUS, //!< /proc/driver/nvidia/gpus (for mask out)
|
|
NV_PROC_NVIDIA_PARAMS, //!< /proc/driver/nvidia/params
|
|
NV_PROC_NVIDIA_CAPS_MIG_MINORS, //!< /proc/driver/nvidia-caps/mig-minors
|
|
NV_PROC_DRIVER_NVIDIA_CAPABILITIES_GPU, //!< /proc/driver/nvidia/capabilities/gpu0
|
|
NV_PROC_DRIVER_NVIDIA_CAPABILITIES, //!< /proc/driver/nvidia/capabilities (for mask out)
|
|
NV_PROC_DRIVER_NVIDIA_CAPABILITIIES_GPU_MIG_CI_ACCESS, //!< proc/driver/nvidia/capabilities/gpu0/mig/gi2/ci0/access
|
|
NV_SYS_MODULE_NVIDIA_DRIVER_PCIBUSID, //!< /sys/module/nvidia/drivers/pci:nvidia/0000:2d:00.0
|
|
NV_SYS_MODULE_NVIDIA_DRIVER, //!< /sys/module/nvidia/drivers/pci:nvidia (for mask out)
|
|
NV_NUM_SUBTYPE, // always at the end.
|
|
} nvSandboxUtilsFileSystemSubType_t;
|
|
|
|
/**
|
|
* File module
|
|
*/
|
|
typedef enum
|
|
{
|
|
NV_GPU, //!< Target device
|
|
NV_MIG, //!< Target device- MIG
|
|
NV_DRIVER_NVIDIA, //!< NVIDIA kernel driver
|
|
NV_DRIVER_NVIDIA_UVM, //!< NVIDIA kernel driver-UVM
|
|
NV_DRIVER_NVIDIA_MODESET, //!< NVIDIA kernel driver-modeset
|
|
NV_DRIVER_GDRDRV, //!< GDRDRV driver
|
|
NV_SYSTEM, //!< System module
|
|
} nvSandboxUtilsFileModule_t;
|
|
|
|
/**
|
|
* Flag to provide additional details about the file
|
|
*/
|
|
typedef enum
|
|
{
|
|
NV_FILE_FLAG_HINT = (1 << 0), //!< Default no hint
|
|
NV_FILE_FLAG_MASKOUT = (1 << 1), //!< For /proc/driver/nvidia/gpus
|
|
NV_FILE_FLAG_CONTENT = (1 << 2), //!< For /proc/driver/nvidia/params
|
|
//!< For SYMLINK
|
|
//!< Use \p nvSandboxUtilsGetFileContent to get name of the linked file
|
|
NV_FILE_FLAG_DEPRECTATED = (1 << 3), //!< For all the FIRMWARE GSP file
|
|
NV_FILE_FLAG_CANDIDATES = (1 << 4), //!< For libcuda.so
|
|
} nvSandboxUtilsFileFlag_t;
|
|
|
|
/**
|
|
* Input type of the target device
|
|
*/
|
|
typedef enum
|
|
{
|
|
NV_GPU_INPUT_GPU_UUID, //!< GPU UUID
|
|
NV_GPU_INPUT_MIG_UUID, //!< MIG UUID
|
|
NV_GPU_INPUT_PCI_ID, //!< PCIe DBDF ID
|
|
NV_GPU_INPUT_PCI_INDEX, //!< PCIe bus order (0 points to the GPU that has lowest PCIe BDF)
|
|
} nvSandboxUtilsGpuInputType_t;
|
|
|
|
/** @} */
|
|
|
|
/***************************************************************************************************/
|
|
/** @defgroup dataTypes Structures and Unions
|
|
* @{
|
|
*/
|
|
/***************************************************************************************************/
|
|
|
|
/**
|
|
* Initalization input v1
|
|
*/
|
|
typedef struct
|
|
{
|
|
unsigned int version; //!< Version for the structure
|
|
nvSandboxUtilsRootfsInputType_t type; //!< One of \p nvSandboxUtilsRootfsInputType_t
|
|
char value[INPUT_LENGTH]; //!< String representation of input
|
|
} nvSandboxUtilsInitInput_v1_t;
|
|
|
|
typedef nvSandboxUtilsInitInput_v1_t nvSandboxUtilsInitInput_t;
|
|
|
|
/**
|
|
* File system information
|
|
*/
|
|
typedef struct nvSandboxUtilsGpuFileInfo_v1_t
|
|
{
|
|
struct nvSandboxUtilsGpuFileInfo_v1_t *next; //!< Pointer to the next node in the linked list
|
|
nvSandboxUtilsFileType_t fileType; //!< One of \p nvSandboxUtilsFileType_t
|
|
nvSandboxUtilsFileSystemSubType_t fileSubType; //!< One of \p nvSandboxUtilsFileSystemSubType_t
|
|
nvSandboxUtilsFileModule_t module; //!< One of \p nvSandboxUtilsFileModule_t
|
|
nvSandboxUtilsFileFlag_t flags; //!< One of \p nvSandboxUtilsFileFlag_t
|
|
char *filePath; //!< Relative file path to rootfs
|
|
}nvSandboxUtilsGpuFileInfo_v1_t;
|
|
|
|
/**
|
|
* GPU resource request v1
|
|
*/
|
|
typedef struct
|
|
{
|
|
unsigned int version; //!< Version for the structure
|
|
nvSandboxUtilsGpuInputType_t inputType; //!< One of \p nvSandboxUtilsGpuInputType_t
|
|
char input[INPUT_LENGTH]; //!< String representation of input
|
|
nvSandboxUtilsGpuFileInfo_v1_t *files; //!< Linked list of \ref nvSandboxUtilsGpuFileInfo_v1_t
|
|
} nvSandboxUtilsGpuRes_v1_t;
|
|
|
|
typedef nvSandboxUtilsGpuRes_v1_t nvSandboxUtilsGpuRes_t;
|
|
|
|
/** @} */
|
|
|
|
/***************************************************************************************************/
|
|
/** @defgroup funcs Functions
|
|
* @{
|
|
*/
|
|
/***************************************************************************************************/
|
|
|
|
/* *************************************************
|
|
* Initialize library
|
|
* *************************************************
|
|
*/
|
|
/**
|
|
* Prepare library resources before library API can be used.
|
|
* This initialization will not fail if one of the initialization prerequisites fails.
|
|
* @param input Reference to the called-supplied input struct that has initialization fields
|
|
*
|
|
* @returns @ref NVSANDBOXUTILS_SUCCESS on success
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_INVALID_ARG if \p input->value isn't a valid rootfs path
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_VERSION_NOT_SUPPORTED if \p input->version isn't supported by the library
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_FILEPATH_NOT_FOUND if any of the required file paths are not found during initialization
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_OUT_OF_MEMORY if there is insufficient system memory during initialization
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_LIBRARY_LOAD on any error during loading the library
|
|
*/
|
|
nvSandboxUtilsRet_t nvSandboxUtilsInit(nvSandboxUtilsInitInput_t *input);
|
|
|
|
/* *************************************************
|
|
* Shutdown library
|
|
* *************************************************
|
|
*/
|
|
/**
|
|
* Clean up library resources created by init call
|
|
*
|
|
* @returns @ref NVSANDBOXUTILS_SUCCESS on success
|
|
*/
|
|
nvSandboxUtilsRet_t nvSandboxUtilsShutdown(void);
|
|
|
|
/* *************************************************
|
|
* Get NVIDIA RM driver version
|
|
* *************************************************
|
|
*/
|
|
/**
|
|
* Get NVIDIA RM driver version
|
|
* @param version Reference to caller-supplied buffer to return driver version string
|
|
* @param length The maximum allowed length of the string returned in \p version
|
|
*
|
|
* @returns @ref NVSANDBOXUTILS_SUCCESS on success
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_INVALID_ARG if \p version is NULL
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_NVML_LIB_CALL on any error during driver version query from NVML
|
|
*/
|
|
nvSandboxUtilsRet_t nvSandboxUtilsGetDriverVersion(char *version, unsigned int length);
|
|
|
|
/* *************************************************
|
|
* Get /dev, /proc, /sys file system information
|
|
* *************************************************
|
|
*/
|
|
/**
|
|
* Get /dev, /proc, /sys file system information
|
|
* @param request Reference to caller-supplied request struct to return the file system information
|
|
*
|
|
* @returns @ref NVSANDBOXUTILS_SUCCESS on success
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_INVALID_ARG if \p request->input doesn't match any device
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_VERSION_NOT_SUPPORTED if \p request->version isn't supported by the library
|
|
*/
|
|
nvSandboxUtilsRet_t nvSandboxUtilsGetGpuResource(nvSandboxUtilsGpuRes_t *request);
|
|
|
|
/* *************************************************
|
|
* Get content of given file path
|
|
* *************************************************
|
|
*/
|
|
/**
|
|
* Get file content of input file path
|
|
* @param filePath Reference to the file path
|
|
* @param content Reference to the caller-supplied buffer to return the file content
|
|
* @param contentSize Reference to the maximum allowed size of content. It is updated to the actual size of the content on return
|
|
*
|
|
* @returns @ref NVSANDBOXUTILS_SUCCESS on success
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_INVALID_ARG if \p filePath or \p content is NULL
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_INSUFFICIENT_SIZE if \p contentSize is too small
|
|
* @returns @ref NVSANDBOXUTILS_ERROR_FILEPATH_NOT_FOUND on an error while obtaining the content for the file path
|
|
*/
|
|
nvSandboxUtilsRet_t nvSandboxUtilsGetFileContent(char *filePath, char *content, unsigned int *contentSize);
|
|
|
|
/** @} */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif // __NVSANDBOXUTILS_H__
|