The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

netlink (7)
  • netlink (3) ( Русские man: Библиотечные вызовы )
  • netlink (3) ( Linux man: Библиотечные вызовы )
  • netlink (4) ( Linux man: Специальные файлы /dev/* )
  • >> netlink (7) ( Русские man: Макропакеты и соглашения )
  • netlink (7) ( Linux man: Макропакеты и соглашения )
  •  

    НАЗВАНИЕ

    netlink, PF_NETLINK - установка связи между ядром и пользователем.  

    СИНТАКСИС

    #include <asm/types.h>
    #include <sys/socket.h>
    #include <linux/netlink.h>

    netlink_socket = socket(PF_NETLINK, socket_type, netlink_family);  

    ОПИСАНИЕ

    Netlink используется для передачи информации с модуля ядра в процессы пользовательского пространства. Он состоит из стандартного, базирующегося на сокетах, интерфейса для процессов пользователя и внутреннего ядра API, предназначенного для модулей ядра. Внутренний интерфейс ядра на этой странице не описывается. Кроме того, существует устаревший интерфейс netlink, работающий с помощью символьных устройств netlink. Этот интерфейс здесь также не описывается и предназначен только для совместимости с его предыдущими версиями. Netlink - это служба, ориентированная на датаграммы. В качестве socket_type могут использоваться как SOCK_RAW, так и SOCK_DGRAM; несмотря на это, протокол netlink не проводит границы между датаграммными и raw-сокетами.

    netlink_family выбирает модуль ядра или группу netlink для связи. В данный момент определены следующие семейства:

    NETLINK_ROUTE
    Получает обновления маршрутов и может быть использована для изменения таблицы маршрутизации IPv4 (см. rtnetlink(7)).
    NETLINK_FIREWALL
    Получает пакеты, посылаемые кодом сетевого экрана (firewall) IPv4.
    NETLINK_ARPD
    Для управления таблицей arp в пространстве пользователя.
    NETLINK_ROUTE6
    Принимает и посылает обновления таблицы маршрутизации IPv6.
    NETLINK_IP6_FW
    для получения пакетов, не прошедших проверку сетевого экрана (firewall) IPv6 (в настоящее время функция еще не реализована).
    NETLINK_TAPBASE...NETLINK_TAPBASE+15
    являются экземплярами устройства ethertap. Ethertap является псевдосетевым туннельным устройством, позволяющим эмулировать сетевой драйвер из пространства пользователя.
    NETLINK_SKIP
    зарезервировано для ENskip
    NETLINK_USERSOCK
    зарезервировано для будущих протоколов пространства пользователя.

    Сообщения netlink состоят из потока байтов с одним или несколькими заголовками nlmsghdr и соответствущей "полезной" нагрузкой. В первом и всех последующих заголовках сообщений, состоящих из нескольких частей, установлен флаг NLM_F_MULTI. Исключение составляет лишь последний заголовок, имеющий тип NLMSG_DONE. Доступ к потоку байтов можно получить только с помощью стандартных макросов NLMSG_*; см. netlink(3).

    Netlink не является надежным протоколом. Он делает все возможное для доставки сообщения по адресу (адресам), но может "отбрасывать" пакеты при нехватке памяти или возникновении других ошибок в работе. Для повышения надежности передачи отправитель может запросить подтверждение от получателя, установив флаг NLM_F_ACK. Подтверждающим является пакет NLMSG_ERROR с полем ошибки, равным нулю. Приложение должно само создавать запросы, отсылаемые полученным сообщениям. Ядро пытается послать сообщение NLMSG_ERROR всем непринятым пакетам. Процесс пользователя также должен следовать этому соглашению.

    Каждое семейство netlink имеет набор из 32-х многоадресных групп. Когда вызов bind(2) отправляется сокету, поле nl_groups структуры sockaddr_nl должно содержать битовую маску групп, которые оно хочет прослушивать. По умолчанию значение этого поля равно нулю, что означает, что многоадресные передачи не будут приниматься. Сокет может передавать многоадресные сообщения любой из многоадресных групп, присвоив nl_groups битовую маску групп, которым он желает передавать данные при вызове sendmsg(2) или connect(2). Принимать или посылать сообщения многадресной группы netlink могут только пользователи с идентификатором эффективного пользователя, равным 0, или имеющие возможность CAP_NET_ADMIN. Любые ответы на сообщение, полученное многоадресной группой, должны быть отправлены посылающему процессу и многадресной группе.

    
    struct nlmsghdr
    {
        __u32    nlmsg_len;  /* Длина сообщения, включая заголовок */
        __u16    nlmsg_type; /* Содержимое сообщения */
        __u16    nlmsg_flags;/* Дополнительные флаги */
        __u32    nlmsg_seq;  /* Hомер последовательности */
        __u32    nlmsg_pid;  /* PID процесса, открывшего сокет */
    
    };
    struct nlmsgerr
    {
        int      error;      /* отрицательный номер ошибки или 0 для подтверждений. */ 
        struct nlmsghdr msg; /* заголовок сообщения, вызвавшего ошибку */ 
    };
    
    
    После каждого вызова nlmsghdr производится нагрузка. nlmsg_type может быть одним из стандартных типов сообщения; сообщения NLMSG_NOOP должны игнорироваться; сообщение NLMSG_ERROR сигнализирует об ошибке, нагрузка содержит структуру nlmsgerr; сообщение NLMSG_DONE заканчивает сообщение, состоящее из нескольких частей.

    Семейство netlink обычно определяет и другие сообщения (см. соответствующие страницы руководства, например, rtnetlink(7) для NETLINK_ROUTE).
    Стандартные биты флагов в nlmsg_flags
    NLM_F_REQUEST:установлен для всех сообщений с запросами
    NLM_F_MULTI:T{

    сообщение является частью сообщения, состоящего из нескольких

    частей, и оканчивается

    NLMSG_DONE

    T}

    NLM_F_ACK:ответ с подтверждением при успехе

    NLM_F_ECHO:послать эхо этого запроса

    Дополнительные флаги для запросов GET
    NLM_F_ROOTВернуть полную таблицу вместо одной записи.
    NLM_F_MATCHПока не реализовано.
    NLM_F_ATOMICВернуть небольшой (atomic) образ таблицы.
    NLM_F_DUMPпока не описано.
    Дополнительные флаги для запросов NEW
    NLM_F_REPLACEПереписать существующий объект.
    NLM_F_EXCLHе перезаписывать, если объект уже существует.
    NLM_F_CREATEСоздать объект, если он еще не существует.
    NLM_F_APPENDДобавить в конец списка объектов.
    Обратите внимание, что NLM_F_ATOMIC требует CAP_NET_ADMIN или прав суперпользователя.  

    ФОРМАТЫ АДРЕСОВ

    Структура sockaddr_nl описывает клиент netlink в пространстве пользователя или в ядре. sockaddr_nl может быть как одноадресной (передача информации только на один адрес), так и принадлежать группе netlink (значение nl_groups не равно нулю).
    struct sockaddr_nl
    {
        sa_family_t nl_family;    /* AF_NETLINK */
        unsigned short nl_pad;    /* ноль */
        pid_t       nl_pid;       /* pid процесса */
        __u32       nl_groups;    /* маска многоадресных групп */
    };
    
    nl_pid - pid процесса, владеющего целевым сокетом или 0, если пункт назначения находится в ядре. nl_groups - битовая маска, в которой каждый бит представляет собой номер группы netlink.  

    НАЙДЕННЫЕ ОШИБКИ

    Эта страница руководства содержит неполную информацию о рассматриваемой функции.  

    ЗАМЕЧАНИЯ

    В большинстве случаев лучше использовать netlink с помощью libnetlink, чем с помощью низкоуровневого интерфейса ядра.  

    ВЕРСИИ

    Сокетный интерфейс для netlink появился в Linux 2.2.

    Linux 2.0 поддерживал более примитивный интерфейс, базирующийся на устройствах (он все еще является совместимым с предыдущими версиями). Этот устаревший интерфейс на данной странице не описывается.  

    СМ. ТАКЖЕ

    cmsg(3), rtnetlink(7), netlink(3).

    ftp://ftp.inr.ac.ru/ip-routing/iproute2* для libnetlink


     

    Index

    НАЗВАНИЕ
    СИНТАКСИС
    ОПИСАНИЕ
    ФОРМАТЫ АДРЕСОВ
    НАЙДЕННЫЕ ОШИБКИ
    ЗАМЕЧАНИЯ
    ВЕРСИИ
    СМ. ТАКЖЕ


    Поиск по тексту MAN-ов: 




    Спонсоры:
    Inferno Solutions
    Ideco
    A-Real
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру