Add Ash support
authorPhil Blundell <philb@gnu.org>
Wed, 14 Jan 1998 13:31:49 +0000 (13:31 +0000)
committerPhil Blundell <philb@gnu.org>
Wed, 14 Jan 1998 13:31:49 +0000 (13:31 +0000)
config.in
lib/ash.c [new file with mode: 0644]
lib/hw.c

index 64eb51c..8b246ec 100644 (file)
--- 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 (file)
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
index 34ab207..8cc3d7e 100644 (file)
--- 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