SIOCGIFADDR broken on 9.0-RC1?

GR freebsd at gomor.org
Tue Nov 15 17:10:18 UTC 2011


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/  <---+



More information about the freebsd-current mailing list