热门关键字:  PHP  Cisco  seo  网络广告 虚拟主机 中文域名
当前位置 :| 主页>服务器>Linux服务器>

推荐:Linux用户态与内核态的交互

来源:赛迪网技术社区 作者:Kendo 时间:2006-09-17 点击:

函数初始化netlink 消息首部,填充数据区,然后设置控制字段,这三部份都包含在skb_buff中,最后调用netlink_unicast函数把数据发送出去。

函数中调用了netlink的一个重要的宏NLMSG_PUT,它用于初始化netlink 消息首部:










#define NLMSG_PUT(skb, pid, seq, type, len) 

({ if (skb_tailroom(skb) < (int)NLMSG_SPACE(len)) goto nlmsg_failure; 

   __nlmsg_put(skb, pid, seq, type, len); })

static __inline__ struct nlmsghdr *

__nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len)

{

	struct nlmsghdr *nlh;

	int size = NLMSG_LENGTH(len);



	nlh = (struct nlmsghdr*)skb_put(skb, NLMSG_ALIGN(size));

	nlh->nlmsg_type = type;

	nlh->nlmsg_len = size;

	nlh->nlmsg_flags = 0;

	nlh->nlmsg_pid = pid;

	nlh->nlmsg_seq = seq;

	return nlh;

}

这个宏一个需要注意的地方是调用了nlmsg_failure标签,所以在程序中应该定义这个标签。

在内核中使用函数sock_release来释放函数netlink_kernel_create()创建的netlink socket: void sock_release(struct socket * sock);程序在退出模块中释放netlink sockets和netfilter hook:

static void __exit fini(void)

{

if(nlfd)

{

sock_release(nlfd->socket); /*释放netlink socket*/

}

nf_unregister_hook(&imp2_ops); /*撤锁netfilter 钩子*/

}


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
赞助商连接