include/parsec/pdp_common.h#

Structures and Types Documentation#

enum @0#

enum  {
    EXEC_SECURITY_NONE,
    EXEC_SECURITY_ENFORCE,
    EXEC_SECURITY_COMPLAIN,
    EXEC_SECURITY_LAST
};

typedef PDPL_T#

typedef struct PDP_LABEL_T PDPL_T;

Определение метки безопасности в соответствии с ДП моделью для объектов и субъектов доступа (PDP - Parsec Dostup Potoky) Работа с экземплярами данного типа ведется только через указатель, внутреннее состояние доступно только через вызов определенной функции (инкапсуляция)

typedef PDPML_T#

typedef struct PDP_MAC_LABEL_T PDPML_T;

Определение мандатной метки в соответствии с ДП моделью для объектов и субъектов доступа (PDP - Parsec Dostup Potoky) Работа с экземплярами данного типа ведется только через указатель, внутреннее состояние доступно только через вызов определенной функции (инкапсуляция)

typedef PDP_CAT_T#

typedef uint64_t PDP_CAT_T;

typedef PDP_CNT_SIZE_T#

typedef uint32_t PDP_CNT_SIZE_T;

typedef PDP_ILEV_T#

typedef uint32_t PDP_ILEV_T;

typedef PDP_ILINEAR_T#

typedef int8_t PDP_ILINEAR_T;

typedef PDP_LEV_T#

typedef uint8_t PDP_LEV_T;

typedef PDP_TYPE_T#

typedef uint16_t PDP_TYPE_T;

Functions Documentation#

function pdp_cat_permission#

Проверка доступа субъекта к объекту по категории

int pdp_cat_permission (
    PDP_CAT_T scat,
    PDP_CAT_T ocat,
    int mode
)

Parameters:

  • scat категории субъекта

  • ocat категории объекта

  • mode режим доступа (X_OK, R_OK, W_OK)

Returns:

0 - доступ разрешен, иначе - запрещен

function pdp_child_parent#

Проверка на возможность объекта с меткой безопасности child быть дочерним для объекта с меткой безопасности parent. Проверка проходит, если выполняются все следующие условния:

int pdp_child_parent (
    const PDPL_T *child,
    const PDPL_T *parent
)
  • Выполняются условия pdpml_notg;

  • Если уровень конф. child < уровень конф. parent, но установлен PDPT_CCNR у parent;

  • Если категория child != категории parent, но установлен PDPT_CCNR у parent.

Parameters:

  • child указатель на метку безопасности

  • parent указатель на метку безопасности

Returns:

0, если может

function pdp_ilev_permission#

Проверка доступа субъекта к объекту по целостности.

int pdp_ilev_permission (
    PDP_ILEV_T silev,
    PDP_ILEV_T oilev,
    int mode
)

Parameters:

  • silev целостность субъекта

  • oilev целостность объекта

  • mode режим доступа (X_OK, R_OK, W_OK)

Returns:

0 - доступ разрешен, иначе - запрещен

function pdp_lev_permission#

Проверка доступа субъекта к объекту по уровню конфиденциальности.

int pdp_lev_permission (
    PDP_LEV_T slev,
    PDP_LEV_T olev,
    int mode
)

Parameters:

  • slev уровнь конфиденциальности субъекта

  • olev уровнь конфиденциальности объекта

  • mode режим доступа (X_OK, R_OK, W_OK)

Returns:

0 - доступ разрешен, иначе - запрещен

function pdpl_and_cat#

Установка категории для метки безопасности через побитовое “и”.

void pdpl_and_cat (
    PDPL_T *l,
    PDP_CAT_T cat
)

Parameters:

  • l указатель на метку безопасности

  • cat категории

function pdpl_and_type#

Установка типа для метки безопасности через побитовое “и”.

void pdpl_and_type (
    PDPL_T *l,
    PDP_TYPE_T type
)

Parameters:

  • l указатель на метку безопасности

  • type тип

function pdpl_cat#

Получение категории метки безопасности.

PDP_CAT_T pdpl_cat (
    const PDPL_T *l
)

Parameters:

  • l указатель на метку безопасности

Returns:

категории

function pdpl_cmp#

Сравнение меток безопасности.

int pdpl_cmp (
    const PDPL_T *a,
    const PDPL_T *b,
    int flags
)

Parameters:

  • a указатель на метку безопастности

  • b указатель на метку безопастности

  • flags не используется

Returns:

1, если равны, иначе 0

