diff options
author | Laurent Ghigonis <laurent@p1sec.com> | 2013-07-06 02:27:56 +0200 |
---|---|---|
committer | Laurent Ghigonis <laurent@p1sec.com> | 2013-07-06 02:27:56 +0200 |
commit | 2b575ec093dcd84d8d5c816fe41dd5b7363228e6 (patch) | |
tree | 7f32e89871b99edb4e6556007d9515353a266b06 /libglouglou/libggnet.h | |
parent | gg_map: printf use %p for pointers (diff) | |
download | glouglou-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.h | 37 |
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 *, |