Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 Nov 2011 18:10:01 +0100 (CET)
From:      GR <freebsd@gomor.org>
To:        freebsd-current@freebsd.org
Cc:        freebsd-stable@freebsd.org
Subject:   SIOCGIFADDR broken on 9.0-RC1?
Message-ID:  <ba681b9d-4096-4966-9fff-590716a78ed0@ubuntu64>
In-Reply-To: <ee0855d0-f04c-4bdb-8578-bb9c74284f83@ubuntu64>

next in thread | previous in thread | raw e-mail | index | archive | help
Hello list,

more insights since my last post. Here is a small code to trigger the bug (end of email).
When you run it on 9.0-RC1, it gets an alias address instead of the main inet address:

% ./get-ip re0          
inet: 192.168.2.10
# Main address being 192.168.1.148

On 8.2-RELEASE, all goes well:
% ./get-ip re0
inet: PUBLIC_IP4

Is something broken, or a behaviour has changed since 8.2-RELEASE?

Best regards,


--8<--
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <net/if.h>
#include <sys/sockio.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int
main(int argc, char *argv[])
{
   int fd;
   struct ifreq ifr;
   const struct sockaddr_in *sa;

   fd = socket(AF_INET, SOCK_DGRAM, 0);
   if (fd < 0) {
      perror("socket");
      exit(-1);
   }

   memset(&ifr, 0, sizeof(struct ifreq));
   strlcpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name));

   if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) {
      sa = (const struct sockaddr_in *) &ifr.ifr_addr;
      printf("inet: %s\n", inet_ntoa(sa->sin_addr));
   }
   else {
      perror("ioctl");
      exit(-1);
   }

   exit(0);
}
--8<--

-- 
  ^  ___  ___             http://www.GomoR.org/          <-+
  | / __ |__/            Senior Security Engineer          |
  | \__/ |  \     ---[ zsh$ alias psed='perl -pe ' ]---    |
  +-->  Net::Frame <=> http://search.cpan.org/~gomor/  <---+




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ba681b9d-4096-4966-9fff-590716a78ed0>