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

NAMEW稱
       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);

DESCRIPTIONyz
       Netlink    用於在核心模塊與在使用者地址空間中的進程之間傳遞消息的。它包
       含了用於使用者進程的基於標準套接字的接口和用於核心模塊的一茪熙&痐
       API。有關這茪熙&痐葑竣f的資料沒有包含在此手冊隊丑C同樣還有         一-
       蚢L時的通過      netlink       字符設備的接口也沒有包含在此,它只是提供
       向下相容特性。

       Netlink  是一荓向數據包的服務。 SOCK_RAWSOCK_DGRAM 都是 socket_type
       的有效C然而 netlink 協議對數據包  datagram  和鴟M接字(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                 數據信息由具有一茤峖h                 nlmsghdr
       數據報頭及其有效數據的字節流組成。對於分成多蚍琤]的  Netlink   信息,
       數據報頭中的   NLM_F_MULTI  標誌位將被設置,除了最後一茈]的報頭具有標誌
       NLMSG_DONE外。 字節流應只能用標準的 NLMSG_* 宏來訪問,參閱  netlink(3).

       Netlink  不是可靠的協議。它只是盡可能地將信息傳輸到目的地,但在記憶體耗
       盡或發生其他錯誤時,它會丟失信息。為保証信息可靠傳輸,可以設置標誌
       NLM_F_ACK         來n求接收方確認。數據接收確認是一        NLMSG_ERROR
       數據包,包中的出錯字段設置為  0。應用程式必須自己創建收到信息確認消息。
       在信息傳送過程中,核心一直(嘗試)對每茈X錯的數據包發送       NLMSG_ERROR
       消息。使用者進程也應當遵循這一蚨D例。

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

       一荇M接字可以對任意一茼h址廣播組廣播消息,只n在調用  sendmsg(2)  或調用
       connect(2)  時,將位掩碼 nl_groups 設置成n發送消息的廣播組的N可以了。
       只有具有有效 uid 為 0 的使用者或具有

       CAP_NET_ADMIN 權的使用者才可能發送或偵聽針對 netlink 多址廣播組的消息。
       任何一蚢鵀h址廣播組消息的響應需發回進程標識 pid 和廣播組地址。

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

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

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

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

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

       為 GET 請求設立的附加標誌位
       NLM_F_ROOT      返回對象表而不是單蚍痗
       NLM_F_MATCH     尚未實現
       NLM_F_ATOMIC    返回對象表的鴗l快照(atomic snapshot)
       NLM_F_DUMP      尚未列入文件

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

       注 NLM_F_ATOMIC n求使用者有 CAP_NET_ADMIN 或超級使用者權。

a}式
       sockaddr_nl         描z了在使用者空間或在核心空間裏一          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 是一茈N表 neltlink 組號的位掩碼。

BUGS

       本手冊隅瓣ㄖ嗾耤C

NOTES`N
       通過 libnetlink 調用 netlink 功能通常比通過低層核心接口n來得好些。

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

       Linux     2.0     支持更多的基於netlink接口的鴝l設備(作為向下相容特性,
       這些設備目前仍可使用。舊接口特性沒有在此敘z。

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

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

[]
       LetBright <letbright@netease.com>

[]
       2000/11/09

mlinuxan:
       http://cmpp.linuxforum.net