我想在redhat enterprise 5的程序中创建多个tun/tap虚拟网卡。最初先创建一个tap设备,写了收包和发包函数,能正常工作,可是当创建两个tap设备时,出现了问题。我把创建的函数帖出来:
int tun_create(char *dev, int flags)
{
struct ifreq ifr;
int fd, err;
assert(dev != NULL);
if ((fd = open("/dev/net/tun", O_RDWR)) < 0)
return fd;
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags |= flags;
if (*dev != '\0')
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
if ((err=ioctl(fd,TUNSETIFF,(void *)&ifr))<0){
close(fd);
return err;
}
// set_nonblock (fd);
strcpy(dev,ifr.ifr_name);
return fd;
}
int main(int argc, char *argv[])
{
char tun_name[IFNAMSIZ]="tap0";
char tun_name1[IFNAMSIZ]="tap1";
Tap=tun_create(tun_name, IFF_TAP | IFF_NO_PI);
if (Tap< 0) {
perror("tun_create");
return 1;
}
printf("TAP name is %s\n", tun_name);
printf("Tap=%d\n",Tap);
system("ifconfig tap0 10.0.0.185 netmask 255.255.0.0 up");
Tap1=tun_create(tun_name1, IFF_TAP | IFF_NO_PI);
if (Tap1< 0) {
perror("tun_create");
return 1;
}
printf("TAP1 name is %s\n", tun_name1);
printf("Tap1=%d\n",Tap1);
system("ifconfig tap1 10.0.0.186 netmask 255.255.0.0 up");
}
这样就创建了tap0(IP地址:10.0.0.185)和tap1(IP地址:10.0.0.186)。但ping tap0时,发出ping 回应的却是tap1,感觉它们两个好像是一个设备。
请问应该怎样创建两个或多个tap设备?希望用过tun/tap虚拟网卡的高手帮忙,谢谢!
我的Email:simba226@163.com