A-A+

suricata 3.1 源码分析10

2017年09月06日 suricata 暂无评论

/* 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)。

    }
标签:

给我留言

Copyright © 九毛的官方博客 保留所有权利.   Theme  Ality

用户登录