示例#1
0
void test_netioctl_withbuf_entry(char *pBuf, int iBufLen)
{
	struct rtentry rtitem;
	int dst, mask, gateway;
    int i, fd;
    
	fd = socket(AF_INET, SOCK_DGRAM, 0, pBuf, iBufLen);
	if(fd < 0)
	{
		test_printf_error("test_netioctl_withbuf_entry");
		return;
	}
 		
	memset(&rtitem, 0, sizeof(rtitem));
	if(inet_aton(TEST_NETIOCTL_WITH_BUF_DST, (struct in_addr*)&dst, pBuf, iBufLen) == 0)
	{
		test_printf_error("test_netioctl_withbuf_entry");
 		netclose(fd, pBuf, iBufLen);
		return;
	}
	if(inet_aton(TEST_NETIOCTL_WITH_BUF_MASK, (struct in_addr*)&mask, pBuf, iBufLen) == 0)
	{
		test_printf_error("test_netioctl_withbuf_entry");
 		netclose(fd, pBuf, iBufLen);
		return;
	}
	if(inet_aton(TEST_NETIOCTL_WITH_BUF_GATEWAY, (struct in_addr*)&gateway, pBuf, iBufLen) == 0)
	{
		test_printf_error("test_netioctl_withbuf_entry");
 		netclose(fd, pBuf, iBufLen);
		return;
	}
 		
	set_sockaddr((struct sockaddr_in *) &rtitem.rt_dst, dst, 0);
	set_sockaddr((struct sockaddr_in *) &rtitem.rt_genmask, mask, 0);
	set_sockaddr((struct sockaddr_in *) &rtitem.rt_gateway, gateway, 0);

	rtitem.rt_flags = RTF_UP | RTF_GATEWAY;
	rtitem.rt_dev = "eth1";
 		
	if(netioctl_withbuf(fd, SIOCDELRT, &rtitem, sizeof(rtitem), pBuf, iBufLen) < 0)
	{
		test_printf_error("test_netioctl_withbuf_entry");
 		netclose(fd, pBuf, iBufLen);
		return;
	}
	
	/*
	printf("To check with \"route\" command in 5 seconds");
	for(i = 0; i < 10; i++)
	{
		printf(".");
		tt_msleep(1000);
	}
	printf("\n");
	*/
	
	if(netioctl_withbuf(fd, SIOCADDRT, &rtitem,sizeof(rtitem), pBuf, iBufLen) < 0)
	{
		test_printf_error("test_netioctl_withbuf_entry");
 		netclose(fd, pBuf, iBufLen);
		return;
	}
 	
	test_printf_success("test_netioctl_withbuf_entry");
 	netclose(fd, pBuf, iBufLen);
}
示例#2
0
int GetDevInterface(void)
{
	int dev_num = 0;
	struct ifreq ifbuf[MAXINTERFACES/2]={0};
	struct ifconf ifc;
	int i,fd, ifnum=0;
	int iInterface;
	unsigned long ulGateway;


	dev_num = 1;

	memset(&ipmc, 0, sizeof(ipmc));
	memset(&ifc, 0, sizeof(ifc));

	fd = socket(AF_INET, SOCK_DGRAM, 0, g_RemoteNet_Buf, RNT_BUFFER_LEN);
	if (fd < 0) 
    {
		perror("socket");
		return fd;
    }

    ifc.ifc_len = sizeof(ifbuf);
    ifc.ifc_buf = (caddr_t)ifbuf;
    if(netioctl_withbuf(fd, SIOCGIFCONF, &ifc,sizeof(ifc), g_RemoteNet_Buf, RNT_BUFFER_LEN) < 0)
    {
        netclose(fd, g_RemoteNet_Buf, RNT_BUFFER_LEN);
        return -1;
    }
    ifnum = ifc.ifc_len/sizeof(struct ifreq);
    for(i=0;i<ifnum;i++)
         diag_printf("interface name are %s\n",ifbuf[i].ifr_name);

   //strcpy(ifbuf[0].ifr_name,"eth1");

    while(ifnum-- > 0)
    {
        if( strlen(ifbuf[ifnum].ifr_name) > 4 ||ifbuf[ifnum].ifr_name == NULL||
           strcmp(ifbuf[ifnum].ifr_name,"lo")==0||
            netioctl(fd, SIOCGIFFLAGS, &ifbuf[ifnum],sizeof(ifbuf[ifnum]), g_RemoteNet_Buf, RNT_BUFFER_LEN) < 0 ||
            !(ifbuf[ifnum].ifr_flags & IFF_UP) ||
            netioctl(fd, SIOCGIFADDR, &ifbuf[ifnum],sizeof(ifbuf[ifnum]), g_RemoteNet_Buf, RNT_BUFFER_LEN) < 0)
            continue;              

		diag_printf("if name ===%s\n",ifbuf[ifnum].ifr_name);
		
		/*Get the MAC Address*/
        if (netioctl(fd, SIOCGIFHWADDR, &ifbuf[ifnum],sizeof(ifbuf[ifnum]), g_RemoteNet_Buf, RNT_BUFFER_LEN) >= 0)
       		diag_printf("MAC Address====%d\n",ifbuf[ifnum].ifr_hwaddr.sa_data);
       	else
       		diag_printf("get mac addr error\n");
       	
		/*Get the Netmask*/
        if (netioctl(fd, SIOCGIFNETMASK, &ifbuf[ifnum],sizeof(ifbuf[ifnum]), g_RemoteNet_Buf, RNT_BUFFER_LEN) >= 0)
       		diag_printf("Netmask====%s\n",inet_ntoa( (((struct sockaddr_in *)&ifbuf[ifnum].ifr_netmask)->sin_addr), g_RemoteNet_Buf, RNT_BUFFER_LEN));    
       	else
       		diag_printf("get netmask error\n");

        /*Get the IP Address*/    
        if (netioctl(fd, SIOCGIFADDR, &ifbuf[dev_num], sizeof(ifbuf[dev_num]), g_RemoteNet_Buf, RNT_BUFFER_LEN) >= 0)
	        diag_printf("ipaddr Address====%s\n",inet_ntoa((((struct sockaddr_in *)&ifbuf[ifnum].ifr_addr)->sin_addr), g_RemoteNet_Buf, RNT_BUFFER_LEN));
	    else
	    	diag_printf("get if addr error\n");
	    
        /*Get the Gateway*/
		ulGateway = wb740getgateway(ifbuf[ifnum].ifr_name, g_RemoteNet_Buf, RNT_BUFFER_LEN);
		diag_printf("Gateway====%s\n",inet_ntoa(*(struct in_addr*)&ulGateway, g_RemoteNet_Buf, RNT_BUFFER_LEN));
        dev_num++;
    }

    netclose(fd, g_RemoteNet_Buf, RNT_BUFFER_LEN);
    return dev_num;
}
示例#3
0
int simple_ioctl_withbuf(void)
{
 	struct ifreq ifbuf[4]={0};
    struct ifconf ifc;
    int fd, ifnum=0;
    
    memset(&ifc, 0, sizeof(ifc));

	fd = socket(AF_INET, SOCK_DGRAM, 0, g_RemoteNet_Buf, RNT_BUFFER_LEN);
	ifc.ifc_len = sizeof(ifbuf);
	ifc.ifc_buf = (caddr_t)ifbuf;

	if(netioctl_withbuf(fd, SIOCGIFCONF, &ifc,sizeof(ifc), g_RemoteNet_Buf, RNT_BUFFER_LEN) < 0)
	{
		printf("simple_ioctl_withbuf(): SIOCGIFCONF error\n");
		return false;
	}
 	
 	for(ifnum = 0; ifnum < 4; ifnum++)
 	{
 		if(strlen(ifbuf[ifnum].ifr_name) != 0)
 			printf("simple_ioctl_withbuf(): SIOCGIFCONF's %d interface is %s\n", ifnum, ifbuf[ifnum].ifr_name);
 	}
 	
 	{
 		struct rtentry rtitem;
 		int dst, mask, gateway;
 		
 		memset(&rtitem, 0, sizeof(rtitem));
 		dst = inet_addr("0.0.0.0", g_RemoteNet_Buf, RNT_BUFFER_LEN);
 		mask = inet_addr("0.0.0.0", g_RemoteNet_Buf, RNT_BUFFER_LEN);
 		gateway = inet_addr("10.132.1.254", g_RemoteNet_Buf, RNT_BUFFER_LEN);
 		
 		set_sockaddr((struct sockaddr_in *) &rtitem.rt_dst, 0, 0);
		set_sockaddr((struct sockaddr_in *) &rtitem.rt_genmask, 0, 0);
		set_sockaddr((struct sockaddr_in *) &rtitem.rt_gateway, gateway, 0);

 		rtitem.rt_flags = RTF_UP | RTF_GATEWAY;
 		rtitem.rt_dev = "eth1";
 		
		printf("dst=%s ", inet_ntoa(((struct sockaddr_in*)&(rtitem.rt_dst))->sin_addr, g_RemoteNet_Buf, RNT_BUFFER_LEN));
		printf("mask=%s ", inet_ntoa(((struct sockaddr_in*)&(rtitem.rt_genmask))->sin_addr, g_RemoteNet_Buf, RNT_BUFFER_LEN));
		printf("gateway=%s ", inet_ntoa(((struct sockaddr_in*)&(rtitem.rt_gateway))->sin_addr, g_RemoteNet_Buf, RNT_BUFFER_LEN));
		printf("if=%s\n", rtitem.rt_dev);
		if(netioctl_withbuf(fd, SIOCDELRT, &rtitem,sizeof(rtitem), g_RemoteNet_Buf, RNT_BUFFER_LEN) < 0)
		{
			printf("simple_ioctl_withbuf(): SIOCDELRT error\n");
			return false;
		}
		printf("simple_ioctl_withbuf(): SIOCDELRT success...\n");
		cyg_thread_delay(500);
		if(netioctl_withbuf(fd, SIOCADDRT, &rtitem,sizeof(rtitem), g_RemoteNet_Buf, RNT_BUFFER_LEN) < 0)
		{
			printf("simple_ioctl_withbuf(): SIOCADDRT error\n");
			return false;
		}
		printf("simple_ioctl_withbuf(): SIOCADDRT success...\n");
 	}
 	
 	
 	netclose(fd, g_RemoteNet_Buf, RNT_BUFFER_LEN);
 	return true;

	
}
示例#4
0
文件: System.c 项目: jcrona/rovio-fw
BOOL SetGateway(const char *pcInterface, unsigned long ulIP)
{
#ifndef WLAN
	struct rtentry rItem;
#else
	struct ecos_rtentry rItem;
#endif
	int fd;
	unsigned ulOldGateway;
	int rt;
#ifndef WLAN
	if ((fd = socket(AF_INET,SOCK_DGRAM,0,  g_StreamServer_Buf, System_BUFFER_LEN)) < 0) 
		return FALSE;
#else
	if ((fd = socket(AF_INET,SOCK_DGRAM,0)) < 0) 
		return FALSE;	
#endif
	memset(&rItem, 0, sizeof(rItem));
#ifndef WLAN
	set_sockaddr((struct sockaddr_in *) &rItem.rt_dst, 0, 0);
	set_sockaddr((struct sockaddr_in *) &rItem.rt_genmask, 0, 0);
	rItem.rt_flags = RTF_UP | RTF_GATEWAY;
#else
	set_sockaddr((struct sockaddr_in *) &rItem.rt_dst, 0, 0);
	set_sockaddr((struct sockaddr_in *) &rItem.rt_genmask, 0, 0);
	rItem.rt_flags = RTF_UP| RTF_GATEWAY;
#endif
	rItem.rt_dev = (char *)pcInterface;
	ulOldGateway = GetGateway(pcInterface);
#ifndef WLAN	
	if (ulOldGateway != 0L)
	{
		set_sockaddr((struct sockaddr_in *)&rItem.rt_gateway, ulOldGateway, 0);
		if ((netioctl_withbuf(fd, SIOCDELRT, &rItem , sizeof(rItem), g_StreamServer_Buf, System_BUFFER_LEN)) < 0)
			fprintf(stderr, "Cannot del default route (%d).\n", errno);
	}

	set_sockaddr((struct sockaddr_in *) &rItem.rt_gateway, ulIP, 0);

	if ((rt = netioctl_withbuf(fd,SIOCADDRT, &rItem, sizeof(rItem),g_StreamServer_Buf,System_BUFFER_LEN)) < 0)
	{
		fprintf(stderr, "Cannot add default route (%d).\n", errno);
	}
	netclose(fd, g_StreamServer_Buf, System_BUFFER_LEN);
#else
	set_sockaddr((struct sockaddr_in *) &rItem.rt_gateway, ulIP, 0);

	if ((rt = ioctl(fd,SIOCDELRT, &rItem)) < 0 && (errno != ESRCH))
	{
		fprintf(stderr, "Cannot delete default route (%d).\n", errno);
	}

	memset(&rItem, 0, sizeof(rItem));
	
	set_sockaddr((struct sockaddr_in *) &rItem.rt_dst, 0, 0);
	set_sockaddr((struct sockaddr_in *) &rItem.rt_genmask, 0, 0);
	rItem.rt_flags = RTF_UP | RTF_GATEWAY;

	rItem.rt_dev = (char *)pcInterface;

	set_sockaddr((struct sockaddr_in *) &rItem.rt_gateway, ulIP, 0);

	if ((rt = ioctl(fd,SIOCADDRT, &rItem)) < 0)
	{
		fprintf(stderr, "Cannot add default route (%d).\n", errno);
	}
	close(fd);	

#endif
	return (rt < 0 ? FALSE : TRUE);
}