119 lines
4.3 KiB
C
119 lines
4.3 KiB
C
#ifndef _OBJECT_MANAGER_H
|
|
#define _OBJECT_MANAGER_H
|
|
|
|
#include <linux/types.h>
|
|
#include <pthread.h>
|
|
#include <uthash/uthash.h>
|
|
#include <uthash/utarray.h>
|
|
#include "../../common/common.h"
|
|
|
|
#define MAX_OBJ_CONTENT (20)
|
|
#define OBJ_MEM_TAG ("1234567\0")
|
|
#define MAX_DESC (MAX_PATH * 4)
|
|
|
|
typedef enum {
|
|
PORT_TCP = 0,
|
|
PORT_UDP = 1,
|
|
PORT_ICMP = 2,
|
|
PORT_ICMPv6 = 3
|
|
} SVR_PORT_TYPE;
|
|
|
|
typedef enum {
|
|
IP_V4 = 0, ///< IPv4 协议
|
|
IP_V6, ///< IPv6 协议
|
|
IP_VER_MAX
|
|
} IP_VERSION;
|
|
|
|
typedef enum {
|
|
OBJ_TYPE_SERVER = 0, ///< 地址对象
|
|
OBJ_TYPE_ADDR, ///< 服务对象
|
|
OBJ_TYPE_DATETIME, ///< 日期时间对象
|
|
OBJ_TYPE_MAX
|
|
} OBJ_TYPES;
|
|
|
|
typedef enum {
|
|
MODE_NONE = 0, ///< 不重复
|
|
MODE_EVERY_DAY = 1, ///< 每天重复
|
|
MODE_EVERY_MONTH_DAY = 2, ///< 每月重复
|
|
MODE_EVERY_YEAR_DAY = 3, ///< 每年重复
|
|
MODE_WORKDAY = 4, ///< 工作日重复
|
|
MODE_HOLIDAY = 5, ///< 节假日重复
|
|
MODE_WEEKEND = 6, ///< 周末重复
|
|
MODE_MONTH_LAST_DAY = 7, ///< 每月最后一天重复
|
|
MODE_MONTH_FIRST_DAY = 8, ///< 每月第一天重复
|
|
MODE_WEEKDAY = 9, ///< 非周末重复
|
|
MODE_MAX
|
|
} REPEAT_MODE;
|
|
|
|
typedef struct {
|
|
__be32 ip4_addr; ///< IPv4 地址
|
|
} IP4_ADDR, *PIP4_ADDR;
|
|
|
|
typedef struct {
|
|
union {
|
|
unsigned char addr8[16]; ///< IPv6 地址, 字节表示形式
|
|
__be16 addr16[8]; ///< IPv6 地址, 双字节表示形式
|
|
__be32 addr32[4]; ///< IPv6 地址, 4字节表示形式
|
|
} addr;
|
|
} IP6_ADDR, *PIP6_ADDR;
|
|
|
|
typedef struct {
|
|
union {
|
|
IP4_ADDR addr_v4; ///< IPv4 地址
|
|
IP6_ADDR addr_v6; ///< IPv6 地址
|
|
} min_addr; ///< 最小 IP 地址
|
|
union {
|
|
IP4_ADDR addr_v4; ///< IPv4 地址
|
|
IP6_ADDR addr_v6; ///< IPv6 地址
|
|
} max_addr; ///< 最大 IP 地址
|
|
IP_VERSION ip_version; ///< IP地址类型
|
|
unsigned int net_mask; ///< IPv6 子网掩码, :/24 格式
|
|
const char* str_val; ///< 字符串配置值
|
|
} ADDR_OBJECT, *PADDR_OBJECT;
|
|
|
|
typedef struct {
|
|
__be16 min_port; ///< 最小端口
|
|
__be16 max_port; ///< 最大端口
|
|
int pro_type; ///< 协议类型
|
|
const char* str_val; ///< 字符串配置值
|
|
} SVR_OBJECT, *PSVR_OBJECT;
|
|
|
|
typedef struct {
|
|
long min_time; ///< 起始时间
|
|
long max_time; ///< 终止时间
|
|
REPEAT_MODE rep_mode; ///< 重复模式
|
|
const char* str_val; ///< 字符串配置值
|
|
} DT_OBJECT, *PDT_OBJECT;
|
|
|
|
typedef struct {
|
|
char memTag[8]; ///< 内存标志
|
|
OBJ_TYPES type; ///< 对象类型
|
|
int ref_count; ///< 对象引用计数
|
|
int skb_mark; ///< 业务Mark
|
|
int ctx_num; ///< 对象数目
|
|
union {
|
|
DT_OBJECT dt_obj[MAX_OBJ_CONTENT];
|
|
SVR_OBJECT svr_obj[MAX_OBJ_CONTENT];
|
|
ADDR_OBJECT addr_obj[MAX_OBJ_CONTENT];
|
|
} objs;
|
|
} OBJECT_K, *POBJECT_K;
|
|
|
|
typedef struct {
|
|
char name[MAX_NAME_LEN]; ///< 对象名称
|
|
char desc[MAX_DESC]; ///< 对象说明
|
|
int prio; ///< 优先级
|
|
int obj_index; ///< 对象共享内存中的索引
|
|
pthread_mutex_t lock; ///< 对象锁
|
|
UT_hash_handle hh; ///< Hash链表头
|
|
} CMHI_OBJECT, *PCMHI_OBJECT;
|
|
|
|
typedef struct {
|
|
char session[MAX_SESSION]; ///< 对象分页sessionS
|
|
|
|
UT_array *name_list;
|
|
long last_time;
|
|
|
|
UT_hash_handle hh; ///< Hash链表头
|
|
} SPLIT_PAGE, *PSPLIT_PAGE;
|
|
|
|
#endif |