(Suricata 6.0 流表管理 源码注释 第三章:流的建立(一))
发布时间
阅读量:
阅读量
构建流量表的过程始于FlowWorker函数的执行。它是解码模块之后立即被调用的第一个模块函数。解码模块调用了FlowSetupPacket函数,并根据接收到的五元组参数设置流量表中的flow_hash字段p->flow_hash。同时并设置了标志位PKT_WANTS_FLOW字段。此外,在流量处理过程中产生的其它数据包不会带有该标志位。这些则被称作虚假数据包
FlowWorker函数调用FlowHandlePacket完成flow相关处理
1. FlowHandlePacket函数
FlowManager-》FlowHandlePacket
该函数执行大部分流处理任务,并执行以下操作:首先搜索全局的 flow_hash 标识符;随后创建新的 flow 实例;当线程队列中的所有 flow 实例都被占用时,则从全局 flow 内存池中获取一个新的可用实例;若此时全局 memory pool 中也没有空闲实例,则直接分配资源;一旦超出设定内存上限(即 current resource usage exceeds predefined maximum value), 则从当前活跃的 flow_hash 集合中提取一个未被占用的实例(该实例引用计数设为零);完成后立即开始利用这个新获得的实例进行处理流程;若仍然无法找到可用资源,则切换至应急模式:标记当前操作状态为应急模式,并将剩
全部评论 (0)
还没有任何评论哟~
