* hurd/Makefile (user-interfaces): Add pfinet. * hurd/hurdioctl.c: Include <hurd...
authorMark Kettenis <kettenis@gnu.org>
Tue, 26 Jun 2001 10:21:56 +0000 (10:21 +0000)
committerMark Kettenis <kettenis@gnu.org>
Tue, 26 Jun 2001 10:21:56 +0000 (10:21 +0000)
2001-06-26  Mark Kettenis  <kettenis@gnu.org>

* hurd/Makefile (user-interfaces): Add pfinet.
* hurd/hurdioctl.c: Include <hurd/pfinet.h>, <net/if.h> and
<netinet/in.h>.
(siocgifconf): New function.  Register it with HURD_HANDLE_IOCTL
as the handler for SIOCGIFCONF.
* sysdeps/mach/hurd/bits/ioctls.h: Modify SIOCSIFFLAGS and
SIOCGIFFLAGS to be of IOC type ifreq_short.  Modify SIOCSIFMETRIC
and SIOCGIFMETRIC to be of IOC type ifreq_int.  Add new macro
definitions for SIOCGIFMTU, SIOCSIFMTU, SIOCGIFINDEX and
SIOCGIFNAME.
From Marcus Brunkmann <marcus@gnu.org>.

ChangeLog
hurd/Makefile
hurd/hurdioctl.c
sysdeps/mach/hurd/bits/ioctls.h

index 7a9989e..ecff3a6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2001-06-26  Mark Kettenis  <kettenis@gnu.org>
+
+       * hurd/Makefile (user-interfaces): Add pfinet.
+       * hurd/hurdioctl.c: Include <hurd/pfinet.h>, <net/if.h> and
+       <netinet/in.h>.
+       (siocgifconf): New function.  Register it with HURD_HANDLE_IOCTL
+       as the handler for SIOCGIFCONF.
+       * sysdeps/mach/hurd/bits/ioctls.h: Modify SIOCSIFFLAGS and
+       SIOCGIFFLAGS to be of IOC type ifreq_short.  Modify SIOCSIFMETRIC
+       and SIOCGIFMETRIC to be of IOC type ifreq_int.  Add new macro
+       definitions for SIOCGIFMTU, SIOCSIFMTU, SIOCGIFINDEX and
+       SIOCGIFNAME.
+       From Marcus Brunkmann <marcus@gnu.org>.
+
 2001-06-25  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/gnu/net/if.h: Correct _IOT_ifreq and add _IOT_ifreq_short
index c807fac..35dd317 100644 (file)
@@ -40,7 +40,7 @@ user-interfaces               := $(addprefix hurd/,\
                                       msg msg_reply msg_request \
                                       exec exec_startup crash interrupt \
                                       fs fsys io term tioctl socket ifsock \
-                                      login password \
+                                      login password pfinet \
                                       )
 server-interfaces      := hurd/msg faultexc
 
index 073c15e..c4cb679 100644 (file)
@@ -1,5 +1,5 @@
 /* ioctl commands which must be done in the C library.
-   Copyright (C) 1994, 1995, 1996, 1997, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1994,95,96,97,99,2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -300,3 +300,32 @@ tiocnotty (int fd,
   return 0;
 }
 _HURD_HANDLE_IOCTL (tiocnotty, TIOCNOTTY);
+\f
+#include <hurd/pfinet.h>
+#include <net/if.h>
+#include <netinet/in.h>
+
+/* Fill in the buffer IFC->IFC_BUF of length IFC->IFC_LEN with a list
+   of ifr structures, one for each network interface.  */
+static int
+siocgifconf (int fd, int request, struct ifconf *ifc)
+{
+  error_t err;
+  int data_len = ifc->ifc_len;
+  char *data = ifc->ifc_buf;
+
+  if (data_len <= 0)
+    return 0;
+
+  err = HURD_DPORT_USE (fd, __pfinet_siocgifconf (port, ifc->ifc_len,
+                                                 &data, &data_len));
+  if (data_len < ifc->ifc_len)
+    ifc->ifc_len = data_len;
+  if (data != ifc->ifc_buf)
+    {
+      memcpy (ifc->ifc_buf, data, ifc->ifc_len);
+      __vm_deallocate (__mach_task_self (), (vm_address_t) data, data_len);
+    }
+  return err ? __hurd_dfail (fd, err) : 0;
+}
+_HURD_HANDLE_IOCTL (siocgifconf, SIOCGIFCONF);
index 21ecda8..9882d45 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 93, 96, 97, 98, 99 Free Software Foundation, Inc.
+/* Copyright (C) 1992,93,96,97,98,99,2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -229,8 +229,8 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 };
 #define        SIOCSIFDSTADDR  _IOW('i', 14, struct ifreq)     /* set p-p address */
 #define        OSIOCGIFDSTADDR _IOWR('i',15, struct ifreq)     /* get p-p address */
 #define        SIOCGIFDSTADDR  _IOWR('i',34, struct ifreq)     /* get p-p address */
-#define        SIOCSIFFLAGS    _IOW('i', 16, struct ifreq)     /* set ifnet flags */
-#define        SIOCGIFFLAGS    _IOWR('i',17, struct ifreq)     /* get ifnet flags */
+#define        SIOCSIFFLAGS    _IOW('i', 16, struct ifreq_short)/* set ifnet flags */
+#define        SIOCGIFFLAGS    _IOWR('i',17, struct ifreq_short)/* get ifnet flags */
 #define        OSIOCGIFBRDADDR _IOWR('i',18, struct ifreq)     /* get broadcast addr */
 #define        SIOCGIFBRDADDR  _IOWR('i',35, struct ifreq)     /* get broadcast addr */
 #define        SIOCSIFBRDADDR  _IOW('i',19, struct ifreq)      /* set broadcast addr */
@@ -239,8 +239,8 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 };
 #define        OSIOCGIFNETMASK _IOWR('i',21, struct ifreq)     /* get net addr mask */
 #define        SIOCGIFNETMASK  _IOWR('i',37, struct ifreq)     /* get net addr mask */
 #define        SIOCSIFNETMASK  _IOW('i',22, struct ifreq)      /* set net addr mask */
-#define        SIOCGIFMETRIC   _IOWR('i',23, struct ifreq)     /* get IF metric */
-#define        SIOCSIFMETRIC   _IOW('i',24, struct ifreq)      /* set IF metric */
+#define        SIOCGIFMETRIC   _IOWR('i',23, struct ifreq_int) /* get IF metric */
+#define        SIOCSIFMETRIC   _IOW('i',24, struct ifreq_int)  /* set IF metric */
 #define        SIOCDIFADDR     _IOW('i',25, struct ifreq)      /* delete IF addr */
 #define        SIOCAIFADDR     _IOW('i',26, struct ifaliasreq) /* add/chg IF alias */
 
@@ -249,6 +249,12 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 };
 #define        SIOCGARP        _IOWR('i',38, struct arpreq)    /* get arp entry */
 #define        SIOCDARP        _IOW('i', 32, struct arpreq)    /* delete arp entry */
 
+#define SIOCGIFMTU     _IOWR('i', 51, struct ifreq_int)/* get IF mtu */
+#define SIOCSIFMTU     _IOW('i', 52, struct ifreq_int) /* set IF mtu */
+
+#define SIOCGIFINDEX   _IOWR('i', 90, struct ifreq_int)/* get IF index */
+#define SIOCGIFNAME    _IOWR('i', 91, struct ifreq_int)/* set IF name */
+
 
 /* Compatibility with 4.3 BSD terminal driver.
    From 4.4 <sys/ioctl_compat.h>.  */