Коды возврата
23 января 2025
ID return_codes
Общие сведения
В решении на базе KasperskyOS коды возврата функций различных API (например, API библиотеки libkos, ConfigManager, транспортного кода, прикладного ПО) имеют тип 32-битного знакового целого числа. Этот тип определен в заголовочном файле sysroot-*-kos/include/rtl/retcode.h из состава Kaspersky IoT Secure Gateway 1000 SDK так:
typedef __INT32_TYPE__ Retcode;
Множество кодов возврата состоит из кода успеха со значением 0 и кодов ошибок. Код ошибки интерпретируется как структура данных, формат которой описан в заголовочном файле sysroot-*-kos/include/rtl/retcode.h из состава Kaspersky IoT Secure Gateway 1000 SDK. Этот формат предусматривает наличие нескольких полей, которые содержат не только сведения о результатах вызова функции, но и следующую дополнительную информацию:
- Флаг в поле
Customer, сигнализирующий о том, что код ошибки определен разработчиками решения на базе KasperskyOS, а не разработчиками ПО из состава Kaspersky IoT Secure Gateway 1000 SDK.Благодаря флагу в поле
Customerразработчики решения на базе KasperskyOS и разработчики ПО из состава Kaspersky IoT Secure Gateway 1000 SDK могут определять коды ошибок из непересекающихся множеств. - Глобальный идентификатор кода ошибки в поле
Space.Глобальные идентификаторы позволяют определять непересекающиеся множества кодов ошибок.
Например, идентификатору
RC_SPACE_GENERALсоответствуют коды общих ошибок, идентификаторуRC_SPACE_KERNELсоответствуют коды ошибок ядра, идентификаторуRC_SPACE_DRIVERSсоответствуют коды ошибок драйверов. - Локальный идентификатор кода ошибки в поле
Facility.Локальные идентификаторы позволяют определять непересекающиеся подмножества кодов ошибок в рамках множества кодов ошибок, которые соответствуют одному глобальному идентификатору. Например, множество кодов ошибок с глобальным идентификатором
RC_SPACE_DRIVERSвключает непересекающиеся подмножества кодов ошибок с локальными идентификаторамиRC_FACILITY_I2C,RC_FACILITY_USB,RC_FACILITY_BLKDEV.
Глобальные и локальные идентификаторы специфичных кодов ошибок назначаются разработчиками решения на базе KasperskyOS и разработчиками ПО из состава Kaspersky IoT Secure Gateway 1000 SDK независимо друг от друга. То есть формируется два множества глобальных идентификаторов. Каждый глобальный идентификатор имеет уникальное смысловое значение в рамках одного множества. Каждый локальный идентификатор имеет уникальное смысловое значение в рамках множества локальных идентификаторов, относящихся к одному глобальному идентификатору. Общие коды ошибок могут использоваться в любых API.
Такой централизованный подход позволяет избежать появления в решении на базе KasperskyOS одинаковых кодов ошибок с разными смысловыми значениями. Это нужно, чтобы исключить проблему транзита кодов ошибок через разные API. То есть коды ошибок в решении на базе KasperskyOS назначаются так, чтобы не выполнять конвертацию этих кодов при транзите через разные API.
Приведенные здесь сведения о кодах возврата не относятся к функциям интерфейса POSIX и API стороннего ПО, используемого в решениях на базе KasperskyOS.
Общие коды возврата
Коды возврата, которые являются общими для API любых компонентов решения и их составных частей, определены в заголовочном файле sysroot-*-kos/include/rtl/retcode.h из состава Kaspersky IoT Secure Gateway 1000 SDK. Описание общих кодов возврата приведено в таблице ниже.
Общие коды возврата
Код возврата | Описание |
|---|---|
| Функция завершилась успешно. |
| Параметр функции некорректен. |
| Нет соединения между клиентской и серверной сторонами взаимодействия. Например, отсутствует серверный IPC-дескриптор. |
| Недостаточно памяти для выполнения операции. |
| Недостаточный размер буфера. |
| Функция завершилась с внутренней ошибкой, которая связана с некорректной логикой. Примерами внутренних ошибок являются: выход значений за допустимые пределы, появление нулевых указателей и значений там, где этого быть не должно. |
| Ошибка отправки IPC-сообщения. |
| Ошибка приема IPC-сообщения. |
| IPC-сообщение не было передано из-за источника IPC-сообщения. |
| IPC-сообщение не было передано из-за приемника IPC-сообщения. |
| IPC прервано другим потоком процесса. |
| Сигнализирует, что функцию нужно вызвать повторно. |
| Функция завершилась с ошибкой. |
| Операция над ресурсом недоступна. |
| Инициализация не выполнена. |
| Функция не реализована. |
| Большой размер буфера. |
| Ресурс временно недоступен. |
| Ресурс не найден. |
| Время ожидания истекло. |
| Операция запрещена механизмами безопасности. |
| Операция приведет к блокировке. |
| Операция прервана. |
| В обработчике прерывания вызвана недопустимая функция. |
| Множество элементов уже содержит добавляемый элемент. |
| Операция не может быть выполнена. |
| Права доступа к ресурсу отозваны. |
| Квота на ресурс превышена. |
| Устройство не найдено. |
| Произошло переполнение. |
| Операция уже выполнена. |
Определение кодов ошибок
Чтобы определить код ошибки, разработчику решения на базе KasperskyOS нужно использовать макрос MAKE_RETCODE(), определенный в заголовочном файле sysroot-*-kos/include/rtl/retcode.h из состава Kaspersky IoT Secure Gateway 1000 SDK. При этом через параметр customer нужно передать символьную константу RC_CUSTOMER_TRUE.
Пример:
#define LV_EBADREQUEST MAKE_RETCODE(RC_CUSTOMER_TRUE, RC_SPACE_APPS, RC_FACILITY_LogViewer, 5, "Bad request")
Описание ошибки, которое передается через параметр desc, не используется макросом MAKE_RETCODE().
Чтение полей структуры кода ошибки
Макросы RC_GET_CUSTOMER(), RC_GET_SPACE(), RC_GET_FACILITY() и RC_GET_CODE(), определенные в заголовочном файле sysroot-*-kos/include/rtl/retcode.h из состава Kaspersky IoT Secure Gateway 1000 SDK, позволяют читать поля структуры кода ошибки.
Макросы RETCODE_HR_PARAMS() и RETCODE_HR_FMT(), определенные в заголовочном файле sysroot-*-kos/include/rtl/retcode_hr.h из состава Kaspersky IoT Secure Gateway 1000 SDK, используются для форматированного вывода сведений об ошибке.