精通linux内核网络———第二章Netlink套接字之通用Netlink协议

时间:2024-03-31 15:01:59

## 通用Netlink协议
要添加Netlink协议簇,需要在include/linux/netlink.h中添加协议簇定义。但通用Netlink协议不要求这样做。
Netlink协议的一个缺点是,协议不能超过32(MAX_LINKS)个。通用Netlink协议以Netlink协议为基础,并使用其API。
通用Netlink内核套接字由方法netlink_kernel_create()创建。
创建通用Netlink内核套接字后,需要注册控制器簇(genl_ctrl)。
genl_family的实例genl_ctrl的ID固定为0x10(GENL_ID_CTRL)。它的其余所有实例的ID都被初始化为GENL_ID_GENERATE,并在随后替换为动态分配的值。
通用的Netlink套接字支持注册组播组。方法是定义一个genl_multicast_group对象,并调用genl_register_mc_group()。
组播组的名称必须是独一无二的,因为它是用于查找的主键。组播组的ID也是注册组播组时动态生成的。
下图的对象与函数都在include/net/genetlink.h中
精通linux内核网络———第二章Netlink套接字之通用Netlink协议