netfilter_netfilter 锁开销_netfilter iptables(16)

电脑杂谈  发布时间:2017-02-12 00:02:53  来源:网络整理

confirmedus.*/

IP_NF_ASSERT(!is_confirmed(ct));

DEBUGP("Confirmingconntrack%p\n",ct);

WRITE_LOCK(&ip_conntrack_lock);

/*在hash表中查找初始及应答的节点*/

if(!LIST_FIND(&ip_conntrack_hash[hash],

conntrack_tuple_cmp,

structip_conntrack_tuple_hash*,

&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple,NULL)

&&!LIST_FIND(&ip_conntrack_hash[repl_hash],

conntrack_tuple_cmp,

structip_conntrack_tuple_hash*,

&ct->tuplehash[IP_CT_DIR_REPLY].tuple,NULL)){

/*Removefromunconfirmedlist*/

list_del(&ct->tuplehash[IP_CT_DIR_ORIGINAL].list);

/*主要的工作就在于此了:将当前连接表项(初始和应答的tuple)添加进hash表*/

list_prepend(&ip_conntrack_hash[hash],

&ct->tuplehash[IP_CT_DIR_ORIGINAL]);

list_prepend(&ip_conntrack_hash[repl_hash],

&ct->tuplehash[IP_CT_DIR_REPLY]);

/*Timerrelativetoconfirmationtime,notoriginal

settingtime,otherwisewe'dgettimerwrapin

weirddelaycases.*/

ct->timeout.expires+=jiffies;

add_timer(&ct->timeout);

atomic_inc(&ct->ct_general.use);

set_bit(IPS_CONFIRMED_BIT,&ct->status);

CONNTRACK_STAT_INC(insert);

WRITE_UNLOCK(&ip_conntrack_lock);

returnNF_ACCEPT;

}

CONNTRACK_STAT_INC(insert_failed);

WRITE_UNLOCK(&ip_conntrack_lock);

returnNF_DROP;

}

这样,一条新建连接就被加入到表项当中了。如果其有后续连接,如应答,进入连接跟踪表,又转换其tuple,然后查到此表项,循环中……

哈,九贱兄要将netfilter和iptables玩到通通透啊

引用:原帖由platinum于2006-8-2118:47发表

哈,九贱兄要将netfilter和iptables玩到通通透啊

还没有呢,ALG的代码还没有整理出来,这个状态检测,只是普通的状态检测的实现,如ICMP,UDP,麻烦点的TCP的处理,ALG,如FTP协议的处理,都只是拿下了原理,框架,写了笔记,有空的时候,就把代码分析继续贴上来,呵呵。

欢迎大家回贴讨论!

#search=%22LINUX2.4.x%20%E8%BF%9E%E6%8E%A5%E8%B7%9F%E8%B8%AA%E5%92%8C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2%22,前些天从网上看到的,感觉不错,大家可以互相学习一下。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-31885-16.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...