Mistake on this page?
Report an issue in GitHub or email us
dhcp.h
Go to the documentation of this file.
1 /**
2  * @file
3  * DHCP client API
4  */
5 
6 /*
7  * Copyright (c) 2001-2004 Leon Woestenberg <leon.woestenberg@gmx.net>
8  * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without modification,
12  * are permitted provided that the following conditions are met:
13  *
14  * 1. Redistributions of source code must retain the above copyright notice,
15  * this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright notice,
17  * this list of conditions and the following disclaimer in the documentation
18  * and/or other materials provided with the distribution.
19  * 3. The name of the author may not be used to endorse or promote products
20  * derived from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
23  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
25  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
27  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
30  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
31  * OF SUCH DAMAGE.
32  *
33  * This file is part of the lwIP TCP/IP stack.
34  *
35  * Author: Leon Woestenberg <leon.woestenberg@gmx.net>
36  *
37  */
38 #ifndef LWIP_HDR_DHCP_H
39 #define LWIP_HDR_DHCP_H
40 
41 #include "lwip/opt.h"
42 
43 #if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */
44 
45 #include "lwip/netif.h"
46 #include "lwip/udp.h"
47 
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 
52 /** period (in seconds) of the application calling dhcp_coarse_tmr() */
53 #define DHCP_COARSE_TIMER_SECS 60
54 /** period (in milliseconds) of the application calling dhcp_coarse_tmr() */
55 #define DHCP_COARSE_TIMER_MSECS (DHCP_COARSE_TIMER_SECS * 1000UL)
56 /** period (in milliseconds) of the application calling dhcp_fine_tmr() */
57 #define DHCP_FINE_TIMER_MSECS 500
58 
59 #define DHCP_BOOT_FILE_LEN 128U
60 
61 /* AutoIP cooperation flags (struct dhcp.autoip_coop_state) */
62 typedef enum {
63  DHCP_AUTOIP_COOP_STATE_OFF = 0,
64  DHCP_AUTOIP_COOP_STATE_ON = 1
65 } dhcp_autoip_coop_state_enum_t;
66 
67 struct dhcp
68 {
69  /** transaction identifier of last sent request */
70  u32_t xid;
71  /** track PCB allocation state */
72  u8_t pcb_allocated;
73  /** current DHCP state machine state */
74  u8_t state;
75  /** retries of current request */
76  u8_t tries;
77 #if LWIP_DHCP_AUTOIP_COOP
78  u8_t autoip_coop_state;
79 #endif
80  u8_t subnet_mask_given;
81 
82  u16_t request_timeout; /* #ticks with period DHCP_FINE_TIMER_SECS for request timeout */
83  u16_t t1_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for renewal time */
84  u16_t t2_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for rebind time */
85  u16_t t1_renew_time; /* #ticks with period DHCP_COARSE_TIMER_SECS until next renew try */
86  u16_t t2_rebind_time; /* #ticks with period DHCP_COARSE_TIMER_SECS until next rebind try */
87  u16_t lease_used; /* #ticks with period DHCP_COARSE_TIMER_SECS since last received DHCP ack */
88  u16_t t0_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for lease time */
89  ip_addr_t server_ip_addr; /* dhcp server address that offered this lease (ip_addr_t because passed to UDP) */
90  ip4_addr_t offered_ip_addr;
91  ip4_addr_t offered_sn_mask;
92  ip4_addr_t offered_gw_addr;
93 
94  u32_t offered_t0_lease; /* lease period (in seconds) */
95  u32_t offered_t1_renew; /* recommended renew time (usually 50% of lease period) */
96  u32_t offered_t2_rebind; /* recommended rebind time (usually 87.5 of lease period) */
97 #if LWIP_DHCP_BOOTP_FILE
98  ip4_addr_t offered_si_addr;
99  char boot_file_name[DHCP_BOOT_FILE_LEN];
100 #endif /* LWIP_DHCP_BOOTPFILE */
101 };
102 
103 
104 void dhcp_set_struct(struct netif *netif, struct dhcp *dhcp);
105 /** Remove a struct dhcp previously set to the netif using dhcp_set_struct() */
106 #define dhcp_remove_struct(netif) netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP, NULL)
107 void dhcp_cleanup(struct netif *netif);
108 err_t dhcp_start(struct netif *netif);
109 err_t dhcp_renew(struct netif *netif);
110 err_t dhcp_release(struct netif *netif);
111 void dhcp_stop(struct netif *netif);
112 void dhcp_release_and_stop(struct netif *netif);
113 void dhcp_inform(struct netif *netif);
114 void dhcp_network_changed(struct netif *netif);
115 #if DHCP_DOES_ARP_CHECK
116 void dhcp_arp_reply(struct netif *netif, const ip4_addr_t *addr);
117 #endif
118 u8_t dhcp_supplied_address(const struct netif *netif);
119 /* to be called every minute */
120 void dhcp_coarse_tmr(void);
121 /* to be called every half second */
122 void dhcp_fine_tmr(void);
123 
124 #if LWIP_DHCP_GET_NTP_SRV
125 /** This function must exist, in other to add offered NTP servers to
126  * the NTP (or SNTP) engine.
127  * See LWIP_DHCP_MAX_NTP_SERVERS */
128 extern void dhcp_set_ntp_servers(u8_t num_ntp_servers, const ip4_addr_t* ntp_server_addrs);
129 #endif /* LWIP_DHCP_GET_NTP_SRV */
130 
131 #define netif_dhcp_data(netif) ((struct dhcp*)netif_get_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP))
132 
133 #ifdef __cplusplus
134 }
135 #endif
136 
137 #endif /* LWIP_DHCP */
138 
139 #endif /*LWIP_HDR_DHCP_H*/
lwIP Options Configuration
netif API (to be used from TCPIP thread)
Generic data structure used for all lwIP network interfaces.
IP address structure for passing IP addresses by value.
Definition: nsapi_types.h:190
UDP API (to be used from TCPIP thread) See also udp_raw.
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.