Fix DHCP request source port and add port #define's
authorJustin Pettit <jpettit@nicira.com>
Thu, 16 Jul 2009 22:02:53 +0000 (15:02 -0700)
committerJustin Pettit <jpettit@nicira.com>
Wed, 29 Jul 2009 23:37:14 +0000 (16:37 -0700)
DHCP requests were sent with a source port of 66, when it should be 68.
This code has been tested, so apparently many DHCP servers don't pay
attention to the source port.  This commit also adds #define's for the
DHCP ports, so that magic numbers don't need to be used.

lib/dhcp-client.c
lib/dhcp.h

index 06937ec..9057121 100644 (file)
@@ -923,7 +923,7 @@ do_receive_msg(struct dhclient *cli, struct dhcp_msg *msg)
         flow_extract(&b, 0, &flow);
         if (flow.dl_type != htons(ETH_TYPE_IP)
             || flow.nw_proto != IP_TYPE_UDP
-            || flow.tp_dst != htons(68)
+            || flow.tp_dst != htons(DHCP_CLIENT_PORT)
             || !(eth_addr_is_broadcast(flow.dl_dst)
                  || eth_addr_equals(flow.dl_dst,
                                     netdev_get_etheraddr(cli->netdev)))) {
@@ -1006,8 +1006,8 @@ do_send_msg(struct dhclient *cli, const struct dhcp_msg *msg)
     nh.ip_dst = INADDR_BROADCAST;
     nh.ip_csum = csum(&nh, sizeof nh);
 
-    th.udp_src = htons(66);
-    th.udp_dst = htons(67);
+    th.udp_src = htons(DHCP_CLIENT_PORT);
+    th.udp_dst = htons(DHCP_SERVER_PORT);
     th.udp_len = htons(UDP_HEADER_LEN + b.size);
     th.udp_csum = 0;
     udp_csum = csum_add32(0, nh.ip_src);
index 07452c9..96696a2 100644 (file)
 struct ds;
 struct ofpbuf;
 
+/* Ports used by DHCP. */
+#define DHCP_SERVER_PORT        67       /* Port used by DHCP server. */
+#define DHCP_CLIENT_PORT        68       /* Port used by DHCP client. */
+
 /* Values for 'op' field. */
 #define DHCP_BOOTREQUEST        1        /* Message sent by DHCP client. */
 #define DHCP_BOOTREPLY          2        /* Message sent by DHCP server. */