这是lanDns通过web设置的.h文件,其中包含用到的结构体,函数等信息,用于完善我的CLI程序,现在你只用把添加一个lanDns的CLI程序写出来就行,设置已有的lanDns的程序先不写
#ifndef DM_DNSPROXYSHELL_H
#define DM_DNSPROXYSHELL_H
#include <stdint.h>
#include “common/applError.h”
#include “midware/tpConfig.h”
#ifdef __cplusplus
extern “C” {
#endif
#define DNSPROXY_LEN_SWITCH 8 /* “on” / “off” /
#define DNSPROXY_LEN_STATUS 8 / “on” / “off” /
#define DNSPROXY_LEN_ID 16 / 规则/实例 ID */
/* 名称类 /
#define DNSPROXY_LEN_NAME32 32 / 短名称(规则名等) /
#define DNSPROXY_LEN_NAME64 64 / 长名称(服务器名等) */
/* DNSSEC 特有 /
#define DNSPROXY_LEN_ACTION 16 / DNSSEC 行为: validate/drop/pass 等 /
#define DNSPROXY_LEN_VERIFIED_STATUS 32 / DNSSEC诊断查询返回的状态 */
/* LAN DNS 特有 /
#define DNSPROXY_LEN_TYPE 16 / 规则类型: forward/ip/cname 等 */
#define DNSPROXY_LEN_INTERFACES 512 /网络接口列表长度/
#define DNSPROXY_MAX_RULES 120
/* 地址/URL /
#define DNSPROXY_LEN_SERVER_IP 64 / DNSSEC/DoT 单个IPv4/IPv6/主机名 /
#define DNSPROXY_LEN_SERVER_URL 160 / DoHURL */
/* 域名/别名 */
#define DNSPROXY_LEN_DOMAIN 128
#define DNSPROXY_LEN_CNAME 128
/* JSON/CSV 列表(原样存储) */
#define DNSPROXY_LEN_JSON256 256
#define DNSPROXY_LEN_IFLIST DNSPROXY_LEN_JSON256
#define DNSPROXY_LEN_ALIASES DNSPROXY_LEN_JSON256
#define DNSPROXY_LEN_LAN_NETWORKS DNSPROXY_LEN_JSON256
#define DNSPROXY_LEN_DNS_SERVER DNSPROXY_LEN_JSON256
#define DNSPROXY_LEN_IPV4_ADDRS DNSPROXY_LEN_JSON256
#define DNSPROXY_LEN_IPV6_ADDRS DNSPROXY_LEN_JSON256
#define DNSPROXYSHELL_SUB_NAME “dnsProxyShell”
/* LAN变更通知 /
#define DNSSERVER_LAN_ACTION_ADD 0
#define DNSSERVER_LAN_ACTION_DELETE 1
#define DNSSERVER_LAN_ACTION_MODIFY 2
#define DNSSERVER_LAN_ACTION_IP_CHANGE 3
//
/ DNSSEC (config) /
//
typedef struct
{
char switch_s[DNSPROXY_LEN_SWITCH]; / “on”/“off” /
char action[DNSPROXY_LEN_ACTION]; / validate/drop/pass 等 /
char server1[DNSPROXY_LEN_SERVER_IP];
char server2[DNSPROXY_LEN_SERVER_IP];
uint32_t mask; / bit0 switch, bit1 action, bit2 server1, bit3 server2 */
} CFG_DNSSEC_GBL_T;
/* 用于表示DNSSEC诊断查询返回的单条IP和状态 */
typedef struct
{
char ip[DNSPROXY_LEN_SERVER_IP];
char status[DNSPROXY_LEN_VERIFIED_STATUS];
} DNSSEC_DIAGNOSE_IP_STATUS_T;
/* 用于在OP层和HTTP层之间传递DNSSEC诊断的完整结果,这个结构对应最终JSON响应中的 ‘result’ 对象 */
typedef struct
{
int result_count;
DNSSEC_DIAGNOSE_IP_STATUS_T *results; // 动态数组
} DNSSEC_DIAGNOSE_RESULT_T;
APPL_ERRCODE dmDnssecCfgCheck(const CFG_DNSSEC_GBL_T *cfg);
APPL_ERRCODE dmDnssecCfgGet(CFG_DNSSEC_GBL_T *cfg);
APPL_ERRCODE dmDnssecCfgSet(const CFG_DNSSEC_GBL_T *cfg);
APPL_ERRCODE opDnsProxyShellDnssecDiagnose(const char *domain, const char *type, const char *dns_server, DNSSEC_DIAGNOSE_RESULT_T **result_out);
void opDnsProxyShellDnssecResultFree(DNSSEC_DIAGNOSE_RESULT_T *result);
//
/* DoH (config) /
//
typedef struct
{
char switch_s[DNSPROXY_LEN_SWITCH];
uint32_t mask; / bit0 switch */
} CFG_DOH_GBL_T;
typedef struct
{
int index; /* 由 key 后缀或 id 解析 /
char id[DNSPROXY_LEN_ID];
char name[DNSPROXY_LEN_NAME64];
char server[DNSPROXY_LEN_SERVER_URL];
char status[DNSPROXY_LEN_STATUS]; / “on”/“off” /
uint8_t custom; / 0/1 */
} CFG_DOH_SERVER_T;
typedef struct
{
uint32_t max_rules;
} CFG_DOH_META_T;
APPL_ERRCODE dmDohCfgGlobalGet(CFG_DOH_GBL_T *cfg);
APPL_ERRCODE dmDohCfgGlobalSet(const CFG_DOH_GBL_T *cfg);
APPL_ERRCODE dmDohCfgServerGetAll(CFG_DOH_SERVER_T ***pp);
APPL_ERRCODE dmDohCfgServerListFree(CFG_DOH_SERVER_T **lst);
APPL_ERRCODE dmDohCfgServerAdd(const CFG_DOH_SERVER_T *ent);
APPL_ERRCODE dmDohCfgServerSet(const CFG_DOH_SERVER_T ent); / by index or id */
APPL_ERRCODE dmDohCfgServerDelByKey(const char *key);
APPL_ERRCODE dmDohCfgMetaGet(CFG_DOH_META_T *meta);
APPL_ERRCODE dmDohCfgMetaSet(const CFG_DOH_META_T *meta);
APPL_ERRCODE dmDohCfgServerDelById(unsigned id);
void dmDohCfgServerKeyGetById(unsigned id, char *out, size_t outlen);
//
/* DoT (config) */
//
typedef struct
{
char switch_s[DNSPROXY_LEN_SWITCH];
uint32_t mask;
} CFG_DOT_GBL_T;
typedef struct
{
int index;
char id[DNSPROXY_LEN_ID];
char name[DNSPROXY_LEN_NAME64];
char server1[DNSPROXY_LEN_SERVER_IP];
char server2[DNSPROXY_LEN_SERVER_IP];
char status[DNSPROXY_LEN_STATUS];
uint8_t custom;
} CFG_DOT_SERVER_T;
typedef struct
{
uint32_t max_rules;
} CFG_DOT_META_T;
APPL_ERRCODE dmDotCfgGlobalGet(CFG_DOT_GBL_T *cfg);
APPL_ERRCODE dmDotCfgGlobalSet(const CFG_DOT_GBL_T *cfg);
APPL_ERRCODE dmDotCfgServerGetAll(CFG_DOT_SERVER_T ***pp);
APPL_ERRCODE dmDotCfgServerListFree(CFG_DOT_SERVER_T **lst);
APPL_ERRCODE dmDotCfgServerAdd(const CFG_DOT_SERVER_T *ent);
APPL_ERRCODE dmDotCfgServerSet(const CFG_DOT_SERVER_T *ent);
APPL_ERRCODE dmDotCfgServerDelByKey(const char *key);
APPL_ERRCODE dmDotCfgMetaGet(CFG_DOT_META_T *meta);
APPL_ERRCODE dmDotCfgMetaSet(const CFG_DOT_META_T *meta);
APPL_ERRCODE dmDotCfgServerDelById(unsigned id);
void dmDotCfgServerKeyGetById(unsigned id, char *out, size_t outlen);
//
/* DNS Cache (config) /
//
typedef struct
{
char switch_s[DNSPROXY_LEN_SWITCH];
uint32_t ttl;
uint32_t mask; / bit0 switch, bit1 ttl */
} CFG_DNSCACHE_GBL_T;
APPL_ERRCODE dmDnsCacheCfgGet(CFG_DNSCACHE_GBL_T *cfg);
APPL_ERRCODE dmDnsCacheCfgSet(const CFG_DNSCACHE_GBL_T *cfg);
//
/* DNS Override (config) /
//
typedef struct
{
char switch_s[DNSPROXY_LEN_SWITCH];
char server1[DNSPROXY_LEN_SERVER_IP];
char server2[DNSPROXY_LEN_SERVER_IP];
char interface_list[DNSPROXY_LEN_IFLIST];
uint32_t mask; / bit0 switch, bit1 server1, bit2 server2, bit3 interfaces */
} CFG_DNSOVERRIDE_GBL_T;
/* DNS Override与Interface映射结构 /
typedef struct
{
char interface[DNSPROXY_LEN_NAME32]; / 接口名称 /
uint32_t index; / 索引,用于排序 */
} CFG_DNSOVR_IF_MAP_T;
APPL_ERRCODE dmDnsOvrCfgGet(CFG_DNSOVERRIDE_GBL_T *cfg);
APPL_ERRCODE dmDnsOvrCfgSet(const CFG_DNSOVERRIDE_GBL_T *cfg);
/* Interface映射函数声明 */
APPL_ERRCODE dmDnsOvrIfMapAdd(const char *interface, uint32_t index);
APPL_ERRCODE dmDnsOvrIfMapDelAll(void);
APPL_ERRCODE dmDnsOvrIfMapGetAll(char ***pp);
void dmDnsOvrIfMapListFree(char **lst);
//
/* LAN DNS Server (rules, config) /
//
typedef struct
{
int index;
char id[DNSPROXY_LEN_ID];
char name[DNSPROXY_LEN_NAME32]; / 规则名/显示名 /
char type[DNSPROXY_LEN_TYPE]; / forward/ip/cname /
char domain[DNSPROXY_LEN_DOMAIN];
char aliases[DNSPROXY_LEN_ALIASES];
char status[DNSPROXY_LEN_STATUS]; / “on”/“off” */
char lan_networks[DNSPROXY_LEN_LAN_NETWORKS];
char dns_server[DNSPROXY_LEN_DNS_SERVER];
uint32_t ttl;
char cname[DNSPROXY_LEN_CNAME];
char ipv4_addrs[DNSPROXY_LEN_IPV4_ADDRS];
char ipv6_addrs[DNSPROXY_LEN_IPV6_ADDRS];
char dns_server1[DNSPROXY_LEN_SERVER_IP];
char dns_server2[DNSPROXY_LEN_SERVER_IP];
} CFG_DNSSERVER_RULE_T;
typedef struct
{
uint32_t max_rules;
} CFG_DNSSERVER_META_T;
typedef struct
{
char interfaces[DNSPROXY_LEN_INTERFACES];
uint32_t mask;
} CFG_DNSPS_NETWORK_T;
/* DNS规则与aliases映射结构 /
typedef struct
{
char rule_id[DNSPROXY_LEN_ID]; / 关联的规则ID /
char alias[DNSPROXY_LEN_DOMAIN]; / 别名 /
uint32_t index; / 索引,用于排序 */
} CFG_DNSSERVER_ALIAS_MAP_T;
/* DNS规则与lan neteorks映射结构 /
typedef struct
{
char rule_id[DNSPROXY_LEN_ID]; / 关联的规则ID /
char lan_name[DNSPROXY_LEN_NAME32]; / LAN网络名称 /
uint32_t index; / 索引,用于排序 */
} CFG_DNSSERVER_LAN_MAP_T;
typedef struct
{
uint8_t rpz_activated; // 0=false, 1=true
} CFG_DNSPS_META_T;
//
/* EXTERN_PROTOTYPES */
//
#ifndef DNSPROXYSHELL_M_NAME
#define DNSPROXYSHELL_M_NAME “DM_DNSPROXYSHELL”
#endif
#define DNSPROXYSHELL_CALLOC(count, size) pal_calloc(count, size, DNSPROXYSHELL_M_NAME)
#define DNSPROXYSHELL_MALLOC(size) pal_alloc(size, DNSPROXYSHELL_M_NAME)
#define DNSPROXYSHELL_FREE(ptr) pal_free(ptr)
/* LAN DNS 规则操作 */
APPL_ERRCODE dmDnsServerRuleGetAll(CFG_DNSSERVER_RULE_T ***pp);
APPL_ERRCODE dmDnsServerRuleListFree(CFG_DNSSERVER_RULE_T **lst);
APPL_ERRCODE dmDnsServerRuleAdd(const CFG_DNSSERVER_RULE_T *ent);
APPL_ERRCODE dmDnsServerRuleSet(const CFG_DNSSERVER_RULE_T *ent);
APPL_ERRCODE dmDnsServerRuleDelByKey(const char *key);
APPL_ERRCODE dmDnsServerMetaGet(CFG_DNSSERVER_META_T *meta);
APPL_ERRCODE dmDnsServerMetaSet(CFG_DNSSERVER_META_T *meta);
APPL_ERRCODE dmDnsServerRuleDelById(unsigned id);
APPL_ERRCODE dmDnsProxyNetworkGet(CFG_DNSPS_NETWORK_T *cfg);
APPL_ERRCODE dmDnsProxyNetworkSet(const CFG_DNSPS_NETWORK_T *cfg);
APPL_ERRCODE dmDnsProxyDispToCIDR(const char *disp, char *out_cidr, size_t out_len);
APPL_ERRCODE dmDnsProxyUpdateNetworkInterfaces(void);
void dmDnsServerRuleKeyGetById(unsigned id, char *out, size_t outlen);
/* Alias映射函数声明 */
APPL_ERRCODE dmDnsServerAliasMapAdd(const char *rule_id, const char *alias, uint32_t index);
APPL_ERRCODE dmDnsServerAliasMapDelByRuleId(const char *rule_id);
APPL_ERRCODE dmDnsServerAliasMapGetByRuleId(const char *rule_id, char ***pp);
void dmDnsServerAliasMapListFree(char **lst);
/* LAN映射函数声明 */
APPL_ERRCODE dmDnsServerLanMapAdd(const char *rule_id, const char *lan_name, uint32_t index);
APPL_ERRCODE dmDnsServerLanMapDelByRuleId(const char *rule_id);
APPL_ERRCODE dmDnsServerLanMapGetByRuleId(const char *rule_id, char ***pp);
void dmDnsServerLanMapListFree(char **lst);
/* LAN变更通知接口 */
APPL_ERRCODE dmDnsServerNotifyLanChange(const char *lan_name, int action);
//
/* STATE getters (read-only) /
//
/ DNSSEC State /
typedef struct
{
char switch_s[DNSPROXY_LEN_SWITCH];
char action[DNSPROXY_LEN_ACTION];
char server1[DNSPROXY_LEN_SERVER_IP];
char server2[DNSPROXY_LEN_SERVER_IP];
uint32_t diagnose_code; / diagnosecode */
} STATE_DNSSEC_T;
APPL_ERRCODE dmStateDnssecGet(STATE_DNSSEC_T *st);
/* DoH State */
typedef struct
{
char switch_s[DNSPROXY_LEN_SWITCH];
uint32_t activeCount;
uint32_t max_rules;
} STATE_DOH_GBL_T;
typedef struct
{
int index;
char id[DNSPROXY_LEN_ID];
char name[DNSPROXY_LEN_NAME64];
char server[DNSPROXY_LEN_SERVER_URL];
char status[DNSPROXY_LEN_STATUS];
uint8_t custom;
} STATE_DOH_SERVER_T;
APPL_ERRCODE dmStateDohGlobalGet(STATE_DOH_GBL_T *st);
APPL_ERRCODE dmStateDohServerGetAll(STATE_DOH_SERVER_T ***pp);
APPL_ERRCODE dmStateDohServerListFree(STATE_DOH_SERVER_T **lst);
/* DoT State */
typedef struct
{
char switch_s[DNSPROXY_LEN_SWITCH];
uint32_t activeCount;
uint32_t max_rules;
} STATE_DOT_GBL_T;
typedef struct
{
int index;
char id[DNSPROXY_LEN_ID];
char name[DNSPROXY_LEN_NAME64];
char server_list[DNSPROXY_LEN_JSON256]; /* [“ip1”,“ip2”] 原样 */
char status[DNSPROXY_LEN_STATUS];
uint8_t custom;
} STATE_DOT_SERVER_T;
APPL_ERRCODE dmStateDotGlobalGet(STATE_DOT_GBL_T *st);
APPL_ERRCODE dmStateDotServerGetAll(STATE_DOT_SERVER_T ***pp);
APPL_ERRCODE dmStateDotServerListFree(STATE_DOT_SERVER_T **lst);
/* Cache State */
typedef struct
{
char switch_s[DNSPROXY_LEN_SWITCH];
uint32_t ttl;
uint32_t entriesIpv4;
uint32_t entriesIpv6;
} STATE_DNSCACHE_T;
APPL_ERRCODE dmStateDnsCacheGet(STATE_DNSCACHE_T *st);
/* Override State */
typedef struct
{
char switch_s[DNSPROXY_LEN_SWITCH];
char server1[DNSPROXY_LEN_SERVER_IP];
char server2[DNSPROXY_LEN_SERVER_IP];
char interface_list[DNSPROXY_LEN_IFLIST];
} STATE_DNSOVR_T;
APPL_ERRCODE dmStateDnsOverrideGet(STATE_DNSOVR_T *st);
/* DNS Server Aggregate State */
typedef struct
{
uint32_t activeRuleCount;
uint32_t totalrules;
uint32_t max_rules;
} STATE_DNSSERVER_AGGR_T;
/* DNS Server Rule State /
typedef struct
{
int index;
char id[DNSPROXY_LEN_ID];
char name[DNSPROXY_LEN_NAME32];
char type[DNSPROXY_LEN_TYPE]; / forward/ip/cname */
char domain[DNSPROXY_LEN_DOMAIN];
char aliases[DNSPROXY_LEN_ALIASES];
char status[DNSPROXY_LEN_STATUS];
char lan_networks[DNSPROXY_LEN_LAN_NETWORKS];
char dns_server[DNSPROXY_LEN_DNS_SERVER];
uint32_t ttl;
char cname[DNSPROXY_LEN_CNAME];
char ipv4_addrs[DNSPROXY_LEN_IPV4_ADDRS];
char ipv6_addrs[DNSPROXY_LEN_IPV6_ADDRS];
} STATE_DNSSERVER_RULE_T;
APPL_ERRCODE dmStateDnsServerAggGet(STATE_DNSSERVER_AGGR_T *st);
APPL_ERRCODE dmStateDnsServerRuleGetAll(STATE_DNSSERVER_RULE_T ***pp);
APPL_ERRCODE dmStateDnsServerRuleListFree(STATE_DNSSERVER_RULE_T **lst);
#ifdef __cplusplus
}
#endif
#endif
最新发布