diff options
author | Phil Blundell <philb@gnu.org> | 1998-01-14 13:31:49 +0000 |
---|---|---|
committer | Phil Blundell <philb@gnu.org> | 1998-01-14 13:31:49 +0000 |
commit | f90b7ae57c45942d829aef03b044c91d35c7d89a (patch) | |
tree | 7ed87b541d16f59431403091be8ce6b7eb89e21a | |
parent | Add txqueuelen argument to ifconfig. (diff) | |
download | net-tools-f90b7ae57c45942d829aef03b044c91d35c7d89a.tar.gz net-tools-f90b7ae57c45942d829aef03b044c91d35c7d89a.tar.bz2 net-tools-f90b7ae57c45942d829aef03b044c91d35c7d89a.zip |
Add Ash support
-rw-r--r-- | config.in | 2 | ||||
-rw-r--r-- | lib/ash.c | 102 | ||||
-rw-r--r-- | lib/hw.c | 7 |
3 files changed, 111 insertions, 0 deletions
@@ -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 @@ -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 ðer_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 |