]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Io.h
[Change summary]:
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Dhcp4Dxe / Dhcp4Io.h
1 /** @file
2 The DHCP4 protocol implementation.
3
4 Copyright (c) 2006 - 2009, Intel Corporation.<BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef __EFI_DHCP4_IO_H__
16 #define __EFI_DHCP4_IO_H__
17
18 #include <Uefi.h>
19
20 #include <Protocol/ServiceBinding.h>
21
22 #include <Library/NetLib.h>
23 #include <Library/UdpIoLib.h>
24 #include <Library/BaseMemoryLib.h>
25 #include <Library/MemoryAllocationLib.h>
26
27
28
29 #define DHCP_WAIT_OFFER 3 // Time to wait the offers
30 #define DHCP_DEFAULT_LEASE 7 * 24 * 60 * 60 // Seven days as default.
31 #define DHCP_SERVER_PORT 67
32 #define DHCP_CLIENT_PORT 68
33
34 //
35 // BOOTP header "op" field
36 //
37 #define BOOTP_REQUEST 1
38 #define BOOTP_REPLY 2
39
40 //
41 // DHCP message types
42 //
43 #define DHCP_MSG_DISCOVER 1
44 #define DHCP_MSG_OFFER 2
45 #define DHCP_MSG_REQUEST 3
46 #define DHCP_MSG_DECLINE 4
47 #define DHCP_MSG_ACK 5
48 #define DHCP_MSG_NAK 6
49 #define DHCP_MSG_RELEASE 7
50 #define DHCP_MSG_INFORM 8
51
52 //
53 // DHCP notify user type
54 //
55 #define DHCP_NOTIFY_COMPLETION 1
56 #define DHCP_NOTIFY_RENEWREBIND 2
57 #define DHCP_NOTIFY_ALL 3
58
59 #define DHCP_IS_BOOTP(Parameter) (((Parameter) == NULL) || ((Parameter)->DhcpType == 0))
60
61 #define DHCP_CONNECTED(State) \
62 (((State) == Dhcp4Bound) || ((State) == (Dhcp4Renewing)) || ((State) == Dhcp4Rebinding))
63
64 /**
65 Set the DHCP state. If CallUser is true, it will try to notify
66 the user before change the state by DhcpNotifyUser. It returns
67 EFI_ABORTED if the user return EFI_ABORTED, otherwise, it returns
68 EFI_SUCCESS. If CallUser is FALSE, it isn't necessary to test
69 the return value of this function.
70
71 @param DhcpSb The DHCP service instance
72 @param State The new DHCP state to change to
73 @param CallUser Whether we need to call user
74
75 @retval EFI_SUCCESS The state is changed
76 @retval EFI_ABORTED The user asks to abort the DHCP process.
77
78 **/
79 EFI_STATUS
80 DhcpSetState (
81 IN OUT DHCP_SERVICE *DhcpSb,
82 IN INTN State,
83 IN BOOLEAN CallUser
84 );
85
86 /**
87 Build and transmit a DHCP message according to the current states.
88 This function implement the Table 5. of RFC 2131. Always transits
89 the state (as defined in Figure 5. of the same RFC) before sending
90 a DHCP message. The table is adjusted accordingly.
91
92 @param[in] DhcpSb The DHCP service instance
93 @param[in] Seed The seed packet which the new packet is based on
94 @param[in] Para The DHCP parameter of the Seed packet
95 @param[in] Type The message type to send
96 @param[in] Msg The human readable message to include in the packet
97 sent.
98
99 @retval EFI_OUT_OF_RESOURCES Failed to allocate resources for the packet
100 @retval EFI_ACCESS_DENIED Failed to transmit the packet through UDP
101 @retval EFI_SUCCESS The message is sent
102 @retval other Other error occurs
103
104 **/
105 EFI_STATUS
106 DhcpSendMessage (
107 IN DHCP_SERVICE *DhcpSb,
108 IN EFI_DHCP4_PACKET *Seed,
109 IN DHCP_PARAMETER *Para,
110 IN UINT8 Type,
111 IN UINT8 *Msg
112 );
113
114 /**
115 Each DHCP service has three timer. Two of them are count down timer.
116 One for the packet retransmission. The other is to collect the offers.
117 The third timer increaments the lease life which is compared to T1, T2,
118 and lease to determine the time to renew and rebind the lease.
119 DhcpOnTimerTick will be called once every second.
120
121 @param[in] Event The timer event
122 @param[in] Context The context, which is the DHCP service instance.
123
124 **/
125 VOID
126 EFIAPI
127 DhcpOnTimerTick (
128 IN EFI_EVENT Event,
129 IN VOID *Context
130 );
131
132 /**
133 Handle the received DHCP packets. This function drives the DHCP
134 state machine.
135
136 @param UdpPacket The UDP packets received.
137 @param EndPoint The local/remote UDP access point
138 @param IoStatus The status of the UDP receive
139 @param Context The opaque parameter to the function.
140
141 **/
142 VOID
143 DhcpInput (
144 NET_BUF *UdpPacket,
145 UDP_END_POINT *EndPoint,
146 EFI_STATUS IoStatus,
147 VOID *Context
148 );
149
150 /**
151 Send an initial DISCOVER or REQUEST message according to the
152 DHCP service's current state.
153
154 @param[in] DhcpSb The DHCP service instance
155
156 @retval EFI_SUCCESS The request has been sent
157 @retval other Some error occurs when sending the request.
158
159 **/
160 EFI_STATUS
161 DhcpInitRequest (
162 IN DHCP_SERVICE *DhcpSb
163 );
164
165 /**
166 Clean up the DHCP related states, IoStatus isn't reset.
167
168 @param DhcpSb The DHCP instance service.
169
170 **/
171 VOID
172 DhcpCleanLease (
173 IN DHCP_SERVICE *DhcpSb
174 );
175
176 /**
177 Release the net buffer when packet is sent.
178
179 @param UdpPacket The UDP packets received.
180 @param EndPoint The local/remote UDP access point
181 @param IoStatus The status of the UDP receive
182 @param Context The opaque parameter to the function.
183
184 **/
185 VOID
186 DhcpOnPacketSent (
187 NET_BUF *Packet,
188 UDP_END_POINT *EndPoint,
189 EFI_STATUS IoStatus,
190 VOID *Context
191 );
192
193 #endif