aboutsummaryrefslogtreecommitdiff
path: root/example/ndpiReader.c
diff options
context:
space:
mode:
authorIvan Nardi <12729895+IvanNardi@users.noreply.github.com>2025-06-09 09:00:17 +0200
committerGitHub <noreply@github.com>2025-06-09 09:00:17 +0200
commitcbd7136b3480774a10f18744d33d3694ffee221b (patch)
treea9981734e85c500ab4605e913cd6ee8b8197492d /example/ndpiReader.c
parent75395cb264f9bfd38d27ac0ba506acc9eab22e34 (diff)
Remove `NDPI_PROTOCOL_BITMASK`; add a new generic bitmask data structure (#2871)
The main difference is that the memory is allocated at runtime Typical usercase: ``` struct ndpi_bitmask b; ndpi_bitmask_alloc(&b, ndpi_get_num_internal_protocols()); ndpi_bitmask_set(&b, $BIT); ndpi_bitmask_is_set(&b, $BIT); [...] ndpi_bitmask_dealloc(&b); ``` See #2136
Diffstat (limited to 'example/ndpiReader.c')
-rw-r--r--example/ndpiReader.c43
1 files changed, 39 insertions, 4 deletions
diff --git a/example/ndpiReader.c b/example/ndpiReader.c
index b03dd32c7..c71a0398e 100644
--- a/example/ndpiReader.c
+++ b/example/ndpiReader.c
@@ -302,7 +302,7 @@ static int dpdk_port_id = 0, dpdk_run_capture = 1;
void test_lib(); /* Forward */
extern void ndpi_report_payload_stats(FILE *out);
-extern int parse_proto_name_list(char *str, NDPI_INTERNAL_PROTOCOL_BITMASK *bitmask,
+extern int parse_proto_name_list(char *str, struct ndpi_bitmask *bitmask,
int inverted_logic);
extern u_int8_t is_ndpi_proto(struct ndpi_flow_info *flow, u_int16_t id);
@@ -2994,7 +2994,7 @@ static void on_protocol_discovered(struct ndpi_workflow * workflow,
*/
static void setupDetection(u_int16_t thread_id, pcap_t * pcap_handle,
struct ndpi_global_context *g_ctx) {
- NDPI_INTERNAL_PROTOCOL_BITMASK enabled_bitmask;
+ struct ndpi_bitmask enabled_bitmask, *enabled_bitmask_ptr = NULL;
struct ndpi_workflow_prefs prefs;
int i, ret;
ndpi_cfg_error rc;
@@ -3007,15 +3007,19 @@ static void setupDetection(u_int16_t thread_id, pcap_t * pcap_handle,
prefs.ignore_vlanid = ignore_vlanid;
/* Protocols to enable/disable. Default: everything is enabled */
- NDPI_INTERNAL_PROTOCOL_SET_ALL(enabled_bitmask);
if(_disabled_protocols != NULL) {
+ if(ndpi_bitmask_alloc(&enabled_bitmask, ndpi_get_num_internal_protocols()) != 0)
+ exit(-1);
+ ndpi_bitmask_set_all(&enabled_bitmask);
if(parse_proto_name_list(_disabled_protocols, &enabled_bitmask, 1))
exit(-1);
+ enabled_bitmask_ptr = &enabled_bitmask;
}
memset(&ndpi_thread_info[thread_id], 0, sizeof(ndpi_thread_info[thread_id]));
ndpi_thread_info[thread_id].workflow = ndpi_workflow_init(&prefs, pcap_handle, 1,
- serialization_format, g_ctx, &enabled_bitmask);
+ serialization_format, g_ctx, enabled_bitmask_ptr);
+ ndpi_bitmask_dealloc(enabled_bitmask_ptr);
if(_categoriesDirPath) {
int failed_files = ndpi_load_categories_dir(ndpi_thread_info[thread_id].workflow->ndpi_struct, _categoriesDirPath);
@@ -6265,6 +6269,36 @@ void mahalanobisUnitTest()
/* *********************************************** */
+void bitmaskUnitTest()
+{
+ struct ndpi_bitmask b;
+ int i;
+
+ assert(ndpi_bitmask_alloc(&b, 512) == 0);
+ for(i = 0; i < b.max_bits; i++) {
+ ndpi_bitmask_set(&b, i);
+ assert(ndpi_bitmask_is_set(&b, i));
+ }
+ for(i = 0; i < b.max_bits; i++) {
+ ndpi_bitmask_clear(&b, i);
+ assert(!ndpi_bitmask_is_set(&b, i));
+ }
+ ndpi_bitmask_set_all(&b);
+ for(i = 0; i < b.max_bits; i++)
+ assert(ndpi_bitmask_is_set(&b, i));
+ ndpi_bitmask_reset(&b);
+ for(i = 0; i < b.max_bits; i++)
+ assert(!ndpi_bitmask_is_set(&b, i));
+ for(i = 0; i < b.max_bits; i++) {
+ ndpi_bitmask_set(&b, i);
+ assert(ndpi_bitmask_is_set(&b, i));
+ }
+
+ ndpi_bitmask_dealloc(&b);
+}
+
+/* *********************************************** */
+
void filterUnitTest() {
ndpi_filter* f = ndpi_filter_alloc();
u_int32_t v, i;
@@ -6798,6 +6832,7 @@ int main(int argc, char **argv) {
memmemUnitTest();
memcasecmpUnitTest();
mahalanobisUnitTest();
+ bitmaskUnitTest();
#endif
}