TSG-18285 TFE的Packet IO模块支持重复流量识别
This commit is contained in:
93
common/include/dablooms.h
Normal file
93
common/include/dablooms.h
Normal file
@@ -0,0 +1,93 @@
|
||||
/* Copyright @2012 by Justin Hines at Bitly under a very liberal license. See LICENSE in the source distribution. */
|
||||
|
||||
#ifndef __BLOOM_H__
|
||||
#define __BLOOM_H__
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
const char *dablooms_version(void);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
size_t bytes;
|
||||
char *array;
|
||||
} bitmap_t;
|
||||
|
||||
bitmap_t *bitmap_resize(bitmap_t *bitmap, size_t old_size, size_t new_size);
|
||||
bitmap_t *new_bitmap(size_t bytes);
|
||||
|
||||
int bitmap_increment(bitmap_t *bitmap, unsigned int index, long offset);
|
||||
int bitmap_decrement(bitmap_t *bitmap, unsigned int index, long offset);
|
||||
int bitmap_check(bitmap_t *bitmap, unsigned int index, long offset);
|
||||
int bitmap_flush(bitmap_t *bitmap);
|
||||
|
||||
void free_bitmap(bitmap_t *bitmap);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint64_t id;
|
||||
uint32_t count;
|
||||
uint32_t _pad;
|
||||
} counting_bloom_header_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
counting_bloom_header_t *header;
|
||||
unsigned int capacity;
|
||||
long offset;
|
||||
unsigned int counts_per_func;
|
||||
uint32_t *hashes;
|
||||
size_t nfuncs;
|
||||
size_t size;
|
||||
size_t num_bytes;
|
||||
double error_rate;
|
||||
bitmap_t *bitmap;
|
||||
} counting_bloom_t;
|
||||
|
||||
int free_counting_bloom(counting_bloom_t *bloom);
|
||||
counting_bloom_t *new_counting_bloom(unsigned int capacity, double error_rate);
|
||||
int counting_bloom_add(counting_bloom_t *bloom, const char *s, size_t len);
|
||||
int counting_bloom_remove(counting_bloom_t *bloom, const char *s, size_t len);
|
||||
int counting_bloom_check(counting_bloom_t *bloom, const char *s, size_t len);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint64_t max_id;
|
||||
uint64_t mem_seqnum;
|
||||
uint64_t disk_seqnum;
|
||||
} scaling_bloom_header_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
scaling_bloom_header_t *header;
|
||||
unsigned int capacity;
|
||||
unsigned int num_blooms;
|
||||
size_t num_bytes;
|
||||
double error_rate;
|
||||
counting_bloom_t **blooms;
|
||||
bitmap_t *bitmap;
|
||||
} scaling_bloom_t;
|
||||
|
||||
scaling_bloom_t *new_scaling_bloom(unsigned int capacity, double error_rate);
|
||||
int free_scaling_bloom(scaling_bloom_t *bloom);
|
||||
int scaling_bloom_add(scaling_bloom_t *bloom, const char *s, size_t len, uint64_t id);
|
||||
int scaling_bloom_remove(scaling_bloom_t *bloom, const char *s, size_t len, uint64_t id);
|
||||
int scaling_bloom_check(scaling_bloom_t *bloom, const char *s, size_t len);
|
||||
int scaling_bloom_flush(scaling_bloom_t *bloom);
|
||||
uint64_t scaling_bloom_mem_seqnum(scaling_bloom_t *bloom);
|
||||
uint64_t scaling_bloom_disk_seqnum(scaling_bloom_t *bloom);
|
||||
|
||||
struct expiry_dablooms_handle;
|
||||
enum expiry_dablooms_errno
|
||||
{
|
||||
EXPIRY_DABLOOMS_ERRNO_BLOOM_NULL = -1,
|
||||
EXPIRY_DABLOOMS_ERRNO_NEW_BLOOM_FAIL = -2,
|
||||
};
|
||||
char *expiry_dablooms_errno_trans(enum expiry_dablooms_errno _errno);
|
||||
void expiry_dablooms_destroy(struct expiry_dablooms_handle *handle);
|
||||
struct expiry_dablooms_handle *expiry_dablooms_init(unsigned int capacity, double error_rate, time_t cur_time, int expiry_time);
|
||||
int expiry_dablooms_element_count_get(struct expiry_dablooms_handle *handle, uint64_t *count);
|
||||
int expiry_dablooms_add(struct expiry_dablooms_handle *handle, const char *key, size_t len, time_t cur_time);
|
||||
int expiry_dablooms_search(struct expiry_dablooms_handle *handle, const char *key, size_t len, time_t cur_time);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user