|
用ioctl函数枚举并配置网卡的问题...
郁闷了,搞了几天都没弄明白
我的程序现在要枚举系统中所有的网卡,并且配置ip地址、掩码等
1、首先是在枚举网络接口的问题
我的机器中存在lo,eth0,但是情况比较特殊,网卡没有经过任何配置,只是有驱动并认出了网卡
ioctl(fd,SIOCGIFCONF,&stIfconf)成功返回,但是没有查找到任何接口
我手头上只有busybox的ifconfig代码,经过分析,busybox也是一样,只不过它额外读取/proc/net/dev获得网络接口,这个问题解决,只是想不明白,为什么ioctl无法返回这些接口?加入没有/proc,如何获得接口呢??
2、通过/proc获得接口名称以后,ioctl设置ip地址失败,错误号码是EINVAL
我的代码是这样的,省略了其他代码,经过测试,其他应该没有问题
iRes=ioctl(fd,SIOCGIFFLAGS,&stTemp);//获取旧的标志
stTemp.ifr_flags =iFlags | IFF_UP;//up加上UP标志
iRes=ioctl(fd,SIOCSIFFLAGS,&stTemp);设置标志
iRes=ioctl(fd,SIOCSIFADDR,&stTemp);设置地址
...后面还有配置掩码之类的,但是执行设置地址时出错了
但是,我先用ifconfig程序设置地址,然后把网卡down掉,在用我的程序,旧可以通过,可是我跟踪了ifconfig,它好像也只是先调用SIOCSIFADDR,然后SIOCGIFFLAGS,没什么特殊的操作在,郁闷。。。 |
|