secgateway/Product/user/object_manager/object_manager.h

119 lines
4.3 KiB
C
Raw Normal View History

#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