Example #1
0
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);
}
Example #2
0
/*
 * 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)));
}
Example #3
0
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);
}
Example #4
0
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);
}
Example #5
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);
        }
    }
Example #6
0
File: prefixes.c Project: biels/oor
/*
 * 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);
}