Are there any plans to modify the linux DHCP client so it would be
possible to do kernel-level DHCP and NFSroot over IB?

-JE

Hal Rosenstock wrote:
> I just spent a little time porting ISC DHCP-3.0.2 to support DHCP over
> Infiniband per IETF Internet Draft
> draft-ietf-ipoib-dhcp-over-infiniband-09.txt. There are a couple of
> minor things to verify before making this available to
> [EMAIL PROTECTED] I wanted to make this available to this community
> first. Any feedback is welcome.
> 
> -- Hal
> 
> diff -urN dhcp-3.0.2.orig/common/bpf.c dhcp-3.0.2/common/bpf.c
> --- dhcp-3.0.2.orig/common/bpf.c      2004-11-24 12:39:15.000000000 -0500
> +++ dhcp-3.0.2/common/bpf.c   2005-03-25 15:38:57.000000000 -0500
> @@ -194,6 +194,41 @@
>       BPF_STMT(BPF_RET+BPF_K, 0),
>  };
>  
> +#if defined (HAVE_IPOIB_SUPPORT)
> +/* Packet filter program...
> +   XXX Changes to the filter program may require changes to the constant
> +   offsets used in if_register_send to patch the BPF program! XXX */
> +
> +struct bpf_insn dhcp_bpf_ipoib_filter [] = {
> +     /* Make sure this is an IP packet... */
> +     BPF_STMT (BPF_LD + BPF_H + BPF_ABS, 0),
> +     BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, ETHERTYPE_IP, 0, 8),
> +
> +     /* Make sure it's a UDP packet... */
> +     BPF_STMT (BPF_LD + BPF_B + BPF_ABS, 13),
> +     BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, IPPROTO_UDP, 0, 6),
> +
> +     /* Make sure this isn't a fragment... */
> +     BPF_STMT(BPF_LD + BPF_H + BPF_ABS, 10),
> +     BPF_JUMP(BPF_JMP + BPF_JSET + BPF_K, 0x1fff, 4, 0),
> +
> +     /* Get the IP header length... */
> +     BPF_STMT (BPF_LDX + BPF_B + BPF_MSH, 4),
> +
> +     /* Make sure it's to the right port... */
> +     BPF_STMT (BPF_LD + BPF_H + BPF_IND, 6),
> +     BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 67, 0, 1),             /* patch */
> +
> +     /* If we passed all the tests, ask for the whole packet. */
> +     BPF_STMT(BPF_RET+BPF_K, (u_int)-1),
> +     /* Otherwise, drop it. */
> +     BPF_STMT(BPF_RET+BPF_K, 0),
> +};
> +
> +int dhcp_bpf_ipoib_filter_len = (sizeof dhcp_bpf_ipoib_filter /
> +                              sizeof (struct bpf_insn));
> +#endif
> +
>  #if defined (DEC_FDDI)
>  struct bpf_insn *bpf_fddi_filter;
>  #endif
> diff -urN dhcp-3.0.2.orig/common/conflex.c dhcp-3.0.2/common/conflex.c
> --- dhcp-3.0.2.orig/common/conflex.c  2004-11-24 12:39:15.000000000 -0500
> +++ dhcp-3.0.2/common/conflex.c       2005-03-26 07:49:40.000000000 -0500
> @@ -740,6 +740,8 @@
>                       return IS;
>               if (!strcasecmp (atom + 1, "gnore"))
>                       return IGNORE;
> +             if (!strcasecmp (atom + 1, "poib"))
> +                     return IPOIB;
>               break;
>             case 'k':
>               if (!strncasecmp (atom + 1, "nown", 4)) {
> diff -urN dhcp-3.0.2.orig/common/discover.c dhcp-3.0.2/common/discover.c
> --- dhcp-3.0.2.orig/common/discover.c 2004-06-10 13:59:16.000000000 -0400
> +++ dhcp-3.0.2/common/discover.c      2005-03-25 16:04:41.000000000 -0500
> @@ -484,6 +484,14 @@
>                       memcpy (&tmp -> hw_address.hbuf [1], sa.sa_data, 16);
>                       break;
>  
> +#ifndef HAVE_ARPHRD_IPOIB
> +# define ARPHRD_IPOIB HTYPE_IPOIB
> +#endif
> +                   case ARPHRD_IPOIB:
> +                     tmp -> hw_address.hlen = 1;
> +                     tmp -> hw_address.hbuf [0] = HTYPE_IPOIB;
> +                     break;
> +
>  #ifdef HAVE_ARPHRD_METRICOM
>                     case ARPHRD_METRICOM:
>                       tmp -> hw_address.hlen = 7;
> diff -urN dhcp-3.0.2.orig/common/ipoib.c dhcp-3.0.2/common/ipoib.c
> --- dhcp-3.0.2.orig/common/ipoib.c    1969-12-31 19:00:00.000000000 -0500
> +++ dhcp-3.0.2/common/ipoib.c 2005-03-29 23:45:52.000000000 -0500
> @@ -0,0 +1,110 @@
> +/* ipoib.c
> +
> +   Packet assembly code, originally contributed by Archie Cobbs. */
> +
> +/*
> + * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
> + * Copyright (c) 1996-2003 by Internet Software Consortium
> + *
> + * Permission to use, copy, modify, and distribute this software for any
> + * purpose with or without fee is hereby granted, provided that the above
> + * copyright notice and this permission notice appear in all copies.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
> + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> + * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
> + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
> + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> + *
> + *   Internet Systems Consortium, Inc.
> + *   950 Charter Street
> + *   Redwood City, CA 94063
> + *   <[EMAIL PROTECTED]>
> + *   http://www.isc.org/
> + *
> + * This software has been written for Internet Systems Consortium
> + * by Ted Lemon in cooperation with Vixie Enterprises and Nominum, Inc.
> + * To learn more about Internet Systems Consortium, see
> + * ``http://www.isc.org/''.  To learn more about Vixie Enterprises,
> + * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
> + * ``http://www.nominum.com''.
> + */
> +
> +#ifndef lint
> +static char copyright[] =
> +"$Id: ipoib.c,v 1.3.2.2 2004/06/10 17:59:18 dhankins Exp $ Copyright (c) 
> 2004 Internet Systems Consortium.  All rights reserved.\n";
> +#endif /* not lint */
> +
> +#include "dhcpd.h"
> +
> +#if defined (HAVE_IPOIB_SUPPORT)
> +
> +#define INFINIBAND_ALEN 20
> +
> +struct ipoib_header {
> +     u16 proto;
> +     u16 reserved;
> +};
> +
> +struct ipoib_pseudoheader {
> +     u8  hwaddr[INFINIBAND_ALEN];
> +};
> +
> +static const u8 ipv4_bcast_addr[] = {
> +     0x00, 0xff, 0xff, 0xff,
> +     0xff, 0x12, 0x40, 0x1b, 0x00, 0x00, 0x00, 0x00,
> +     0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
> +};
> +
> +#if defined (PACKET_ASSEMBLY) || defined (PACKET_DECODING)
> +#include "includes/netinet/if_ether.h"
> +#endif /* PACKET_ASSEMBLY || PACKET_DECODING */
> +
> +#if defined (PACKET_ASSEMBLY)
> +/* Assemble an hardware header... */
> +
> +void assemble_ipoib_header (interface, buf, bufix, to, toip)
> +     struct interface_info *interface;
> +     unsigned char *buf;
> +     unsigned *bufix;
> +     struct hardware *to;
> +     u_int32_t toip;
> +{
> +     struct ipoib_header hdr;
> +
> +     /* Need pseudoheader if some sort of broadcast */
> +     /* Only supports limited broadcast right now */
> +     /* Does subnet broadcast also needed to be supported ? */
> +     if (toip = 0xffffffff) {
> +             /* Fill in IPoIB pseudoheader */
> +             /* Currently assumes scope of 2 (link local)  */
> +             /* Might need to cycle through all scopes :-( */
> +             memcpy (&buf [*bufix], &ipv4_bcast_addr, 
> sizeof(ipv4_bcast_addr));
> +             *bufix += sizeof(ipv4_bcast_addr);
> +     }
> +
> +     hdr.proto = htons (ETHERTYPE_IP);
> +     hdr.reserved = 0;
> +
> +     memcpy (&buf [*bufix], &hdr, sizeof(hdr));
> +     *bufix += sizeof(hdr);  
> +}
> +#endif /* PACKET_ASSEMBLY */
> +
> +#ifdef PACKET_DECODING
> +/* Decode a hardware header... */
> +
> +ssize_t decode_ipoib_header (interface, buf, bufix, from)
> +     struct interface_info *interface;
> +     unsigned char *buf;
> +     unsigned bufix;
> +     struct hardware *from;
> +{
> +     from -> hbuf [0] = HTYPE_IPOIB;
> +     memcpy (&from -> hbuf [1], &buf [bufix], sizeof(struct ipoib_header));
> +     return sizeof(struct ipoib_header);
> +}
> +#endif /* PACKET_DECODING */
> +#endif /* HAVE_IPOIB_SUPPORT */
> diff -urN dhcp-3.0.2.orig/common/lpf.c dhcp-3.0.2/common/lpf.c
> --- dhcp-3.0.2.orig/common/lpf.c      2004-11-24 12:39:15.000000000 -0500
> +++ dhcp-3.0.2/common/lpf.c   2005-03-29 18:45:09.000000000 -0500
> @@ -168,6 +168,12 @@
>  static void lpf_tr_filter_setup (struct interface_info *);
>  #endif
>  
> +#if defined (HAVE_IPOIB_SUPPORT)
> +extern struct sock_filter dhcp_bpf_ipoib_filter [];
> +extern int dhcp_bpf_ipoib_filter_len;
> +static void lpf_ipoib_filter_setup (struct interface_info *);
> +#endif
> +
>  static void lpf_gen_filter_setup (struct interface_info *);
>  
>  void if_register_receive (info)
> @@ -181,6 +187,13 @@
>               lpf_tr_filter_setup (info);
>       else
>  #endif
> +
> +#if defined (HAVE_IPOIB_SUPPORT)
> +     if (info -> hw_address.hbuf [0] == HTYPE_IPOIB)
> +             lpf_ipoib_filter_setup (info);
> +     else
> +#endif
> +
>               lpf_gen_filter_setup (info);
>  
>       if (!quiet_interface_discovery)
> @@ -222,7 +235,7 @@
>       p.len = dhcp_bpf_filter_len;
>       p.filter = dhcp_bpf_filter;
>  
> -        /* Patch the server port into the LPF  program...
> +        /* Patch the server port into the LPF program...
>          XXX changes to filter program may require changes
>          to the insn number(s) used below! XXX */
>       dhcp_bpf_filter [8].k = ntohs ((short)local_port);
> @@ -254,7 +267,7 @@
>       p.len = dhcp_bpf_tr_filter_len;
>       p.filter = dhcp_bpf_tr_filter;
>  
> -        /* Patch the server port into the LPF  program...
> +        /* Patch the server port into the LPF program...
>          XXX changes to filter program may require changes
>          XXX to the insn number(s) used below!
>          XXX Token ring filter is null - when/if we have a filter 
> @@ -277,6 +290,38 @@
>       }
>  }
>  #endif /* HAVE_TR_SUPPORT */
> +
> +#ifdef HAVE_IPOIB_SUPPORT
> +static void lpf_ipoib_filter_setup (info)
> +     struct interface_info *info;
> +{
> +     struct sock_fprog p;
> +
> +     /* Set up the bpf filter program structure.    This is defined in
> +        bpf.c */
> +     p.len = dhcp_bpf_ipoib_filter_len;
> +     p.filter = dhcp_bpf_ipoib_filter;
> +
> +     /* Patch the server port into the LPF program...
> +        XXX changes to filter program may require changes
> +        to the insn number(s) used below! XXX */
> +     dhcp_bpf_ipoib_filter [8].k = ntohs ((short)local_port);
> +
> +     if (setsockopt (info -> rfdesc, SOL_SOCKET, SO_ATTACH_FILTER, &p,
> +                     sizeof p) < 0) {
> +             if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
> +                 errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||
> +                 errno == EAFNOSUPPORT) {
> +                     log_error ("socket: %m - make sure");
> +                     log_error ("CONFIG_PACKET (Packet socket) %s",
> +                                "and CONFIG_FILTER");
> +                     log_error ("(Socket Filtering) are enabled %s",
> +                                "in your kernel");
> +             }
> +             log_fatal ("Can't install packet filter program: %m");
> +     }
> +}
> +#endif /* HAVE_IPOIB_SUPPORT */
>  #endif /* USE_LPF_RECEIVE */
>  
>  #ifdef USE_LPF_SEND
> @@ -302,7 +347,7 @@
>                                     len, from, to, hto);
>  
>       /* Assemble the headers... */
> -     assemble_hw_header (interface, (unsigned char *)hh, &hbufp, hto);
> +     assemble_hw_header (interface, (unsigned char *)hh, &hbufp, hto, to -> 
> sin_addr.s_addr);
>       fudge = hbufp % 4;      /* IP header must be word-aligned. */
>       memcpy (buf + fudge, (unsigned char *)hh, hbufp);
>       ibufp = hbufp + fudge;
> @@ -312,7 +357,7 @@
>       memcpy (buf + ibufp, raw, len);
>  
>       /* For some reason, SOCK_PACKET sockets can't be connected,
> -        so we have to do a sentdo every time. */
> +        so we have to do a sendto every time. */
>       memset (&sa, 0, sizeof sa);
>       sa.sa_family = AF_PACKET;
>       strncpy (sa.sa_data,
> @@ -383,7 +428,14 @@
>  int can_receive_unicast_unconfigured (ip)
>       struct interface_info *ip;
>  {
> +#if defined (HAVE_IPOIB_SUPPORT)
> +     if (!strncmp (ip->name, "ib", 2))
> +             return 0;
> +     else
> +             return 1;
> +#else
>       return 1;
> +#endif
>  }
>  
>  int supports_multiple_interfaces (ip)
> diff -urN dhcp-3.0.2.orig/common/Makefile.dist dhcp-3.0.2/common/Makefile.dist
> --- dhcp-3.0.2.orig/common/Makefile.dist      2004-09-21 16:33:35.000000000 
> -0400
> +++ dhcp-3.0.2/common/Makefile.dist   2005-03-30 08:00:08.000000000 -0500
> @@ -24,11 +24,11 @@
>  SEDMANPAGES = dhcp-options.man5 dhcp-eval.man5
>  SRC    = raw.c parse.c nit.c icmp.c dispatch.c conflex.c upf.c bpf.c 
> socket.c \
>        lpf.c dlpi.c packet.c tr.c ethernet.c memory.c print.c options.c \
> -      inet.c tree.c tables.c alloc.c fddi.c ctrace.c dns.c resolv.c \
> +      inet.c tree.c tables.c alloc.c fddi.c ipoib.c ctrace.c dns.c resolv.c \
>        execute.c discover.c comapi.c
>  OBJ    = raw.o parse.o nit.o icmp.o dispatch.o conflex.o upf.o bpf.o 
> socket.o \
>        lpf.o dlpi.o packet.o tr.o ethernet.o memory.o print.o options.o \
> -      inet.o tree.o tables.o alloc.o fddi.o ctrace.o dns.o resolv.o \
> +      inet.o tree.o tables.o alloc.o fddi.o ipoib.o ctrace.o dns.o resolv.o \
>        execute.o discover.o comapi.o
>  MAN    = dhcp-options.5 dhcp-eval.5
>  
> diff -urN dhcp-3.0.2.orig/common/packet.c dhcp-3.0.2/common/packet.c
> --- dhcp-3.0.2.orig/common/packet.c   2004-11-24 12:39:16.000000000 -0500
> +++ dhcp-3.0.2/common/packet.c        2005-03-25 11:01:46.000000000 -0500
> @@ -104,11 +104,12 @@
>  }
>  
>  #ifdef PACKET_ASSEMBLY
> -void assemble_hw_header (interface, buf, bufix, to)
> +void assemble_hw_header (interface, buf, bufix, to, toip)
>       struct interface_info *interface;
>       unsigned char *buf;
>       unsigned *bufix;
>       struct hardware *to;
> +     u_int32_t toip;
>  {
>  #if defined (HAVE_TR_SUPPORT)
>       if (interface -> hw_address.hbuf [0] == HTYPE_IEEE802)
> @@ -120,6 +121,11 @@
>                    assemble_fddi_header (interface, buf, bufix, to);
>       else
>  #endif
> +#if defined (HAVE_IPOIB_SUPPORT)
> +          if (interface -> hw_address.hbuf [0] == HTYPE_IPOIB)
> +                  assemble_ipoib_header (interface, buf, bufix, to, toip);
> +     else
> +#endif
>               assemble_ethernet_header (interface, buf, bufix, to);
>  
>  }
> @@ -205,6 +211,11 @@
>                    return decode_fddi_header (interface, buf, bufix, from);
>       else
>  #endif
> +#if defined (HAVE_IPOIB_SUPPORT)
> +          if (interface -> hw_address.hbuf [0] == HTYPE_IPOIB)
> +                  return decode_ipoib_header (interface, buf, bufix, from);
> +     else
> +#endif
>               return decode_ethernet_header (interface, buf, bufix, from);
>  }
>  
> diff -urN dhcp-3.0.2.orig/common/parse.c dhcp-3.0.2/common/parse.c
> --- dhcp-3.0.2.orig/common/parse.c    2004-09-30 16:38:31.000000000 -0400
> +++ dhcp-3.0.2/common/parse.c 2005-03-26 07:46:36.000000000 -0500
> @@ -323,7 +323,7 @@
>  
>  /*
>   * hardware-parameter :== HARDWARE hardware-type colon-seperated-hex-list 
> SEMI
> - * hardware-type :== ETHERNET | TOKEN_RING | FDDI
> + * hardware-type :== ETHERNET | TOKEN_RING | FDDI | IPOIB
>   */
>  
>  void parse_hardware_param (cfile, hardware)
> @@ -346,6 +346,9 @@
>             case FDDI:
>               hardware -> hbuf [0] = HTYPE_FDDI;
>               break;
> +           case IPOIB:
> +             hardware -> hbuf [0] = HTYPE_IPOIB;
> +             break;
>             default:
>               if (!strncmp (val, "unknown-", 8)) {
>                       hardware -> hbuf [0] = atoi (&val [8]);
> diff -urN dhcp-3.0.2.orig/includes/dhcpd.h dhcp-3.0.2/includes/dhcpd.h
> --- dhcp-3.0.2.orig/includes/dhcpd.h  2004-11-24 12:39:16.000000000 -0500
> +++ dhcp-3.0.2/includes/dhcpd.h       2005-03-28 08:25:47.000000000 -0500
> @@ -306,9 +306,9 @@
>  #    define EPHEMERAL_FLAGS          (MS_NULL_TERMINATION | \
>                                        UNICAST_BROADCAST_HACK)
>  
> -     binding_state_t __attribute__ ((mode (__byte__))) binding_state;
> -     binding_state_t __attribute__ ((mode (__byte__))) next_binding_state;
> -     binding_state_t __attribute__ ((mode (__byte__))) desired_binding_state;
> +     binding_state_t binding_state;
> +     binding_state_t next_binding_state;
> +     binding_state_t desired_binding_state;
>       
>       struct lease_state *state;
>  
> @@ -1922,7 +1922,7 @@
>  u_int32_t checksum PROTO ((unsigned char *, unsigned, u_int32_t));
>  u_int32_t wrapsum PROTO ((u_int32_t));
>  void assemble_hw_header PROTO ((struct interface_info *, unsigned char *,
> -                             unsigned *, struct hardware *));
> +                             unsigned *, struct hardware *, u_int32_t));
>  void assemble_udp_ip_header PROTO ((struct interface_info *, unsigned char *,
>                                   unsigned *, u_int32_t, u_int32_t,
>                                   u_int32_t, unsigned char *, unsigned));
> diff -urN dhcp-3.0.2.orig/includes/dhcp.h dhcp-3.0.2/includes/dhcp.h
> --- dhcp-3.0.2.orig/includes/dhcp.h   2004-06-10 13:59:29.000000000 -0400
> +++ dhcp-3.0.2/includes/dhcp.h        2005-03-24 13:50:14.000000000 -0500
> @@ -75,6 +75,7 @@
>  #define HTYPE_ETHER  1               /* Ethernet 10Mbps              */
>  #define HTYPE_IEEE802        6               /* IEEE 802.2 Token Ring...     
> */
>  #define HTYPE_FDDI   8               /* FDDI...                      */
> +#define HTYPE_IPOIB  32              /* IPoIB                        */
>  
>  /* Magic cookie validating dhcp options field (and bootp vendor
>     extensions field). */
> diff -urN dhcp-3.0.2.orig/includes/dhctoken.h dhcp-3.0.2/includes/dhctoken.h
> --- dhcp-3.0.2.orig/includes/dhctoken.h       2004-09-21 15:25:38.000000000 
> -0400
> +++ dhcp-3.0.2/includes/dhctoken.h    2005-03-26 07:51:29.000000000 -0500
> @@ -308,7 +308,8 @@
>       REFRESH = 612,
>       DOMAIN_NAME = 613,
>       DO_FORWARD_UPDATE = 614,
> -     KNOWN_CLIENTS = 615
> +     KNOWN_CLIENTS = 615,
> +     IPOIB = 616
>  };
>  
>  #define is_identifier(x)     ((x) >= FIRST_TOKEN &&  \
> diff -urN dhcp-3.0.2.orig/Makefile.conf dhcp-3.0.2/Makefile.conf
> --- dhcp-3.0.2.orig/Makefile.conf     2004-11-24 12:39:13.000000000 -0500
> +++ dhcp-3.0.2/Makefile.conf  2005-03-30 08:05:28.000000000 -0500
> @@ -312,7 +312,7 @@
>  ## Linux 2.2
>  ##--linux-2.2--
>  #COPTS = -DLINUX_MAJOR=$(MAJORVERSION) -DLINUX_MINOR=$(MINORVERSION) \
> -#        $(BINDDEF) $(CC_OPTIONS)
> +#        $(BINDDEF) $(CC_OPTIONS) -DHAVE_IPOIB_SUPPORT -DUSERLAND_FILTER
>  #CF = cf/linux.h
>  #ADMMANDIR = /usr/man/man8
>  #ADMMANEXT = .8
> diff -urN dhcp-3.0.2.orig/readme-ipoib.txt dhcp-3.0.2/readme-ipoib.txt
> --- dhcp-3.0.2.orig/readme-ipoib.txt  1969-12-31 19:00:00.000000000 -0500
> +++ dhcp-3.0.2/readme-ipoib.txt       2005-03-30 08:22:37.000000000 -0500
> @@ -0,0 +1,53 @@
> +3/30/05
> +ISC DHCP 3.0.2
> +Internet Systems Consortium DHCP Client V3.0.2
> +Internet Systems Consortium DHCP Server V3.0.2
> +
> +Makefile.conf
> +     -DHAVE_IPOIB_SUPPORT -DUSERLAND_FILTER
> +     To build on Opteron, also add -DPTRSIZE_64BIT
> +
> +
> +Notes about running
> +
> +Need to configure the Linux kernel to support
> +Socket Filtering and the Packet socket.  
> +     CONFIG_FILTER=y
> +     CONFIG_PACKET=y
> +
> +
> +DHCP client
> +
> +/sbin/modprobe ib_ipoib
> +/sbin/ifconfig ib0 up
> +     without IPv4 address
> +
> +dhclient ib0
> +
> +need to mkdir /var/state/dhcp so dhclient.leases can be saved
> +
> +setup /etc/dhclient.conf with client identifier (port GUID)
> +interface "ib0" {
> +     send dhcp-client-identifier 00:08:f1:04:03:96:05:59;
> +}
> +
> +
> +DHCP server
> +
> +Load IPoIB and configure ib0 with IPv4 address
> +IP address configured on ib0
> +/sbin/ifconfig ib0 <IPv4 address>
> +
> +
> +dhcpd ib0
> +
> +setup /etc/dhcpd.conf
> +with at least IP address range
> +maybe also client identifier if want fixed IP address per client
> +ddns-update-style none;
> +subnet 192.168.0.0 netmask 255.255.255.0 {
> +     range 192.168.0.10 192.168.0.20;
> +}
> +
> +touch /var/state/dhcp/dhcpd.leases
> +
> diff -urN dhcp-3.0.2.orig/server/dhcp.c dhcp-3.0.2/server/dhcp.c
> --- dhcp-3.0.2.orig/server/dhcp.c     2004-11-24 12:39:19.000000000 -0500
> +++ dhcp-3.0.2/server/dhcp.c  2005-03-28 08:52:46.000000000 -0500
> @@ -267,7 +267,7 @@
>       /* %Audit% This is log output. %2004.06.17,Safe%
>        * If we truncate we hope the user can get a hint from the log.
>        */
> -     snprintf (msgbuf, sizeof msgbuf, "DHCPDISCOVER from %s %s%s%svia %s",
> +     snprintf (msgbuf, sizeof msgbuf, "DHCPDISCOVER from %s %s%s%s via %s",
>                (packet -> raw -> htype
>                 ? print_hw_addr (packet -> raw -> htype,
>                                  packet -> raw -> hlen,
> @@ -476,7 +476,7 @@
>        * If we truncate we hope the user can get a hint from the log.
>        */
>       snprintf (msgbuf, sizeof msgbuf,
> -              "DHCPREQUEST for %s%s from %s %s%s%svia %s",
> +              "DHCPREQUEST for %s%s from %s %s%s%s via %s",
>                piaddr (cip), smbuf,
>                (packet -> raw -> htype
>                 ? print_hw_addr (packet -> raw -> htype,
> @@ -769,7 +769,7 @@
>        * If we truncate we hope the user can get a hint from the log.
>        */
>       snprintf (msgbuf, sizeof msgbuf,
> -              "DHCPRELEASE of %s from %s %s%s%svia %s (%sfound)",
> +              "DHCPRELEASE of %s from %s %s%s%s via %s (%sfound)",
>                cstr,
>                (packet -> raw -> htype
>                 ? print_hw_addr (packet -> raw -> htype,
> @@ -859,7 +859,7 @@
>        * If we truncate we hope the user can get a hint from the log.
>        */
>       snprintf (msgbuf, sizeof msgbuf,
> -              "DHCPDECLINE of %s from %s %s%s%svia %s",
> +              "DHCPDECLINE of %s from %s %s%s%s via %s",
>                piaddr (cip),
>                (packet -> raw -> htype
>                 ? print_hw_addr (packet -> raw -> htype,
> @@ -2807,7 +2807,7 @@
>               s = (char *)0;
>  
>       /* Say what we're doing... */
> -     log_info ("%s on %s to %s %s%s%svia %s",
> +     log_info ("%s on %s to %s %s%s%s via %s",
>                 (state -> offer
>                  ? (state -> offer == DHCPACK ? "DHCPACK" : "DHCPOFFER")
>                  : "BOOTREPLY"),
> 
> 
> 
> _______________________________________________
> openib-general mailing list
> [email protected]
> http://openib.org/mailman/listinfo/openib-general
> 
> To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
> 

_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to