203 lines
5.1 KiB
Diff
203 lines
5.1 KiB
Diff
|
--- config.in 2000-05-21 07:32:12.000000000 -0700
|
||
|
+++ config.in 2005-02-07 10:45:14.108286619 -0800
|
||
|
@@ -82,6 +82,7 @@
|
||
|
bool '(Cisco)-HDLC/LAPB support' HAVE_HWHDLCLAPB n
|
||
|
bool 'IrDA support' HAVE_HWIRDA y
|
||
|
bool 'Econet hardware support' HAVE_HWEC n
|
||
|
+bool 'InfiniBand hardware support' HAVE_HWIB y
|
||
|
*
|
||
|
*
|
||
|
* Other Features.
|
||
|
--- lib/hw.c 2000-05-20 11:27:25.000000000 -0700
|
||
|
+++ lib/hw.c 2005-02-07 09:56:22.315428035 -0800
|
||
|
@@ -73,6 +73,8 @@
|
||
|
|
||
|
extern struct hwtype ec_hwtype;
|
||
|
|
||
|
+extern struct hwtype ib_hwtype;
|
||
|
+
|
||
|
static struct hwtype *hwtypes[] =
|
||
|
{
|
||
|
|
||
|
@@ -144,6 +146,9 @@
|
||
|
#if HAVE_HWX25
|
||
|
&x25_hwtype,
|
||
|
#endif
|
||
|
+#if HAVE_HWIB
|
||
|
+ &ib_hwtype,
|
||
|
+#endif
|
||
|
&unspec_hwtype,
|
||
|
NULL
|
||
|
};
|
||
|
@@ -217,6 +222,9 @@
|
||
|
#if HAVE_HWEC
|
||
|
ec_hwtype.title = _("Econet");
|
||
|
#endif
|
||
|
+#if HAVE_HWIB
|
||
|
+ ib_hwtype.title = _("InfiniBand");
|
||
|
+#endif
|
||
|
sVhwinit = 1;
|
||
|
}
|
||
|
|
||
|
--- lib/ib.c 1969-12-31 16:00:00.000000000 -0800
|
||
|
+++ lib/ib.c 2005-02-07 12:55:04.635559244 -0800
|
||
|
@@ -0,0 +1,147 @@
|
||
|
+/*
|
||
|
+ * lib/ib.c This file contains an implementation of the "Infiniband"
|
||
|
+ * support functions.
|
||
|
+ *
|
||
|
+ * Version: $Id: ib.c,v 1.1 2005/02/06 11:00:47 tduffy Exp $
|
||
|
+ *
|
||
|
+ * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
|
||
|
+ * Copyright 1993 MicroWalt Corporation
|
||
|
+ * Tom Duffy <tduffy@sun.com>
|
||
|
+ *
|
||
|
+ * This program 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 2 of the License, or (at
|
||
|
+ * your option) any later version.
|
||
|
+ */
|
||
|
+#include "config.h"
|
||
|
+
|
||
|
+#if HAVE_HWIB
|
||
|
+#include <sys/types.h>
|
||
|
+#include <sys/socket.h>
|
||
|
+#include <net/if_arp.h>
|
||
|
+#include <linux/if_infiniband.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"
|
||
|
+#include "intl.h"
|
||
|
+#include "util.h"
|
||
|
+
|
||
|
+extern struct hwtype ib_hwtype;
|
||
|
+
|
||
|
+
|
||
|
+/* Display an InfiniBand address in readable format. */
|
||
|
+static char *pr_ib(unsigned char *ptr)
|
||
|
+{
|
||
|
+ static char buff[128];
|
||
|
+ char *pos;
|
||
|
+ unsigned int i;
|
||
|
+
|
||
|
+ pos = buff;
|
||
|
+ for (i = 0; i < INFINIBAND_ALEN; i++) {
|
||
|
+ pos += sprintf(pos, "%02X:", (*ptr++ & 0377));
|
||
|
+ }
|
||
|
+ buff[strlen(buff) - 1] = '\0';
|
||
|
+
|
||
|
+ /* snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X",
|
||
|
+ (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
|
||
|
+ (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
|
||
|
+ );
|
||
|
+ */
|
||
|
+ return (buff);
|
||
|
+}
|
||
|
+
|
||
|
+
|
||
|
+/* Input an Infiniband address and convert to binary. */
|
||
|
+static int in_ib(char *bufp, struct sockaddr *sap)
|
||
|
+{
|
||
|
+ unsigned char *ptr;
|
||
|
+ char c, *orig;
|
||
|
+ int i;
|
||
|
+ unsigned val;
|
||
|
+
|
||
|
+ sap->sa_family = ib_hwtype.type;
|
||
|
+ ptr = sap->sa_data;
|
||
|
+
|
||
|
+ i = 0;
|
||
|
+ orig = bufp;
|
||
|
+ while ((*bufp != '\0') && (i < INFINIBAND_ALEN)) {
|
||
|
+ val = 0;
|
||
|
+ c = *bufp++;
|
||
|
+ if (isdigit(c))
|
||
|
+ val = c - '0';
|
||
|
+ else if (c >= 'a' && c <= 'f')
|
||
|
+ val = c - 'a' + 10;
|
||
|
+ else if (c >= 'A' && c <= 'F')
|
||
|
+ val = c - 'A' + 10;
|
||
|
+ else {
|
||
|
+#ifdef DEBUG
|
||
|
+ fprintf(stderr, _("in_ib(%s): invalid infiniband address!\n"), orig);
|
||
|
+#endif
|
||
|
+ errno = EINVAL;
|
||
|
+ return (-1);
|
||
|
+ }
|
||
|
+ val <<= 4;
|
||
|
+ c = *bufp;
|
||
|
+ if (isdigit(c))
|
||
|
+ val |= c - '0';
|
||
|
+ else if (c >= 'a' && c <= 'f')
|
||
|
+ val |= c - 'a' + 10;
|
||
|
+ else if (c >= 'A' && c <= 'F')
|
||
|
+ val |= c - 'A' + 10;
|
||
|
+ else if (c == ':' || c == 0)
|
||
|
+ val >>= 4;
|
||
|
+ else {
|
||
|
+#ifdef DEBUG
|
||
|
+ fprintf(stderr, _("in_ib(%s): invalid infiniband address!\n"), orig);
|
||
|
+#endif
|
||
|
+ errno = EINVAL;
|
||
|
+ return (-1);
|
||
|
+ }
|
||
|
+ if (c != 0)
|
||
|
+ bufp++;
|
||
|
+ *ptr++ = (unsigned char) (val & 0377);
|
||
|
+ i++;
|
||
|
+
|
||
|
+ /* We might get a semicolon here - not required. */
|
||
|
+ if (*bufp == ':') {
|
||
|
+ if (i == INFINIBAND_ALEN) {
|
||
|
+#ifdef DEBUG
|
||
|
+ fprintf(stderr, _("in_ib(%s): trailing : ignored!\n"),
|
||
|
+ orig)
|
||
|
+#endif
|
||
|
+ ; /* nothing */
|
||
|
+ }
|
||
|
+ bufp++;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ /* That's it. Any trailing junk? */
|
||
|
+ if ((i == INFINIBAND_ALEN) && (*bufp != '\0')) {
|
||
|
+#ifdef DEBUG
|
||
|
+ fprintf(stderr, _("in_ib(%s): trailing junk!\n"), orig);
|
||
|
+ errno = EINVAL;
|
||
|
+ return (-1);
|
||
|
+#endif
|
||
|
+ }
|
||
|
+#ifdef DEBUG
|
||
|
+ fprintf(stderr, "in_ib(%s): %s\n", orig, pr_ib(sap->sa_data));
|
||
|
+#endif
|
||
|
+
|
||
|
+ return (0);
|
||
|
+}
|
||
|
+
|
||
|
+
|
||
|
+struct hwtype ib_hwtype =
|
||
|
+{
|
||
|
+ "infiniband", NULL, ARPHRD_INFINIBAND, INFINIBAND_ALEN,
|
||
|
+ pr_ib, in_ib, NULL
|
||
|
+};
|
||
|
+
|
||
|
+
|
||
|
+#endif /* HAVE_HWETHER */
|
||
|
--- lib/Makefile 2000-10-28 03:59:42.000000000 -0700
|
||
|
+++ lib/Makefile 2005-02-07 10:02:14.662640164 -0800
|
||
|
@@ -16,7 +16,7 @@
|
||
|
#
|
||
|
|
||
|
|
||
|
-HWOBJS = hw.o loopback.o slip.o ether.o ax25.o ppp.o arcnet.o tr.o tunnel.o frame.o sit.o rose.o ash.o fddi.o hippi.o hdlclapb.o strip.o irda.o ec_hw.o x25.o
|
||
|
+HWOBJS = hw.o loopback.o slip.o ether.o ax25.o ppp.o arcnet.o tr.o tunnel.o frame.o sit.o rose.o ash.o fddi.o hippi.o hdlclapb.o strip.o irda.o ec_hw.o x25.o ib.o
|
||
|
AFOBJS = unix.o inet.o inet6.o ax25.o ipx.o ddp.o ipx.o netrom.o af.o rose.o econet.o x25.o
|
||
|
AFGROBJS = inet_gr.o inet6_gr.o ipx_gr.o ddp_gr.o netrom_gr.o ax25_gr.o rose_gr.o getroute.o x25_gr.o
|
||
|
AFSROBJS = inet_sr.o inet6_sr.o netrom_sr.o ipx_sr.o setroute.o x25_sr.o
|