首页 理论教育 LinuxNetlink应用层编程

LinuxNetlink应用层编程

时间:2023-10-19 理论教育 版权反馈
【摘要】:Netlink应用层使用标准的socket套接字与内核通信。标准的socket API的函数socket,bind,sendmsg,recvmsg和close都可以应用到Netlink socket。下面介绍Netlink socket的使用步骤。创建一个Netlink socket:socket;Netlink对应的协议族是AF_NETLINK,第二个参数必须是SOCK_RAW或SOCK_DGRAM,第三个参数指定netlink协议类型,它可以是一个自定义的类型,也可以使用内核预定义的类型,参见netlink_kernel_create函数的unit。成员nl_groups用于指定多播组,bind函数用于把调用进程加入到该字段指定的多播组,如果设置为0,表示调用者不加入任何多播组。

LinuxNetlink应用层编程

Netlink应用层使用标准的socket套接字与内核通信。标准的socket API的函数socket,bind,sendmsg,recvmsg和close都可以应用到Netlink socket。下面介绍Netlink socket的使用步骤。

创建一个Netlink socket:

socket(AF_NETLINK,SOCK_RAW,netlink_type);

Netlink对应的协议族是AF_NETLINK,第二个参数必须是SOCK_RAW(原始socket)或SOCK_DGRAM(数据报套接字),第三个参数指定netlink协议类型,它可以是一个自定义的类型,也可以使用内核预定义的类型,参见netlink_kernel_create函数的unit。(www.xing528.com)

bind函数需要绑定协议地址。Netlink的socket地址使用sockaddr_nl结构表示:

sockaddr_nl结构中的成员nl_family为协议族AF_NETLINK,成员nl_pad当前没有使用,因此要总是设置为0,成员nl_pid为接收或发送消息的进程的ID,如果希望内核来处理消息或多播消息,就把该字段设置为0,否则设置为处理消息的进程ID。成员nl_groups用于指定多播组,bind函数用于把调用进程加入到该字段指定的多播组,如果设置为0,表示调用者不加入任何多播组。

用户空间可以调用socket套接字的send函数向内核发送消息,如sendto、sendmsg等。消息的形式如下:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