Bug #1897
Updated by tuxillo over 10 years 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); }