📄 testvnet8.c
字号:
//------------------------------------------------------------------------------//test for skyeye function vnetif_init//test open device file /dev/net/vnet twice, first for hostif,second for guestif//test hif net device//test ioctl VNETSETIFF, and ifr_name=NULL//if ifr_name==NULL, then should use 'ifconfig vnet0 inet ......'//------------------------------------------------------------------------------#include <net/if.h>//#include <linux/if_tun.h>#include "if_vnet.h"#include <sys/ioctl.h>void main(void){int tapif_fd,tapif_fd2;struct ifreq ifr;char buf[1024],paddr[10];int flag;tapif_fd = open("/dev/net/vnet", 2);if(tapif_fd<0){ perror("open");exit(-1);};printf("open vnet ok! fd is %d\n",tapif_fd);memset(&ifr, 0, sizeof(ifr));//no need to set name, do it in vnet_hostif_create//I think when you want more vnet, then you should set //tht name for vnet.//IFNAMSIZ=16//strncpy(ifr.ifr_name, "vnet1", IFNAMSIZ);ifr.ifr_flags = IFF_VNET;if (ioctl(tapif_fd, VNETSETIFF, (void *) &ifr) < 0) { perror(buf); exit(-1);}printf("ioctl vnet ok\n");sleep(2);snprintf(buf, sizeof(buf), "ifconfig vnet0 inet %d.%d.%d.%d", 10,0,0,1); printf("tapif_init: system(\"%s\");\n", buf);system(buf);tapif_fd2 = open("/dev/net/vnet", 2);if(tapif_fd2<0){ perror("open");exit(-1);};printf("open vnet ok! fd2 is %d\n",tapif_fd2); //set mac addr for vnetpaddr[0]=0;paddr[1]=1;paddr[2]=2;paddr[3]=3;paddr[4]=4;paddr[5]=5; if (ioctl(tapif_fd2, SIOCSIFADDR, (void *) paddr) < 0) { printf("vnetif_init: set mac addr error\n"); exit(-1); } printf("vnetif_init: vnetif_init: set mac addr ok\n"); //set ifflag for vnet flag=IFF_UP|IFF_RUNNING|IFF_BROADCAST; if (ioctl(tapif_fd2, SIOCSIFFLAGS, (void *) &flag) < 0) { printf("vnetif_init: ioctl vnet set ifflag error\n"); exit(-1); } printf("vnetif_init: ioctl vnet set ifflag ok.\n");while(1){ sleep(30);};//printf("input a key....\n");//getc();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -