Back to index

glibc  2.9
Functions
ifreq.c File Reference
#include <ifreq.h>
#include <hurd.h>
#include <hurd/pfinet.h>
#include <sys/mman.h>

Go to the source code of this file.

Functions

void __ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd)

Function Documentation

void __ifreq ( struct ifreq **  ifreqs,
int num_ifs,
int  sockfd 
)

Definition at line 27 of file ifreq.c.

{
  file_t server;

  server = _hurd_socket_server (PF_INET, 0);
  if (server == MACH_PORT_NULL)
    {
    out:
      *num_ifs = 0;
      *ifreqs = NULL;
    }
  else
    {
      char *data = NULL;
      size_t len = 0;
      error_t err = __pfinet_siocgifconf (server, -1, &data, &len);
      if (err == MACH_SEND_INVALID_DEST || err == MIG_SERVER_DIED)
       {
         /* On the first use of the socket server during the operation,
            allow for the old server port dying.  */
         server = _hurd_socket_server (PF_INET, 1);
         if (server == MACH_PORT_NULL)
           goto out;
         err = __pfinet_siocgifconf (server, -1, (data_t *) ifreqs, &len);
       }
      if (err)
       goto out;

      if (len % sizeof (struct ifreq) != 0)
       {
         munmap (data, len);
         errno = EGRATUITOUS;
         goto out;
       }
      *num_ifs = len / sizeof (struct ifreq);
      *ifreqs = (struct ifreq *) data;
    }

}

Here is the call graph for this function: