inline void fwd_entry_del(fwd_entry_t *fwd_entry) { if (fwd_entry == NULL){ return; } lisp_addr_del(fwd_entry->srloc); lisp_addr_del(fwd_entry->drloc); free(fwd_entry); }
/* * Release memory of an iface_locators structure * @param if_loct Element to be released */ void iface_locators_del(iface_locators *if_loct) { free(if_loct->iface_name); glist_destroy(if_loct->map_loc_entries); glist_destroy(if_loct->ipv4_locators); glist_destroy(if_loct->ipv6_locators); if (if_loct->ipv4_prev_addr != NULL){ lisp_addr_del(if_loct->ipv4_prev_addr); } if (if_loct->ipv6_prev_addr != NULL){ lisp_addr_del(if_loct->ipv6_prev_addr); } free(if_loct); }
void policy_loct_parm_del(fwd_policy_loct_parm *pol_loct) { lisp_addr_del(pol_loct->rloc_addr); shash_destroy(pol_loct->paramiters); free(pol_loct); }
void policy_map_parm_del (fwd_policy_map_parm *pol_map) { lisp_addr_del(pol_map->eid_prefix); shash_destroy(pol_map->paramiters); glist_destroy(pol_map->locators); free(pol_map); }
/* * If prefix b is contained in prefix a, then return TRUE. Otherwise return FALSE. * If both prefixs are the same it also returns TRUE */ int pref_is_prefix_b_part_of_a (lisp_addr_t *a_prefix,lisp_addr_t *b_prefix) { lisp_addr_t * a_network_addr; lisp_addr_t * b_network_addr_prefix_a; int a_pref_len; int b_pref_len; int res; if (!lisp_addr_is_ip_pref(a_prefix) || !lisp_addr_is_ip_pref(b_prefix)){ return FALSE; } if (lisp_addr_ip_afi(a_prefix) != lisp_addr_ip_afi(b_prefix)){ return FALSE; } a_pref_len = lisp_addr_get_plen(a_prefix); b_pref_len = lisp_addr_get_plen(b_prefix); if (a_pref_len > b_pref_len){ return FALSE; } a_network_addr = pref_get_network_address(a_prefix); lisp_addr_set_plen(b_prefix, a_pref_len); b_network_addr_prefix_a = pref_get_network_address(b_prefix); lisp_addr_set_plen(b_prefix, b_pref_len); if (lisp_addr_cmp (a_network_addr, b_network_addr_prefix_a) == 0){ res = TRUE; }else{ res = FALSE; } lisp_addr_del(a_network_addr); lisp_addr_del(b_network_addr_prefix_a); return (res); }
void locator_del(locator_t *locator) { if (!locator) { return; } lisp_addr_del(locator->addr); free(locator); locator = NULL; }
void lisp_site_prefix_del(lisp_site_prefix_t *sp) { if (!sp) return; if (sp->eid_prefix) lisp_addr_del(sp->eid_prefix); if (sp->key) free(sp->key); free(sp); }
int pref_conv_to_netw_pref(lisp_addr_t *addr) { lisp_addr_t *ip_pref, *net_pref; ip_pref = lisp_addr_get_ip_pref_addr(addr); if (!ip_pref){ return (BAD); } net_pref = pref_get_network_prefix(ip_pref); lisp_addr_copy(ip_pref, net_pref); lisp_addr_del(net_pref); return (GOOD); }
int lisp_msg_parse_itr_rlocs(lbuf_t *b, glist_t *rlocs) { lisp_addr_t *tloc; void *mreq_hdr = lbuf_lisp(b); int i; tloc = lisp_addr_new(); for (i = 0; i < MREQ_ITR_RLOC_COUNT(mreq_hdr) + 1; i++) { if (lisp_msg_parse_addr(b, tloc) != GOOD) { return(BAD); } glist_add(lisp_addr_clone(tloc), rlocs); OOR_LOG(LDBG_1," itr-rloc: %s", lisp_addr_to_char(tloc)); } lisp_addr_del(tloc); return(GOOD); }