function pdpl_dup#

Дублирование метки безопасности. Создание полной копии исходной метки безопасности в динамической области памяти.

PDPL_T * pdpl_dup (
    const PDPL_T *l PDP_KRNL_ARG
)

Parameters:

  • l указатель на исходную метку безопасности

Returns:

указатель на копию исходной метки безопасности в случае успеха, иначе NULL

function pdpl_equ#

Сравнение меток безопасности. Предосваляется для удобства, является надстройкой над функцией pdpl_cmp.

static inline int pdpl_equ (
    const PDPL_T *a,
    const PDPL_T *b
)

Parameters:

  • a указатель на метку безопастности

  • b указатель на метку безопастности

Returns:

не 0, если равны, иначе 0

function pdpl_from_raw#

Реализация отсутствует.

int pdpl_from_raw (
    PDPL_T *l,
    const void *buf,
    size_t size
)

function pdpl_get#

Увеличение счетчика ссылок метки безопасности.

const PDPL_T * pdpl_get (
    const PDPL_T *l
)

Parameters:

  • l указатель на метку безопасности

Returns:

указатель на метку безопасности (return == l)

function pdpl_get_from_raw#

Получение метки безопасности из бинарного представления.

PDPL_T * pdpl_get_from_raw (
    const void *buf,
    size_t size PDP_KRNL_ARG
)

Parameters:

  • buf указатель на буфер, который содержти метку безопасности в бинарном виде

  • size размер буфера

Returns:

указатель на метку безопасности в случае успеха, иначе NULL

function pdpl_get_new#

Выделение памяти и инициализация метки безопасности нулевой меткой.

PDPL_T * pdpl_get_new (
    PDP_USRKRNL(void, gfp_t f)
)

Returns:

указатель на метку безопасности в случае успеха, иначе NULL

function pdpl_get_new_init_mac#

Выделение памяти и инициализация метки безопасности передаваемыми параметрами.

PDPL_T * pdpl_get_new_init_mac (
    PDP_LEV_T lev,
    PDP_ILEV_T ilev,
    PDP_ILINEAR_T ilinear,
    PDP_CAT_T cat,
    PDP_TYPE_T type PDP_KRNL_ARG
)

Parameters:

  • lev уровень конфиденциальности метки

  • ilev целостность метки

  • ilinear линейная целостность метки

  • cat категории метки

  • type тип метки

Returns:

указатель на метку безопасности в случае успеха, иначе NULL

function pdpl_get_new_init_mr#

Выделение памяти и инициализация метки безопасности мандатной меткой. Указатель мандатной метки получившейся метки безопасности == указателю переданной мандатной метки.

PDPL_T * pdpl_get_new_init_mr (
    const PDPML_T *ml PDP_KRNL_ARG
)

Parameters:

  • ml указатель на мандатную метку

Returns:

указатель на метку безопасности в случае успеха, иначе NULL

function pdpl_get_raw#

Получение бинарного представления метки безопасности. Итоговый буфер будет выделен в динамичской области памяти функцией malloc().

void * pdpl_get_raw (
    const PDPL_T *l,
    size_t *size PDP_KRNL_ARG
)

Parameters:

  • l указатель на метку безопасности

  • size указатель на переменную, куда возвращается размер выделенного буфера

Returns:

указатель на буфер, который содержти метку безопасности в бинарном виде в случае успеха, иначе NULL

function pdpl_ilev#

Получение целостности метки безопасности.

PDP_ILEV_T pdpl_ilev (
    const PDPL_T *l
)

Parameters:

  • l указатель на метку безопасности

Returns:

целостность

function pdpl_ilinear#

Получение линейной целостности метки безопасности.

PDP_ILINEAR_T pdpl_ilinear (
    const PDPL_T *l
)

Parameters:

  • l указатель на метку безопасности

Returns:

линейная целостность

function pdpl_is_zero#

Сравнение метки безопасности с нулевой меткой. Предосваляется для удобства, является надстройкой над функцией pdpl_cmp.

static inline int pdpl_is_zero (
    const PDPL_T *l
)

Parameters:

  • l указатель на метку безопастности

Returns:

не 0, если равны, иначе 0

function pdpl_lev#

Получение уровня конфиденциальности метки безопасности.

PDP_LEV_T pdpl_lev (
    const PDPL_T *l
)

Parameters:

  • l указатель на метку безопасности

Returns:

уровень конфиденциальности

function pdpl_ml#

Получение мандатной метки метки безопасности.

