oracular (7) netlink.7.gz

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