Bug #1897

Updated by tuxillo over 2 years ago


I found this while trying to get ushare to work - the SIOCGIFADDR

ioctl doesn't set the IP address (at least for re devices), what you get is

whatever was in the struct ifreq before the call.

Running v2.9.0.105.gba1cb-DEVELOPMENT - but it's been going on for

a while I just haven't got to the bottom of the problem until now.

My test code (below) always prints 0.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/socket.h>

#include <sys/sysctl.h>

#include <net/if_dl.h>

#include <net/if.h>

#include <sys/ioctl.h>

#include <netinet/in.h>

int main (int argc, char **argv)


int sock;

int32_t ip;

struct ifreq ifr;

memset (&ifr, 0, sizeof ifr);

sock = socket (AF_INET, SOCK_STREAM, 0);

if (sock < 0) {

perror ("socket");



strcpy(ifr.ifr_name, "re0");

ifr.ifr_addr.sa_family = AF_INET;

if (ioctl (sock, SIOCGIFADDR, &ifr) < 0) {




ip = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr;

printf("%x\n", ip);