const PDPML_T * pdpl_ml (
    const PDPL_T *l
)

Parameters:

  • l указатель на метку безопасности

Returns:

указатель на мандатную метку

function pdpl_or_cat#

Установка категории для метки безопасности через побитовое “или”.

void pdpl_or_cat (
    PDPL_T *l,
    PDP_CAT_T cat
)

Parameters:

  • l указатель на метку безопасности

  • cat категории

function pdpl_or_type#

Установка типа для метки безопасности через побитовое “или”.

void pdpl_or_type (
    PDPL_T *l,
    PDP_TYPE_T type
)

Parameters:

  • l указатель на метку безопасности

  • type тип

function pdpl_permission#

Проверка доступа субъекта к объекту.

int pdpl_permission (
    const PDPL_T *s,
    const PDPL_T *o,
    int mode
)

Parameters:

  • s указатель на метку безопасности субъекта

  • o указатель на метку безопасности объекта

  • mode режим доступа (X_OK, R_OK, W_OK)

Returns:

0 - доступ разрешен, иначе - запрещен

function pdpl_put#

Освобождение ресурсов метки безопасности. Уменьшение счетчика ссылок, а в случае его равенства 0 - освобождение динамической области памяти.

void pdpl_put (
    const PDPL_T *l
)

Parameters:

  • l указатель на метку безопасности

function pdpl_raw_size#

Получение размера в байтах бинарного представления метки безопасности.

size_t pdpl_raw_size (
    const PDPL_T *l
)

Parameters:

  • l указатель на метку безопасности

Returns:

размер в байтах бинарного представления метки безопасности

function pdpl_set_cat#

Установка категории для метки безопасности.

void pdpl_set_cat (
    PDPL_T *l,
    PDP_CAT_T cat
)

Parameters:

  • l указатель на метку безопасности

  • cat категории

function pdpl_set_ilev#

Установка целостности для метки безопасности.

void pdpl_set_ilev (
    PDPL_T *l,
    PDP_ILEV_T ilev
)

Parameters:

  • l указатель на метку безопасности

  • ilev целостность

function pdpl_set_ilinear#

Установка линейной целостности для метки безопасности.

void pdpl_set_ilinear (
    PDPL_T *l,
    PDP_ILINEAR_T ilinear
)

Parameters:

  • l указатель на метку безопасности

  • ilinear линейная целостность

function pdpl_set_lev#

Установка уровня конфиденциальности для метки безопасности.

void pdpl_set_lev (
    PDPL_T *l,
    PDP_LEV_T lev
)

Parameters:

  • l указатель на метку безопасности

  • lev уровень конфиденциальности

function pdpl_set_type#

Установка типа для метки безопасности.

void pdpl_set_type (
    PDPL_T *l,
    PDP_TYPE_T type
)

Parameters:

  • l указатель на метку безопасности

  • type тип

function pdpl_subtract#

Пересечение меток безопасности. Результирующая метка будет иметь:

PDPL_T * pdpl_subtract (
    PDPL_T *a,
    const PDPL_T *b,
    int flags
)
  • Уровень конфиденциальности той метки, у которой он меньше;

  • Целостность той метки, у которой она меньше;

  • Линейную целостность той метки, у которой она меньше;

  • Категорию как категория метки a без битов категории b;

  • Тип как тип метки a без битов типа b.

Parameters:

  • a указатель на метку безопастности

  • b указатель на метку безопастности

  • flags не используется

Returns:

метка безопастности (result == a)

function pdpl_type#

Получение типа метки безопасности.

PDP_TYPE_T pdpl_type (
    const PDPL_T *l
)

Parameters:

  • l указатель на метку безопасности

Returns:

тип

function pdpl_unite#

Объединение меток безопасности. Результирующая метка будет иметь:

PDPL_T * pdpl_unite (
    PDPL_T *a,
    const PDPL_T *b,
    int flags
)
  • Уровень конфиденциальности той метки, у которой он больше;

  • Целостность той метки, у которой она больше;

  • Линейную целостность той метки, у которой она больше;

  • Категорию как результат объединения масок категорий двух меток;

  • Тип как результат объединения масок типов двух меток.

Parameters:

  • a указатель на метку безопастности

  • b указатель на метку безопастности

  • flags не используется

Returns:

метка безопастности (result == a)

function pdpl_upd#

Обновление метки безопасности. Создание ПОЛНОЙ копии исходной метки безопасности @src в @dst в соответсвии с концепцией RCU(D):

