int pkt_tuple_cmp(packet_tuple_t *t1, packet_tuple_t *t2) { return(t1->src_port == t2->src_port && t1->dst_port == t2->dst_port && (lisp_addr_cmp(&t1->src_addr, &t2->src_addr) == 0) && (lisp_addr_cmp(&t1->dst_addr, &t2->dst_addr) == 0) && t1->iid == t2->iid); }
/* * Compare lisp_addr_t of two locators. * Returns: * -1: If they are from different afi * 0: Both address are the same * 1: Addr1 is bigger than addr2 * 2: Addr2 is bigger than addr1 */ inline int locator_cmp_addr ( locator_t *loct1, locator_t *loct2) { return (lisp_addr_cmp(locator_addr(loct1),locator_addr(loct2))); }
int vpnapi_control_dp_updated_addr(oor_ctrl_t *ctrl, iface_t *iface, lisp_addr_t *old_addr,lisp_addr_t *new_addr) { int addr_afi; vpnapi_ctr_dplane_data_t * data; data = (vpnapi_ctr_dplane_data_t *)ctrl->control_data_plane->control_dp_data; addr_afi = lisp_addr_ip_afi(new_addr); /* Check if the detected change of address id the same. */ if (lisp_addr_cmp(old_addr, new_addr) == 0) { OOR_LOG(LDBG_2, "vpnapi_control_dp_updated_addr: The change of address detected " "for interface %s doesn't affect", iface->iface_name); return (GOOD); }; switch (addr_afi){ case AF_INET: vpnapi_control_dp_reset_socket(data, data->ipv4_ctrl_socket, AF_INET); break; case AF_INET6: vpnapi_control_dp_reset_socket(data, data->ipv6_ctrl_socket, AF_INET6); break; default: return (BAD); } return (GOOD); }
int locator_cmp(locator_t *l1, locator_t *l2) { int ret = 0; if ((ret = lisp_addr_cmp(locator_addr(l1), locator_addr(l2))) != 0) { return (1); } if (l1->priority != l2->priority) return (1); if (l1->weight != l2->weight) return (1); if (l1->mpriority != l2->mpriority) return (1); if (l1->mweight != l2->mweight) return (1); return (0); }
/* Return the locator from the list that contains the address passed as a * parameter */ locator_t * locator_list_get_locator_with_addr( glist_t *loct_list, lisp_addr_t *addr) { locator_t *locator = NULL; glist_entry_t *it = NULL; if (!loct_list || glist_size(loct_list) == 0 || addr == NULL){ return (NULL); } glist_for_each_entry(it,loct_list){ locator = (locator_t *)glist_entry_data(it); if (lisp_addr_cmp(locator_addr(locator), addr) == 0) { return (locator); } }
/* * 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); }