/*
*操作组播路由表 参数flag true表示添加路由表 false 表示删除路由表
*/
static int _op_multicast_route_list(star_s8 *multi_ip,star_bool flag)
{
FILE *fp = NULL;
star_s8 tmp_buf[64];
star_s8 eth_interface[32];
star_u32 route_list_dest_ip = 0;
star_u32 add_multi_ip = 0;
star_bool findFlag = false;
if (NULL == multi_ip)
{
printf("bad param!!!\n");
return true;
}
if ((fp = fopen(SERVICE_MD_ROUTER_LIST_PATH, "r")) == NULL) //获取ap扫描结果
{
printf("fopen %s failed!\n",SERVICE_MD_ROUTER_LIST_PATH);
return true;
}
add_multi_ip= inet_addr(multi_ip);
printf("multicast_route_list,flag:%d,add_multi_ip:%x!!!\n",flag,add_multi_ip);
findFlag= false;
memset(tmp_buf,0,sizeof(tmp_buf));
while (fgets(tmp_buf, sizeof(tmp_buf), fp) != NULL)
{
if (strstr(tmp_buf, DTV_CONFIG_GBE_NET_INTERFACE) != NULL)
{
if (sscanf(tmp_buf, "%s %x",eth_interface,&route_list_dest_ip) != 2)
{
continue;
}
else
{
printf("eth_interface:%s route_list_dest_ip:%x\n",eth_interface,route_list_dest_ip);
if (route_list_dest_ip == add_multi_ip)
{
findFlag = true;
break;
}
}
}
memset(tmp_buf,0,sizeof(tmp_buf));
}
fclose(fp);
memset(tmp_buf,0,sizeof(tmp_buf));
if (flag)
{
if (!findFlag)/*路由表没有存在则添加此路由表*/
{
star_snprintf(tmp_buf,sizeof(tmp_buf),"route add -host %s dev %s",multi_ip,DTV_CONFIG_GBE_NET_INTERFACE);
}
}
else
{
if (findFlag)/*路由表存在则删除此路由表*/
{
star_snprintf(tmp_buf,sizeof(tmp_buf),"route delete -host %s dev %s",multi_ip,DTV_CONFIG_GBE_NET_INTERFACE);
}
}
if (strlen(tmp_buf) != 0)/*存在操作的内容*/
{
if (star_os_system(tmp_buf))
{
printf("star_os_system failed tmp_buf:%s!!!\n",tmp_buf);
return true;
}
}
printf("tmp_buf:%s\n",tmp_buf);
return false;
}