![](https://csdnimg.cn/release/download_crawler_static/87082428/bg3.jpg)
用户态应用使用标准的 socket APIs, socket(), bind(), sendmsg(), recvmsg() 和
close() 就能很容易地使用 netlink socket,查询手册页可以了解这些函数的使用
细节,本文只是讲解使用 netlink 的用户应该如何使用这些函数。注意,使用
netlink 的应用必须包含头文件 linux/netlink.h。当然 socket 需要的头文件也必
不可少,sys/socket.h。
为了创建一个 netlink socket,用户需要使用如下参数调用 socket():
socket(AF_NETLINK, SOCK_RAW, netlink_type)
第一个参数必须是 AF_NETLINK 或 PF_NETLINK,在 Linux 中,它们俩实际
为一个东西,它表示要使用 netlink,第二个参数必须是 SOCK_RAW 或
SOCK_DGRAM, 第三个参数指定 netlink 协议类型,如前面讲的用户自定义协
议类型 NETLINK_MYTEST, NETLINK_GENERIC 是一个通用的协议类型,它
是专门为用户使用的,因此,用户可以直接使用它,而不必再添加新的协议类型。
内核预定义的协议类型有:
#define NETLINK_ROUTE 0 /* Routing/device hook */
#define NETLINK_W1 1 /* 1-wire subsystem */
#define NETLINK_USERSOCK 2 /* Reserved for user mode
socket protocols */
#define NETLINK_FIREWALL 3 /* Firewalling hook */
#define NETLINK_INET_DIAG 4 /* INET socket monitoring */
#define NETLINK_NFLOG 5 /* netfilter/iptables ULOG */
#define NETLINK_XFRM 6 /* ipsec */
#define NETLINK_SELINUX 7 /* SELinux event notifications */
#define NETLINK_ISCSI 8 /* Open-iSCSI */
#define NETLINK_AUDIT 9 /* auditing */
#define NETLINK_FIB_LOOKUP 10
#define NETLINK_CONNECTOR 11