Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 Feb 2002 04:28:45 +0000 (WET)
From:      Nuno Miguel Fernandes Sucena Almeida <slug@alumni.deec.uc.pt>
To:        freebsd-net@freebsd.org
Subject:   getifaddrs usage (bug?)
Message-ID:  <Pine.BSF.4.21.0202170419160.1461-100000@alumni.deec.uc.pt>

next in thread | raw e-mail | index | archive | help
Hello,
	i'm using getifaddrs to get the IP and HW address of an ethernet
interface but it seems that the ifap->ifa_next pointer is never NULL so I
end up with an infinite loop! If i uncomment the // printf's I get the
HW address correctly but after that I get the IP address repeated ad
eternum! Any ideas ?

			()s
				Nuno Sucena

PS: Please CC to me since i'm not subscribed in this list.

i have something like:

    struct ifaddrs *ifap,*current; /* man getifaddrs */
    struct sockaddr_dl *e_tmp;
    struct sockaddr_in *i_tmp;
	(...)
    error = getifaddrs (&ifap);
    if (error!=0)
    {
        perror("getifaddrs()");
        return(EXIT_FAILURE);
    }
    current = ifap;
    while (current!=NULL)
    {
        if ((strcmp(current->ifa_name,device)==0)&&
            (((current->ifa_flags)&IFF_UP)==IFF_UP)&&
            (current->ifa_addr!=NULL))
        {
                /* ethernet physical address - <net/if_dl.h> */
            e_tmp = (struct sockaddr_dl*)current->ifa_addr;
            if (e_tmp->sdl_family==AF_LINK)
            {
                    /* hope that sdl_alen < ETHER_ADDR_LEN ;) */
                memcpy(*eth_address,LLADDR(e_tmp),e_tmp->sdl_alen);
//                printf("ethernet: %s\n",ethernet_print (*eth_address));
                got_eth=1;
            }
                /* ethernet IP address - <netinet/in.h> */
            i_tmp = (struct sockaddr_in*)current->ifa_addr;
            if (i_tmp->sin_family==AF_INET)
            {
                ip_address->s_addr = i_tmp->sin_addr.s_addr;
//                printf ("%s\n",inet_ntoa(*ip_address));
                got_ip=1;
            }
        }
        current = ifap->ifa_next;
    }
    freeifaddrs(ifap);
	(...)


--


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0202170419160.1461-100000>