问题描述
在我的C ++程序中,我试图用地址设置一个Tap接口,设置UP标志的效果很好,但是当设置IP地址时,ioctl不返回任何此类设备,但是我将确切的名称传递给了ifreq结构。 / p>
这是代码
void set_addr(const char* name,const char* address){
int fd,err;
struct ifreq info;
struct sockaddr_in* addr;
addr = (struct sockaddr_in*) &info;
if ( ( fd = socket(AF_INET,SOCK_DGRAM,0) ) < 0 )
errormsg("Socket Creation Failed (addres)");
bzero(&info,sizeof(info));
if(*name)
strncpy(info.ifr_name,name,IFNAMSIZ);
info.ifr_addr.sa_family = AF_INET;
inet_pton(AF_INET,address,&addr->sin_addr);
std::cout<<inet_ntoa(addr->sin_addr)<<std::endl; // just to check it ip conversion worked
err = ioctl(fd,SIOCSIFADDR,&info);
if (err == -1)
errormsg("Ioctl Failed setting address");
}
此功能可以将tap设置为UP,并且可以将名称以相同的方式传递给ifreq结构
void set_state (const char* name,bool state){
int fd,err;
struct ifreq info;
if ( (fd = socket(AF_INET,0) ) < 0){
perror("Socket creation Failed");
}
bzero(&info,sizeof(info));
if (*name)
strncpy(info.ifr_name,IFNAMSIZ);
if(state)
info.ifr_flags = IFF_UP;
else
info.ifr_flags = ~IFF_UP;
err = ioctl(fd,SIOCSIFFLAGS,&info);
if (err)
errormsg("Flags Failed");
}
set_state("ons5",UP);
set_addr("ons5","10.0.0.1");
set_add给出:“ ioctl设置地址失败:没有这样的设备”
这里是接口名称的ss [1]:https://i.stack.imgur.com/RdcNc.png
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)