/* * Traceroute using libevent, libdnet and libpcap * * 2012 Laurent Ghigonis * * Inspired from jtrace (http://monkey.org/~jose/software/jtrace/) * Copyright (c) 2003-2004 Jose Nazario * All rights reserved. */ struct ggnet_traceroute * ggnet_traceroute_new(struct event_base *ev_base) { struct ggnet_traceroute *ggtr; ggtr = calloc(1, sizeof(struct ggnet_traceroute)); if (!ggtr) { printf("could not allocate ggnet_traceroute\n"); exit(1); } ggtr->ev_base = ev_base; return ggdns; } void ggnet_traceroute_free(struct ggnet_traceroute *ggtr) { free(ggtr); } struct ggnet_traceroute_req * ggnet_traceroute_trace(struct ggnet_traceroute *ggtr, struct in_iddr *ip, void (*cb_usr)(struct in_addr *, struct ggnet_traceroute_req *, void *), void *data) { struct ggnet_traceroute_req *req; req = calloc(1, sizeof(struct ggnet_traceroute_req)); if (!req) { printf("could not allocate ggnet_traceroute_req\n"); exit(1); } LIST_INSERT_HEAD(&ggtr->req_list, req, entry); return req; } void ggnet_traceroute_cancel(struct ggnet_traceroute *ggtr, struct ggnet_traceroute_req *req) { LIST_REMOVE(req, entry); ggtr->req_pending--; free(req); }