suricata 3.1 源码分析4
2016-08-31 09:31
309 查看
原文链接:http://www.9mblog.com/82.html
初始化时间。包括:获取当前时间所用的spin lock,以及设置时区(调用tzset()即可)。
为快速模式匹配注册关键字。调用SupportFastPatternForSigMatchList函数,按照优先级大小插入到sm_fp_support_smlist_list链表中。
若运行模式不为RUNMODE_UNIX_SOCKET调用StatsInit()初始化全局变量stats_ctx。
调用LoadYamlConfig读取Yaml格式配置文件。若用户未在输入参数中指定配置文件,则使用默认配置文件(/etc/suricata/suricata.yaml)。Yaml格式解析是通过libyaml库来完成的,解析的结果存储在配置节点树(见conf.c)中。对include机制的支持:在第一遍调用ConfYamlLoadFile载入主配置文件后,将在当前配置节点树中搜寻“include”节点,并对其每个子节点的值(即通过include语句所指定的子配置文件路径),同样调用ConfYamlLoadFile进行载入。
若运行模式为DUMP_CONFIG,则调用ConfDump打印出当前的所有配置信息。ConfDump通过递归调用ConfNodeDump函数实现对配置节点树的DFS(深度优先遍历)。
再次初始化日志模块。这次,程序将会根据配置文件中日志输出配置(logging.outputs)填充SCLogInitData类型的结构体,调用SCLogInitLogModule重新初始化日志模块。
打印版本信息。这是Suricata启动开始后第一条打印信息。
打印当前机器的CPU/核个数,这些信息是通过sysconf系统函数获取的。
解析接口设置名称(网络设备,如eth0,eth1等)。如果suri.pcap_dev为NULL,则从配置文件获取设备名称。如果suri.pcap_dev不为NULL,则将读入的配置结点的设备名称改为suri.pcap_dev。
GlobalInits();
初始化全局变量。包括:数据包队列trans_q、数据队列data_queues(干嘛的?)、对应的mutex和cond、建立小写字母表。TimeInit();
初始化时间。包括:获取当前时间所用的spin lock,以及设置时区(调用tzset()即可)。
SupportFastPatternForSigMatchTypes();
为快速模式匹配注册关键字。调用SupportFastPatternForSigMatchList函数,按照优先级大小插入到sm_fp_support_smlist_list链表中。
if (suri.run_mode != RUNMODE_UNIX_SOCKET) { StatsInit(); }
若运行模式不为RUNMODE_UNIX_SOCKET调用StatsInit()初始化全局变量stats_ctx。
/* Load yaml configuration file if provided. */ if (LoadYamlConfig(&suri) != TM_ECODE_OK) { exit(EXIT_FAILURE); }
调用LoadYamlConfig读取Yaml格式配置文件。若用户未在输入参数中指定配置文件,则使用默认配置文件(/etc/suricata/suricata.yaml)。Yaml格式解析是通过libyaml库来完成的,解析的结果存储在配置节点树(见conf.c)中。对include机制的支持:在第一遍调用ConfYamlLoadFile载入主配置文件后,将在当前配置节点树中搜寻“include”节点,并对其每个子节点的值(即通过include语句所指定的子配置文件路径),同样调用ConfYamlLoadFile进行载入。
if (suri.run_mode == RUNMODE_DUMP_CONFIG) { ConfDump(); exit(EXIT_SUCCESS); }
若运行模式为DUMP_CONFIG,则调用ConfDump打印出当前的所有配置信息。ConfDump通过递归调用ConfNodeDump函数实现对配置节点树的DFS(深度优先遍历)。
SCLogLoadConfig(suri.daemon, suri.verbose);
再次初始化日志模块。这次,程序将会根据配置文件中日志输出配置(logging.outputs)填充SCLogInitData类型的结构体,调用SCLogInitLogModule重新初始化日志模块。
SCPrintVersion();
打印版本信息。这是Suricata启动开始后第一条打印信息。
UtilCpuPrintSummary();
打印当前机器的CPU/核个数,这些信息是通过sysconf系统函数获取的。
if (ParseInterfacesList(suri.run_mode, suri.pcap_dev) != TM_ECODE_OK) { exit(EXIT_FAILURE); }
解析接口设置名称(网络设备,如eth0,eth1等)。如果suri.pcap_dev为NULL,则从配置文件获取设备名称。如果suri.pcap_dev不为NULL,则将读入的配置结点的设备名称改为suri.pcap_dev。
相关文章推荐
- suricata 3.1 源码分析27 (数据包IPv4解码)
- suricata 3.1 源码分析31 (RespondReject)
- suricata 3.1 源码分析17 (流管理2)
- suricata 3.1 源码分析21 (数据包处理1)
- suricata 3.1 源码分析20 (数据包封装)
- suricata 3.1 源码分析28 (数据包TCP解码)
- suricata 3.1 源码分析19 (数据包获取)
- suricata 3.1 源码分析25 (数据包以太层解码)
- suricata 3.1 源码分析15 (流更新)
- suricata 3.1 源码分析22 (数据包处理2)
- suricata 3.1 源码分析1
- suricata 3.1 源码分析9
- suricata 3.1 源码分析11
- suricata 3.1 源码分析6
- suricata 3.1 源码分析16 (流管理1)
- suricata 3.1 源码分析30 (packet_pool处理流程)
- suricata 3.1 源码分析5
- suricata 3.1 源码分析7
- suricata 3.1 源码分析24 (数据包解码模块执行)
- suricata 3.1 源码分析13 (流初始化)