commit-inetutils
[Top][All Lists]
Advanced

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

[SCM] GNU Inetutils branch, master, updated. inetutils-1_9_4-2-g9a90d9b


From: Mats Erik Andersson
Subject: [SCM] GNU Inetutils branch, master, updated. inetutils-1_9_4-2-g9a90d9b
Date: Fri, 17 Jul 2015 23:18:11 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Inetutils ".

The branch, master has been updated
       via  9a90d9b9119906df23cb2db1503cb0f099942dd9 (commit)
      from  3de647c8548f30f882c6ad5088df9acdc8cda300 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit/inetutils.git/commit/?id=9a90d9b9119906df23cb2db1503cb0f099942dd9


commit 9a90d9b9119906df23cb2db1503cb0f099942dd9
Author: Mats Erik Andersson <address@hidden>
Date:   Sat Jul 18 01:12:41 2015 +0200

    ifconfig: Improve the support for GNU/Hurd.
    
    Use system specific code instead of generic code.
    This provides abilities similar to other systems.

diff --git a/ChangeLog b/ChangeLog
index 7f799da..18a584b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2015-07-18  Mats Erik Andersson  <address@hidden>
+
+       ifconfig: Improve the support for GNU/Hurd.
+       Add system specific abilities, including parsing of command
+       line and hardware addresses.
+
+       * ifconfig/system.h [__GNU__]: Include "system/hurd.h".
+       * ifconfig/system.c [__GNU__]: Include "system/hurd.c".
+       * ifconfig/system/Makefile.am (noinst_HEADERS): Add the
+       files `hurd.h' and `hurd.c'.
+       * ifconfig/system/hurd.h, ifconfig/system/hurd.c: New files.
+
+       * ifconfig/system/generic.c: Include <unused-parameter.h>.
+       (system_parse_opt, system_parse_opt_rest, system_configure):
+       Apply _GL_UNUSED_PARAMETER to all arguments, as these functions
+       are placeholders and no-ops.
+
 2015-07-17  Mats Erik Andersson  <address@hidden>
 
        ifconfig: Sporadically appearing regression.
diff --git a/ifconfig/system.c b/ifconfig/system.c
index 30677e4..e108dc2 100644
--- a/ifconfig/system.c
+++ b/ifconfig/system.c
@@ -25,10 +25,12 @@
 # include "system/solaris.c"
 #elif defined __QNX__
 # include "system/qnx.c"
-# elif defined __DragonFly__ || defined __FreeBSD__ || \
-       defined __FreeBSD_kernel__ || \
-       defined __NetBSD__ || defined __OpenBSD__
-#  include "system/bsd.c"
+#elif defined __DragonFly__ || defined __FreeBSD__ || \
+      defined __FreeBSD_kernel__ || \
+      defined __NetBSD__ || defined __OpenBSD__
+# include "system/bsd.c"
+#elif defined __GNU__
+# include "system/hurd.c"
 #else
 # include "system/generic.c"
 #endif
diff --git a/ifconfig/system.h b/ifconfig/system.h
index 8521ad9..66878d3 100644
--- a/ifconfig/system.h
+++ b/ifconfig/system.h
@@ -97,6 +97,8 @@ extern struct if_nameindex* (*system_if_nameindex) (void);
        defined __FreeBSD_kernel__ || \
        defined __NetBSD__ || defined __OpenBSD__
 #  include "system/bsd.h"
+# elif defined __GNU__
+#  include "system/hurd.h"
 # else
 #  include "system/generic.h"
 # endif
diff --git a/ifconfig/system/Makefile.am b/ifconfig/system/Makefile.am
index 954c677..62a9f1c 100644
--- a/ifconfig/system/Makefile.am
+++ b/ifconfig/system/Makefile.am
@@ -26,8 +26,10 @@ noinst_HEADERS = \
        linux.h \
        solaris.h \
        qnx.h \
+       hurd.h \
        bsd.c \
        generic.c \
        linux.c \
        solaris.c \
-       qnx.c
+       qnx.c \
+       hurd.c
diff --git a/ifconfig/system/generic.c b/ifconfig/system/generic.c
index 9a2bda5..20a78bd 100644
--- a/ifconfig/system/generic.c
+++ b/ifconfig/system/generic.c
@@ -22,6 +22,8 @@
 #include <config.h>
 
 #include "../ifconfig.h"
