Сетевая ссылка расширений ядра

Ссылка KPI документа описывает функции, что NKEs может вызвать и описывает несколько NKE-специфичных типов данных. Они организованы заголовочным файлом. Эта глава включает несколько дополнительных APIs, который может быть полезным при записи NKE.

Утилиты ядра

NKEs может вызвать много функций утилиты ядра включая следующее:

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

_MALLOC

Определенный в: <sys/malloc.h>

Выделяет память ядра.

    void *_MALLOC(size_t size, int type, int flags);

_MALLOC во многом как пространство пользователя malloc функция, но это имеет дополнительные параметры, требующие некоторого объяснения.

types параметром является число, представляющее тип данных, которые будут храниться в параметре. Это используется прежде всего в бухгалтерских целях. Известные типы описаны в <sys/malloc.h>.

Параметр флагов состоит из некоторой комбинации M_WAITOK, M_NOWAIT, и M_ZERO.

Флаг M_NOWAIT причины _MALLOC сразу возвратить нулевого указателя, если никакое пространство не доступно вместо того, чтобы ожидать пространства для становления доступным. В то время как это подходяще для чувствительных ко времени задач, которые могут быть повторены, это не всегда, что Вы хотите.

Более традиционное (и значение по умолчанию) поведение M_WAITOK, который указывает, что безопасно ожидать пространства для становления доступным. Если Ваш код находится в критическом пути для производительности, необходимо, вероятно, использовать M_NOWAIT если это возможно, и зависят от сетевого стека для повторения после того, как ресурсы станут доступными.

Наконец, флаг M_ZERO запросы, что средство выделения должно обнулить получающееся выделение прежде, чем возвратить его.

_FREE

Определенный в: <sys/malloc.h>

Освобождает память, выделенную с _MALLOC

    void _FREE(void *addr, int type);

type флаг передал _FREE должен совпасть с флагом, переданным соответствующему вызову к _MALLOC.

printf

Определенный в: <libkern/libkern.h>

Текст печати к консоли.

    void printf(const char *format, ... );

Идентичный printf в пространстве пользователя. Не безопасно вызвать printf из контекста прерывания. Это не должно обычно быть проблемой, поскольку необходимо избежать вызывать функции NKE из Набора I/O водительская подпрограмма фильтра как само собой разумеющееся, но это стоит отметить.

proc_exiting

Определенный в: <sys/proc.h>

Возвраты 1, если процесс выходит, еще 0.

    int proc_exiting(proc_t);

proc_is64bit

Определенный в: <sys/proc.h>

Возвраты 1, если процесс является 64-разрядной исполнимой программой, еще 0.

    int proc_is64bit(proc_t);

proc_rele

Определенный в: <sys/proc.h>

Выпускает ссылку на запись процесса.

    int proc_rele(proc_t);

proc_self

Определенный в: <sys/proc.h>

Возвращает ссылку на рабочий процесс. Это должно быть выпущено с “proc_rele”.

    proc_t proc_self(void);

proc_suser

Определенный в: <sys/proc.h>

Проверки, чтобы видеть, работает ли процесс как суперпользователь (корень).

    int proc_suser(struct proc *p);

msleep

Определенный в: <sys/proc.h>

Сон до события отправляется с “wakeup” или пока тайм-аут не происходит. Это обычно объединяется со значением тайм-аута к связанному ожидание.

    int msleep(void *chan, lck_mtx_t *mtx, int pri, const char *wmesg, struct timespec *ts);

Значение тайм-аута является стандартом timespec (определенный в <sys/time.h>, и измеряется в секундах и наносекундах. Для сна, пока не разбужено необходимо передать a NULL значение для ts.

Параметр mtx взаимное исключение (определенный в специфичном для процессора, включают, но включенный с <sys/lock.h>) это будет выпущено до сна. (Взаимное исключение должно быть заблокировано до вызова msleep.) Взаимное исключение будет также повторно получено на след если PDROP флаг установлен в приоритетном значении.

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

Параметр pri желаемый приоритет на следе (определенный в <sys/param.h>). После того, как другой поток вызвал “wakeup” на желаемом событии (указанный значением chan), Ваш код начнет выполняться в указанном приоритете. Если PCATCH флаг установлен на pri, сигнальные обработчики попробуют прежде и после сна.

Возвраты 0, если пробуждено с пробуждением, EWOULDBLOCK на истечении тайм-аута, и ERESTART или EINTR если PCATCH установлен и сигнал произошел, в зависимости от ли SA_RESTART флаг установлен на сигнале.

пробуждение

Определенный в: <sys/proc.h>

Следы все потоки, спящие на данном канале через вызов к “msleep”.

    void wakeup(void *chan);
 

wakeup_one

Определенный в: <sys/proc.h>

Будит первый поток, спящий на данном канале через вызов к “msleep”.

    void wakeup_one(void *chan);