Bug #1897

Updated by tuxillo 7 months ago

Hi,



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");

exit(1);

}



strcpy(ifr.ifr_name, "re0");

ifr.ifr_addr.sa_family = AF_INET;

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

perror("ioctl");

exit(1);

}

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

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

}

Back