DragonFly BSD
DragonFly bugs List (threaded) for 2010-11
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

SIOCGIFADDR doesn't work

From: "Steve O'Hara-Smith" <steve@xxxxxxxxxx>
Date: Wed, 3 Nov 2010 13:20:58 +0000


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

Steve O'Hara-Smith                          |   Directable Mirror Arrays
C:>WIN                                      | A better way to focus the sun
The computer obeys and wins.                |    licences available see
You lose and Bill collects.                 |    http://www.sohara.org/

[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]