Print out the lease time, just to show how easy it is.
[people/dverkamp/gpxe.git] / src / tests / dhcptest.c
1 #include <string.h>
2 #include <vsprintf.h>
3 #include <byteswap.h>
4 #include <gpxe/ip.h>
5 #include <gpxe/dhcp.h>
6
7 int test_dhcp ( struct net_device *netdev ) {
8         struct dhcp_session dhcp;
9         struct in_addr address = { htonl ( 0 ) };
10         struct in_addr netmask = { htonl ( 0 ) };
11         struct in_addr gateway = { INADDR_NONE };
12         int rc;
13
14         /* Bring IP interface up with address 0.0.0.0 */
15         if ( ( rc = add_ipv4_address ( netdev, address, netmask,
16                                        gateway ) ) != 0 )
17                 goto out_no_del_ipv4;
18
19         /* Issue DHCP request */
20         memset ( &dhcp, 0, sizeof ( dhcp ) );
21         dhcp.netdev = netdev;
22         if ( ( rc = async_wait ( start_dhcp ( &dhcp ) ) ) != 0 )
23                 goto out_no_options;
24
25         /* Register options received via DHCP */
26         register_dhcp_options ( dhcp.options );
27
28         /* Retrieve IP address configuration */
29         find_global_dhcp_ipv4_option ( DHCP_EB_YIADDR, &address );
30         find_global_dhcp_ipv4_option ( DHCP_SUBNET_MASK, &netmask );
31         find_global_dhcp_ipv4_option ( DHCP_ROUTERS, &gateway );
32
33         printf ( "IP %s", inet_ntoa ( address ) );
34         printf ( " netmask %s", inet_ntoa ( netmask ) );
35         printf ( " gateway %s\n", inet_ntoa ( gateway ) );
36
37         printf ( "Lease time is %ld seconds\n",
38                  find_global_dhcp_num_option ( DHCP_LEASE_TIME ) );
39
40         /* Remove old IP address configuration */
41         del_ipv4_address ( netdev );
42
43         /* Set up new IP address configuration */
44         if ( ( rc = add_ipv4_address ( netdev, address, netmask,
45                                        gateway ) ) != 0 )
46                 goto out_no_del_ipv4;
47
48         /* Unregister and free DHCP options */
49         unregister_dhcp_options ( dhcp.options );
50         free_dhcp_options ( dhcp.options );
51  out_no_options:
52         /* Take down IP interface */
53         del_ipv4_address ( netdev );
54  out_no_del_ipv4:
55         return rc;
56 }