原文链接:http://www.9mblog.com/99.html
/* In Unix socket runmode, Flow manager is started on demand */
if (suri.run_mode != RUNMODE_UNIX_SOCKET) {
/* Spawn the unix socket manager thread */
int unix_socket = 0;
if (ConfGetBool(“unix-command.enabled”, &unix_socket) != 1)
unix_socket = 0;
if (unix_socket == 1) {
UnixManagerThreadSpawn(0);
#ifdef BUILD_UNIX_SOCKET
UnixManagerRegisterCommand(“iface-stat”, LiveDeviceIfaceStat, NULL,
UNIX_CMD_TAKE_ARGS);
UnixManagerRegisterCommand(“iface-list”, LiveDeviceIfaceList, NULL, 0);
#endif
}
若unix-command为enable状态,则创建Unix-socket命令线程,可与suricata客户端使用JSON格式信息进行通信。命令线程的创建是通过TmThreadCreateCmdThread函数,创建的线程类型为TVT_CMD。线程执行函数为UnixManagerThread
/* Spawn the flow manager thread */
FlowManagerThreadSpawn();
创建Flow管理线程,用于对流表进行超时删除处理。管理线程创建是通过TmThreadCreateMgmtThread函数,类型为TVT_MGMT,执行函数为FlowManager。
FlowRecyclerThreadSpawn();
同样是对流超时进行处理,没有仔细研究和上面的区别,执行函数为FlowRecycler。
StatsSpawnThreads();
创建性能计数相关线程,包括一个定期对各计数器进行同步的唤醒线程(StatsWakeupThread),和一个定期输出计数值的管理线程(StatsMgmtThread)。
}