datasets: improve default hashsize handling

Make hashsize default local to dataset code, instead of relying on the
thash code.

Use the same default value as before.
pull/12779/head
Victor Julien 1 year ago
parent c6d18fc871
commit d32a39ca4b

@ -369,6 +369,11 @@ Dataset *DatasetGet(const char *name, enum DatasetTypes type, const char *save,
} }
} }
GetDefaultMemcap(&default_memcap, &default_hashsize);
if (hashsize == 0) {
hashsize = default_hashsize;
}
set = DatasetAlloc(name); set = DatasetAlloc(name);
if (set == NULL) { if (set == NULL) {
goto out_err; goto out_err;
@ -388,13 +393,11 @@ Dataset *DatasetGet(const char *name, enum DatasetTypes type, const char *save,
char cnf_name[128]; char cnf_name[128];
snprintf(cnf_name, sizeof(cnf_name), "datasets.%s.hash", name); snprintf(cnf_name, sizeof(cnf_name), "datasets.%s.hash", name);
GetDefaultMemcap(&default_memcap, &default_hashsize);
switch (type) { switch (type) {
case DATASET_TYPE_MD5: case DATASET_TYPE_MD5:
set->hash = THashInit(cnf_name, sizeof(Md5Type), Md5StrSet, Md5StrFree, Md5StrHash, set->hash = THashInit(cnf_name, sizeof(Md5Type), Md5StrSet, Md5StrFree, Md5StrHash,
Md5StrCompare, NULL, NULL, load != NULL ? 1 : 0, Md5StrCompare, NULL, NULL, load != NULL ? 1 : 0,
memcap > 0 ? memcap : default_memcap, memcap > 0 ? memcap : default_memcap, hashsize);
hashsize > 0 ? hashsize : default_hashsize);
if (set->hash == NULL) if (set->hash == NULL)
goto out_err; goto out_err;
if (DatasetLoadMd5(set) < 0) if (DatasetLoadMd5(set) < 0)
@ -403,8 +406,7 @@ Dataset *DatasetGet(const char *name, enum DatasetTypes type, const char *save,
case DATASET_TYPE_STRING: case DATASET_TYPE_STRING:
set->hash = THashInit(cnf_name, sizeof(StringType), StringSet, StringFree, StringHash, set->hash = THashInit(cnf_name, sizeof(StringType), StringSet, StringFree, StringHash,
StringCompare, NULL, StringGetLength, load != NULL ? 1 : 0, StringCompare, NULL, StringGetLength, load != NULL ? 1 : 0,
memcap > 0 ? memcap : default_memcap, memcap > 0 ? memcap : default_memcap, hashsize);
hashsize > 0 ? hashsize : default_hashsize);
if (set->hash == NULL) if (set->hash == NULL)
goto out_err; goto out_err;
if (DatasetLoadString(set) < 0) if (DatasetLoadString(set) < 0)
@ -413,28 +415,25 @@ Dataset *DatasetGet(const char *name, enum DatasetTypes type, const char *save,
case DATASET_TYPE_SHA256: case DATASET_TYPE_SHA256:
set->hash = THashInit(cnf_name, sizeof(Sha256Type), Sha256StrSet, Sha256StrFree, set->hash = THashInit(cnf_name, sizeof(Sha256Type), Sha256StrSet, Sha256StrFree,
Sha256StrHash, Sha256StrCompare, NULL, NULL, load != NULL ? 1 : 0, Sha256StrHash, Sha256StrCompare, NULL, NULL, load != NULL ? 1 : 0,
memcap > 0 ? memcap : default_memcap, memcap > 0 ? memcap : default_memcap, hashsize);
hashsize > 0 ? hashsize : default_hashsize);
if (set->hash == NULL) if (set->hash == NULL)
goto out_err; goto out_err;
if (DatasetLoadSha256(set) < 0) if (DatasetLoadSha256(set) < 0)
goto out_err; goto out_err;
break; break;
case DATASET_TYPE_IPV4: case DATASET_TYPE_IPV4:
set->hash = set->hash = THashInit(cnf_name, sizeof(IPv4Type), IPv4Set, IPv4Free, IPv4Hash,
THashInit(cnf_name, sizeof(IPv4Type), IPv4Set, IPv4Free, IPv4Hash, IPv4Compare, IPv4Compare, NULL, NULL, load != NULL ? 1 : 0,
NULL, NULL, load != NULL ? 1 : 0, memcap > 0 ? memcap : default_memcap, memcap > 0 ? memcap : default_memcap, hashsize);
hashsize > 0 ? hashsize : default_hashsize);
if (set->hash == NULL) if (set->hash == NULL)
goto out_err; goto out_err;
if (DatasetLoadIPv4(set) < 0) if (DatasetLoadIPv4(set) < 0)
goto out_err; goto out_err;
break; break;
case DATASET_TYPE_IPV6: case DATASET_TYPE_IPV6:
set->hash = set->hash = THashInit(cnf_name, sizeof(IPv6Type), IPv6Set, IPv6Free, IPv6Hash,
THashInit(cnf_name, sizeof(IPv6Type), IPv6Set, IPv6Free, IPv6Hash, IPv6Compare, IPv6Compare, NULL, NULL, load != NULL ? 1 : 0,
NULL, NULL, load != NULL ? 1 : 0, memcap > 0 ? memcap : default_memcap, memcap > 0 ? memcap : default_memcap, hashsize);
hashsize > 0 ? hashsize : default_hashsize);
if (set->hash == NULL) if (set->hash == NULL)
goto out_err; goto out_err;
if (DatasetLoadIPv6(set) < 0) if (DatasetLoadIPv6(set) < 0)
@ -526,6 +525,10 @@ void DatasetPostReloadCleanup(void)
SCMutexUnlock(&sets_lock); SCMutexUnlock(&sets_lock);
} }
/* Value reflects THASH_DEFAULT_HASHSIZE which is what the default was earlier,
* despite 2048 commented out in the default yaml. */
#define DATASETS_HASHSIZE_DEFAULT 4096
static void GetDefaultMemcap(uint64_t *memcap, uint32_t *hashsize) static void GetDefaultMemcap(uint64_t *memcap, uint32_t *hashsize)
{ {
const char *str = NULL; const char *str = NULL;
@ -537,12 +540,14 @@ static void GetDefaultMemcap(uint64_t *memcap, uint32_t *hashsize)
*memcap = 0; *memcap = 0;
} }
} }
*hashsize = (uint32_t)DATASETS_HASHSIZE_DEFAULT;
if (ConfGet("datasets.defaults.hashsize", &str) == 1) { if (ConfGet("datasets.defaults.hashsize", &str) == 1) {
if (ParseSizeStringU32(str, hashsize) < 0) { if (ParseSizeStringU32(str, hashsize) < 0) {
*hashsize = (uint32_t)DATASETS_HASHSIZE_DEFAULT;
SCLogWarning("hashsize value cannot be deduced: %s," SCLogWarning("hashsize value cannot be deduced: %s,"
" resetting to default", " resetting to default: %u",
str); str, *hashsize);
*hashsize = 0;
} }
} }
} }

Loading…
Cancel
Save