fixes nterpretation of the client identifier role in DHCP over IPOIB
authormarty_connor <marty_connor>
Sun, 26 Mar 2006 17:07:56 +0000 (17:07 +0000)
committermarty_connor <marty_connor>
Sun, 26 Mar 2006 17:07:56 +0000 (17:07 +0000)
src/drivers/net/mlx_ipoib/doc/README.boot_over_ib
src/drivers/net/mlx_ipoib/ipoib.c
src/drivers/net/mlx_ipoib/patches/dhcpd.patch

index 0773862..59d8146 100644 (file)
@@ -92,13 +92,11 @@ files with .mlx extension also available from Mellanox's web site.
 
 6. Preparing the DHCP Server
 -----------------------------
-DHCP messages over IP Over IB are transmitted as broadcasts. In order to 
-distinguish between messages belonging to a certain DHCP session, the messages 
-must carry the client identifier option (see ietf documentation        referred to 
-above). As of November 2005, ISC DHCP servers do not support this feature. 
-They are expected to support this at the end of 2005. In order to work this 
-out, the appropriate patch must be applied (see patches directory). It has 
-been tested on version isc-dhcpd-V3.0.4b2.
+The DHCP server may need to be modified in order to work on IPOIB. Some
+distributuions alreay support this (Some SUSE distributuions) while others
+do not. If the pre-installed server does not support IPOIB, the user can download
+the sources from ISC http://www.isc.org/ and apply the appropriate patch in
+the patches directory.
 
 The DHCP server must run on a machine which supports IP Over IB. The Mellanox 
 IBGD package (gen1 or gen2) can be used to provide this.
index 85eaac7..444df23 100644 (file)
@@ -357,52 +357,12 @@ static void modify_dhcp_resp(void *buf, __u16 size)
        modify_udp_csum(buf, size);
 }
 
-static void get_my_client_id(__u8 * my_client_id)
-{
-
-       my_client_id[0] = 0;
-       qpn2buf(ipoib_data.ipoib_qpn, my_client_id + 1);
-       memcpy(my_client_id + 4, ipoib_data.port_gid_raw, 16);
-}
-
-static const __u8 *get_client_id(const void *buf, int len)
-{
-       const __u8 *ptr;
-       int delta;
-
-       if (len < 268)
-               return NULL;
-
-       /* pointer to just after magic cookie */
-       ptr = (const __u8 *)buf + 268;
-
-       /* find last client identifier option */
-       do {
-               if (ptr[0] == 255) {
-                       /* found end of options list */
-                       return NULL;
-               }
-
-               if (ptr[0] == 0x3d) {
-                       /* client identifer option */
-                       return ptr + 3;
-               }
-
-               delta = ptr[1] + 2;
-               ptr += delta;
-               len -= delta;
-       } while (len > 0);
-
-       return NULL;
-}
-
 static int handle_ipv4_packet(void *buf, void **out_buf_p,
                              unsigned int *new_size_p, int *is_bcast_p)
 {
        void *new_buf;
        __u16 new_size;
        __u8 msg_type;
-       __u8 my_client_id[20];
 
        new_buf = (void *)(((__u8 *) buf) + 4);
        new_size = (*new_size_p) - 4;
@@ -411,7 +371,6 @@ static int handle_ipv4_packet(void *buf, void **out_buf_p,
 
        if (get_ip_protocl(new_buf) == IP_PROT_UDP) {
                __u16 udp_dst_port;
-               const __u8 *client_id;
 
                udp_dst_port = get_udp_dst_port(new_buf);
 
@@ -420,22 +379,6 @@ static int handle_ipv4_packet(void *buf, void **out_buf_p,
                        *out_buf_p = 0;
                        return 0;
                }
-
-               if (udp_dst_port == 68) {
-                       get_my_client_id(my_client_id);
-
-                       /* packet client id */
-                       client_id = get_client_id(new_buf, new_size);
-                       if (!client_id) {
-                               *out_buf_p = 0;
-                               return 0;
-                       }
-
-                       if (memcmp(client_id, my_client_id, 20)) {
-                               *out_buf_p = 0;
-                               return 0;
-                       }
-               }
        }
 
        msg_type = get_dhcp_msg_type(new_buf);
index e2d0a20..3f6269b 100644 (file)
@@ -1,17 +1,7 @@
-diff -ru ../../orig/dhcp-3.0.4b2/common/options.c ./common/options.c
---- ../../orig/dhcp-3.0.4b2/common/options.c   2005-11-02 01:19:03.000000000 +0200
-+++ ./common/options.c 2005-12-06 14:38:17.000000000 +0200
-@@ -537,6 +537,7 @@
-       priority_list [priority_len++] = DHO_DHCP_LEASE_TIME;
-       priority_list [priority_len++] = DHO_DHCP_MESSAGE;
-       priority_list [priority_len++] = DHO_DHCP_REQUESTED_ADDRESS;
-+      priority_list [priority_len++] = DHO_DHCP_CLIENT_IDENTIFIER;
-       priority_list [priority_len++] = DHO_FQDN;
-       if (prl && prl -> len > 0) {
-diff -ru ../../orig/dhcp-3.0.4b2/includes/site.h ./includes/site.h
---- ../../orig/dhcp-3.0.4b2/includes/site.h    2002-03-12 20:33:39.000000000 +0200
-+++ ./includes/site.h  2005-12-06 14:36:55.000000000 +0200
+Index: dhcp-3.0.4b3/includes/site.h
+===================================================================
+--- dhcp-3.0.4b3.orig/includes/site.h  2002-03-12 20:33:39.000000000 +0200
++++ dhcp-3.0.4b3/includes/site.h       2006-03-15 12:50:00.000000000 +0200
 @@ -135,7 +135,7 @@
     the aforementioned problems do not matter to you, or if no other
     API is supported for your system, you may want to go with it. */