PDPL_T * pdpl_upd (
    PDPL_T **dst,
    const PDPL_T *src PDP_KRNL_ARG
)
  • уменьшение счетчика ссылок метки *dsc (pdpl_put(*dsc););

  • cоздание полной копии исходной метки *src (*dsc=pdpl_dup(src);). Результирующая метка гарантировано имеет ссчетчик ссылок равный 1. Данная опрация потокоНЕбезопасная, требуется захват блокировки, сответвующей указателю @dst.

Parameters:

  • dst указатель на указатель на результирующую метку безопасности

  • src указатель на исходную метку безопасности

Returns:

в случае успеха *dsc, т.е. указатель на копию исходной метки безопасности, иначе NULL В случае ошибки: если src==dst errno выставляется в EINAVL, в случае ошибки выделения памяти - ENOMEM

function pdpml_cat#

Получение категории мандатной метки.

PDP_CAT_T pdpml_cat (
    const PDPML_T *l
)

Parameters:

  • l указатель на мандатную метку

Returns:

категории

function pdpml_child_parent#

Проверка на возможность объекта с мандатной меткой child быть дочерним для объекта с мандатной меткой parent. Проверка проходит, если выполняются все следующие условния:

int pdpml_child_parent (
    const PDPML_T *child,
    const PDPML_T *parent
)
  • Выполняются условия pdpml_notg;

  • Если уровни конф. не отличаются, либо отличаются но с PDPT_CCNR у parent;

  • Если категории не отличаются, либо отличаются но с PDPT_CCNR у parent.

Parameters:

  • child указатель на мандатную метку

  • parent указатель на мандатную метку

Returns:

0, если может

function pdpml_cmp#

Сравнение мандатных меток.

int pdpml_cmp (
    const PDPML_T *a,
    const PDPML_T *b,
    int flags
)

Parameters:

  • a указатель на мандатную метку

  • b указатель на мандатную метку

  • flags не используется

Returns:

1, если равны, иначе 0

function pdpml_conf_permission#

Проверка доступа субъекта к объекту по уровню конфиденциальности и категории.

int pdpml_conf_permission (
    const PDPML_T *s,
    const PDPML_T *o,
    int mode
)

Parameters:

  • s указатель на мандатную метку субъекта

  • o указатель на мандатную метку объекта

  • mode режим доступа (X_OK, R_OK, W_OK)

Returns:

0 - доступ разрешен, иначе - запрещен

function pdpml_dup#

Дублирование мандатной метки. Создание полной копии исходной мандатной метки в динамической области памяти.

PDPML_T * pdpml_dup (
    const PDPML_T *l PDP_KRNL_ARG
)

Parameters:

  • l указатель на исходную мандатную метку

Returns:

указатель на копию исходной мандатной метки в случае успеха, иначе NULL

function pdpml_equ#

Сравнение мандатных меток. Предосваляется для удобства, является надстройкой над функцией pdpml_cmp.

static inline int pdpml_equ (
    const PDPML_T *a,
    const PDPML_T *b
)

Parameters:

  • a указатель на мандатную метку

  • b указатель на мандатную метку

Returns:

не 0, если равны, иначе 0

function pdpml_exec_security#

Проверка на возможность операции исполнения объекта (файла) субъектом. Работа данной функции будет корректной только при работе в расширенном режиме МКЦ (strict-mode).

int pdpml_exec_security (
    const PDPML_T *s,
    const PDPML_T *o,
    int mode
)

Parameters:

  • s указатель на мандатную метку субъекта

  • o указатель на мандатную метку объекта

Returns:

0 - исполнение разрешено, иначе - запрещено

function pdpml_get_from_raw#

Получение мандатной метки из бинарного представления.

PDPML_T * pdpml_get_from_raw (
    const void *raw,
    size_t size,
    size_t *size_without_role PDP_KRNL_ARG
)

Parameters:

  • buf указатель на буфер, который содержти мандатную метку в бинарном виде

  • size размер буфера

  • __out size_without_role размер буфера, относящийся к мандатным атрибутам

Returns:

указатель на мандатную метку в случае успеха, иначе NULL

function pdpml_get_new#

Выделение памяти и инициализация мандатной метки нулевой меткой.

PDPML_T * pdpml_get_new (
    PDP_USRKRNL(void, gfp_t f)
)

Returns:

указатель на мандатную метку в случае успеха, иначе NULL

function pdpml_get_new_init#

Выделение памяти и инициализация мандатной метки передаваемыми параметрами.

