#ifndef _OBJ_API_H #define _OBJ_API_H #ifdef __KERNEL__ #include #include #include #include "../../common/common.h" #include "../../common/uthash.h" #define OBJ_DBG_DIR ("obj") typedef int (*belong_server_objs)(__be32, int); typedef int (*belong_dt_objs)(unsigned long, int); typedef enum { OBJ_TYPE_ADDR = 0, ///< 地址对象 OBJ_TYPE_SERVER, ///< 服务对象 OBJ_TYPE_DATETIME, ///< 日期时间对象 OBJ_TYPE_MAX } OBJ_TYPES; typedef enum { MODE_NONE = 1, ///< 不重复 MODE_EVERY_DAY = 2, ///< 每天重复 MODE_WORKDAY = 3, ///< 工作日重复 MODE_WEEKEND = 4, ///< 周末重复 MODE_WEEKDAY = 5, ///< 非周末重复 MODE_EVERY_MONTH_DAY = 6, ///< 每月重复 MODE_EVERY_YEAR_DAY = 7, ///< 每年重复 MODE_MONTH_LAST_DAY = 8, ///< 每月最后一天重复 MODE_HOLIDAY = 9, ///< 节假日重复 MODE_MAX } REPEAT_MODE; typedef enum { IP_V4 = 0, ///< IPv4 协议 IP_V6, ///< IPv6 协议 IP_VER_MAX } IP_VERSION; typedef struct { __be32 ip4_add; ///< IPv4 地址 unsigned char net_mask; ///< IPv4 子网掩码 FF.FF.FF.FF 格式 } IP4_ADDR, *PIP4_ADDR; typedef struct { union { unsigned char addr8[16]; ///< IPv6 地址, 字节表示形式 __be16 addr16[8]; ///< IPv6 地址, 双字节表示形式 __be32 addr32[4]; ///< IPv6 地址, 4字节表示形式 } addr; unsigned char net_mask; ///< IPv6 子网掩码, :/24 格式 } 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地址类型 struct list_head list; } ADDR_OBJ_CONTENT, *PADDR_OBJ_CONTENT; typedef struct { __be16 min_port; ///< 最小端口 __be16 max_port; ///< 最大端口 int pro_type; ///< 协议类型 struct list_head list; } SERVER_OBJ_CONTENT, *PSERVER_OBJ_CONTENT; typedef struct { unsigned long min_time; ///< 起始时间 unsigned long max_time; ///< 终止时间 REPEAT_MODE rep_mode; ///< 重复模式 struct list_head list; } DT_OBJ_CONTENT, *PDT_OBJ_CONTENT; typedef struct { struct list_head content; ///< 数据链表头 union { belong_server_objs callback; }; } OBJECT_DATA, *POBJECT_DATA; typedef struct { char name[MAX_NAME_LEN]; ///< 对象名称 char desc[MAX_PATH]; ///< 对象说明 OBJ_TYPES type; ///< 对象类型 POBJECT_DATA data; ///< 对象数据 atomic_t ref_count; ///< 对象引用计数 rwlock_t lock; ///< 对象锁 UT_hash_handle hh; ///< Hash链表头 } CMHI_OBJECT, *PCMHI_OBJECT; void obj_upgrade_dev_buffer(unsigned char* buf, unsigned int size); const char *obj_version(void); void object_init(void); void free_object(PCMHI_OBJECT pObj); PCMHI_OBJECT new_object(void); PCMHI_OBJECT create_server_object(const char *name); void cleanup_server_object(PCMHI_OBJECT pObj); int add_server_obj_data(PCMHI_OBJECT pObj, __be16 minPort, __be32 maxPort, int proType); int server_proc_init(void); int server_proc_uninit(void); #endif #endif