netlink wiki

Netlink是用于内核和用户空间进程、用户空间进程之间(类似unix套接口)以及多个用户空间进程的组合与内核空间的进程间通信的类套接口机制。和INET套接口不同,它无法跨越主机,因为它的地址是用它们的PID来表示的。

它设计来在内核空间和用户空间进程之间传递多种网络信息。许多网络组件在用户空间利用netlink来和内核通信,比如iproute2。Netlink为用户空间进程提供了许多标准的基于套接字的接口,为内核模块提供了一组API。它设计来作为ioctl的一个更灵活的继承者。Netlink使用AF_NETLINK地址族。

RFC3549详细描述了netlink协议。

历史

如前所述,早期的netlink设计来作为复杂而笨拙的ioctl通信机制的灵活替代品,用来设置和获取外部套接口选项信息。为了兼容性考虑,内核仍然支持套接口ioctl接口,它可以按如下方法使用:

error = ioctl(ip_socket, ioctl_type, &value_result);

内核在2.0版本中首次以一个字符设备的方式引入netlink,现在这个接口已经废弃,但是ioctl仍然可以使用。netlink的套接口接口出现在了2.2内核中。

NetLink套接口族

NETLINK_ROUTE
NETLINK_ROUTE提供路由和链路信息。这个信息主要供用户空间的路由守护进程使用。Linux实现了大量的消息子集:
链路层:RTM_NEWLINK, RTM_DELLINK, RTM_GETLINK, RTM_SETLINK
地址设定: RTM_NEWADDR, RTM_DELADDR, RTM_GETADDR
路由表:RTM_NEWROUTE, RTM_DELROUTE, RTM_GETROUTE
邻接缓存:RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH
路由规则:RTM_NEWRULE, RTM_DELRULE, RTM_GETRULE
队列规则设定:RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC
队列使用的流量类别:RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS
流量过滤器:RTM_NEWTFILTER, RTM_DELTFILTER, RTM_GETTFILTER
其他:RTM_NEWACTION, RTM_DELACTION, RTM_GETACTION, RTM_NEWPREFIX, RTM_GETPREFIX, RTM_GETMULTICAST, RTM_GETANYCAST, RTM_NEWNEIGHTBL,RTM_GETNEIGHTBL, RTM_SETNEIGHTBL

NETLINK_FIREWALL
给用户空间程序提供接收来自防火墙报文的接口
NETLINK_NFLOG
为用户控件提供访问netfilter和iptables的接口
NETLINK_ARPD
为用户空间提供arp表管理接口
NETLINK_IPV6_FW
NETLINK_ROUTE6
NETLINK_TAPBASE
NETLINK_TCPDIAG
NETLINK_XFRM
提供管理IPSec security association和安全策略数据库的接口。它常由秘钥管理守护进程在互联网秘钥交换协议中使用。

用户定义的Netlink协议

用户可以在自己的内核例程中增加netlink处理函数。这允许开发额外的netlink协议来与内核模块通信。Linux Journal上有文章Why and How to Use Netlink Sockets提供了如何创建内核端Netlink套接口的一些指导。

参考文档:
http://en.wikipedia.org/wiki/Netlink

你可能感兴趣的:(基础知识)