diff --git a/.clang-format b/.clang-format index 770640c..e7a61da 100644 --- a/.clang-format +++ b/.clang-format @@ -72,7 +72,7 @@ BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: BeforeColon BreakAfterJavaFieldAnnotations: false BreakStringLiterals: true -ColumnLimit: 120 +ColumnLimit: 140 CommentPragmas: '^ IWYU pragma:' CompactNamespaces: true ConstructorInitializerAllOnOneLineOrOnePerLine: true @@ -135,7 +135,7 @@ ObjCSpaceBeforeProtocolList: true PenaltyBreakAssignment: 1000 PenaltyBreakBeforeFirstCallParameter: 1 PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 +PenaltyBreakFirstLessLess: 140 PenaltyBreakString: 1000 PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 1000000 diff --git a/CMakeLists.txt b/CMakeLists.txt index ea4d8d5..94821b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,9 +131,21 @@ ENDIF () IF (USED_SQLITE) MESSAGE("Select Option USED_SQLITE") + LIST(APPEND COMMON_DEFINE "-DSQLITE_ON") +ENDIF () + +IF (USED_MYSQL) + MESSAGE("Select Option USED_MYSQL") + LIST(APPEND COMMON_DEFINE "-DUSED_MYSQL") +ENDIF () + +IF (USED_REDIS) + MESSAGE("Select Option USED_REDIS") + LIST(APPEND COMMON_DEFINE "-DUSED_REDIS") ENDIF () IF (USED_SQLITE_CRYPTO) + LIST(APPEND COMMON_DEFINE "-DSQLITE_CRYPTO_ON") MESSAGE("Select Option USED_SQLITE_CRYPTO") ENDIF () diff --git a/config/vcpe.cfg b/config/vcpe.cfg index 2a7bb71..b8b3d19 100644 --- a/config/vcpe.cfg +++ b/config/vcpe.cfg @@ -40,8 +40,8 @@ application: mysql_passwd = "AES@5/BQyUIfVxgV9BZAz/D3Rg=="; # mysql 数据库密码 mysql_database = "test"; # mysql 数据库名称 - sqlite_dbname = "vcpe.db"; # sqlite3 数据库文件名 - sqlite_passwd = "test123"; # sqlite3 数据库密码 + sqlite_dbname = "/home/hx/vcpe.db"; # sqlite3 数据库文件名 + sqlite_passwd = ""; # sqlite3 数据库密码 }; # MQ 相关配置 diff --git a/srcs/libs/CMakeLists.txt b/srcs/libs/CMakeLists.txt index b805af6..9fbed15 100644 --- a/srcs/libs/CMakeLists.txt +++ b/srcs/libs/CMakeLists.txt @@ -10,7 +10,7 @@ IF (USED_SQLITE_CRYPTO) ENDIF () INCLUDE_DIRECTORIES(include ../opendhcp183 mongoose - ./ ./include ../lwip/src/include ../lwip/src/arch_linux/include ../include) + ./ ./include ../lwip/src/include ../lwip/src/arch_linux/include ../include) FILE(GLOB C_HEADS ./include/network/*.h include/*.h include/uthash/*.h include/s2j/*.h vector/*.h ${CMAKE_BINARY_DIR}/*.h ${PROJECT_BINARY_DIR}/*.h) AUX_SOURCE_DIRECTORY(json C_SRC) @@ -40,22 +40,13 @@ IF (USED_HTTP_SVR) AUX_SOURCE_DIRECTORY(mongoose C_SRC) ENDIF () -IF (USED_REDIS) - ADD_DEFINITIONS(-DUSED_REDIS) -ENDIF () - IF (USED_SQLITE) - ADD_DEFINITIONS(-DSQLITE_ON) + LIST(APPEND C_SRC database/database.c) IF (SQLITE_CRYPTO_ON) - ADD_DEFINITIONS(-DSQLITE_CRYPTO_ON) AUX_SOURCE_DIRECTORY(database/sqlite3 C_SRC) ENDIF () ENDIF () -IF (USED_MYSQL) - ADD_DEFINITIONS(-DUSED_MYSQL) -ENDIF () - SET(CMAKE_C_STANDARD 99) SET_SOURCE_FILES_PROPERTIES(misc/zvector.c PROPERTIES COMPILE_FLAGS "-Wall -Wextra -flto") @@ -63,7 +54,7 @@ SET_SOURCE_FILES_PROPERTIES(mongoose/mongoose.c PROPERTIES COMPILE_FLAGS "-Wall IF (USED_SQLITE_CRYPTO) SET_SOURCE_FILES_PROPERTIES(database/sqlite3/sqlite3.c PROPERTIES - COMPILE_FLAGS "-DSQLITE_HAS_CODEC \ + COMPILE_FLAGS "-DSQLITE_HAS_CODEC \ -DSQLCIPHER_CRYPTO_OPENSSL -DSQLITE_OS_UNIX=1 \ -D_HAVE_SQLITE_CONFIG_H -DBUILD_sqlite -DNDEBUG -DSQLITE_THREADSAFE=1 \ -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT \ @@ -71,7 +62,11 @@ IF (USED_SQLITE_CRYPTO) -DSQLITE_HAVE_ZLIB=1 -DSQLITE_TEMP_STORE=2") ENDIF () -ADD_DEFINITIONS(${COMMON_DEFINE} -DMG_ARCH=MG_ARCH_UNIX -DMG_ENABLE_OPENSSL=1) +ADD_DEFINITIONS(${COMMON_DEFINE}) + +IF (USED_HTTP_SVR) + ADD_DEFINITIONS(-DMG_ARCH=MG_ARCH_UNIX -DMG_ENABLE_OPENSSL=1) +ENDIF () ADD_LIBRARY(${LIB_PROJECT_TARGET} ${C_SRC} ${C_HEADS}) diff --git a/srcs/libs/include/database.h b/srcs/libs/include/database.h index ac0a096..006752c 100644 --- a/srcs/libs/include/database.h +++ b/srcs/libs/include/database.h @@ -8,10 +8,9 @@ extern "C" { #endif -int db_redis_init(void); -int db_mysql_init(void); -void *get_mysql_handle(); -void db_mysql_uninit(); +int db_sqlite3_init(); +void db_sqlite3_uninit(); +int db_sqlite3_sql_exec(const char *pSqlCmd, void *pCallback, void *pData, char **pErr); #ifdef __cplusplus } #endif diff --git a/srcs/libs/include/user_errno.h b/srcs/libs/include/user_errno.h index c552535..49993a9 100644 --- a/srcs/libs/include/user_errno.h +++ b/srcs/libs/include/user_errno.h @@ -8,67 +8,69 @@ extern "C" { #endif -#define DEF_ERR_CODE(ERR_CODE) \ - ERR_CODE(ERR_SUCCESS, 0, "成功") \ - ERR_CODE(ERR_INPUT_PARAMS, 1, "输入参数错误") \ - ERR_CODE(ERR_UN_SUPPORT, 2, "不支持的操作") \ - ERR_CODE(ERR_CALL_SHELL, 3, "调用Shell命令失败") \ - ERR_CODE(ERR_ITEM_EXISTS, 4, "该内容已经存在") \ - ERR_CODE(ERR_ITEM_UNEXISTS, 5, "该内容不存在") \ - ERR_CODE(ERR_SYS_INIT, 6, "系统中断") \ - ERR_CODE(ERR_SYS_CALL, 7, "系统调用") \ - ERR_CODE(ERR_OPEN_FILE, 8, "打开文件失败") \ - ERR_CODE(ERR_READ_FILE, 9, "读取文件失败") \ - ERR_CODE(ERR_FILE_NOT_EXISTS, 10, "文件不存在") \ - ERR_CODE(ERR_FILE_LOCKED, 11, "文件被锁定") \ - ERR_CODE(ERR_GET_FILE_SIZE, 12, "获取文件大小失败") \ - ERR_CODE(ERR_COPY_FILE, 13, "复制文件失败") \ - ERR_CODE(ERR_MALLOC_MEMORY, 14, "分配内存失败") \ - ERR_CODE(ERR_MMAP_MEMORY, 15, "共享内存失败") \ - ERR_CODE(ERR_EVP_KEY_SIZE, 16, "秘钥大小不正确") \ - ERR_CODE(ERR_UNSUP_EVP_TYPE, 17, "不支持的加解密算法") \ - ERR_CODE(ERR_EVP_INIT_KEY, 18, "初始化秘钥失败") \ - ERR_CODE(ERR_EVP_UPDATE, 19, "加解密数据失败") \ - ERR_CODE(ERR_EVP_FINALE, 20, "错误的加解密结果") \ - ERR_CODE(ERR_EVP_CREATE_CTX, 21, "初始化加解密失败") \ - ERR_CODE(ERR_AES_KEYGEN, 22, "AES秘钥失败") \ - ERR_CODE(ERR_EVP_ENCRYPTION, 23, "加密失败") \ - ERR_CODE(ERR_EVP_DECRYPTION, 24, "解密失败") \ - ERR_CODE(ERR_CONFIG_INIT, 25, "配置文件初始化失败") \ - ERR_CODE(ERR_UNCOMPATIBILITY_TYPE, 26, "未兼容的类型") \ - ERR_CODE(ERR_STRING_TO_NUMBER, 27, "字符串转数字失败") \ - ERR_CODE(ERR_UNKNOWN_CFG_ID, 28, "未识别的配置项") \ - ERR_CODE(ERR_ZLOG_INIT, 29, "日志系统初始化失败") \ - ERR_CODE(ERR_SYS_GET_CPU_INFO, 30, "获取CPU信息失败") \ - ERR_CODE(ERR_SYS_NOT_FOUND_CPU, 31, "找不到CPU信息") \ - ERR_CODE(ERR_SYS_DISK_GET_INFO, 32, "获取磁盘空间占用信息失败") \ - ERR_CODE(ERR_SYS_IPMI_UNSUP, 33, "服务器IPMI接口不支持") \ - ERR_CODE(ERR_SYS_SENSOR_GET_INFO, 34, "获取传感器信息失败") \ - ERR_CODE(ERR_DB_CONNECT, 35, "数据库连接失败") \ - ERR_CODE(ERR_MQ_CREATE_MQ, 36, "创建消息队列失败") \ - ERR_CODE(ERR_MQ_CREATE_REP, 37, "创建REP消息队列失败") \ - ERR_CODE(ERR_MQ_BIND_SOCKET, 38, "消息队列BIND Socket失败") \ - ERR_CODE(ERR_MQ_CONN_SERVER, 39, "消息队列连接服务器失败") \ - ERR_CODE(ERR_MQ_SEND_MSG, 40, "消息队列发送消息失败") \ - ERR_CODE(ERR_JSON_CREAT_OBJ, 41, "创建JSON对象失败") \ - ERR_CODE(ERR_JSON_PARSE_OBJ, 42, "解析JSON对象失败") \ - ERR_CODE(ERR_JSON_VALID_SCH, 43, "JSON数据验证失败") \ - ERR_CODE(ERR_CREATE_NETIF, 44, "创建网络接口失败") \ - ERR_CODE(ERR_CREATE_PPPOE_NETIF, 45, "创建PPPoE网络接口失败") \ - ERR_CODE(ERR_CREATE_PPP_SESSION, 46, "创建PPP连接失败") \ - ERR_CODE(ERR_MISC_GET_IPADDR, 47, "获取网卡IP地址失败") \ - ERR_CODE(ERR_MISC_GET_NETMASK, 48, "获取网卡子网掩码失败") \ - ERR_CODE(ERR_MISC_GET_GATEWAY, 49, "获取网卡网关地址失败") \ - ERR_CODE(ERR_MISC_GET_MACADDR, 50, "获取网卡MAC地址失败") \ - ERR_CODE(ERR_MENU_EXIT, 51, "菜单执行完后自动退出") \ - ERR_CODE(ERR_HTTP_UNSUP_METHOD, 52, "不支持的 HTTP 请求方法") \ - ERR_CODE(ERR_HTTP_UNSUP_PAGE, 53, "找不到 HTTP 服务") \ - ERR_CODE(ERR_PROTO_DECODE, 54, "HTTP 协议解析失败") \ - ERR_CODE(ERR_MSG_CONTENT, 55, "msgContent内容不正确") \ - ERR_CODE(ERR_SOCK_CREATE, 56, "创建套接字失败") \ - ERR_CODE(ERR_SOCK_SETOPT, 57, "设置套接字参数失败") +#define DEF_ERR_CODE(ERR_CODE) \ + ERR_CODE(ERR_SUCCESS, "成功") \ + ERR_CODE(ERR_INPUT_PARAMS, "输入参数错误") \ + ERR_CODE(ERR_UN_SUPPORT, "不支持的操作") \ + ERR_CODE(ERR_CALL_SHELL, "调用Shell命令失败") \ + ERR_CODE(ERR_ITEM_EXISTS, "该内容已经存在") \ + ERR_CODE(ERR_ITEM_UNEXISTS, "该内容不存在") \ + ERR_CODE(ERR_SYS_INIT, "系统中断") \ + ERR_CODE(ERR_SYS_CALL, "系统调用") \ + ERR_CODE(ERR_OPEN_FILE, "打开文件失败") \ + ERR_CODE(ERR_READ_FILE, "读取文件失败") \ + ERR_CODE(ERR_FILE_NOT_EXISTS, "文件不存在") \ + ERR_CODE(ERR_FILE_LOCKED, "文件被锁定") \ + ERR_CODE(ERR_GET_FILE_SIZE, "获取文件大小失败") \ + ERR_CODE(ERR_COPY_FILE, "复制文件失败") \ + ERR_CODE(ERR_MALLOC_MEMORY, "分配内存失败") \ + ERR_CODE(ERR_MMAP_MEMORY, "共享内存失败") \ + ERR_CODE(ERR_EVP_KEY_SIZE, "秘钥大小不正确") \ + ERR_CODE(ERR_UNSUP_EVP_TYPE, "不支持的加解密算法") \ + ERR_CODE(ERR_EVP_INIT_KEY, "初始化秘钥失败") \ + ERR_CODE(ERR_EVP_UPDATE, "加解密数据失败") \ + ERR_CODE(ERR_EVP_FINALE, "错误的加解密结果") \ + ERR_CODE(ERR_EVP_CREATE_CTX, "初始化加解密失败") \ + ERR_CODE(ERR_AES_KEYGEN, "AES秘钥失败") \ + ERR_CODE(ERR_EVP_ENCRYPTION, "加密失败") \ + ERR_CODE(ERR_EVP_DECRYPTION, "解密失败") \ + ERR_CODE(ERR_CONFIG_INIT, "配置文件初始化失败") \ + ERR_CODE(ERR_UNCOMPATIBILITY_TYPE, "未兼容的类型") \ + ERR_CODE(ERR_STRING_TO_NUMBER, "字符串转数字失败") \ + ERR_CODE(ERR_UNKNOWN_CFG_ID, "未识别的配置项") \ + ERR_CODE(ERR_ZLOG_INIT, "日志系统初始化失败") \ + ERR_CODE(ERR_SYS_GET_CPU_INFO, "获取CPU信息失败") \ + ERR_CODE(ERR_SYS_NOT_FOUND_CPU, "找不到CPU信息") \ + ERR_CODE(ERR_SYS_DISK_GET_INFO, "获取磁盘空间占用信息失败") \ + ERR_CODE(ERR_SYS_IPMI_UNSUP, "服务器IPMI接口不支持") \ + ERR_CODE(ERR_SYS_SENSOR_GET_INFO, "获取传感器信息失败") \ + ERR_CODE(ERR_DB_UNINIT, "数据库未连接") \ + ERR_CODE(ERR_DB_CONNECT, "数据库连接失败") \ + ERR_CODE(ERR_DB_SQL_EXEC, "数据库SQL命令执行失败") \ + ERR_CODE(ERR_MQ_CREATE_MQ, "创建消息队列失败") \ + ERR_CODE(ERR_MQ_CREATE_REP, "创建REP消息队列失败") \ + ERR_CODE(ERR_MQ_BIND_SOCKET, "消息队列BIND Socket失败") \ + ERR_CODE(ERR_MQ_CONN_SERVER, "消息队列连接服务器失败") \ + ERR_CODE(ERR_MQ_SEND_MSG, "消息队列发送消息失败") \ + ERR_CODE(ERR_JSON_CREAT_OBJ, "创建JSON对象失败") \ + ERR_CODE(ERR_JSON_PARSE_OBJ, "解析JSON对象失败") \ + ERR_CODE(ERR_JSON_VALID_SCH, "JSON数据验证失败") \ + ERR_CODE(ERR_CREATE_NETIF, "创建网络接口失败") \ + ERR_CODE(ERR_CREATE_PPPOE_NETIF, "创建PPPoE网络接口失败") \ + ERR_CODE(ERR_CREATE_PPP_SESSION, "创建PPP连接失败") \ + ERR_CODE(ERR_MISC_GET_IPADDR, "获取网卡IP地址失败") \ + ERR_CODE(ERR_MISC_GET_NETMASK, "获取网卡子网掩码失败") \ + ERR_CODE(ERR_MISC_GET_GATEWAY, "获取网卡网关地址失败") \ + ERR_CODE(ERR_MISC_GET_MACADDR, "获取网卡MAC地址失败") \ + ERR_CODE(ERR_MENU_EXIT, "菜单执行完后自动退出") \ + ERR_CODE(ERR_HTTP_UNSUP_METHOD, "不支持的 HTTP 请求方法") \ + ERR_CODE(ERR_HTTP_UNSUP_PAGE, "找不到 HTTP 服务") \ + ERR_CODE(ERR_PROTO_DECODE, "HTTP 协议解析失败") \ + ERR_CODE(ERR_MSG_CONTENT, "msgContent内容不正确") \ + ERR_CODE(ERR_SOCK_CREATE, "创建套接字失败") \ + ERR_CODE(ERR_SOCK_SETOPT, "设置套接字参数失败") -#define GENERATE_ENUM(ENUM, no, x) ENUM, +#define GENERATE_ENUM(ENUM, x) ENUM, typedef enum { DEF_ERR_CODE(GENERATE_ENUM) diff --git a/srcs/libs/include/zlog_module.h b/srcs/libs/include/zlog_module.h index de9e6a7..94f86d1 100644 --- a/srcs/libs/include/zlog_module.h +++ b/srcs/libs/include/zlog_module.h @@ -7,6 +7,7 @@ #ifdef __cplusplus extern "C" { #endif + #include enum { @@ -14,13 +15,13 @@ enum { }; typedef enum { - trace = ZLOG_LEVEL_TRACE, - debug = ZLOG_LEVEL_DEBUG, - info = ZLOG_LEVEL_INFO, + trace = ZLOG_LEVEL_TRACE, + debug = ZLOG_LEVEL_DEBUG, + info = ZLOG_LEVEL_INFO, notice = ZLOG_LEVEL_NOTICE, - warn = ZLOG_LEVEL_WARN, - error = ZLOG_LEVEL_ERROR, - fatal = ZLOG_LEVEL_FATAL + warn = ZLOG_LEVEL_WARN, + error = ZLOG_LEVEL_ERROR, + fatal = ZLOG_LEVEL_FATAL } ZLOG_LV; #define DEF_ZLOG_MOD(ZLOG_MOD) \ @@ -30,6 +31,7 @@ typedef enum { ZLOG_MOD(ZLOG_MOD_MISC, ZLOG_LEVEL_DEBUG, "MISC") \ ZLOG_MOD(ZLOG_MOD_WATCH, ZLOG_LEVEL_DEBUG, "WATCH") \ ZLOG_MOD(ZLOG_MOD_CONFIG, ZLOG_LEVEL_DEBUG, "CONFIG") \ + ZLOG_MOD(ZLOG_MOD_DB, ZLOG_LEVEL_DEBUG, "DB") \ ZLOG_MOD(ZLOG_MOD_NET, ZLOG_LEVEL_DEBUG, "NET") \ ZLOG_MOD(ZLOG_MOD_CRYPTO, ZLOG_LEVEL_DEBUG, "CRYPTO") \ ZLOG_MOD(ZLOG_MOD_MQ, ZLOG_LEVEL_DEBUG, "MQ") \ @@ -88,8 +90,11 @@ typedef enum { } while (0) zlog_category_t *zlog_get_mod_cat(ZLOG_MOD_NAME logMod); -int zlog_verify_level(int level, ZLOG_MOD_NAME logMod); -const char *zlog_vni_tag_get(); + +int zlog_verify_level(int level, ZLOG_MOD_NAME logMod); + +const char *zlog_vni_tag_get(); + #ifdef __cplusplus } #endif diff --git a/srcs/libs/init/init_runtime.c b/srcs/libs/init/init_runtime.c index 75c2473..e974c6d 100644 --- a/srcs/libs/init/init_runtime.c +++ b/srcs/libs/init/init_runtime.c @@ -19,6 +19,9 @@ #include "lib_config.h" #include "prj_config.h" #include "zlog_module.h" +#ifdef SQLITE_ON +#include "database.h" +#endif #ifdef ZEROMQ_ON #include "msg_queue.h" #endif @@ -137,6 +140,10 @@ int user_init(const char *pAppCfgFile, const char *pCfgDirectory, const char *pK if (cfg_get_hardware_watch_enable()) { init_hardware(); } +#ifdef SQLITE_ON + db_sqlite3_init(); +#endif + #ifdef ZEROMQ_ON if ((ret = mq_init()) != ERR_SUCCESS) { LOG_MOD(error, ZLOG_MOD_INIT, "Message queue init error: %d\n", ret); @@ -157,6 +164,9 @@ int user_init(const char *pAppCfgFile, const char *pCfgDirectory, const char *pK void user_uninit() { if (g_isInited) { task_manager_exit(); +#ifdef SQLITE_ON + db_sqlite3_uninit(); +#endif #ifdef HTTPSERVER_ON http_svr_uinit(); #endif diff --git a/srcs/libs/misc/err.c b/srcs/libs/misc/err.c index a0262d8..6db4d08 100644 --- a/srcs/libs/misc/err.c +++ b/srcs/libs/misc/err.c @@ -4,8 +4,8 @@ #include #include "common.h" -#define MAX_DESC_LENGTH (256) -#define GENERATE_STRING(STRING, no, desc) {#STRING, desc}, +#define MAX_DESC_LENGTH (256) +#define GENERATE_STRING(STRING, desc) {#STRING, desc}, static const char *g_enumStrVal[][MAX_DESC_LENGTH] = { DEF_ERR_CODE(GENERATE_STRING) {"ERR_UNKNOWN", "未知错误"}, diff --git a/srcs/service/dhcpd/dhcpd_network.c b/srcs/service/dhcpd/dhcpd_network.c index 53896a6..4c5f755 100644 --- a/srcs/service/dhcpd/dhcpd_network.c +++ b/srcs/service/dhcpd/dhcpd_network.c @@ -18,7 +18,6 @@ #include "network/vlan.h" #include "dhcp_options.h" #include "config.h" -#include "ip_pool.h" #include "user_mgr.h" #define PKG_MMAP_BLOCKSIZ (1 << 22) @@ -99,13 +98,13 @@ static struct sock_filter g_filterCode[] = { {0x6, 0, 0, 0x00000000}, #endif #if 0 - // create by: tcpdump "vxlan" -dd - {0x28, 0, 0, 0x0000000c}, - {0x15, 2, 0, 0x00008100}, - {0x15, 1, 0, 0x000088a8}, - {0x15, 0, 1, 0x00009100}, - {0x6, 0, 0, 0x00040000}, - {0x6, 0, 0, 0x00000000}, + // create by: tcpdump "vxlan" -dd + {0x28, 0, 0, 0x0000000c}, + {0x15, 2, 0, 0x00008100}, + {0x15, 1, 0, 0x000088a8}, + {0x15, 0, 1, 0x00009100}, + {0x6, 0, 0, 0x00040000}, + {0x6, 0, 0, 0x00000000}, #endif // region BPF code // create by: tcpdump "vlan and udp and port 67 and port 68" -dd @@ -444,6 +443,7 @@ int dhcpd_init() { dhcp_user_mgr_init(); dhcp_option_cfg_init(); + dhcp_lease_init(); uv_udp_init(get_task_manager(), &uvRaw); uv_udp_open(&uvRaw, sock); diff --git a/srcs/service/dhcpd/include/lease.h b/srcs/service/dhcpd/include/lease.h index 1220ff3..8b4acf6 100644 --- a/srcs/service/dhcpd/include/lease.h +++ b/srcs/service/dhcpd/include/lease.h @@ -24,6 +24,7 @@ typedef struct { U32 express; } LEASE_CACHE, *PLEASE_CACHE; +int dhcp_lease_init(); #ifdef __cplusplus } #endif diff --git a/srcs/service/dhcpd/lease.c b/srcs/service/dhcpd/lease.c index 2f7a822..43a83bb 100644 --- a/srcs/service/dhcpd/lease.c +++ b/srcs/service/dhcpd/lease.c @@ -3,6 +3,41 @@ // #include "lease.h" +#include "user_errno.h" +#include "zlog_module.h" +#include "database.h" + +#define LEASE_DB_NAME ("lease") static PMAC_FILTER g_allowTbl = NULL; -static PMAC_FILTER g_blackListTbl = NULL; \ No newline at end of file +static PMAC_FILTER g_blackListTbl = NULL; + +#define CREATE_LEASE_TABLE(name) \ + "CREATE TABLE IF NOT EXISTS " #name \ + " ( id INTEGER PRIMARY KEY AUTOINCREMENT," \ + " uid INTEGER NOT NULL," \ + " mac CHAR(20) NOT NULL," \ + " ip INTEGER NOT NULL," \ + " lease INTEGER NOT NULL," \ + " create INTEGER NOT NULL," \ + " netmask INTEGER," \ + " gateway INTEGER," \ + " dns1 INTEGER," \ + " dns2 INTEGER," \ + " server INTEGER NOT NULL," \ + " hostname CHAR(64) DEFAULT '' NOT NULL," \ + " keyType INTEGER NOT NULL" \ + ");" \ + "CREATE INDEX IF NOT EXISTS " #name "_index ON " #name " (uid, mac);" + +int dhcp_lease_init() { + int rc = 0; + + rc = db_sqlite3_sql_exec(CREATE_LEASE_TABLE(lease), NULL, NULL, NULL); + + if (rc != ERR_SUCCESS) { + return rc; + } + + return ERR_SUCCESS; +} \ No newline at end of file