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