mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-12 09:56:14 -05:00
584 lines
16 KiB
Diff
584 lines
16 KiB
Diff
|
Support compiling on the Hurd.
|
|||
|
|
|||
|
Taken from https://git.hadrons.org/cgit/debian/pkgs/inetutils.git/tree/debian/patches/0002-ifconfig-Improve-the-support-for-GNU-Hurd.patch
|
|||
|
|
|||
|
From 9a90d9b9119906df23cb2db1503cb0f099942dd9 Mon Sep 17 00:00:00 2001
|
|||
|
From: Mats Erik Andersson <gnu@gisladisker.se>
|
|||
|
Date: Sat, 18 Jul 2015 01:12:41 +0200
|
|||
|
Subject: [PATCH 02/35] ifconfig: Improve the support for GNU/Hurd.
|
|||
|
|
|||
|
Use system specific code instead of generic code.
|
|||
|
This provides abilities similar to other systems.
|
|||
|
---
|
|||
|
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/hurd.h | 50 ++++++
|
|||
|
7 files changed, 381 insertions(+), 8 deletions(-)
|
|||
|
create mode 100644 ifconfig/system/hurd.c
|
|||
|
create mode 100644 ifconfig/system/hurd.h
|
|||
|
|
|||
|
diff --git a/ifconfig/system.c b/ifconfig/system.c
|
|||
|
index 30677e41..e108dc2e 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 8521ad95..66878d3a 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 954c6774..62a9f1c4 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 9a2bda55..20a78bde 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 00000000..3bd19775
|
|||
|
--- /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 00000000..bab14565
|
|||
|
--- /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 */
|
|||
|
--
|
|||
|
2.23.0.rc1.170.gbd704faa3e
|
|||
|
|
|||
|
From 589dab9c7d3119da82837dabae34c8a3d16cbe49 Mon Sep 17 00:00:00 2001
|
|||
|
From: Mats Erik Andersson <gnu@gisladisker.se>
|
|||
|
Date: Thu, 30 Jul 2015 01:06:42 +0200
|
|||
|
Subject: [PATCH 07/35] ifconfig: Hardware detection in GNU/Hurd.
|
|||
|
|
|||
|
A work-around needed to distinguish hardware type.
|
|||
|
---
|
|||
|
ChangeLog | 10 ++++++++++
|
|||
|
ifconfig/system/hurd.c | 19 ++++++++++++-------
|
|||
|
2 files changed, 22 insertions(+), 7 deletions(-)
|
|||
|
|
|||
|
diff --git a/ifconfig/system/hurd.c b/ifconfig/system/hurd.c
|
|||
|
index 3bd19775..b6261a00 100644
|
|||
|
--- a/ifconfig/system/hurd.c
|
|||
|
+++ b/ifconfig/system/hurd.c
|
|||
|
@@ -175,6 +175,16 @@ print_hwaddr_ether (format_data_t form _GL_UNUSED_PARAMETER,
|
|||
|
had_output = 1;
|
|||
|
}
|
|||
|
|
|||
|
+/* GNU/Hurd and Mach are using a mixture of BSD definitions
|
|||
|
+ * and GNU/Linux interface headers, which in this situation
|
|||
|
+ * means that sa_family_t is an unsigned char, from BSD, while
|
|||
|
+ * all ARPHRD_* come from GNU/Linux and are thus 16 bits wide.
|
|||
|
+ * We must account for this. The following bitmask will
|
|||
|
+ * adapt to any future change!
|
|||
|
+ */
|
|||
|
+
|
|||
|
+#define _ARP_MASK ((sizeof (sa_family_t) == 1) ? 0xff : 0xffff)
|
|||
|
+
|
|||
|
struct arphrd_symbol
|
|||
|
{
|
|||
|
const char *name;
|
|||
|
@@ -184,16 +194,11 @@ struct arphrd_symbol
|
|||
|
} arphrd_symbols[] =
|
|||
|
{
|
|||
|
#ifdef ARPHRD_ETHER /* Ethernet 10/100Mbps. */
|
|||
|
- { "ETHER", "Ethernet", ARPHRD_ETHER, print_hwaddr_ether},
|
|||
|
+ { "ETHER", "Ethernet", ARPHRD_ETHER & _ARP_MASK, print_hwaddr_ether},
|
|||
|
#endif
|
|||
|
#ifdef ARPHRD_LOOPBACK /* Loopback device. */
|
|||
|
- { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK, NULL},
|
|||
|
+ { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK & _ARP_MASK, 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}
|
|||
|
};
|
|||
|
|
|||
|
--
|
|||
|
2.23.0.rc1.170.gbd704faa3e
|
|||
|
|
|||
|
From d379784b4461d17b2536effd1b52bae21cd28a32 Mon Sep 17 00:00:00 2001
|
|||
|
From: Guillem Jover <guillem@hadrons.org>
|
|||
|
Date: Fri, 16 Aug 2019 00:34:03 +0200
|
|||
|
Subject: [PATCH 35/35] telnet: Several ioctls have been disabled in the Hurd's
|
|||
|
glibc
|
|||
|
|
|||
|
But not the related option macros. inetutils uses those macros to decide
|
|||
|
whether the ioctls are available, so it is FTBFS now. The Hurd's glibc
|
|||
|
is being fixed, but we'll use this for now to get the builds going.
|
|||
|
---
|
|||
|
telnet/sys_bsd.c | 7 ++++++-
|
|||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
|||
|
|
|||
|
diff --git a/telnet/sys_bsd.c b/telnet/sys_bsd.c
|
|||
|
index 662536ab..5eb35cb5 100644
|
|||
|
--- a/telnet/sys_bsd.c
|
|||
|
+++ b/telnet/sys_bsd.c
|
|||
|
@@ -63,6 +63,7 @@
|
|||
|
#include <errno.h>
|
|||
|
#include <arpa/telnet.h>
|
|||
|
#include <sys/select.h>
|
|||
|
+#include <sys/ioctl.h>
|
|||
|
#include <unused-parameter.h>
|
|||
|
|
|||
|
#include "ring.h"
|
|||
|
@@ -157,7 +158,7 @@ TerminalRead (char *buf, int n)
|
|||
|
int
|
|||
|
TerminalAutoFlush (void)
|
|||
|
{
|
|||
|
-#if defined LNOFLSH
|
|||
|
+#if defined TIOCLGET && defined LNOFLSH
|
|||
|
int flush;
|
|||
|
|
|||
|
ioctl (0, TIOCLGET, (char *) &flush);
|
|||
|
@@ -260,7 +261,9 @@ TerminalSaveState (void)
|
|||
|
ioctl (0, TIOCGETP, (char *) &ottyb);
|
|||
|
ioctl (0, TIOCGETC, (char *) &otc);
|
|||
|
ioctl (0, TIOCGLTC, (char *) &oltc);
|
|||
|
+#ifdef TIOCLGET
|
|||
|
ioctl (0, TIOCLGET, (char *) &olmode);
|
|||
|
+#endif
|
|||
|
|
|||
|
ntc = otc;
|
|||
|
nltc = oltc;
|
|||
|
@@ -755,7 +758,9 @@ TerminalNewMode (register int f)
|
|||
|
#endif
|
|||
|
}
|
|||
|
#ifndef USE_TERMIO
|
|||
|
+#ifdef TIOCLSET
|
|||
|
ioctl (tin, TIOCLSET, (char *) &lmode);
|
|||
|
+#endif
|
|||
|
ioctl (tin, TIOCSLTC, (char *) <c);
|
|||
|
ioctl (tin, TIOCSETC, (char *) &tc);
|
|||
|
ioctl (tin, TIOCSETN, (char *) &sb);
|
|||
|
--
|
|||
|
2.23.0.rc1.170.gbd704faa3e
|
|||
|
|