aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Blundell <philb@gnu.org>1998-01-14 13:31:49 +0000
committerPhil Blundell <philb@gnu.org>1998-01-14 13:31:49 +0000
commitf90b7ae57c45942d829aef03b044c91d35c7d89a (patch)
tree7ed87b541d16f59431403091be8ce6b7eb89e21a
parentAdd txqueuelen argument to ifconfig. (diff)
downloadnet-tools-f90b7ae57c45942d829aef03b044c91d35c7d89a.tar.gz
net-tools-f90b7ae57c45942d829aef03b044c91d35c7d89a.tar.bz2
net-tools-f90b7ae57c45942d829aef03b044c91d35c7d89a.zip
Add Ash support
-rw-r--r--config.in2
-rw-r--r--lib/ash.c102
-rw-r--r--lib/hw.c7
3 files changed, 111 insertions, 0 deletions
diff --git a/config.in b/config.in
index 64eb51c..8b246ec 100644
--- a/config.in
+++ b/config.in
@@ -81,3 +81,5 @@ bool 'AX25 (Packet Radio) support' HAVE_HWAX25 y
bool 'NET/ROM (Packet Radio) support' HAVE_HWNETROM y
bool 'DLCI/FRAD (Frame Relay) support' HAVE_HWFR y
bool 'SIT (IPv6-in-IPv4) support' HAVE_HWSIT n
+bool 'Ash support' HAVE_HWASH y
+
diff --git a/lib/ash.c b/lib/ash.c
new file mode 100644
index 0000000..a5a0a8a
--- /dev/null
+++ b/lib/ash.c
@@ -0,0 +1,102 @@
+/*
+ * lib/ash.c This file contains an implementation of the Ash
+ * support functions for the NET-2 base distribution.
+ */
+
+#include "config.h"
+
+#if HAVE_HWASH
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <net/if_arp.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <ctype.h>
+#include <string.h>
+#include <unistd.h>
+#include "net-support.h"
+#include "pathnames.h"
+#define EXTERN
+#include "net-locale.h"
+
+#undef ARPHRD_ASH64
+#define ARPHRD_ASH64 517
+#define ASH_ALEN 32
+
+extern struct hwtype ash_hwtype;
+
+/* Display an Ash address in readable format. */
+static char *
+pr_ash(unsigned char *ptr)
+{
+ static char buff[128];
+ char *p = buff;
+ unsigned int i = 0;
+
+ while (ptr[i] != 0xc9 && (i < ASH_ALEN)) {
+ sprintf(p, "%x:", ptr[i]);
+ i++;
+ p += 2;
+ }
+
+ if (p != buff)
+ p[-1] = 0;
+ else
+ p[0] = 0;
+ return buff;
+}
+
+/* Display an Ash socket address. */
+static char *
+pr_sash(struct sockaddr *sap)
+{
+ static char buf[64];
+
+ if (sap->sa_family == 0xFFFF || sap->sa_family == 0)
+ return strncpy(buf, "[NONE SET]", 64);
+ return(pr_ash(sap->sa_data));
+}
+
+
+static int
+in_ash(char *bufp, struct sockaddr *sap)
+{
+ unsigned char *ptr;
+ unsigned int i = 0;
+
+ sap->sa_family = ash_hwtype.type;
+ ptr = sap->sa_data;
+
+ while (bufp && i < 32) {
+ char *next;
+ int hop = strtol(bufp, &next, 16);
+ ptr[i++] = hop;
+ switch (*next) {
+ case ':':
+ bufp = next + 1;
+ break;
+ case 0:
+ bufp = NULL;
+ break;
+ default:
+ fprintf(stderr, "Malformed Ash address");
+ memset(ptr, 0xc9, 32);
+ return -1;
+ }
+ }
+
+ while (i < 32)
+ ptr[i++] = 0xc9;
+
+ return 0;
+}
+
+
+struct hwtype ash_hwtype = {
+ "ash", NULL, ARPHRD_ASH64, ASH_ALEN,
+ pr_ash, pr_sash, in_ash, NULL
+};
+
+#endif
diff --git a/lib/hw.c b/lib/hw.c
index 34ab207..8cc3d7e 100644
--- a/lib/hw.c
+++ b/lib/hw.c
@@ -48,6 +48,7 @@ extern struct hwtype tr_hwtype;
extern struct hwtype ax25_hwtype;
extern struct hwtype netrom_hwtype;
extern struct hwtype tunnel_hwtype;
+extern struct hwtype ash_hwtype;
extern struct hwtype ppp_hwtype;
@@ -69,6 +70,9 @@ static struct hwtype *hwtypes[] = {
&cslip6_hwtype,
&adaptive_hwtype,
#endif
+#if HAVE_HWASH
+ &ash_hwtype,
+#endif
#if HAVE_HWETHER
&ether_hwtype,
#endif
@@ -117,6 +121,9 @@ void hwinit ()
#if HAVE_HWETHER
ether_hwtype.title = NLS_CATSAVE (catfd, etherSet, ether_ether, "Ethernet");
#endif
+#if HAVE_HWASH
+ ash_hwtype.title = NLS_CATSAVE (catfd, ashSet, ash_hw, "64Mbps ASH");
+#endif
#if HAVE_HWAX25
ax25_hwtype.title = NLS_CATSAVE (catfd, ax25Set, ax25_hw, "AMPR AX.25");
#endif