Provided by: manpages-zh_1.5.2-1.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