PDPML_T * pdpml_get_new_init (
    PDP_LEV_T lev,
    PDP_ILEV_T ilev,
    PDP_ILINEAR_T ilinear,
    PDP_CAT_T cat,
    PDP_TYPE_T type PDP_KRNL_ARG
)

Parameters:

  • lev уровень конфиденциальности метки

  • ilev целостность метки

  • ilinear линейная целостность метки

  • cat категории метки

  • type тип метки

Returns:

указатель на мандатную метку в случае успеха, иначе NULL

function pdpml_ilev#

Получение целостности мандатной метки.

PDP_ILEV_T pdpml_ilev (
    const PDPML_T *l
)

Parameters:

  • l указатель на мандатную метку

Returns:

целостность

function pdpml_ilinear#

Получение линейной целостности мандатной метки.

PDP_ILEV_T pdpml_ilinear (
    const PDPML_T *ml
)

Parameters:

  • l указатель на мандатную метку

Returns:

линейная целостность

function pdpml_is_zero#

Сравнение мандатных меток с нулевой меткой. Предосваляется для удобства, является надстройкой над функцией pdpml_cmp.

static inline int pdpml_is_zero (
    const PDPML_T *ml
)

Parameters:

  • ml указатель на мандатную метку

Returns:

не 0, если равны, иначе 0

function pdpml_lev#

Получение уровня конфиденциальности мандатной метки.

PDP_LEV_T pdpml_lev (
    const PDPML_T *l
)

Parameters:

  • l указатель на мандатную метку

Returns:

уровень конфиденциальности

function pdpml_notg#

Проверка, что метка безопасности less небольше метки great. Проверка проходит, если:

int pdpml_notg (
    const PDPML_T *less,
    const PDPML_T *great
)
  • Уровень конф. less <= уровень конф. great;

  • Биты маски категории less присутствуют в маске категории great;

  • Биты маски целостности less присутствуют в маске категории great;

  • Линейная целостность less <= линейной целостности great.

Parameters:

  • less указатель на мандатную метку

  • great указатель на мандатную метку

Returns:

0 в случае успеха

function pdpml_notg_integrity#

Проверка, что целостность мандатной метки less небольше целостности мандатной метки great.

int pdpml_notg_integrity (
    const PDPML_T *less,
    const PDPML_T *great
)

Parameters:

  • less указатель на мандатную метку

  • great указатель на мандатную метку

Returns:

0 в случае успеха

function pdpml_or_type#

Установка типа для мандатной метки через побитовое “или”.

void pdpml_or_type (
    PDPML_T *l,
    PDP_TYPE_T type
)

Parameters:

  • l указатель на мандатную метку

  • type тип

function pdpml_permission#

Проверка доступа субъекта к объекту.

int pdpml_permission (
    const PDPML_T *s,
    const PDPML_T *o,
    int mode
)

Parameters:

  • s указатель на мандатную метку субъекта

  • o указатель на мандатную метку объекта

  • mode режим доступа (X_OK, R_OK, W_OK)

Returns:

0 - доступ разрешен, иначе - запрещен

function pdpml_put#

Освобождение ресурсов мандатной метки. Уменьшение счетчика ссылок, а в случае его равенства 0 - освобождение динамической области памяти.

void pdpml_put (
    const PDPML_T *ml
)

Parameters:

  • ml указатель на мандатную метку

function pdpml_type#

Получение типа мандатной метки.

PDP_TYPE_T pdpml_type (
    const PDPML_T *l
)

Parameters:

  • l указатель на мандатную метку

Returns:

тип

function pdprawml_size#

Получение размера бинарного представления мандатной метки.

size_t pdprawml_size (
    const void *rawml
)

Parameters:

  • l не используется

Returns:

размер бинарного представления мандатной метки

Macros Documentation#

define A_OK#

#define A_OK (R_OK<<1) /* APPEND need description */

define C_OK#

#define C_OK (A_OK<<1)

define LEGACY_IGNORE_CAT#

#define LEGACY_IGNORE_CAT 0x20000

define LEGACY_IGNORE_LEV#

#define LEGACY_IGNORE_LEV 0x10000

define MAX_ILINEAR#

#define MAX_ILINEAR 127

define MIN_ILINEAR#

#define MIN_ILINEAR -128

define PDPL_PRINTF#

#define PDPL_PRINTF "%" PDP_PRNTF_LEV  ":%" PDP_PRNTF_ILEV ":%" PDP_PRNTF_CAT ":%" PDP_PRNTF_TYPE ".%" PDP_PRNTF_ILINEAR

