aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou/libggnet_traceroute.h
diff options
context:
space:
mode:
Diffstat (limited to 'libglouglou/libggnet_traceroute.h')
-rw-r--r--libglouglou/libggnet_traceroute.h23
1 files changed, 16 insertions, 7 deletions
diff --git a/libglouglou/libggnet_traceroute.h b/libglouglou/libggnet_traceroute.h
index 92b2d43..5699bfb 100644
--- a/libglouglou/libggnet_traceroute.h
+++ b/libglouglou/libggnet_traceroute.h
@@ -10,6 +10,12 @@
#define TRACEROUTE_NB_PROBES 3
+enum tracemode {
+ TRACEMODE_AUTO = 0,
+ TRACEMODE_ICMP = 1,
+ TRACEMODE_TCP = 2,
+};
+
struct ggnet_traceroute_hop {
TAILQ_ENTRY(ggnet_traceroute_hop) entry;
int ttl;
@@ -25,25 +31,28 @@ struct ggnet_traceroute_hop {
struct ggnet_traceroute_req {
LIST_ENTRY(ggnet_traceroute_req) entry;
- struct ggnet_traceroute_hop *target;
- struct addr srcip;
+ struct ggnet_traceroute_hop *target;
+ struct addr srcip;
+ enum tracemode mode;
int probes_count;
int hops_count;
- TAILQ_HEAD(, ggnet_traceroute_hop) hops_list;
+ TAILQ_HEAD(tailhead, ggnet_traceroute_hop) hops_list;
struct {
struct event *ev_recv;
struct event *ev_send;
- struct evtimer *ev_timeout;
+ struct event *ev_timeout;
struct timeval tv_timeout;
int last_ttl_sent;
} run;
- void (*cb_usr)(struct in_addr *, char *, void *);
+ void (*cb_usr)(struct addr *, struct ggnet_traceroute_req *, void *);
void *data;
+ struct ggnet_traceroute *ggtr;
};
struct ggnet_traceroute {
struct event_base *ev_base;
pcap_t *pcap;
+ intf_t *intf;
ip_t *pkt_ip;
rand_t *pkt_rand;
int pcap_fd;
@@ -57,8 +66,8 @@ struct ggnet_traceroute *
void ggnet_traceroute_free(struct ggnet_traceroute *);
struct ggnet_traceroute_req *
ggnet_traceroute_trace(struct ggnet_traceroute *,
- struct in_addr *ip,
- void (*cb_usr)(struct in_addr *, struct ggnet_traceroute_req *, void *),
+ struct addr *ip, enum tracemode,
+ void (*cb_usr)(struct addr *, struct ggnet_traceroute_req *, void *),
void *);
void ggnet_traceroute_cancel(struct ggnet_traceroute *,
struct ggnet_traceroute_req *);