开源IDS suricata源码分析(worker模式工作线程初始化及处理流程)
本文主要分析suricata在worker工作模式下,工作线程的初始化及工作线程的处理流程。
初始化及处理流程接口调用
由main函数起始的工作线程创建过程:
- RunModeDispatch 开始运行模式初始化(以pfring worker模式为例)
- RunModeIdsPfringWorkers 此为pfring worker模式注册的初始化接口
- RunModeSetLiveCaptureWorkers 所有网口对应的工作线程初始化入口
- RunModeSetLiveCaptureWorkersForDevice 某一网口对应的工作线程初始化入口
- TmThreadCreatePacketHandler 注册一个工作线程的loop接口,此处loop接口被注册为TmThreadsSlotPktAcqLoop
- TmSlotSetFuncAppend 向线程插槽中注册receive接口,此处为ReceivePfringLoop(TmModuleGetByName根据线程模块名查找出来的)(正常工作时此此接口不反回,在内部while1)
- TmSlotSetFuncAppend 向线程插槽中注册decode接口,此处为DecodePfring(TmModuleGetByName根据线程模块名查找出来的)
- TmSlotSetFuncAppend 向线程插槽中注册decode接口,此处为FlowWorker(TmModuleGetByName根据线程模块名查找出来的)
- TmSlotSetFunc