define PDPL_PRINTFA#

#define PDPL_PRINTFA (
    l
) pdpl_lev (l), pdpl_ilev (l), pdpl_cat (l), pdpl_type (l), pdpl_ilinear (l)

define PDPML_PRINTF#

#define PDPML_PRINTF PDPL_PRINTF

define PDPML_PRINTFA#

#define PDPML_PRINTFA (
    l
) pdpml_lev (l), pdpml_ilev (l), pdpml_cat (l), pdpml_type (l), pdpml_ilinear (l)

define PDPML_ZERO#

#define PDPML_ZERO ( pdpl_ml ( PDPL_ZERO ))

define PDPT_CCNR#

#define PDPT_CCNR 0x01

Присваивается директории. Позволяет директории содержать объекты с различными классификационными метками, но не большими, чем ее собственная классификационная метка. Чтение содержимого такой директории разрешается субъекту вне зависимости от значения его классификационной метки, при этом субъекту доступна информация только про объекты с классификационной меткой не большей, чем его собственная, либо про директории, также имеющие атрибут ccnr. 0x01

define PDPT_EHOLE#

#define PDPT_EHOLE PDPT_RWHOLE

Присваивается файлу, имеющему минимальную классификационную метку и нулевую метку целостности. Позволяет ингорировать мандатные правила управления доступом при получении доступа на запись к данным объекта. 0x04

define PDPT_IINH#

#define PDPT_IINH 0x80

Присваивается директории. Позволяет объектам, содержащиеся в такой директории, наследовать целостность директории. 0x80

define PDPT_IRELAX#

#define PDPT_IRELAX 0x20

Присваивается директории. Позволяет субъекту операцию записи в файлы, содержащиеся в директории с большей целостностью, чем у субъекта. 0x20

define PDPT_RWHOLE#

#define PDPT_RWHOLE 0x04

Тоже самое, что и PDPT_EHOLE 0x04

define PDPT_SILEV#

#define PDPT_SILEV 0x10

Присваивается файлу. Позволяет субъекту операцию исполнения файла с целостностью файла. 0x10

define PDPT_SSI#

#define PDPT_SSI 0x40

Присваивается файлу. Не позволяет читать такой файл субъекту, имеющиму более низкую целостность. 0x40

define PDPT_WHOLE#

#define PDPT_WHOLE 0x08

Присваивается файлу, имеющему максимальную классификационную метку. Позволяет запись в такой файл субъекту, имеющиму более низкую классификационную метку. 0x08

define PDP_IGN_INT#

#define PDP_IGN_INT 0x40000

define PDP_IGN_XINT#

#define PDP_IGN_XINT 0x80000

define PDP_KRNL#

#define PDP_KRNL (
    x
)

define PDP_KRNL_ARG#

#define PDP_KRNL_ARG (
    x
)

define PDP_NKRNL#

#define PDP_NKRNL (
    x
) x

define PDP_O_CONTAINER#

#define PDP_O_CONTAINER 0x08000

define PDP_PRNTF_CAT#

#define PDP_PRNTF_CAT PRIx64

define PDP_PRNTF_CNT_SIZE#

#define PDP_PRNTF_CNT_SIZE PRIx32

define PDP_PRNTF_ILEV#

#define PDP_PRNTF_ILEV SCNu32

define PDP_PRNTF_ILEV_HEX#

#define PDP_PRNTF_ILEV_HEX SCNx32

define PDP_PRNTF_ILINEAR#

#define PDP_PRNTF_ILINEAR SCNd8

define PDP_PRNTF_LEV#

#define PDP_PRNTF_LEV PRIu8

define PDP_PRNTF_TYPE#

#define PDP_PRNTF_TYPE PRIx16

define PDP_SCNF_CAT#

#define PDP_SCNF_CAT SCNx64

define PDP_SCNF_CNT_SIZE#

#define PDP_SCNF_CNT_SIZE SCNx32

define PDP_SCNF_ILEV#

#define PDP_SCNF_ILEV SCNu32

define PDP_SCNF_ILINEAR#

#define PDP_SCNF_ILINEAR SCNd8

define PDP_SCNF_LEV#

#define PDP_SCNF_LEV SCNu8

define PDP_SCNF_TYPE#

#define PDP_SCNF_TYPE SCNx16

define PDP_USRKRNL#

#define PDP_USRKRNL (
    u,
    k
) u