From b50111a5a77785801f52053de53675c68d22afca Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Sat, 7 Nov 2015 19:28:49 +0100 Subject: [PATCH] commandline: move afpacket parsing into util func --- src/suricata.c | 68 ++++++++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 30 deletions(-) diff --git a/src/suricata.c b/src/suricata.c index ecd26f1393..6bc348a5d8 100644 --- a/src/suricata.c +++ b/src/suricata.c @@ -1109,6 +1109,41 @@ static void SCPrintElapsedTime(SCInstance *suri) SCLogInfo("time elapsed %.3fs", (float)milliseconds/(float)1000); } +static int ParseCommandLineAfpacket(SCInstance *suri, const char *optarg) +{ +#ifdef HAVE_AF_PACKET + if (suri->run_mode == RUNMODE_UNKNOWN) { + suri->run_mode = RUNMODE_AFP_DEV; + if (optarg) { + LiveRegisterDevice(optarg); + memset(suri->pcap_dev, 0, sizeof(suri->pcap_dev)); + strlcpy(suri->pcap_dev, optarg, + ((strlen(optarg) < sizeof(suri->pcap_dev)) ? + (strlen(optarg) + 1) : sizeof(suri->pcap_dev))); + } + } else if (suri->run_mode == RUNMODE_AFP_DEV) { + SCLogWarning(SC_WARN_PCAP_MULTI_DEV_EXPERIMENTAL, "using " + "multiple devices to get packets is experimental."); + if (optarg) { + LiveRegisterDevice(optarg); + } else { + SCLogInfo("Multiple af-packet option without interface on each is useless"); + } + } else { + SCLogError(SC_ERR_MULTIPLE_RUN_MODE, "more than one run mode " + "has been specified"); + usage(suri->progname); + return TM_ECODE_FAILED; + } + return TM_ECODE_OK; +#else + SCLogError(SC_ERR_NO_AF_PACKET,"AF_PACKET not enabled. On Linux " + "host, make sure to pass --enable-af-packet to " + "configure when building."); + return TM_ECODE_FAILED; +#endif +} + static int ParseCommandLinePcapLive(SCInstance *suri, const char *optarg) { memset(suri->pcap_dev, 0, sizeof(suri->pcap_dev)); @@ -1339,38 +1374,11 @@ static TmEcode ParseCommandLine(int argc, char** argv, SCInstance *suri) return TM_ECODE_FAILED; #endif /* HAVE_PFRING */ } - else if (strcmp((long_opts[option_index]).name , "af-packet") == 0){ -#ifdef HAVE_AF_PACKET - if (suri->run_mode == RUNMODE_UNKNOWN) { - suri->run_mode = RUNMODE_AFP_DEV; - if (optarg) { - LiveRegisterDevice(optarg); - memset(suri->pcap_dev, 0, sizeof(suri->pcap_dev)); - strlcpy(suri->pcap_dev, optarg, - ((strlen(optarg) < sizeof(suri->pcap_dev)) ? - (strlen(optarg) + 1) : sizeof(suri->pcap_dev))); - } - } else if (suri->run_mode == RUNMODE_AFP_DEV) { - SCLogWarning(SC_WARN_PCAP_MULTI_DEV_EXPERIMENTAL, "using " - "multiple devices to get packets is experimental."); - if (optarg) { - LiveRegisterDevice(optarg); - } else { - SCLogInfo("Multiple af-packet option without interface on each is useless"); - break; - } - } else { - SCLogError(SC_ERR_MULTIPLE_RUN_MODE, "more than one run mode " - "has been specified"); - usage(argv[0]); + else if (strcmp((long_opts[option_index]).name , "af-packet") == 0) + { + if (ParseCommandLineAfpacket(suri, optarg) != TM_ECODE_OK) { return TM_ECODE_FAILED; } -#else - SCLogError(SC_ERR_NO_AF_PACKET,"AF_PACKET not enabled. On Linux " - "host, make sure to pass --enable-af-packet to " - "configure when building."); - return TM_ECODE_FAILED; -#endif } else if (strcmp((long_opts[option_index]).name , "netmap") == 0){ #ifdef HAVE_NETMAP if (suri->run_mode == RUNMODE_UNKNOWN) {