static void dealias_prefixscan_free(void *data) { scamper_dealias_prefixscan_t *prefixscan = data; uint16_t i; if(prefixscan == NULL) return; if(prefixscan->a != NULL) scamper_addr_free(prefixscan->a); if(prefixscan->b != NULL) scamper_addr_free(prefixscan->b); if(prefixscan->ab != NULL) scamper_addr_free(prefixscan->ab); if(prefixscan->xs != NULL) { for(i=0; i<prefixscan->xc; i++) if(prefixscan->xs[i] != NULL) scamper_addr_free(prefixscan->xs[i]); free(prefixscan->xs); } if(prefixscan->probedefs != NULL) { for(i=0; i<prefixscan->probedefc; i++) dealias_probedef_free(&prefixscan->probedefs[i]); free(prefixscan->probedefs); } free(prefixscan); return; }
static int warts_trace_dtree_read(scamper_trace_t *trace, warts_state_t *state, warts_addrtable_t *table, const uint8_t *buf, uint32_t *off, uint32_t len) { scamper_addr_t *lss_stop = NULL, *gss_stop = NULL; uint8_t firsthop = 0, flags = 0; char *lss = NULL; warts_param_reader_t handlers[] = { {&lss_stop, (wpr_t)extract_addr_gid, state}, {&gss_stop, (wpr_t)extract_addr_gid, state}, {&firsthop, (wpr_t)extract_byte, NULL}, {&lss_stop, (wpr_t)extract_addr, table}, {&gss_stop, (wpr_t)extract_addr, table}, {&lss, (wpr_t)extract_string, NULL}, {&flags, (wpr_t)extract_byte, NULL}, }; const int handler_cnt = sizeof(handlers)/sizeof(warts_param_reader_t); if(scamper_trace_dtree_alloc(trace) != 0 || warts_params_read(buf, off, len, handlers, handler_cnt) != 0) { if(lss_stop != NULL) scamper_addr_free(lss_stop); if(gss_stop != NULL) scamper_addr_free(gss_stop); if(lss != NULL) free(lss); return -1; } trace->dtree->lss_stop = lss_stop; trace->dtree->gss_stop = gss_stop; trace->dtree->firsthop = firsthop; trace->dtree->lss = lss; trace->dtree->flags = flags; return 0; }
static void addr2mac_free(addr2mac_t *addr2mac) { if(addr2mac->ip != NULL) scamper_addr_free(addr2mac->ip); if(addr2mac->mac != NULL) scamper_addr_free(addr2mac->mac); free(addr2mac); return; }
static void dealias_probedef_free(scamper_dealias_probedef_t *probedef) { if(probedef->src != NULL) { scamper_addr_free(probedef->src); probedef->src = NULL; } if(probedef->dst != NULL) { scamper_addr_free(probedef->dst); probedef->dst = NULL; } return; }
static int addr2mac_add(const int ifindex, const int type, const void *ipraw, const void *macraw, const time_t expire) { const int mt = SCAMPER_ADDR_TYPE_ETHERNET; scamper_addr_t *mac = NULL; scamper_addr_t *ip = NULL; addr2mac_t *addr2mac = NULL; char ipstr[128], macstr[128]; if((ip = scamper_addrcache_get(addrcache, type, ipraw)) == NULL) { printerror(errno, strerror, __func__, "could not get ip"); goto err; } if((mac = scamper_addrcache_get(addrcache, mt, macraw)) == NULL) { printerror(errno, strerror, __func__, "could not get mac"); goto err; } if((addr2mac = addr2mac_alloc(ifindex, ip, mac, expire)) == NULL) { goto err; } scamper_addr_free(ip); ip = NULL; scamper_addr_free(mac); mac = NULL; if(splaytree_insert(tree, addr2mac) == NULL) { printerror(errno, strerror, __func__, "could not add %s:%s to tree", scamper_addr_tostr(addr2mac->ip, ipstr, sizeof(ipstr)), scamper_addr_tostr(addr2mac->mac, macstr, sizeof(macstr))); goto err; } scamper_debug(__func__, "ifindex %d ip %s mac %s expire %d", ifindex, scamper_addr_tostr(addr2mac->ip, ipstr, sizeof(ipstr)), scamper_addr_tostr(addr2mac->mac, macstr, sizeof(macstr)), expire); return 0; err: if(addr2mac != NULL) addr2mac_free(addr2mac); if(mac != NULL) scamper_addr_free(mac); if(ip != NULL) scamper_addr_free(ip); return -1; }
static void firewall_rule_free(scamper_firewall_rule_t *sfw) { if(sfw == NULL) { return; } if(sfw->sfw_5tuple_src != NULL) scamper_addr_free(sfw->sfw_5tuple_src); if(sfw->sfw_5tuple_dst != NULL) scamper_addr_free(sfw->sfw_5tuple_dst); free(sfw); return; }
void scamper_route_free(scamper_route_t *route) { if(route == NULL) return; #ifndef _WIN32 if(route->internal != NULL) rtsock_pair_free(route->internal); #endif if(route->dst != NULL) scamper_addr_free(route->dst); if(route->gw != NULL) scamper_addr_free(route->gw); free(route); return; }
void scamper_dealias_reply_free(scamper_dealias_reply_t *reply) { if(reply->src != NULL) scamper_addr_free(reply->src); free(reply); return; }
void scamper_task_sig_free(scamper_task_sig_t *sig) { if(sig == NULL) return; switch(sig->sig_type) { case SCAMPER_TASK_SIG_TYPE_TX_IP: if(sig->sig_tx_ip_dst != NULL) scamper_addr_free(sig->sig_tx_ip_dst); if(sig->sig_tx_ip_src != NULL) scamper_addr_free(sig->sig_tx_ip_src); break; case SCAMPER_TASK_SIG_TYPE_TX_ND: if(sig->sig_tx_nd_ip != NULL) scamper_addr_free(sig->sig_tx_nd_ip); break; case SCAMPER_TASK_SIG_TYPE_SNIFF: if(sig->sig_sniff_src != NULL) scamper_addr_free(sig->sig_sniff_src); break; } free(sig); return; }