aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Nardi <12729895+IvanNardi@users.noreply.github.com>2022-06-15 12:25:26 +0200
committerGitHub <noreply@github.com>2022-06-15 12:25:26 +0200
commite2cc08bfe56dcd2738b684c44eb478cea352de4f (patch)
tree85e4ba68fe6823be2d255c49f55725d79174055a /src
parentd1773cc8e364bcc4934c6f577259c1098950c2c0 (diff)
Add support for PIM (Protocol Indipendent Multicast) protocol (#1599)
Close #1598
Diffstat (limited to 'src')
-rw-r--r--src/include/ndpi_define.h.in1
-rw-r--r--src/include/ndpi_protocol_ids.h1
-rw-r--r--src/lib/ndpi_main.c7
-rw-r--r--src/lib/protocols/non_tcp_udp.c12
4 files changed, 21 insertions, 0 deletions
diff --git a/src/include/ndpi_define.h.in b/src/include/ndpi_define.h.in
index 8ec960dd3..2999a38f7 100644
--- a/src/include/ndpi_define.h.in
+++ b/src/include/ndpi_define.h.in
@@ -297,6 +297,7 @@
#define NDPI_IPIP_PROTOCOL_TYPE 0x04
#define NDPI_ICMPV6_PROTOCOL_TYPE 0x3a
#define NDPI_PGM_PROTOCOL_TYPE 0x71
+#define NDPI_PIM_PROTOCOL_TYPE 0x67
#define NDPI_ARRAY_LENGTH(array) (sizeof(array) / sizeof((array)[0]))
diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h
index b12180cf7..f9fd31881 100644
--- a/src/include/ndpi_protocol_ids.h
+++ b/src/include/ndpi_protocol_ids.h
@@ -325,6 +325,7 @@ typedef enum {
NDPI_PROTOCOL_RSH = 294,
NDPI_PROTOCOL_1KXUN = 295,
NDPI_PROTOCOL_IP_PGM = 296,
+ NDPI_PROTOCOL_IP_PIM = 297,
#ifdef CUSTOM_NDPI_PROTOCOLS
#include "../../../nDPI-custom/custom_ndpi_protocol_ids.h"
diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c
index 544470da3..de9d53350 100644
--- a/src/lib/ndpi_main.c
+++ b/src/lib/ndpi_main.c
@@ -1915,6 +1915,10 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp
"RSH", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS,
ndpi_build_default_ports(ports_a, 514, 0, 0, 0, 0) /* TCP */,
ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */);
+ ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_PIM,
+ "IP_PIM", NDPI_PROTOCOL_CATEGORY_NETWORK,
+ ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */,
+ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */);
#ifdef CUSTOM_NDPI_PROTOCOLS
#include "../../../nDPI-custom/custom_ndpi_main.c"
@@ -3144,6 +3148,9 @@ u_int16_t ndpi_guess_protocol_id(struct ndpi_detection_module_struct *ndpi_str,
case NDPI_PGM_PROTOCOL_TYPE:
return(NDPI_PROTOCOL_IP_PGM);
break;
+ case NDPI_PIM_PROTOCOL_TYPE:
+ return(NDPI_PROTOCOL_IP_PIM);
+ break;
case NDPI_ICMP_PROTOCOL_TYPE:
if(flow) {
flow->entropy = 0.0f;
diff --git a/src/lib/protocols/non_tcp_udp.c b/src/lib/protocols/non_tcp_udp.c
index 50e3a949b..9f3ced86e 100644
--- a/src/lib/protocols/non_tcp_udp.c
+++ b/src/lib/protocols/non_tcp_udp.c
@@ -89,6 +89,10 @@ void ndpi_search_in_non_tcp_udp(struct ndpi_detection_module_struct
set_protocol_and_bmask(NDPI_PROTOCOL_IP_ICMPV6);
break;
+ case NDPI_PIM_PROTOCOL_TYPE:
+ set_protocol_and_bmask(NDPI_PROTOCOL_IP_PIM);
+ break;
+
case 112:
set_protocol_and_bmask(NDPI_PROTOCOL_IP_VRRP);
break;
@@ -181,4 +185,12 @@ void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct
NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN,
ADD_TO_DETECTION_BITMASK);
*id += 1;
+
+ ndpi_set_bitmask_protocol_detection("IP_PIM", ndpi_struct, detection_bitmask, *id,
+ NDPI_PROTOCOL_IP_PIM,
+ ndpi_search_in_non_tcp_udp,
+ NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6,
+ NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN,
+ ADD_TO_DETECTION_BITMASK);
+ *id += 1;
}