通用netlink NETLINK_GENERIC 基本函数

消息格式

int genl_register_family(struct genl_family *family)
功能:通用link协议由family来管理,此函数注册一个通用netlink family,其实就是将family表项加入到family_ht表中
family:通用netlink family
返回值:成功返回0 失败返回负数错误码
头文件: #include <net/genetlink.h>
例子:
https://blog.csdn.net/yldfree/article/details/82500438

int genl_unregister_family(struct genl_family *family);
功能:通用link协议由family来管理,此函数注销一个通用netlink family,将family表项从family_ht表中删除
family:通用netlink family
返回值:成功返回0 失败返回负数错误码
头文件: #include <net/genetlink.h>
例子:
https://blog.csdn.net/yldfree/article/details/82500438

int genl_register_ops(struct genl_family *family, struct genl_ops *ops);
功能:将通用netlink接收到特定命令字后的操作ops 挂到通用netlink family中
family:通用netlink family
ops:通用netlink 接收到消息后的操作集合
返回值:成功返回0 失败返回负数错误码
头文件: #include <net/genetlink.h>
例子:
https://blog.csdn.net/yldfree/article/details/82500438

int genl_unregister_ops(struct genl_family *family, struct genl_ops *ops);
功能:将通用netlink的一个命令字的操作集合从 通用netlink family中摘除
family:通用netlink family
ops:通用netlink 接收到消息后的操作集合
返回值:成功返回0 失败返回负数错误码
头文件: #include <net/genetlink.h>
例子:
https://blog.csdn.net/yldfree/article/details/82500438


static inline struct sk_buff *genlmsg_new(size_t payload, gfp_t flags)
功能:为通用netlink消息分配缓冲区
payload:有效载荷的大小可以用nla_total_size()来计算,包括每项的属性头nlattr的大小
flags:分配标志GFP_KERNEL GFP_ATOMIC
返回值: sk_buff缓冲区
头文件: #include <net/genetlink.h>
使用举例:
https://blog.csdn.net/yldfree/article/details/82500438


static inline int genlmsg_total_size(int payload)
功能:计算通用netlink消息长度 payload(有效载荷数据长度)+通用netlink消息头(sizeof(genlmsghdr))+对齐
payload:有效载荷数据长度
返回值:计算的消息长度
头文件:#include <net/genetlink.h>
实现:(2.6.32)
static inline int genlmsg_total_size(int payload)
{
    return NLMSG_ALIGN(genlmsg_msg_size(payload));
}
static inline int genlmsg_msg_size(int payload)
{
    return GENL_HDRLEN + payload;
}
#define GENL_HDRLEN    NLMSG_ALIGN(sizeof(struct genlmsghdr))


static inline void *genlmsg_put(struct sk_buff *skb, u32 pid, u32 seq,
                                struct genl_family *family, int flags, u8 cmd)

功能:添加通用netlink消息头到netlink消息中
skb:sk_buff缓冲区
pid:消息发送到的目的端口号(一般应用层进程号)
seq:序列号
family:通用netlink族
flags:netlink消息标志 如NLM_F_ACK
cmd:通用netlink命令字
返回值:返回指向用户消息数据的指针
头文件:头文件:#include <net/genetlink.h>
例子:
https://blog.csdn.net/yldfree/article/details/82500438

猜你喜欢

转载自blog.csdn.net/yldfree/article/details/82593934