获取ipv6客户端列表函数

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;;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值