#ifndef _OBJECT_MANAGER_H #define _OBJECT_MANAGER_H #include #include #include #include #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