Provided by: manpages-zh_1.6.3.5-1_all bug

NAME 名稱

       netlink, PF_NETLINK - 內核與用戶之間的通訊

SYNOPSIS 總攬

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

       netlink_socket = socket(PF_NETLINK, socket_type, netlink_family);

DESCRIPTION 描述

       Netlink  用於在內核模塊與在用戶地址空間中的進程之間傳遞消息的。它包 含了用於用戶進程的基於
       標準套接字的接口和用於內核模塊的一個內部核心 API。有關這個內部核心接口的資料沒有包含在此手
       冊頁中。同樣還有  一個過時的通過 netlink 字符設備的接口也沒有包含在此,它只是提供 向下兼容
       特性。

       Netlink 是一個面向數據包的服務。 SOCK_RAWSOCK_DGRAM  都是  socket_type  的有效值。然而
       netlink 協議對數據包 datagram 和原套接字(raw sockets) 並不作區分。

       netlink_family 選擇核心模塊或 netlink 組進行通訊。現有可指定的 netlink 的種類有:

       NETLINK_ROUTE
              接收路由更新信息,可以用來修改 IPv4 的路由表。(參見 rtnetlink(7))。

       NETLINK_FIREWALL
              接收 IPv4 防火牆編碼發送的數據包。

       NETLINK_ARPD
              用以維護用戶地址空間裏的 arp 表

       NETLINK_ROUTE6
              接收和發送 IPv6 路由表更新消息。

       NETLINK_IP6_FW
              接收未通過 IPv6 防火牆檢查的數據包(尚未實現)

       NETLINK_TAPBASE...NETLINK_TAPBASE+15ethertap 設備實例。Ethertap 是從用戶程序空間對以太網驅動程序進行 仿真的“僞”網絡
              通道設備。

       NETLINK_SKIP
              Enskip 的保留選項。

       NETLINK_USERSOCK
              爲今後用戶程序空間協議用保留選項。

       Netlink 數據信息由具有一個或多個 nlmsghdr 數據報頭及其有效數據的字節流組成。對於分成多個數
       據包的  Netlink 信息, 數據報頭中的 NLM_F_MULTI 標誌位將被設置,除了最後一個包的報頭具有標
       誌 NLMSG_DONE外。 字節流應只能用標準的 NLMSG_* 宏來訪問,參閱 netlink(3).

       Netlink   不是可靠的協議。它只是儘可能地將信息傳輸到目的地,但在內存耗    盡或發生其他錯誤
       時,它會丟失信息。爲保證信息可靠傳輸,可以設置標誌  NLM_F_ACK 來要求接收方確認。數據接收確
       認是一個  NLMSG_ERROR  數據包,包中的出錯字段設置爲  0。應用程序必須自己創建收到信息確認消
       息。 在信息傳送過程中,內核一直(嘗試)對每個出錯的數據包發送 NLMSG_ERROR 消息。用戶進程也應
       當遵循這一個慣例。

       每一個 netlink 數據類都有一個32位廣播分組,當 對套接字調用 bind(2) 時,  sockaddr_nl  中的
       nl_groups 字段設置成所要偵聽的廣播組的位掩碼。其默認值爲 0,表示不接收任何廣播。

       一個套接字可以對任意一個多址廣播組廣播消息,只要在調用 sendmsg(2) 或調用 connect(2) 時,將
       位掩碼 nl_groups 設置成要發送消息的廣播組的值就可以了。 只有具有有效 uid 爲 0 的用戶或具有

       CAP_NET_ADMIN 權限的用戶纔可能發送或偵聽針對 netlink 多址廣播組的消息。 任何一個對多址廣播
       組消息的響應需發回進程標識 pid 和廣播組地址。

              struct nlmsghdr
              {
              __u32 nlmsg_len; /* 包括報頭在內的消息長度*/
              __u16 nlmsg_type; /* 消息正文 */
              __u16 nlmsg_flags; /* 附加標誌*/
              __u32 nlmsg_seq; /* 序列號*/
              __u32 nlmsg_pid; /* 發送進程號 PID */
              };

              struct nlmsgerr
              {
              int error; /* 負數表示的出錯號 errno 或爲 0 要求確認 acks*/
              struct nlmsghdr msg; /* 造成出錯的消息報頭*/
              };

       在每個 nlmsghdr 後跟隨着有效數據。 nlmsg_type 可以成爲標準消息的類型: NLMSG_NOOP 可以忽略
       的消息, NLMSG_ERROR 發出錯誤發生的消息,有關數據中包含一個 nlmsgerr 結構, NLMSG_DONE  一
       個多數據包消息結束的信息。

       一個    netlink    類通常指定更多的消息類型,請參閱有關手冊頁,如   NETLINK_ROUTE.    中的
       rtnetlink(7)

       nlmsg_flags 的標準標誌位
       NLM_F_REQUEST    設置全部請求消息
       NLM_F_MULTI     此消息是多數據包消息之一,通過標
                       誌 NLMSG_DONE 結束。
       NLM_F_ACK        數據成功接收返回確認消息
       NLM_F_ECHO       要求響應請求信息

       爲 GET 請求設立的附加標誌位
       NLM_F_ROOT      返回對象表而不是單個數據項
       NLM_F_MATCH     尚未實現
       NLM_F_ATOMIC    返回對象表的原子快照(atomic snapshot)
       NLM_F_DUMP      尚未列入文檔

       對新建 NEW 請求設立的附加標誌位
       NLM_F_REPLACE    替換現有的對象
       NLM_F_EXCL       如對象已存在,不作替換
       NLM_F_CREATE     創建對象,如果對象不存在
       NLM_F_APPEND     對象表添加對象項

       注 NLM_F_ATOMIC 要求用戶有 CAP_NET_ADMIN 或超級用戶權。

地址格式

       sockaddr_nl    描述了在用戶空間或在覈心空間裏一個    netlink   客戶對象的數據結構。   一個
       sockaddr_nl 對象可以是單址廣播或對一個 netlink 多址組 (nl_groups 不爲 0).

              struct sockaddr_nl
              {
              sa_family_t nl_family; /* AF_NETLINK */
              unsigned short nl_pad; /* 零 */
              pid_t nl_pid; /* 進程標識號pid */
              __u32 nl_groups; /* 多址廣播組掩碼*/
              };

       nl_pid 是用戶空間中 netlink 的進程標識號 pid,如果是在內核時此值爲 0。 nl_groups  是一個代
       表 neltlink 組號的位掩碼。

BUGS

       本手冊頁並不完整。

NOTES 注意

       通過 libnetlink 調用 netlink 功能通常比通過低層內核接口要來得好些。

VERSIONS 版本

       netlink 套接字接口是 Linux 2.2 新特性

       Linux  2.0 支持更多的基於netlink接口的原始設備(作爲向下兼容特性, 這些設備目前仍可使用。舊
       接口特性沒有在此敘述。

另見

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

       ftp://ftp.inr.ac.ru/ip-routing/iproute2* 有關 libnetlink 部分

[中文版維護人]

       LetBright <letbright@netease.com>

[中文版最新更新]

       2000/11/09

《中國linux論壇man手冊頁翻譯計劃》:

       http://cmpp.linuxforum.net

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh