netfilter_netfilter 锁开销_netfilter iptables(15)

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

ip_confirm函数是状态跟踪的另一个重要的函数:

static unsigned int ip_confirm(unsigned int hooknum,

       struct sk_buff **pskb,
       const struct net_device *in,
       const struct net_device *out,
       int (*okfn)(struct sk_buff *))
{
return ip_conntrack_confirm(pskb);
}

函数仅是转向,将控制权转交给ip_conntrack_confirm函数:


static inline int ip_conntrack_confirm(struct sk_buff **pskb)
{
if ((*pskb)->nfct
    && !is_confirmed((struct ip_conntrack *)(*pskb)->nfct))
return __ip_conntrack_confirm(pskb);
return NF_ACCEPT;
}

is_comfirmed函数用于判断数据包是否已经被__ip_conntrack_confirm函数处理过了,它是通过IPS_CONFIRMED_BIT标志位来判断,而这个标志位当然是在__ip_conntrack_confirm函数中来设置的:

[code

int

__ip_conntrack_confirm(structsk_buff**pskb)

{

unsignedinthash,repl_hash;

structip_conntrack*ct;

enumip_conntrack_infoctinfo;

/*取得数据包的连接状态*/

ct=ip_conntrack_get(*pskb,&ctinfo);

/*如果当前包不是一个初始方向的封包,则直接返回.*/

if(CTINFO2DIR(ctinfo)!=IP_CT_DIR_ORIGINAL)

returnNF_ACCEPT;

/*计算初始及应答两个方向tuple对应的hash值*/

hash=hash_conntrack(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple);

repl_hash=hash_conntrack(&ct->tuplehash[IP_CT_DIR_REPLY].tuple);

/*IP_NF_ASSERT(atomic_read(&ct->ct_general.use)==1);*/

/*Noexternalreferencesmeansnooneelsecouldhave


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

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

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