You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

69 lines
1.6 KiB

/* -*- coding: utf-8 -*-
* ----------------------------------------------------------------------
* Copyright © 2009-2012, RedJack, LLC.
* All rights reserved.
*
* Please see the LICENSE.txt file in this distribution for license
* details.
* ----------------------------------------------------------------------
*/
#include <libcork/core.h>
#include "ipset/bdd/nodes.h"
#include "ipset/ipset.h"
bool
ipmap_is_empty(const struct ip_map *map)
{
/* Since BDDs are unique, any map that maps all addresses to the
* default value is “empty”. */
return (map->map_bdd == map->default_bdd);
}
bool
ipmap_is_equal(const struct ip_map *map1, const struct ip_map *map2)
{
return ipset_node_cache_nodes_equal
(map1->cache, map1->map_bdd, map2->cache, map2->map_bdd);
}
size_t
ipmap_memory_size(const struct ip_map *map)
{
return ipset_node_memory_size(map->cache, map->map_bdd);
}
void
ipmap_ip_set(struct ip_map *map, struct cork_ip *addr, int value)
{
if (addr->version == 4) {
ipmap_ipv4_set(map, &addr->ip.v4, value);
} else {
ipmap_ipv6_set(map, &addr->ip.v6, value);
}
}
void
ipmap_ip_set_network(struct ip_map *map, struct cork_ip *addr,
unsigned int cidr_prefix, int value)
{
if (addr->version == 4) {
ipmap_ipv4_set_network(map, &addr->ip.v4, cidr_prefix, value);
} else {
ipmap_ipv6_set_network(map, &addr->ip.v6, cidr_prefix, value);
}
}
int
ipmap_ip_get(struct ip_map *map, struct cork_ip *addr)
{
if (addr->version == 4) {
return ipmap_ipv4_get(map, &addr->ip.v4);
} else {
return ipmap_ipv6_get(map, &addr->ip.v6);
}
}