netfilter
来源:互联网 发布:php简单分页代码 编辑:程序博客网 时间:2024/05/19 17:03
extern struct sock *netlink_kernel_create(struct net *net,
int unit,unsigned int groups,
void (*input)(struct sk_buff *skb),
struct mutex *cb_mutex,
struct module *module);
audit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT, 0,
audit_receive, NULL, THIS_MODULE);
int netlink_unicast(struct sock *ssk, struct sk_buff *skb, u32 pid, int nonblock)
extern struct sock *netlink_kernel_create(struct net *net,
int unit,unsigned int groups,
void (*input)(struct sk_buff *skb),
struct mutex *cb_mutex,
struct module *module);
参数unit表示netlink协议类型,如 NETLINK_MYTEST,参数input则为内核模块定义的netlink消息处理函数,当有消息到达这个netlink socket时,该input函数指针就会被引用。函数指针input的参数skb实际上就是函数netlink_kernel_create返回的 struct sock指针,sock实际是socket的一个内核表示数据结构,用户态应用创建的socket在内核中也会有一个struct sock结构来表示。
函数input()会在发送进程执行sendmsg()时被调用,这样处理消息比较及时,但是,如果消息特别长时,这样处理将增加系统调用sendmsg()的执行时间,也就是说当用户的程序调用sendmsg ()函数时,如果input()函数处理时间过长,也就是说input()函数不执行不完,用户程序调用的sendmsg()函数就不会返回。只有当内核空间中的input()函数返回时,用户调用的sendmsg()函数才会返回。对于这种情况,可以定义一个内核线程专门负责消息接收,而函数input 的工作只是唤醒该内核线程,这样sendmsg将很快返回。(这里网上的的说明)不过在查看Linux2.6.37版本的内核时并没有发现这种处理过程,一般都是按下面的方法进行处理。
nlsk = netlink_kernel_create(net, NETLINK_XFRM, XFRMNLGRP_MAX,
xfrm_netlink_rcv, NULL, THIS_MODULE);
static void xfrm_netlink_rcv(struct sk_buff *skb)
{
mutex_lock(&xfrm_cfg_mutex);
netlink_rcv_skb(skb, &xfrm_user_rcv_msg);
mutex_unlock(&xfrm_cfg_mutex);
}
在netlink_rcv_skb()函数中进行接收处理。
int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, u32 pid,
u32 group, gfp_t allocation)
NETLINK_CB(skb).pid = 0;
NETLINK_CB(skb).dst_pid = 0;
NETLINK_CB(skb).dst_group = 1;
- Netfilter
- netfilter
- netfilter
- netfilter
- netfilter
- netfilter
- netfilter
- netfilter
- Netfilter
- NetFilter
- Netfilter
- Netfilter
- netfilter
- Netfilter
- NetFilter
- Netfilter使用说明
- Netfilter 学习
- Netfilter分析
- HDU 4417 Super Mario (树状数组+离线处理)(划分树+二分答案)
- gsoap工具生成soap.h.cpp文件遇到的问题
- C# 转义字符
- 在AIX环境下安装IBM JDK 1.6的教程
- Opencv中Mat数据访问方式效率对比分析
- netfilter
- Ubuntu下将vim配置为Python IDE
- jdbcTemplate获得数据库生成的主键值
- 编程实现Android模拟器中窗口截图存成文件
- hdu 2602(01背包)
- Linux之apt-get
- 字符串压缩
- c#字符串的使用
- Ext学习笔记(6):ExtJS中xtype一览