112 lines
4.0 KiB
C
112 lines
4.0 KiB
C
#ifndef _OBJ_API_H
|
|
#define _OBJ_API_H
|
|
#ifdef __KERNEL__
|
|
#include <asm/atomic.h>
|
|
#include <linux/semaphore.h>
|
|
#include <linux/types.h>
|
|
|
|
#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 |