+
+#include <unused-parameter.h>
 
 
 /* Output format stuff.  */
@@ -36,19 +38,25 @@ const char *system_help;
 struct argp_child system_argp_child;
 
 int
-system_parse_opt (struct ifconfig **ifp, char option, char *optarg)
+system_parse_opt (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
+                 char option _GL_UNUSED_PARAMETER,
+                 char *optarg _GL_UNUSED_PARAMETER)
 {
   return 0;
 }
 
 int
-system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
+system_parse_opt_rest (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
+                      int argc _GL_UNUSED_PARAMETER,
+                      char *argv[] _GL_UNUSED_PARAMETER)
 {
   return 0;
 }
 
 int
-system_configure (int sfd, struct ifreq *ifr, struct system_ifconfig *ifs)
+system_configure (int sfd _GL_UNUSED_PARAMETER,
+                 struct ifreq *ifr _GL_UNUSED_PARAMETER,
+                 struct system_ifconfig *ifs _GL_UNUSED_PARAMETER)
 {
   return 0;
 }
diff --git a/ifconfig/system/hurd.c b/ifconfig/system/hurd.c
new file mode 100644
index 0000000..3bd1977
--- /dev/null
+++ b/ifconfig/system/hurd.c
@@ -0,0 +1,292 @@
+/* hurd.c -- Code for ifconfig specific to GNU/Hurd.
+  Copyright (C) 2015 Free Software Foundation, Inc.
+
+  This file is part of GNU Inetutils.
+
+  GNU Inetutils is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or (at
+  your option) any later version.
+
+  GNU Inetutils is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see `http://www.gnu.org/licenses/'. */
+
+/* Mostly written by Marcus Brinkmann.
+   Adaptions to GNU/Hurd by Mats Erik Andersson.  */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <net/if_arp.h>
+#include "../ifconfig.h"
+
+#include <unused-parameter.h>
+
+
+/* Output format stuff.  */
+
+const char *system_default_format = "gnu";
+
+
+/* Argument parsing stuff.  */
+
+const char *system_help = "NAME [ADDR]\
+ [broadcast BRDADDR] [netmask MASK]\
+ [mtu N] [up|down] [FLAGS]";
+
+struct argp_child system_argp_child;
+
+int
+system_parse_opt (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
+                 char option _GL_UNUSED_PARAMETER,
+                 char *optarg _GL_UNUSED_PARAMETER)
+{
+  return 0;
+}
+
+int
+system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
+{
+  int i = 0, mask, rev;
+  enum {
+    EXPECT_NOTHING,
+    EXPECT_AF,
+    EXPECT_BROADCAST,
+    EXPECT_NETMASK,
+    EXPECT_METRIC,
+    EXPECT_MTU
+  } expect = EXPECT_AF;
+
+  *ifp = parse_opt_new_ifs (argv[0]);
+
+  while (++i < argc)
+    {
+      switch (expect)
+       {
+       case EXPECT_BROADCAST:
+         parse_opt_set_brdaddr (*ifp, argv[i]);
+         break;
+
+       case EXPECT_NETMASK:
+         parse_opt_set_netmask (*ifp, argv[i]);
+         break;
+
+       case EXPECT_MTU:
+         parse_opt_set_mtu (*ifp, argv[i]);
+         break;
+
+       /* XXX: 2015-07-18, GNU/Hurd does not yet support
+               ioctl(SIOCSIFMETRIC), but we let the code
+               handle this standard ability anyway!
+        */
+       case EXPECT_METRIC:
+         parse_opt_set_metric (*ifp, argv[i]);
+         break;
+
+       case EXPECT_AF:
+         expect = EXPECT_NOTHING;
+         if (!strcmp (argv[i], "inet"))
+           continue;
+         else if (!strcmp (argv[i], "inet6"))
+           {
+             error (0, 0, "%s is not a supported address family", argv[i]);
+             return 0;
+           }
+         break;
+
+       case EXPECT_NOTHING:
+         break;
+       }
+
+      if (expect != EXPECT_NOTHING)
+       expect = EXPECT_NOTHING;
+      else if (!strcmp (argv[i], "broadcast"))
+       expect = EXPECT_BROADCAST;
+      else if (!strcmp (argv[i], "netmask"))
+       expect = EXPECT_NETMASK;
+      else if (!strcmp (argv[i], "metric"))
+       expect = EXPECT_METRIC;
+      else if (!strcmp (argv[i], "mtu"))
+       expect = EXPECT_MTU;
+      else if (!strcmp (argv[i], "up"))
+       parse_opt_set_flag (*ifp, IFF_UP | IFF_RUNNING, 0);
+      else if (!strcmp (argv[i], "down"))
+       parse_opt_set_flag (*ifp, IFF_UP, 1);
+      else if (((mask = if_nameztoflag (argv[i], &rev))
+               & ~IU_IFF_CANTCHANGE) != 0)
+       parse_opt_set_flag (*ifp, mask, rev);
+      else
+       {
+         if (!((*ifp)->valid & IF_VALID_ADDR))
+           parse_opt_set_address (*ifp, argv[i]);
+         else if (!((*ifp)->valid & IF_VALID_DSTADDR))
+           parse_opt_set_dstaddr (*ifp, argv[i]);
+       }
+    }
+
+  switch (expect)
+    {
+    case EXPECT_BROADCAST:
+      error (0, 0, "option `broadcast' requires an argument");
+      break;
+
+    case EXPECT_NETMASK:
+      error (0, 0, "option `netmask' requires an argument");
+      break;
+
+    case EXPECT_METRIC:
+      error (0, 0, "option `metric' requires an argument");
+      break;
+
+    case EXPECT_MTU:
+      error (0, 0, "option `mtu' requires an argument");
+      break;
+
+    case EXPECT_AF:
+    case EXPECT_NOTHING:
+      return 1;
+    }
+
+  return 0;
+}
+
+int
+system_configure (int sfd _GL_UNUSED_PARAMETER,
+                 struct ifreq *ifr _GL_UNUSED_PARAMETER,
+                 struct system_ifconfig *ifs _GL_UNUSED_PARAMETER)
+{
+  return 0;
+}
+
+struct if_nameindex* (*system_if_nameindex) (void) = if_nameindex;
+
+static void
+print_hwaddr_ether (format_data_t form _GL_UNUSED_PARAMETER,
+                   unsigned char *data)
+{
+  *column += printf ("%02X:%02X:%02X:%02X:%02X:%02X",
+                    data[0], data[1], data[2], data[3], data[4], data[5]);
+  had_output = 1;
+}
+
+struct arphrd_symbol
+{
+  const char *name;
+  const char *title;
+  int value;
+  void (*print_hwaddr) (format_data_t form, unsigned char *data);
+} arphrd_symbols[] =
+  {
+#ifdef ARPHRD_ETHER            /* Ethernet 10/100Mbps.  */
+    { "ETHER", "Ethernet", ARPHRD_ETHER, print_hwaddr_ether},
+#endif
+#ifdef ARPHRD_LOOPBACK         /* Loopback device.  */
+    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK, NULL},
+#endif
+    /* XXX: The image debian-hurd-20150424 returns the value 4
+           instead of expected ARPHRD_LOOPBACK.  This has been
+           discussed in the list debian-hurd, where I was asked
+           to resist the temptation of a work around!
+     */
+    { NULL, NULL, 0, NULL}
+  };
+
+struct arphrd_symbol *
+arphrd_findvalue (int value)
+{
+  struct arphrd_symbol *arp = arphrd_symbols;
+  while (arp->name != NULL)
+    {
+      if (arp->value == value)
+       break;
+      arp++;
+    }
+  if (arp->name)
+    return arp;
+  else
+    return NULL;
+}
+
+void
+system_fh_hwaddr_query (format_data_t form, int argc, char *argv[])
+{
+#ifdef SIOCGIFHWADDR
+  struct arphrd_symbol *arp;
+
+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
+    select_arg (form, argc, argv, 1);
+
+  arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
+  select_arg (form, argc, argv, (arp && arp->print_hwaddr) ? 0 : 1);
+#else
+  select_arg (form, argc, argv, 1);
+#endif
+}
+
+void
+system_fh_hwaddr (format_data_t form, int argc _GL_UNUSED_PARAMETER,
+                 char *argv[] _GL_UNUSED_PARAMETER)
+{
+#ifdef SIOCGIFHWADDR
+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
+    error (EXIT_FAILURE, errno,
+          "SIOCGIFHWADDR failed for interface `%s'",
+          form->ifr->ifr_name);
+  else
+    {
+      struct arphrd_symbol *arp;
+
+      arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
+      if (arp && arp->print_hwaddr)
+       arp->print_hwaddr (form,
+                          (unsigned char *) form->ifr->ifr_hwaddr.sa_data);
+      else
+       put_string (form, "(hwaddr unknown)");
+    }
+#else
+  *column += printf ("(not available)");
+  had_output = 1;
+#endif
+}
+
+void
+system_fh_hwtype_query (format_data_t form, int argc, char *argv[])
+{
+#ifdef SIOCGIFHWADDR
+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) >= 0)
+    select_arg (form, argc, argv, 0);
+  else
+#endif
+    select_arg (form, argc, argv, 1);
+}
+
+void
+system_fh_hwtype (format_data_t form, int argc _GL_UNUSED_PARAMETER,
+                 char *argv[] _GL_UNUSED_PARAMETER)
+{
+#ifdef SIOCGIFHWADDR
+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
+    error (EXIT_FAILURE, errno,
+          "SIOCGIFHWADDR failed for interface `%s'",
+          form->ifr->ifr_name);
+  else
+    {
+      struct arphrd_symbol *arp;
+
+      arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
+      if (arp)
+       put_string (form, arp->title);
+      else
+       put_string (form, "(hwtype unknown)");
+    }
+#else
+  *column += printf ("(not available)");
+  had_output = 1;
+#endif
+}
diff --git a/ifconfig/system/hurd.h b/ifconfig/system/hurd.h
new file mode 100644
index 0000000..bab1456
--- /dev/null
+++ b/ifconfig/system/hurd.h
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2015 Free Software Foundation, Inc.
+
+  This file is part of GNU Inetutils.
+
+  GNU Inetutils is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or (at
+  your option) any later version.
+
+  GNU Inetutils is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see `http://www.gnu.org/licenses/'. */
+
+/* Written by Mats Erik Andersson.  */
+
+#ifndef IFCONFIG_SYSTEM_HURD_H
+# define IFCONFIG_SYSTEM_HURD_H
+
+# include "../printif.h"
+# include "../options.h"
+
+
+/* Option support.  */
+
+struct system_ifconfig
+{
+  int valid;
+};
+
+
+/* Output format support.  */
+
+# define SYSTEM_FORMAT_HANDLER \
+  { "hurd", fh_nothing}, \
+  { "hwaddr?", system_fh_hwaddr_query}, \
+  { "hwaddr", system_fh_hwaddr}, \
+  { "hwtype?", system_fh_hwtype_query}, \
+  { "hwtype", system_fh_hwtype},
+
+void system_fh_hwaddr_query (format_data_t form, int argc, char *argv[]);
+void system_fh_hwaddr (format_data_t form, int argc, char *argv[]);
+void system_fh_hwtype_query (format_data_t form, int argc, char *argv[]);
+void system_fh_hwtype (format_data_t form, int argc, char *argv[]);
+
+#endif /* !IFCONFIG_SYSTEM_HURD_H */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                             |   17 ++
 ifconfig/system.c                     |   10 +-
 ifconfig/system.h                     |    2 +
 ifconfig/system/Makefile.am           |    4 +-
 ifconfig/system/generic.c             |   14 ++-
 ifconfig/system/hurd.c                |  292 +++++++++++++++++++++++++++++++++
 ifconfig/system/{solaris.h => hurd.h} |   34 ++--
 7 files changed, 347 insertions(+), 26 deletions(-)
 create mode 100644 ifconfig/system/hurd.c
 copy ifconfig/system/{solaris.h => hurd.h} (57%)


hooks/post-receive
-- 
GNU Inetutils 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]