Added some debug messages and DHCP test code
authorMichael Brown <mcb30@etherboot.org>
Wed, 19 Jul 2006 17:49:31 +0000 (17:49 +0000)
committerMichael Brown <mcb30@etherboot.org>
Wed, 19 Jul 2006 17:49:31 +0000 (17:49 +0000)
src/include/gpxe/dhcp.h
src/net/udp/dhcp.c
src/tests/dhcptest.c [new file with mode: 0644]

index 576b9ea..2cb4f01 100644 (file)
@@ -433,4 +433,6 @@ extern unsigned long find_global_dhcp_num_option ( unsigned int tag );
 extern void delete_dhcp_option ( struct dhcp_option_block *options,
                                 unsigned int tag );
 
+extern struct async_operation * start_dhcp ( struct dhcp_session *dhcp );
+
 #endif /* _GPXE_DHCP_H */
index f23eb94..f5a8f08 100644 (file)
@@ -58,6 +58,26 @@ static uint8_t dhcp_request_options_data[] = {
        DHCP_END
 };
 
+/**
+ * Name a DHCP packet type
+ *
+ * @v msgtype          DHCP message type
+ * @ret string         DHCP mesasge type name
+ */
+static inline const char * dhcp_message_type_name ( unsigned int msgtype ) {
+       switch ( msgtype ) {
+       case DHCPDISCOVER:      return "DHCPDISCOVER";
+       case DHCPOFFER:         return "DHCPOFFER";
+       case DHCPREQUEST:       return "DHCPREQUEST";
+       case DHCPDECLINE:       return "DHCPDECLINE";
+       case DHCPACK:           return "DHCPACK";
+       case DHCPNAK:           return "DHCPNAK";
+       case DHCPRELEASE:       return "DHCPRELEASE";
+       case DHCPINFORM:        return "DHCPINFORM";
+       default:                return "DHCP<invalid>";
+       }
+}
+
 /** Options common to all DHCP requests */
 static struct dhcp_option_block dhcp_request_options = {
        .data = dhcp_request_options_data,
@@ -419,6 +439,8 @@ static void dhcp_senddata ( struct udp_connection *conn,
        struct dhcp_packet dhcppkt;
        int rc;
        
+       DBG ( "Transmitting %s\n", dhcp_message_type_name ( dhcp->state ) );
+
        assert ( ( dhcp->state == DHCPDISCOVER ) ||
                 ( dhcp->state == DHCPREQUEST ) );
 
@@ -455,7 +477,7 @@ static void dhcp_newdata ( struct udp_connection *conn,
 
        /* Check for matching transaction ID */
        if ( dhcphdr->xid != dhcp->xid ) {
-               DBG ( "DHCP wrong transaction ID (wanted %08x, got %08x)\n",
+               DBG ( "DHCP wrong transaction ID (wanted %08lx, got %08lx)\n",
                      ntohl ( dhcphdr->xid ), ntohl ( dhcp->xid ) );
                return;
        };
@@ -467,6 +489,10 @@ static void dhcp_newdata ( struct udp_connection *conn,
                return;
        }
 
+       DBG ( "Received %s\n",
+             dhcp_message_type_name ( find_dhcp_num_option ( options,
+                                                      DHCP_MESSAGE_TYPE ) ) );
+
        /* Proof of concept: just dump out the parsed options */
        hex_dump ( options->data, options->len );
        free_dhcp_options ( options );
diff --git a/src/tests/dhcptest.c b/src/tests/dhcptest.c
new file mode 100644 (file)
index 0000000..d35e02c
--- /dev/null
@@ -0,0 +1,10 @@
+#include <string.h>
+#include <gpxe/dhcp.h>
+
+int test_dhcp ( struct net_device *netdev ) {
+       struct dhcp_session dhcp;
+
+       memset ( &dhcp, 0, sizeof ( dhcp ) );
+       dhcp.netdev = netdev;
+       return async_wait ( start_dhcp ( &dhcp ) );
+}