From 78f4b60efef27b358b160252b157482d71dbf430 Mon Sep 17 00:00:00 2001 From: Ivan Nardi <12729895+IvanNardi@users.noreply.github.com> Date: Sat, 24 May 2025 13:17:46 +0200 Subject: A new interface for dissectors registration (#2843) We use `registr_dissector()` instead of `ndpi_set_bitmask_protocol_detection()`. Every file in `src/lib/protocols/*.c` is a dissector. Every dissector can handle multiple protocols. The real goal is this small change: ``` struct call_function_struct { - NDPI_PROTOCOL_BITMASK detection_bitmask; ``` i.e. getting rid of another protocol bitmask: this is mandatory to try to fix #2136 (see also e845e8205b68752c997d05224d8b2fd45acde714) As a nice side effect, we remove a bitmask comparison in the hot function `check_ndpi_detection_func()` TODO: change logging configuration from per-protocol to per-dissector --- src/lib/protocols/memcached.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'src/lib/protocols/memcached.c') diff --git a/src/lib/protocols/memcached.c b/src/lib/protocols/memcached.c index 198735340..fcabbd0f7 100644 --- a/src/lib/protocols/memcached.c +++ b/src/lib/protocols/memcached.c @@ -112,7 +112,7 @@ static void ndpi_search_memcached(struct ndpi_detection_module_struct *ndpi_stru if (packet->tcp != NULL) { if (packet->payload_packet_len < MEMCACHED_MIN_LEN) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -120,13 +120,13 @@ static void ndpi_search_memcached(struct ndpi_detection_module_struct *ndpi_stru } else if (packet->udp != NULL) { if (packet->payload_packet_len < MEMCACHED_MIN_UDP_LEN) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if ((offset[4] == 0x00 && offset[5] == 0x00) || offset[6] != 0x00 || offset[7] != 0x00) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -170,17 +170,13 @@ static void ndpi_search_memcached(struct ndpi_detection_module_struct *ndpi_stru if (*matches >= MEMCACHED_MIN_MATCH) ndpi_int_memcached_add_connection(ndpi_struct, flow); else if(flow->packet_counter > 5) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_memcached_dissector( - struct ndpi_detection_module_struct *ndpi_struct) +void init_memcached_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("MEMCACHED", - ndpi_struct, - NDPI_PROTOCOL_MEMCACHED, - ndpi_search_memcached, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); + register_dissector("MEMCACHED", ndpi_struct, + ndpi_search_memcached, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MEMCACHED); } -- cgit v1.2.3