bus-bloom.h revision ab5dfda78f14d2ca3d6383a2d23260e9d13127e3
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder#pragma once
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder/***
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder This file is part of systemd.
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder Copyright 2013 Lennart Poettering
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder systemd is free software; you can redistribute it and/or modify it
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder under the terms of the GNU Lesser General Public License as published by
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder the Free Software Foundation; either version 2.1 of the License, or
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder (at your option) any later version.
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder systemd is distributed in the hope that it will be useful, but
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder WITHOUT ANY WARRANTY; without even the implied warranty of
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder Lesser General Public License for more details.
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder You should have received a copy of the GNU Lesser General Public License
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder along with systemd; If not, see <http://www.gnu.org/licenses/>.
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder***/
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder#include <stdbool.h>
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder#include <stddef.h>
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder#include <stdint.h>
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder/*
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder * Our default bloom filter has the following parameters:
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder *
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder * m=512 (bits in the filter)
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder * k=8 (hash functions)
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder *
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder * We use SipHash24 as hash function with a number of (originally
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder * randomized) but fixed hash keys.
806fd9e08b8b68eeeb0eccfd8892046a2985e594Christian Maeder *
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder */
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder
11ad38296d4182aac74ce6d5bef27911fbc9690dChristian Maeder#define DEFAULT_BLOOM_SIZE (512/8) /* m: filter size */
#define DEFAULT_BLOOM_N_HASH 8 /* k: number of hash functions */
void bloom_add_pair(uint64_t filter[], size_t size, unsigned n_hash, const char *a, const char *b);
void bloom_add_prefixes(uint64_t filter[], size_t size, unsigned n_hash, const char *a, const char *b, char sep);
bool bloom_validate_parameters(size_t size, unsigned n_hash);