aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou/libggnet.h
diff options
context:
space:
mode:
authorLaurent Ghigonis <laurent@p1sec.com>2013-07-06 02:27:56 +0200
committerLaurent Ghigonis <laurent@p1sec.com>2013-07-06 02:27:56 +0200
commit2b575ec093dcd84d8d5c816fe41dd5b7363228e6 (patch)
tree7f32e89871b99edb4e6556007d9515353a266b06 /libglouglou/libggnet.h
parentgg_map: printf use %p for pointers (diff)
downloadglouglou-2b575ec093dcd84d8d5c816fe41dd5b7363228e6.tar.xz
glouglou-2b575ec093dcd84d8d5c816fe41dd5b7363228e6.zip
WIP traceroute integration, disabled by default
gg_map is not graphing correctly the route for now
Diffstat (limited to 'libglouglou/libggnet.h')
-rw-r--r--libglouglou/libggnet.h37
1 files changed, 34 insertions, 3 deletions
diff --git a/libglouglou/libggnet.h b/libglouglou/libggnet.h
index 794639b..fecf2bb 100644
--- a/libglouglou/libggnet.h
+++ b/libglouglou/libggnet.h
@@ -14,6 +14,8 @@
#include <bsd/sys/queue.h>
#endif
+#include "libggnet_traceroute.h"
+
#define GGNET_DNSNAME_MAX 60
#define GGNET_CONN_FREEIDS_COUNT 65536 /* 2^16 as freeids are u_int16_t */
@@ -43,13 +45,17 @@ struct ggnet_nodegroup {
struct ggnet_node {
LIST_ENTRY(ggnet_node) entry;
+ LIST_ENTRY(ggnet_node) entry_path;
struct ggnet *net;
struct in_addr addr;
+ LIST_HEAD(, ggnet_node) path_to; /* traceroute childs */
+ struct ggnet_node *path_parent; /* traceroute parent */
time_t lastseen;
- int used;
+ int used; /* by ggnet_conn */
+ struct ggnet_nodegroup *group; /* XXX for now only one group */
char fqdn[GGNET_DNSNAME_MAX];
- struct ggnet_nodegroup *group; /* XXX for now we support only one group */
struct ggnet_dns_req *dns_req;
+ struct ggnet_traceroute_req *traceroute_req;
void *usrdata;
};
@@ -82,7 +88,7 @@ struct ggnet {
int node_count;
u_int16_t conn_freeids[GGNET_CONN_FREEIDS_COUNT];
int conn_freeids_ptr;
- int manage_connid;
+ int manage_connid; /* XXX rename to active / passive */
time_t time;
int debug;
/* grouping */
@@ -93,6 +99,18 @@ struct ggnet {
int use_dns;
struct ggnet_dns *ggdns;
void (*cb_nodename)(struct ggnet *, struct ggnet_node *);
+ /* traceroute */
+ int use_traceroute;
+ struct ggnet_traceroute *ggtraceroute;
+ void (*cb_traceroute)(struct ggnet *, struct ggnet_traceroute_req *);
+ /* traceroute callbacks */
+ void (*cb_traceroute_link)(struct ggnet *,
+ struct ggnet_node *,
+ struct ggnet_node *);
+ void (*cb_traceroute_unlink)(struct ggnet *,
+ struct ggnet_node *,
+ struct ggnet_node *);
+
};
struct ggnet *ggnet_new(int);
@@ -102,10 +120,21 @@ void ggnet_set_grouping(struct ggnet *, int,
struct ggnet_nodegroup *),
void (*cb_delgroup)(struct ggnet *,
struct ggnet_nodegroup *));
+void ggnet_setcb_traceroute(struct ggnet *,
+ void (*cb_link)(struct ggnet *,
+ struct ggnet_node *,
+ struct ggnet_node *),
+ void (*cb_unlink)(struct ggnet *,
+ struct ggnet_node *,
+ struct ggnet_node *));
void ggnet_set_dns(struct ggnet *net, int set,
struct event_base *ev_base,
void (*cb_nodename)(struct ggnet *,
struct ggnet_node *));
+void ggnet_set_traceroute(struct ggnet *, int, char *,
+ struct event_base *,
+ void (*cb_traceroute)(struct ggnet *,
+ struct ggnet_traceroute_req *));
void ggnet_debug_set(struct ggnet *, int);
void ggnet_free(struct ggnet *);
struct ggnet_node *ggnet_node_add(struct ggnet *, struct in_addr *);
@@ -114,6 +143,8 @@ struct ggnet_node *ggnet_node_find(struct ggnet *, struct in_addr *);
void *ggnet_node_usrdata_get(struct ggnet_node *);
void ggnet_node_usrdata_set(struct ggnet_node *, void *);
struct ggnet_nodegroup *ggnet_node_group_get(struct ggnet_node *);
+int ggnet_node_path_link(struct ggnet_node *a,
+ struct ggnet_node *b);
struct ggnet_conn *ggnet_conn_add(struct ggnet *, struct in_addr *, int,
struct in_addr *, int, int, int, int);
void ggnet_conn_data(struct ggnet *, struct ggnet_conn *,