Files
safe_duck/linux_kernel/ip_hashmap.h

42 lines
1.3 KiB
C

#pragma once
#include "head.h"
#define BUCKET_NUM 1000 // 初始桶的数量
struct ip_hash_table {
struct hlist_head *heads; // 存放桶的指针数组
unsigned int bucket_num; // 当前桶的数量
spinlock_t lock; // 锁,确保同步和互斥访问哈希表
struct task_struct *cleanup_thread; // 执行清理操作的线程
};
// 定义哈希表节点
struct syn_scan_info_t {
size_t last_seen;
size_t num_syn_packets;
};
struct crack_ip_info_t {
size_t last_seen;
size_t num_connect;
};
struct ip_meta_info_t {
bool is_attack;
size_t last_attack_time;
size_t remove_time;
};
struct ip_hashmap_info {
u32 ip_address_key;
struct syn_scan_info_t syn_scan_info;
struct crack_ip_info_t crack_ip_info;
struct ip_meta_info_t ip_meta_info;
};
struct ip_hashmap_node_t {
struct hlist_node node; // 哈希表链表节点
struct ip_hashmap_info info;
};
extern bool init_ip_hashmap(void);
extern void check_resize_table(struct ip_hash_table *table);
extern void put_ipdata_by_hashmap(u32 ip_address_key,
struct ip_hashmap_info *info);
extern struct ip_hashmap_node_t *get_ipdata_by_hashmap(u32 ip_address_key);
extern void del_ipdata_by_hashmap(u32 ip_address_key);
extern void cleanup_iphashmap(void);