Social Icons

twitterfacebookgoogle plusrss feedemail

4/02/2013

Netlink 介紹

沒有留言:

Netlink使用標準的socket介面來作為kernel與使用者介面的溝通,其address family填PF_NETLINK,而socket type為SOCK_RAW、SOCK_DGRAM,protocol則根據不同的netlink group不同而有所不同(詳細資訊可以man 7 netlink)。

socket = socket(AF_NETLINK, SOCK_RAW, netlink_family);

Netlink Socket Address Structure
Netlink也需要socket address,其socket address為:
struct sockaddr_nl {

    sa_family_t     nl_family;  /* AF_NETLINK */

    unsigned short  nl_pad;     /* Zero. */

    pid_t           nl_pid;     /* Process ID. */

    __u32           nl_groups;  /* Multicast groups mask. */

};


如果傳送的對象是kernel或者以multicast傳送,則nl_pid設為0。
如果是kernel傳送給user-space上面的application時(multicast),就會填入正確的pid,然而nl_pid實際的意義並不是指PID,而只是用於識別一個netlink socket而已,對於application在建立一個netlink socket時,可以將nl_pid設為0,然後bind(),kernel會自動將PID填入。而nl_groups是用multicast,採用bit mask方式,所以每個netlink family有32個multicast group。