天天看點

netlink(todo)

<a href="http://www.cnblogs.com/hoys/archive/2011/04/09/2010788.html" target="_blank">http://www.cnblogs.com/hoys/archive/2011/04/09/2010788.html</a>

<a href="http://www.cnblogs.com/wenqiang/p/6306727.html" target="_blank">http://www.cnblogs.com/wenqiang/p/6306727.html</a>

 Netlink套接字是用以實作使用者程序與核心程序通信的一種特殊的程序間通信(IPC) ,也是網絡應用程式與核心通信的最常用的接口。

    Netlink 是一種特殊的 socket,它是 Linux 所特有的,類似于 BSD 中的AF_ROUTE 但又遠比它的功能強大,目前在Linux 核心中

    使用netlink 進行應用與核心通信的應用很多; 包括:路由 daemon(NETLINK_ROUTE),使用者态 socket 協定(NETLINK_USERSOCK),

    防火牆(NETLINK_FIREWALL),netfilter 子系統(NETLINK_NETFILTER),核心事件向使用者态通知(NETLINK_KOBJECT_UEVENT),

    通用 netlink(NETLINK_GENERIC)等。

    Netlink 是一種在核心與使用者應用間進行雙向資料傳輸的非常好的方式,使用者态應用使用标準的 socket API 就可以使用 netlink 提供的強大功能,

    核心态需要使用專門的核心 API 來使用 netlink。

    Netlink 相對于系統調用,ioctl 以及 /proc檔案系統而言具有以下優點:

    1,netlink使用簡單,隻需要在include/linux/netlink.h中增加一個新類型的 netlink 協定定義即可,(如 #define NETLINK_TEST 20 然後,核心和使用者态應用就可以立即通過 socket API 使用該 netlink 協定類型進行資料交換);

    2. netlink是一種異步通信機制,在核心與使用者态應用之間傳遞的消息儲存在socket緩存隊列中,發送消息隻是把消息儲存在接收者的socket的接收隊列,而不需要等待接收者收到消息;

    3.使用 netlink 的核心部分可以采用子產品的方式實作,使用 netlink 的應用部分和核心部分沒有編譯時依賴;

    4.netlink 支援多點傳播,核心子產品或應用可以把消息多點傳播給一個netlink組,屬于該neilink 組的任何核心子產品或應用都能接收到該消息,核心事件向使用者态的通知機制就使用了這一特性;

    5.核心可以使用 netlink 首先發起會話;

繼續閱讀