Project

General

Profile

Actions

Bug #1897

closed

SIOCGIFADDR doesn't work

Added by steve about 14 years ago. Updated over 5 years ago.

Status:
Resolved
Priority:
Low
Assignee:
Category:
Networking
Target version:
Start date:
Due date:
% Done:

0%

Estimated time:

Description

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);
}
Actions

Also available in: Atom PDF