Esempio n. 1
0
/**
 * Create a generic IP address object from the current expanded
 * assignment.
 */
static void
create_ip_address(struct ipset_iterator *iterator)
{
    struct cork_ip  *addr = &iterator->addr;
    struct ipset_expanded_assignment  *exp = iterator->assignment_iterator;

    /* Initialize the address to all 0 bits. */
    memset(addr, 0, sizeof(struct cork_ip));

    /* Check variable 0 to see if this is an IPv4 or IPv6 address. */
    addr->version = IPSET_BIT_GET(exp->values.buf, 0)? 4: 6;

    /* Copy bits from the expanded assignment.  The number of bits to
     * copy is given as the current netmask.  We'll have calculated that
     * already based on the non-expanded assignment. */
    unsigned int  i;
    for (i = 0; i < iterator->cidr_prefix; i++) {
        IPSET_BIT_SET(&addr->ip, i, IPSET_BIT_GET(exp->values.buf, i+1));
    }

#if IPSET_DEBUG
    char  buf[CORK_IP_STRING_LENGTH];
    cork_ip_to_raw_string(addr, buf);
    DEBUG("Current IP address is %s/%u", buf, iterator->cidr_prefix);
#endif
}
Esempio n. 2
0
static void
create_ip_address(ipset_iterator_t *iterator)
{
    ipset_ip_t  *addr = &iterator->addr;
    ipset_expanded_assignment_t  *exp =
        iterator->assignment_iterator;

    /*
     * Check variable 0 to see if this is an IPv4 or IPv6 address.
     */

    addr->is_ipv4 = IPSET_BIT_GET(exp->values->data, 0);

    /*
     * Initialize the address to all 0 bits.
     */

    memset(addr->addr, 0, sizeof(guint32) * 4);

    /*
     * Copy bits from the expanded assignment.  The number of bits to
     * copy is given as the current netmask.  We'll have calculated
     * that already based on the non-expanded assignment.
     */

    guint  i;
    for (i = 0; i < iterator->netmask; i++)
    {
        IPSET_BIT_SET(addr->addr, i,
                      IPSET_BIT_GET(exp->values->data, i+1));
    }

    g_d_debug("Current IP address is %s/%u",
              ipset_ip_to_string(addr), iterator->netmask);
}
Esempio n. 3
0
END_TEST


/*-----------------------------------------------------------------------
 * Expanded assignments
 */

START_TEST(test_bdd_assignment_expand_1)
{
    ipset_assignment_t  *a;

    a = ipset_assignment_new();
    ipset_assignment_set(a, 0, TRUE);
    ipset_assignment_set(a, 1, FALSE);

    ipset_expanded_assignment_t  *it;
    it = ipset_assignment_expand(a, 2);

    GByteArray  *ea = g_byte_array_sized_new(1);
    memset(ea->data, 0, 1);

    fail_if(it->finished,
            "Expanded assignment shouldn't be empty");
    IPSET_BIT_SET(ea->data, 0, TRUE);
    IPSET_BIT_SET(ea->data, 1, FALSE);
    fail_unless(memcmp(ea->data, it->values->data, 1) == 0,
                "Expanded assignment doesn't match");

    ipset_expanded_assignment_advance(it);
    fail_unless(it->finished,
                "Expanded assignment should have 1 element");

    g_byte_array_free(ea, TRUE);
    ipset_expanded_assignment_free(it);
    ipset_assignment_free(a);
}