static CMM_RET getIntfNameAndDns(LOAD_MULTI_CFG *pCfg,char interface[], size_t interfaceSize, char intfName[], size_t intfNameSize, char dns[], size_t dnsSize)
{
#if 0
DM_NUM_STACK dhcpstack = EMPTY_STACK_NUM;
#endif
DM_NUM_STACK ipIntfStack = EMPTY_STACK_NUM;
DM_NUM_STACK pppstack = EMPTY_STACK_NUM;
DM_NUM_STACK ipcpstack = EMPTY_STACK_NUM;
DEV2_IP_INTF_OBJ ipIntfObj;
#if 0
DEV2_DHCPV4_CLIENT_OBJ dhcpObj;
#endif
DEV2_PPP_INTF_IPCP_OBJ ipcpObj;
DEV2_PPP_INTF_OBJ pppObj;
DEV2_DNS_RELAY_FWD_OBJ dnsObj;
CMM_RET ret = CMM_ERROR;
char IPCP_PATH[64] = {0};
int isPppInterface = 0;
const char *reqVersion = pCfg->ipVersion; // 测速IP版本(从配置提取)
const char *dnsTypeStr = "DNS_A"; // DNS类型字符串(替代枚举,核心修
TR143_DEBUG ("dns start");//gzy
#if defined(INCLUDE_QOE) && defined(INCLUDE_QOE_SPEEDTEST)
FILE *fp = NULL;
char dnsBuf[128] = {0};
#endif
/*接口名称获取 路径到系统接口名*/
if ((ret = RDP_WRAP(CMM_UI_INTERNAL, OID_DEV2, rsl_util_getObjFromFullpath(interface, OID_DEV2_IP_INTF,
sizeof(DEV2_IP_INTF_OBJ), &ipIntfStack, &ipIntfObj))) == CMM_OK)
{
CUTIL_STR_STRNCPY_NOCHECK(intfName, ipIntfObj.name, intfNameSize);
}
else if((ret = RDP_WRAP(CMM_UI_INTERNAL, OID_DEV2, rsl_util_getObjFromFullpath(interface, OID_DEV2_PPP_INTF,
sizeof(DEV2_PPP_INTF_OBJ), &pppstack, &pppObj))) == CMM_OK)
{
CUTIL_STR_STRNCPY_NOCHECK(intfName, pppObj.name, intfNameSize);
isPppInterface = 1;
}
else
{
TR143_PERROR(ret);
return CMM_INVALID_ARGUMENTS;
}
if(isPppInterface)
{
sprintf(IPCP_PATH, "%s%s.", interface, "IPCP");
if ((ret = RDP_WRAP(CMM_UI_INTERNAL, OID_DEV2, rsl_util_getObjFromFullpath(IPCP_PATH, OID_DEV2_PPP_INTF_IPCP,
sizeof(DEV2_PPP_INTF_IPCP_OBJ), &ipcpstack, &ipcpObj))) != CMM_OK)
{
TR143_PERROR(ret);
return CMM_INVALID_ARGUMENTS;
}
if(dns != NULL)
CUTIL_STR_STRNCPY_NOCHECK(dns, ipcpObj.DNSServers, dnsSize);
#ifdef INCLUDE_ECONET_TR143_SPEEDUP //Bug 671009 - pppoe拨号下,样机无法使用tr098节点进行tr143测速
INIT_INSTANCE_ID_STACK(&ipIntfStack);
while (CMM_OK == rdp_getNextObjStruct(CMM_UI_TR69, DEV2_IP_INTF, &ipIntfStack,
sizeof(DEV2_IP_INTF_OBJ), &ipIntfObj))
{
if(CUTIL_SAME_STR(ipIntfObj.name, pppObj.name))
{
rdp_getFullpathFromStackWithoutLock(CMM_UI_NULL, OID_DEV2_IP_INTF, &ipIntfStack, interface, interfaceSize);
TR143_DEBUG("after transfer, intf is %s", interface);
break;
}
}
#endif //INCLUDE_ECONET_TR143_SPEEDUP
}
else
{
/* Bugfix, do NOT get DNS Server from specific connection Object, User may use it's own DNS Server.
get DNS from DEV2_DNS_RELAY_FWD instead. For more info refer to http://ispproject.rd.tp-link.net/redmine/issues/16513 */
#if 0
if (strcmp(ipIntfObj.X_TP_ConnType, "PPPoE") == 0)
{
if ((ret = RDP_WRAP(CMM_UI_INTERNAL, OID_DEV2, rsl_util_getObjFromFullpath(ipIntfObj.lowerLayers, OID_DEV2_PPP_INTF,
sizeof(DEV2_PPP_INTF_OBJ), &pppstack, &pppObj))) != CMM_OK)
{
TR143_PERROR(ret);
return CMM_INVALID_ARGUMENTS;
}
sprintf(IPCP_PATH, "%s%s.", ipIntfObj.lowerLayers, "IPCP");
if ((ret = RDP_WRAP(CMM_UI_INTERNAL, OID_DEV2, rsl_util_getObjFromFullpath(IPCP_PATH, OID_DEV2_PPP_INTF_IPCP,
sizeof(DEV2_PPP_INTF_IPCP_OBJ), &ipcpstack, &ipcpObj))) != CMM_OK)
{
TR143_PERROR(ret);
return CMM_INVALID_ARGUMENTS;
}
if(dns != NULL)
CUTIL_STR_STRNCPY(dns, ipcpObj.DNSServers, DEV2_PPP_INTF_IPCP_DNSSERVERS_L);
} else if (strcmp(ipIntfObj.X_TP_ConnType, "DHCP") == 0)
{
if ((ret = dm_getSpecifiedObj(CMM_UI_NULL, OID_DEV2_DHCPV4_CLIENT, "interface", interface, &dhcpstack, sizeof(DEV2_DHCPV4_CLIENT_OBJ), &dhcpObj)) != CMM_OK)
{
TR143_PERROR(ret);
return CMM_INVALID_ARGUMENTS;
}else{
if(dns != NULL)
CUTIL_STR_STRNCPY(dns, dhcpObj.DNSServers, DEV2_DHCPV4_CLIENT_DNSSERVERS_L);
}
}
else
#endif /* #if 0 */
{
if (rsl_dns_getWorkingDNS(interface, DMVS_DNS_A, NULL, &dnsObj) == TRUE)
{
if(dns != NULL)
CUTIL_STR_STRNCPY_NOCHECK(dns, dnsObj.DNSServer, dnsSize);
}
#if defined(INCLUDE_QOE) && defined(INCLUDE_QOE_SPEEDTEST)
/* avoid SAST error */
if (NULL == dns)
{
TR143_ERROR("dns is null");
}
/* Get DNS Setting from /etc/resolv.conf (if dns is empty) */
else if (strcmp(dns, "") == 0)
{
fp = fopen("/etc/resolv.conf","r");
if(fp == NULL)
{
return CMM_ERROR;
}
if(fgets(dnsBuf,sizeof(dnsBuf),fp) != NULL)
{
sscanf(dnsBuf,"nameserver %s",dns);
}
fclose(fp);
}
#endif
}
}
return CMM_OK;
}
结合模块化分析这个函数 给出函数获取接口的逻辑和思路,然后如果我要添加IPV6的接口应该怎么做呢 给出需要修改的部分 和修改逻辑思路 以及需要修改部分的代码
最新发布