aboutsummaryrefslogtreecommitdiff
path: root/src/lib/third_party/include
diff options
context:
space:
mode:
authorAlfredo Cardigliano <cardigliano@ntop.org>2021-02-23 10:01:56 +0100
committerAlfredo Cardigliano <cardigliano@ntop.org>2021-02-23 10:01:56 +0100
commitf8e83f7e35ae76473d55359c250eed76c3cb6077 (patch)
tree6f4b1a14d1564e17ba25ac13e78dc6d98a04733e /src/lib/third_party/include
parentb757cf606b2e94f8e928f8abc2a6295d83352f12 (diff)
Add support for MAC to Patricia tree. Expose full API to applications. Add utility functions.
Diffstat (limited to 'src/lib/third_party/include')
-rw-r--r--src/lib/third_party/include/ndpi_patricia.h69
1 files changed, 19 insertions, 50 deletions
diff --git a/src/lib/third_party/include/ndpi_patricia.h b/src/lib/third_party/include/ndpi_patricia.h
index 4e9bbe483..a8478986e 100644
--- a/src/lib/third_party/include/ndpi_patricia.h
+++ b/src/lib/third_party/include/ndpi_patricia.h
@@ -41,15 +41,11 @@
#ifndef _NDPI_PATRICIA_H
#define _NDPI_PATRICIA_H
-#ifndef WIN32
-#define PATRICIA_IPV6 HAVE_IPV6
-#else
-#undef PATRICIA_IPV6
-#endif
+#include "ndpi_api.h"
/* typedef unsigned int u_int; */
/* { from defs.h */
-#define prefix_touchar(prefix) ((u_char *)&(prefix)->add.sin)
+#define ndpi_prefix_touchar(prefix) ((u_char *)&(prefix)->add.sin)
#define MAXLINE 1024
@@ -80,25 +76,13 @@
/* { from mrt.h */
-typedef struct the_prefix4_t {
+typedef struct _prefix4_t {
u_int16_t family; /* AF_INET | AF_INET6 */
u_int16_t bitlen; /* same as mask? */
int ref_count; /* reference count */
struct in_addr sin;
} prefix4_t;
-typedef struct the_prefix_t {
- u_int16_t family; /* AF_INET | AF_INET6 */
- u_int16_t bitlen; /* same as mask? */
- int ref_count; /* reference count */
- union {
- struct in_addr sin;
-#ifdef PATRICIA_IPV6
- struct in6_addr sin6;
-#endif /* IPV6 */
- } add;
-} prefix_t;
-
/* } */
/* pointer to usr data (ex. route flap info) */
@@ -115,35 +99,20 @@ union patricia_node_value_t {
} u;
};
-typedef struct _patricia_node_t {
+typedef struct _ndpi_patricia_node_t {
u_int16_t bit; /* flag if this node used */
- prefix_t *prefix; /* who we are in patricia tree */
- struct _patricia_node_t *l, *r; /* left and right children */
- struct _patricia_node_t *parent;/* may be used */
+ ndpi_prefix_t *prefix; /* who we are in patricia tree */
+ struct _ndpi_patricia_node_t *l, *r; /* left and right children */
+ struct _ndpi_patricia_node_t *parent;/* may be used */
void *data; /* pointer to data */
union patricia_node_value_t value;
-} patricia_node_t;
+} ndpi_patricia_node_t;
-typedef struct _patricia_tree_t {
- patricia_node_t *head;
+typedef struct _ndpi_patricia_tree_t {
+ ndpi_patricia_node_t *head;
u_int16_t maxbits; /* for IP, 32 bit addresses */
int num_active_node; /* for debug purpose */
-} patricia_tree_t;
-
-typedef void (*void_fn_t)(void *data);
-typedef void (*void_fn2_t)(prefix_t *prefix, void *data);
-
-/* renamed to ndpi_Patricia to avoid name conflicts */
-patricia_node_t *ndpi_patricia_search_exact (patricia_tree_t *patricia, prefix_t *prefix);
-patricia_node_t *ndpi_patricia_search_best (patricia_tree_t *patricia, prefix_t *prefix);
-patricia_node_t * ndpi_patricia_search_best2 (patricia_tree_t *patricia, prefix_t *prefix,
- int inclusive);
-patricia_node_t *ndpi_patricia_lookup (patricia_tree_t *patricia, prefix_t *prefix);
-void ndpi_patricia_remove (patricia_tree_t *patricia, patricia_node_t *node);
-patricia_tree_t *ndpi_New_Patricia (u_int16_t maxbits);
-void ndpi_Clear_Patricia (patricia_tree_t *patricia, void_fn_t func);
-void ndpi_Destroy_Patricia (patricia_tree_t *patricia, void_fn_t func);
-void ndpi_patricia_process (patricia_tree_t *patricia, void_fn2_t func);
+} ndpi_patricia_tree_t;
#ifdef WIN32
#define PATRICIA_MAXBITS 128
@@ -158,17 +127,17 @@ void ndpi_patricia_process (patricia_tree_t *patricia, void_fn2_t func);
#define PATRICIA_WALK(Xhead, Xnode) \
do { \
- patricia_node_t *Xstack[PATRICIA_MAXBITS+1]; \
- patricia_node_t **Xsp = Xstack; \
- patricia_node_t *Xrn = (Xhead); \
+ ndpi_patricia_node_t *Xstack[PATRICIA_MAXBITS+1]; \
+ ndpi_patricia_node_t **Xsp = Xstack; \
+ ndpi_patricia_node_t *Xrn = (Xhead); \
while ((Xnode = Xrn)) { \
if (Xnode->prefix)
#define PATRICIA_WALK_ALL(Xhead, Xnode) \
do { \
- patricia_node_t *Xstack[PATRICIA_MAXBITS+1]; \
- patricia_node_t **Xsp = Xstack; \
- patricia_node_t *Xrn = (Xhead); \
+ ndpi_patricia_node_t *Xstack[PATRICIA_MAXBITS+1]; \
+ ndpi_patricia_node_t **Xsp = Xstack; \
+ ndpi_patricia_node_t *Xrn = (Xhead); \
while ((Xnode = Xrn)) { \
if (1)
@@ -176,7 +145,7 @@ void ndpi_patricia_process (patricia_tree_t *patricia, void_fn2_t func);
if (Xsp != Xstack) { \
Xrn = *(--Xsp); \
} else { \
- Xrn = (patricia_node_t *) 0; \
+ Xrn = (ndpi_patricia_node_t *) 0; \
} \
continue; }
@@ -191,7 +160,7 @@ void ndpi_patricia_process (patricia_tree_t *patricia, void_fn2_t func);
} else if (Xsp != Xstack) { \
Xrn = *(--Xsp); \
} else { \
- Xrn = (patricia_node_t *) 0; \
+ Xrn = (ndpi_patricia_node_t *) 0; \
} \
} \
} while (0)