static int DHCP6S_UpdateHost()
{
unsigned long ulCurrTime = 0;
static unsigned long ulPreUpdateTime = 0;
ulCurrTime = time(0);
if ( (ulCurrTime - ulPreUpdateTime) < 10 )
{
DHCP6S_TRACE("Time space too short");
return TBS_SUCCESS;
}
ulPreUpdateTime = ulCurrTime;
FILE *file = NULL;
char hostinfo[1024]={0};
char szCmd[512] = {0};
int iRet = TBS_SUCCESS;
unsigned long ulHostIdx =0;
ST_DHCP6S_HostInfo stHostInfo;
// 先删除所有主机
DHCP6S_DelAllHost();
// 通过邻居协议获取主机信息
sprintf(szCmd, "ip -6 neigh show dev br0");
if((file = popen(szCmd, "r")) == NULL)
{
DHCP6S_TRACE("popen() Failed!\n");
return TBS_FAILED;
}
while( NULL != fgets(hostinfo,sizeof(hostinfo),file) )
{
char *token = " ";
char *p = NULL;
char *pIpAddr = NULL;
char *pMacAddr = NULL;
ulHostIdx++;
DHCP6S_TRACE("hostinfo:%s\n",hostinfo);
// 提取主机IP地址
p = strtok(hostinfo,token);
if(NULL != p)
{
pIpAddr = p;
DHCP6S_TRACE("ulHostIdx:%lu,pIpAddr:%s\n",ulHostIdx,pIpAddr);
}
else
{
DHCP6S_TRACE("ulHostIdx:%lu,pIpAddr is NULL.\n",ulHostIdx);
}
// 提取主机MAC地址
p = strtok(NULL,token);
p = strtok(NULL,token);
if(NULL != p)
{
pMacAddr = p;
DHCP6S_TRACE("ulHostIdx:%lu,pMacAddr:%s\n",ulHostIdx,pMacAddr);
}
else
{
DHCP6S_TRACE("ulHostIdx:%lu,pMacAddr is NULL.\n",ulHostIdx);
}
// 将Link Local地址添加到配置树节点
if((NULL != pMacAddr) && (NULL != pIpAddr) &&(0==strncmp(pIpAddr,"fe80",4)))
{
stHostInfo.pszActive = "1";
stHostInfo.pszAddrSrc = "";
stHostInfo.pszClassId = "";
stHostInfo.pszExpireTime = "";
stHostInfo.pszHostName = "";
stHostInfo.pszLeaseTime = "";
stHostInfo.pszIpAddr = pIpAddr;
stHostInfo.pszMacAddr = pMacAddr;
iRet = DHCP6S_AddHost(LAN_HOST_PATH_PREFIX, ulHostIdx, &stHostInfo);
if ( RET_FAILED(iRet) )
{
DHCP6S_TRACE("DHCP6S_AddHost Failed.\n");
}
}
}
pclose(file);
return TBS_SUCCESS;;
}