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
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);
|
|
}
|
|
}
|