Esempio n. 1
0
int main(int argc, char** argv) {
    struct ip_addr addr;
    struct ip_addr mask;

    /* Test 1 */
    IP64_ADDR(&addr,0,0,0,0);
    IP64_MASKADDR(&mask,0,0,0,0);
        
    printf("0.0.0.0/0.0.0.0 %u %u %u %u %u %u %u %u\n", 
        addr.addr[0], addr.addr[1], addr.addr[2], addr.addr[3], 
        mask.addr[0], mask.addr[1], mask.addr[2], mask.addr[3]);

    /* Test 2 */
    IP64_ADDR(&addr,192,168,250,20);
    IP64_MASKADDR(&mask,192, 168, 250, 20);    

    printf("192.168.250.20/192.168.250.20 %u %u %u %u %u %u %u %u\n", 
        addr.addr[0], addr.addr[1], addr.addr[2], addr.addr[3], 
        mask.addr[0], mask.addr[1], mask.addr[2], mask.addr[3]);    
    /* Test 3 */
    IP64_ADDR(&addr,255,255,255,255);
    IP64_MASKADDR(&mask,255, 255, 255, 255);
    printf("255.255.255.255/255.255.255.255 %u %u %u %u %u %u %u %u\n", 
        addr.addr[0], addr.addr[1], addr.addr[2], addr.addr[3], 
        mask.addr[0], mask.addr[1], mask.addr[2], mask.addr[3]);        
        
    /* TODO: IPV6 tests */
    
    return 0;
}
Esempio n. 2
0
static void readdefroute(char *arg,struct netif *nif,int af)
{
	struct addrinfo *res,hint;
	struct ip_addr ipaddr;
	int err;
	memset(&hint,0,sizeof(hint));
	hint.ai_family=af;
	if ((err=getaddrinfo(arg,NULL,&hint,&res))!=0)
		printlog(LOG_ERR,"IP address %s error %s",arg,gai_strerror(err));
	else {
		switch(res->ai_family) {
			case PF_INET:
				{
					struct sockaddr_in *in=(struct sockaddr_in *)res->ai_addr;
					int addrh=ntohl(in->sin_addr.s_addr);
					unsigned char i,addr[4];
					for (i=0;i<4;i++,addrh>>=8)
						addr[3-i]=addrh;
					IP64_ADDR(&ipaddr, addr[0],addr[1],addr[2],addr[3]);
					lwip_add_route(lwipstack,IP_ADDR_ANY,IP_ADDR_ANY,&ipaddr,nif,0);
				}
				break;
			case PF_INET6:
				{
					struct sockaddr_in6 *in=(struct sockaddr_in6 *)res->ai_addr;
					sockaddr2ip_6addr(&ipaddr,in->sin6_addr.s6_addr);
					lwip_add_route(lwipstack,IP_ADDR_ANY,IP_ADDR_ANY,&ipaddr,nif,0);
				}
				break;
			default:
				printlog(LOG_ERR,"Unsupported Address Family: %s",arg);
		}
		freeaddrinfo(res);
	}
}
Esempio n. 3
0
static void readip(char *arg,struct netif *nif,int af)
{
	char *bit=rindex(arg,'/');
	if (bit == 0) 
		printlog(LOG_ERR,"IP addresses must include the netmask i.e. addr/maskbits");
	else {
		int bitno=atoi(bit+1);
		*bit=0; 
		struct addrinfo *res,hint;
		struct ip_addr ipaddr,netmask;
		int err;
		memset(&hint,0,sizeof(hint));
		hint.ai_family=af;
		if ((err=getaddrinfo(arg,NULL,&hint,&res))!=0)
			printlog(LOG_ERR,"IP address %s error %s",arg,gai_strerror(err));
		else {
			switch(res->ai_family) {
				case PF_INET:
					{
						struct sockaddr_in *in=(struct sockaddr_in *)res->ai_addr;
						int addrh=ntohl(in->sin_addr.s_addr);
						unsigned char i,addr[4];
						for (i=0;i<4;i++,addrh>>=8)
							addr[3-i]=addrh;
						IP64_ADDR(&ipaddr, addr[0],addr[1],addr[2],addr[3]);
						bitno2mask(addr,bitno,4);
						IP64_MASKADDR(&netmask, addr[0],addr[1],addr[2],addr[3]);
						lwip_add_addr(nif,&ipaddr,&netmask);
					}
					break;
				case PF_INET6:
					{
						struct sockaddr_in6 *in=(struct sockaddr_in6 *)res->ai_addr;
						unsigned char *addr=in->sin6_addr.s6_addr;
						sockaddr2ip_6addr(&ipaddr,addr);
						bitno2mask(addr,bitno,16);
						sockaddr2ip_6addr(&netmask,addr);
						lwip_add_addr(nif,&ipaddr,&netmask);
					}
					break;
				default:
					printlog(LOG_ERR,"Unsupported Address Family: %s",arg);
			}
			freeaddrinfo(res);
		}
	}
}