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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章