/** * Retrieve value associated with an IPv4 address, i.e. that of the range * containing it. * * @param db the IP range database * @param ip the IPv4 address to lookup * * @return The data associated with the IP address or 0 if not found. */ uint16 iprange_get(const struct iprange_db *idb, uint32 ip) { struct iprange_net4 key, *item; iprange_db_check(idb); key.ip = ip; key.bits = 32; item = sorted_array_lookup(idb->tab4, &key); return item != NULL ? item->value : 0; }
/** * Retrieve value associated with an IPv6 address, i.e. that of the range * containing it. * * @param db the IP range database * @param ip6 the IPv6 address to lookup * * @return The data associated with the IP address or 0 if not found. */ uint16 iprange_get6(const struct iprange_db *idb, const uint8 *ip6) { struct iprange_net6 key, *item; iprange_db_check(idb); memcpy(&key.ip[0], ip6, sizeof key.ip); key.bits = 128; item = sorted_array_lookup(idb->tab6, &key); return item != NULL ? item->value : 0; }
/** * Retrieve value associated with an IPv4 address, i.e. that of the range * containing it. * * @param db the IP range database * @param ip the IPv4 address to lookup * @return The data associated with the IPv address or NULL if not found. */ void * iprange_get(const struct iprange_db *idb, guint32 ip) { struct iprange_net key, *item; iprange_db_check(idb); key.ip = ip; key.mask = cidr_to_netmask(32); item = sorted_array_lookup(idb->tab, &key); return item ? item->value : NULL; }