ZBLOG

具体分析这段代码 static struct conn * conn_not_found(struct conntrack *ct, struct dp_packet *pkt, struct conn_lookup_ctx *ctx, bool commit, long long now, const struct nat_action_info_t *nat_action_info, struct...

该代码是一个 conn_not_found 函数,其作用是在连接跟踪表中查找指定的连接。如果找到了,就返回对应的连接;否则,就创建一个新连接并返回。

该函数首先检查传入的数据包是否有效,如果无效,就将它的状态设置为 CS_INVALID,并返回 NULL。

然后,该函数设置数据包的状态为 CS_NEW,并检查是否有 alg_exp(即是否需要应用 ALG)。如果有,就将数据包的状态设置为 CS_RELATED。

接着,该函数检查是否需要创建新连接。如果需要,就获取连接跟踪表的连接数限制,并检查当前连接数是否已达到限制。如果已达到,则返回 NULL。

如果未达到连接数限制,就继续创建新连接。首先,该函数获取连接所属的哈希桶,并调用 new_conn 函数创建一个新连接。然后,该函数为连接设置一些属性,例如反向键、关联 ALG 等。如果需要应用 NAT,则还会创建一个 nat_info 结构体,并将 conn_for_un_nat_copy 参数指定的连接复制到该结构体中。最后,该函数将新连接插入到哈希表中,并增加连接计数器。

如果创建新连接失败,则删除刚刚创建的连接,并返回 NULL。如果需要应用 NAT,还要将 conn_for_un_nat_copy 设置为 CT_CONN_TYPE_UN_NAT 类型,并清空其中的 nat_info 和 alg 字段。

最后,如果创建新连接因为 tuple space exhaustion 失败,则删除刚刚创建的连接,并返回 NULL。同时,该函数打印一条警告信息,提示 NAT 资源已经耗尽,需要使用防火墙和/或分区来保护系统。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=355

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?