vxWorks MAC组播加入使用SIOCADDMULTI问题
第七品 2020-06-19 07:28:10 vxworks对接口操作使用ioctl,参数多为struct ifreq,如获取接口硬件地址:
struct ifreq ethreq;
strncpy(ethreq.ifr_name, “eth0”, IFNAMSIZ);
retval = ioctl(sockfd[port_index], SIOCGIFLLADDR, ðreq);
但是SIOCADDMULTI要求传入的参数为struct sockaddr,(#define SIOCADDMULTI VX_IOWR(NETIF, 29, W, struct sockaddr))
如果使用类似的ioctl进行组播加入:
char mymac[6]={0x01,0x0c,0xcd,0x01,0x00,0x01};
struct sockaddr mulcast_addr;
mulcast_addr.sa_family = PF_UNSPEC;
mulcast_addr.sa_len = 6;
for(int i = 0; i < 6; i++)
{
mulcast_addr.sa_data[i] = mymac[i];
}
retval = ioctl (sockfd[port_index], SIOCADDMULTI, (struct sockaddr)&mulcast_addr); //加入多播组
最后retval返回错误,errno为ENXIO,即“/* No such device or address */”。怀疑此处是因为传入的参数不包含类似于上面ifr_name的接口信息。是SIOCADDMULTI不能这么使用吗?