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
表白Amber和秀晶