From 2b3d960401d1e86597e7e0687e9ab9cf63ff288f Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 13 Oct 2017 09:22:49 +0200 Subject: [PATCH] runmodes: fix 'threads' option parsing Don't cast int to uint8_t for no reason. Add warning that upper limit for theads is 1024. Small code cleanups. Bug: #2243 --- src/runmode-af-packet.c | 2 +- src/runmode-netmap.c | 2 +- src/runmode-pcap.c | 2 +- src/runmode-pfring.c | 4 ++-- src/util-runmodes.c | 28 ++++++++++++++-------------- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/runmode-af-packet.c b/src/runmode-af-packet.c index 959617889b..91e1427832 100644 --- a/src/runmode-af-packet.c +++ b/src/runmode-af-packet.c @@ -188,7 +188,7 @@ void *ParseAFPConfig(const char *iface) if (strcmp(threadsstr, "auto") == 0) { aconf->threads = 0; } else { - aconf->threads = (uint8_t)atoi(threadsstr); + aconf->threads = atoi(threadsstr); } } } diff --git a/src/runmode-netmap.c b/src/runmode-netmap.c index 3ea6c7a55c..45b0babfaa 100644 --- a/src/runmode-netmap.c +++ b/src/runmode-netmap.c @@ -138,7 +138,7 @@ static int ParseNetmapSettings(NetmapIfaceSettings *ns, const char *iface, if (strcmp(threadsstr, "auto") == 0) { ns->threads = 0; } else { - ns->threads = (uint8_t)atoi(threadsstr); + ns->threads = atoi(threadsstr); } } diff --git a/src/runmode-pcap.c b/src/runmode-pcap.c index bcd8358ece..5a067dd3e8 100644 --- a/src/runmode-pcap.c +++ b/src/runmode-pcap.c @@ -142,7 +142,7 @@ void *ParsePcapConfig(const char *iface) aconf->threads = 1; } else { if (threadsstr != NULL) { - aconf->threads = (uint8_t)atoi(threadsstr); + aconf->threads = atoi(threadsstr); } } if (aconf->threads == 0) { diff --git a/src/runmode-pfring.c b/src/runmode-pfring.c index 5332252570..0c4ac3ebde 100644 --- a/src/runmode-pfring.c +++ b/src/runmode-pfring.c @@ -125,7 +125,7 @@ void *OldParsePfringConfig(const char *iface) pfconf->threads = 1; } else { if (threadsstr != NULL) { - pfconf->threads = (uint8_t)atoi(threadsstr); + pfconf->threads = atoi(threadsstr); } } if (pfconf->threads == 0) { @@ -252,7 +252,7 @@ void *ParsePfringConfig(const char *iface) pfconf->threads = 1; } else { if (threadsstr != NULL) { - pfconf->threads = (uint8_t)atoi(threadsstr); + pfconf->threads = atoi(threadsstr); } } if (pfconf->threads == 0) { diff --git a/src/util-runmodes.c b/src/util-runmodes.c index f58c274402..13636ffc5b 100644 --- a/src/util-runmodes.c +++ b/src/util-runmodes.c @@ -95,7 +95,6 @@ int RunModeSetLiveCaptureAutoFp(ConfigIfaceParserFunc ConfigParser, char tname[TM_THREAD_NAME_MAX]; char qname[TM_QUEUE_NAME_MAX]; char *queues = NULL; - uint16_t thread = 0; /* Available cpus */ uint16_t ncpus = UtilCpuGetNumProcessorsOnline(); @@ -106,8 +105,10 @@ int RunModeSetLiveCaptureAutoFp(ConfigIfaceParserFunc ConfigParser, thread_max = ncpus * threading_detect_ratio; if (thread_max < 1) thread_max = 1; - if (thread_max > 1024) + if (thread_max > 1024) { + SCLogWarning(SC_ERR_RUNMODE, "limited number of 'worker' threads to 1024. Wanted %d", thread_max); thread_max = 1024; + } queues = RunmodeAutoFpCreatePickupQueuesString(thread_max); if (queues == NULL) { @@ -123,8 +124,8 @@ int RunModeSetLiveCaptureAutoFp(ConfigIfaceParserFunc ConfigParser, aconf = ConfigParser(live_dev); if (aconf == NULL) { - SCLogError(SC_ERR_RUNMODE, "Failed to allocate config for %s (%d)", - live_dev, thread); + SCLogError(SC_ERR_RUNMODE, "Failed to allocate config for %s", + live_dev); exit(EXIT_FAILURE); } @@ -133,7 +134,7 @@ int RunModeSetLiveCaptureAutoFp(ConfigIfaceParserFunc ConfigParser, threads_count, recv_mod_name); /* create the threads */ - for (thread = 0; thread < threads_count; thread++) { + for (int thread = 0; thread < MIN(thread_max, threads_count); thread++) { snprintf(tname, sizeof(tname), "%s#%02d", thread_name, thread+1); ThreadVars *tv_receive = TmThreadCreatePacketHandler(tname, @@ -169,9 +170,8 @@ int RunModeSetLiveCaptureAutoFp(ConfigIfaceParserFunc ConfigParser, } } else { /* Multiple input device */ SCLogInfo("Using %d live device(s).", nlive); - int lthread; - for (lthread = 0; lthread < nlive; lthread++) { + for (int lthread = 0; lthread < nlive; lthread++) { const char *dev = LiveGetDeviceName(lthread); const char *visual_devname = LiveGetShortName(live_dev); void *aconf; @@ -191,7 +191,7 @@ int RunModeSetLiveCaptureAutoFp(ConfigIfaceParserFunc ConfigParser, } threads_count = ModThreadsCount(aconf); - for (thread = 0; thread < threads_count; thread++) { + for (int thread = 0; thread < threads_count; thread++) { snprintf(tname, sizeof(tname), "%s#%02d-%s", thread_name, thread+1, visual_devname); @@ -227,7 +227,7 @@ int RunModeSetLiveCaptureAutoFp(ConfigIfaceParserFunc ConfigParser, } } - for (thread = 0; thread < (uint16_t)thread_max; thread++) { + for (int thread = 0; thread < thread_max; thread++) { snprintf(tname, sizeof(tname), "%s#%02u", thread_name_workers, thread+1); snprintf(qname, sizeof(qname), "pickup%u", thread+1); @@ -278,7 +278,6 @@ static int RunModeSetLiveCaptureWorkersForDevice(ConfigIfaceThreadsCountFunc Mod const char *live_dev, void *aconf, unsigned char single_mode) { - int thread; int threads_count; if (single_mode) { @@ -289,7 +288,7 @@ static int RunModeSetLiveCaptureWorkersForDevice(ConfigIfaceThreadsCountFunc Mod } /* create the threads */ - for (thread = 0; thread < threads_count; thread++) { + for (int thread = 0; thread < threads_count; thread++) { char tname[TM_THREAD_NAME_MAX]; ThreadVars *tv = NULL; TmModule *tm_module = NULL; @@ -433,7 +432,6 @@ int RunModeSetIPSAutoFp(ConfigIPSParserFunc ConfigParser, TmModule *tm_module ; const char *cur_queue = NULL; char *queues = NULL; - uint16_t thread; /* Available cpus */ uint16_t ncpus = UtilCpuGetNumProcessorsOnline(); @@ -445,8 +443,10 @@ int RunModeSetIPSAutoFp(ConfigIPSParserFunc ConfigParser, thread_max = ncpus * threading_detect_ratio; if (thread_max < 1) thread_max = 1; - if (thread_max > 1024) + if (thread_max > 1024) { + SCLogWarning(SC_ERR_RUNMODE, "limited number of 'worker' threads to 1024. Wanted %d", thread_max); thread_max = 1024; + } queues = RunmodeAutoFpCreatePickupQueuesString(thread_max); if (queues == NULL) { @@ -494,7 +494,7 @@ int RunModeSetIPSAutoFp(ConfigIPSParserFunc ConfigParser, } } - for (thread = 0; thread < (uint16_t)thread_max; thread++) { + for (int thread = 0; thread < thread_max; thread++) { snprintf(tname, sizeof(tname), "%s#%02u", thread_name_workers, thread+1); snprintf(qname, sizeof(qname), "pickup%u", thread+1); -- 2.47.2