A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Documentation ▼
Installation
Manual
Models
Contributing
Wiki
Development ▼
API Docs
Issue Tracker
Merge Requests
API
Loading...
Searching...
No Matches
dhcp-header.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2011 UPB
3
* Copyright (c) 2017 NITK Surathkal
4
*
5
* SPDX-License-Identifier: GPL-2.0-only
6
*
7
* Author: Radu Lupu <rlupu@elcom.pub.ro>
8
* Ankit Deepak <adadeepak8@gmail.com>
9
* Deepti Rajagopal <deeptir96@gmail.com>
10
*
11
*/
12
13
#ifndef DHCP_HEADER_H
14
#define DHCP_HEADER_H
15
16
#include "ns3/address.h"
17
#include "ns3/buffer.h"
18
#include "ns3/header.h"
19
#include "ns3/ipv4-address.h"
20
21
#include <array>
22
23
/**
24
* @file
25
* @ingroup internet-apps
26
* DhcpHeader classes declaration
27
*/
28
29
namespace
ns3
30
{
31
32
/**
33
* @ingroup internet-apps
34
* @defgroup dhcp DHCPv4 Client and Server
35
*/
36
37
/**
38
* @ingroup dhcp
39
*
40
* This is the Chaddr field, which is 16 bytes long. Originally it was
41
* meant to hold the Client Hardware Address (hence the name), but later RFCs
42
* refers to it just as the Client Identifier.
43
*/
44
using
DhcpChaddr
= std::array<uint8_t, 16>;
45
46
/**
47
* @ingroup dhcp
48
* Function to pretty-print a Chaddr.
49
*
50
* @param chaddr the Chaddr
51
* @return A formatted string
52
*/
53
std::string
DhcpChaddrToString
(
const
DhcpChaddr
& chaddr);
54
55
/**
56
* @ingroup dhcp
57
*
58
* @class DhcpHeader
59
* @brief BOOTP header with DHCP messages. This supports the following options:
60
* Subnet Mask (1), Address Request (50), Refresh Lease Time (51),
61
* DHCP Message Type (53), DHCP Server ID (54), Renew Time (58),
62
* Rebind Time (59) and End (255) of BOOTP
63
*
64
* @verbatim
65
0 1 2 3
66
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
67
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
68
| op (1) | htype (1) | hlen (1) | hops (1) |
69
+---------------+---------------+---------------+---------------+
70
| xid (4) |
71
+-------------------------------+-------------------------------+
72
| secs (2) | flags (2) |
73
+-------------------------------+-------------------------------+
74
| ciaddr (4) |
75
+---------------------------------------------------------------+
76
| yiaddr (4) |
77
+---------------------------------------------------------------+
78
| siaddr (4) |
79
+---------------------------------------------------------------+
80
| giaddr (4) |
81
+---------------------------------------------------------------+
82
| |
83
| chaddr (16) |
84
| |
85
| |
86
+---------------------------------------------------------------+
87
| |
88
| sname (64) |
89
+---------------------------------------------------------------+
90
| |
91
| file (128) |
92
+---------------------------------------------------------------+
93
| |
94
| options (variable) |
95
+---------------------------------------------------------------+
96
\endverbatim
97
*/
98
class
DhcpHeader
:
public
Header
99
{
100
public
:
101
/**
102
* @brief Get the type ID.
103
* @return the object TypeId
104
*/
105
static
TypeId
GetTypeId
();
106
107
/**
108
* @brief Constructor
109
*/
110
DhcpHeader
();
111
112
/**
113
* @brief Destructor
114
*/
115
~DhcpHeader
()
override
;
116
117
/// BOOTP options
118
enum
Options
119
{
120
OP_MASK
= 1,
//!< BOOTP Option 1: Address Mask
121
OP_ROUTE
= 3,
//!< BOOTP Option 3: Router Option
122
OP_ADDREQ
= 50,
//!< BOOTP Option 50: Requested Address
123
OP_LEASE
= 51,
//!< BOOTP Option 51: Address Lease Time
124
OP_MSGTYPE
= 53,
//!< BOOTP Option 53: DHCP Message Type
125
OP_SERVID
= 54,
//!< BOOTP Option 54: Server Identifier
126
OP_RENEW
= 58,
//!< BOOTP Option 58: Address Renewal Time
127
OP_REBIND
= 59,
//!< BOOTP Option 59: Address Rebind Time
128
OP_END
= 255
//!< BOOTP Option 255: END
129
};
130
131
/// DHCP messages
132
enum
Messages
133
{
134
DHCPDISCOVER
= 0,
//!< Code for DHCP Discover
135
DHCPOFFER
= 1,
//!< Code for DHCP Offer
136
DHCPREQ
= 2,
//!< Code for DHCP Request
137
DHCPACK
= 4,
//!< Code for DHCP ACK
138
DHCPNACK
= 5
//!< Code for DHCP NACK
139
};
140
141
/**
142
* @brief Set the type of BOOTP and DHCP messages
143
* @param type The type of message
144
*/
145
void
SetType
(uint8_t type);
146
147
/**
148
* @brief Return the type of DHCP message
149
* @return The type of message
150
*/
151
uint8_t
GetType
()
const
;
152
153
/**
154
* @brief Set the hardware information
155
* @param htype Hardware type
156
* @param hlen Hardware length
157
*/
158
void
SetHWType
(uint8_t htype, uint8_t hlen);
159
160
/**
161
* @brief Set the transaction ID
162
* @param tran The transaction number
163
*/
164
void
SetTran
(
uint32_t
tran);
165
166
/**
167
* @brief Get the transaction id
168
* @return The transaction id
169
*/
170
uint32_t
GetTran
()
const
;
171
172
/**
173
* @brief Set the time when message is sent
174
*/
175
void
SetTime
();
176
177
/**
178
* @brief Set the Chaddress of the device.
179
*
180
* @param addr Address of the device
181
*/
182
void
SetChaddr
(
DhcpChaddr
addr);
183
184
/**
185
* @brief Get the Address of the client.
186
*
187
* Note: the address is always 16-bytes long.
188
*
189
* @return Address of the client
190
*/
191
DhcpChaddr
GetChaddr
();
192
193
/**
194
* @brief Set the IPv4Address of the client
195
* @param addr The client Ipv4Address
196
*/
197
void
SetYiaddr
(
Ipv4Address
addr);
198
199
/**
200
* @brief Get the IPv4Address of the client
201
* @return IPv4Address of the client
202
*/
203
Ipv4Address
GetYiaddr
()
const
;
204
205
/**
206
* @brief Set the DHCP server information
207
* @param addr IPv4Address of the server
208
*/
209
void
SetDhcps
(
Ipv4Address
addr);
210
211
/**
212
* @brief Get the information about the DHCP server
213
* @return IPv4Address of DHCP server
214
*/
215
Ipv4Address
GetDhcps
()
const
;
216
217
/**
218
* @brief Set the Ipv4Address requested by the client
219
* @param addr Ipv4Address requested by the client
220
*/
221
void
SetReq
(
Ipv4Address
addr);
222
223
/**
224
* @brief Get the IPv4Address requested by the client
225
* @return IPv4Address requested by the client
226
*/
227
Ipv4Address
GetReq
()
const
;
228
229
/**
230
* @brief Set the mask of the IPv4Address
231
* @param addr 32 bit mask
232
*/
233
void
SetMask
(
uint32_t
addr);
234
235
/**
236
* @brief Return the mask of the network
237
* @return 32 bit mask
238
*/
239
uint32_t
GetMask
()
const
;
240
241
/**
242
* @brief Set the Ipv4Address of gateway to be used
243
* @param addr The Ipv4Address of the gateway
244
*/
245
void
SetRouter
(
Ipv4Address
addr);
246
247
/**
248
* @brief Return the Ipv4Address of gateway to be used
249
* @return The Ipv4Address of the gateway
250
*/
251
Ipv4Address
GetRouter
()
const
;
252
253
/**
254
* @brief Set the lease time of the IPv4Address
255
* @param time 32 bit time
256
*/
257
void
SetLease
(
uint32_t
time);
258
259
/**
260
* @brief Return the lease time of the IPv4Address
261
* @return 32 bit time
262
*/
263
uint32_t
GetLease
()
const
;
264
265
/**
266
* @brief Set the Renewal time of the IPv4Address
267
* @param time 32 bit time
268
*/
269
void
SetRenew
(
uint32_t
time);
270
271
/**
272
* @brief Return the Renewal time of the address
273
* @return 32 bit time
274
*/
275
uint32_t
GetRenew
()
const
;
276
277
/**
278
* @brief Set the Rebind time of the IPv4Address
279
* @param time 32 bit time
280
*/
281
void
SetRebind
(
uint32_t
time);
282
283
/**
284
* @brief Return the Rebind time of the address
285
* @return 32 bit time
286
*/
287
uint32_t
GetRebind
()
const
;
288
289
/**
290
* @brief Reset the BOOTP options
291
*/
292
void
ResetOpt
();
293
294
private
:
295
TypeId
GetInstanceTypeId
()
const override
;
296
void
Print
(std::ostream& os)
const override
;
297
uint32_t
GetSerializedSize
()
const override
;
298
void
Serialize
(
Buffer::Iterator
start)
const override
;
299
uint32_t
Deserialize
(
Buffer::Iterator
start)
override
;
300
301
uint8_t
m_op
;
//!< The DHCP Message type
302
uint8_t
m_bootp
;
//!< The BOOTP Message type
303
uint8_t
m_hType
;
//!< The hardware type
304
uint8_t
m_hLen
;
//!< The hardware length
305
uint8_t
m_hops
;
//!< The number of hops covered by the message
306
uint32_t
m_xid
;
//!< The transaction number
307
uint32_t
m_mask
;
//!< The mask of the network
308
uint32_t
m_len
;
//!< The length of the header
309
uint16_t
m_secs
;
//!< Seconds elapsed
310
uint16_t
m_flags
;
//!< BOOTP flags
311
DhcpChaddr
m_chaddr
;
//!< The client identifier
312
Ipv4Address
m_yiAddr
;
//!< Your (client) IP address
313
Ipv4Address
m_ciAddr
;
//!< The IP address of the client
314
Ipv4Address
m_siAddr
;
//!< Next Server IP address
315
Ipv4Address
m_giAddr
;
//!< Relay Agent IP address
316
Ipv4Address
m_dhcps
;
//!< DHCP server IP address
317
Ipv4Address
m_req
;
//!< Requested Address
318
Ipv4Address
m_route
;
//!< Router Option Address
319
uint8_t
m_sname
[64];
//!< Server name (Padded for now)
320
uint8_t
m_file
[128];
//!< File name (Padded for now)
321
uint8_t
m_magic_cookie
[4];
//!< DHCP Magic Cookie
322
uint32_t
m_lease
;
//!< The lease time of the address
323
uint32_t
m_renew
;
//!< The renewal time for the client
324
uint32_t
m_rebind
;
//!< The rebinding time for the client
325
bool
m_opt
[255];
//!< BOOTP option list
326
};
327
328
}
// namespace ns3
329
330
#endif
/* DHCP_HEADER_H */
ns3::Buffer::Iterator
iterator in a Buffer instance
Definition
buffer.h:89
ns3::DhcpHeader::GetLease
uint32_t GetLease() const
Return the lease time of the IPv4Address.
Definition
dhcp-header.cc:234
ns3::DhcpHeader::SetTime
void SetTime()
Set the time when message is sent.
Definition
dhcp-header.cc:125
ns3::DhcpHeader::m_ciAddr
Ipv4Address m_ciAddr
The IP address of the client.
Definition
dhcp-header.h:313
ns3::DhcpHeader::GetReq
Ipv4Address GetReq() const
Get the IPv4Address requested by the client.
Definition
dhcp-header.cc:183
ns3::DhcpHeader::m_rebind
uint32_t m_rebind
The rebinding time for the client.
Definition
dhcp-header.h:324
ns3::DhcpHeader::Serialize
void Serialize(Buffer::Iterator start) const override
Definition
dhcp-header.cc:313
ns3::DhcpHeader::m_giAddr
Ipv4Address m_giAddr
Relay Agent IP address.
Definition
dhcp-header.h:315
ns3::DhcpHeader::ResetOpt
void ResetOpt()
Reset the BOOTP options.
Definition
dhcp-header.cc:274
ns3::DhcpHeader::m_hops
uint8_t m_hops
The number of hops covered by the message.
Definition
dhcp-header.h:305
ns3::DhcpHeader::GetRouter
Ipv4Address GetRouter() const
Return the Ipv4Address of gateway to be used.
Definition
dhcp-header.cc:217
ns3::DhcpHeader::m_bootp
uint8_t m_bootp
The BOOTP Message type.
Definition
dhcp-header.h:302
ns3::DhcpHeader::m_lease
uint32_t m_lease
The lease time of the address.
Definition
dhcp-header.h:322
ns3::DhcpHeader::SetType
void SetType(uint8_t type)
Set the type of BOOTP and DHCP messages.
Definition
dhcp-header.cc:88
ns3::DhcpHeader::Messages
Messages
DHCP messages.
Definition
dhcp-header.h:133
ns3::DhcpHeader::DHCPACK
@ DHCPACK
Code for DHCP ACK.
Definition
dhcp-header.h:137
ns3::DhcpHeader::DHCPOFFER
@ DHCPOFFER
Code for DHCP Offer.
Definition
dhcp-header.h:135
ns3::DhcpHeader::DHCPDISCOVER
@ DHCPDISCOVER
Code for DHCP Discover.
Definition
dhcp-header.h:134
ns3::DhcpHeader::DHCPREQ
@ DHCPREQ
Code for DHCP Request.
Definition
dhcp-header.h:136
ns3::DhcpHeader::DHCPNACK
@ DHCPNACK
Code for DHCP NACK.
Definition
dhcp-header.h:138
ns3::DhcpHeader::SetTran
void SetTran(uint32_t tran)
Set the transaction ID.
Definition
dhcp-header.cc:113
ns3::DhcpHeader::m_sname
uint8_t m_sname[64]
Server name (Padded for now).
Definition
dhcp-header.h:319
ns3::DhcpHeader::GetDhcps
Ipv4Address GetDhcps() const
Get the information about the DHCP server.
Definition
dhcp-header.cc:166
ns3::DhcpHeader::m_yiAddr
Ipv4Address m_yiAddr
Your (client) IP address.
Definition
dhcp-header.h:312
ns3::DhcpHeader::~DhcpHeader
~DhcpHeader() override
Destructor.
Definition
dhcp-header.cc:83
ns3::DhcpHeader::SetYiaddr
void SetYiaddr(Ipv4Address addr)
Set the IPv4Address of the client.
Definition
dhcp-header.cc:143
ns3::DhcpHeader::m_chaddr
DhcpChaddr m_chaddr
The client identifier.
Definition
dhcp-header.h:311
ns3::DhcpHeader::m_len
uint32_t m_len
The length of the header.
Definition
dhcp-header.h:308
ns3::DhcpHeader::SetDhcps
void SetDhcps(Ipv4Address addr)
Set the DHCP server information.
Definition
dhcp-header.cc:155
ns3::DhcpHeader::m_secs
uint16_t m_secs
Seconds elapsed.
Definition
dhcp-header.h:309
ns3::DhcpHeader::GetMask
uint32_t GetMask() const
Return the mask of the network.
Definition
dhcp-header.cc:200
ns3::DhcpHeader::m_mask
uint32_t m_mask
The mask of the network.
Definition
dhcp-header.h:307
ns3::DhcpHeader::m_dhcps
Ipv4Address m_dhcps
DHCP server IP address.
Definition
dhcp-header.h:316
ns3::DhcpHeader::m_siAddr
Ipv4Address m_siAddr
Next Server IP address.
Definition
dhcp-header.h:314
ns3::DhcpHeader::GetType
uint8_t GetType() const
Return the type of DHCP message.
Definition
dhcp-header.cc:100
ns3::DhcpHeader::SetRenew
void SetRenew(uint32_t time)
Set the Renewal time of the IPv4Address.
Definition
dhcp-header.cc:240
ns3::DhcpHeader::GetTran
uint32_t GetTran() const
Get the transaction id.
Definition
dhcp-header.cc:119
ns3::DhcpHeader::m_opt
bool m_opt[255]
BOOTP option list.
Definition
dhcp-header.h:325
ns3::DhcpHeader::m_magic_cookie
uint8_t m_magic_cookie[4]
DHCP Magic Cookie.
Definition
dhcp-header.h:321
ns3::DhcpHeader::SetLease
void SetLease(uint32_t time)
Set the lease time of the IPv4Address.
Definition
dhcp-header.cc:223
ns3::DhcpHeader::GetTypeId
static TypeId GetTypeId()
Get the type ID.
Definition
dhcp-header.cc:291
ns3::DhcpHeader::Options
Options
BOOTP options.
Definition
dhcp-header.h:119
ns3::DhcpHeader::OP_SERVID
@ OP_SERVID
BOOTP Option 54: Server Identifier.
Definition
dhcp-header.h:125
ns3::DhcpHeader::OP_MASK
@ OP_MASK
BOOTP Option 1: Address Mask.
Definition
dhcp-header.h:120
ns3::DhcpHeader::OP_REBIND
@ OP_REBIND
BOOTP Option 59: Address Rebind Time.
Definition
dhcp-header.h:127
ns3::DhcpHeader::OP_MSGTYPE
@ OP_MSGTYPE
BOOTP Option 53: DHCP Message Type.
Definition
dhcp-header.h:124
ns3::DhcpHeader::OP_RENEW
@ OP_RENEW
BOOTP Option 58: Address Renewal Time.
Definition
dhcp-header.h:126
ns3::DhcpHeader::OP_ADDREQ
@ OP_ADDREQ
BOOTP Option 50: Requested Address.
Definition
dhcp-header.h:122
ns3::DhcpHeader::OP_ROUTE
@ OP_ROUTE
BOOTP Option 3: Router Option.
Definition
dhcp-header.h:121
ns3::DhcpHeader::OP_END
@ OP_END
BOOTP Option 255: END.
Definition
dhcp-header.h:128
ns3::DhcpHeader::OP_LEASE
@ OP_LEASE
BOOTP Option 51: Address Lease Time.
Definition
dhcp-header.h:123
ns3::DhcpHeader::m_hLen
uint8_t m_hLen
The hardware length.
Definition
dhcp-header.h:304
ns3::DhcpHeader::DhcpHeader
DhcpHeader()
Constructor.
Definition
dhcp-header.cc:49
ns3::DhcpHeader::SetRouter
void SetRouter(Ipv4Address addr)
Set the Ipv4Address of gateway to be used.
Definition
dhcp-header.cc:206
ns3::DhcpHeader::SetMask
void SetMask(uint32_t addr)
Set the mask of the IPv4Address.
Definition
dhcp-header.cc:189
ns3::DhcpHeader::m_renew
uint32_t m_renew
The renewal time for the client.
Definition
dhcp-header.h:323
ns3::DhcpHeader::GetChaddr
DhcpChaddr GetChaddr()
Get the Address of the client.
Definition
dhcp-header.cc:137
ns3::DhcpHeader::m_hType
uint8_t m_hType
The hardware type.
Definition
dhcp-header.h:303
ns3::DhcpHeader::SetReq
void SetReq(Ipv4Address addr)
Set the Ipv4Address requested by the client.
Definition
dhcp-header.cc:172
ns3::DhcpHeader::m_flags
uint16_t m_flags
BOOTP flags.
Definition
dhcp-header.h:310
ns3::DhcpHeader::Deserialize
uint32_t Deserialize(Buffer::Iterator start) override
Definition
dhcp-header.cc:383
ns3::DhcpHeader::GetYiaddr
Ipv4Address GetYiaddr() const
Get the IPv4Address of the client.
Definition
dhcp-header.cc:149
ns3::DhcpHeader::GetInstanceTypeId
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
Definition
dhcp-header.cc:301
ns3::DhcpHeader::SetRebind
void SetRebind(uint32_t time)
Set the Rebind time of the IPv4Address.
Definition
dhcp-header.cc:257
ns3::DhcpHeader::Print
void Print(std::ostream &os) const override
Definition
dhcp-header.cc:307
ns3::DhcpHeader::m_route
Ipv4Address m_route
Router Option Address.
Definition
dhcp-header.h:318
ns3::DhcpHeader::m_op
uint8_t m_op
The DHCP Message type.
Definition
dhcp-header.h:301
ns3::DhcpHeader::m_xid
uint32_t m_xid
The transaction number.
Definition
dhcp-header.h:306
ns3::DhcpHeader::GetRebind
uint32_t GetRebind() const
Return the Rebind time of the address.
Definition
dhcp-header.cc:268
ns3::DhcpHeader::m_req
Ipv4Address m_req
Requested Address.
Definition
dhcp-header.h:317
ns3::DhcpHeader::GetRenew
uint32_t GetRenew() const
Return the Renewal time of the address.
Definition
dhcp-header.cc:251
ns3::DhcpHeader::m_file
uint8_t m_file[128]
File name (Padded for now).
Definition
dhcp-header.h:320
ns3::DhcpHeader::GetSerializedSize
uint32_t GetSerializedSize() const override
Definition
dhcp-header.cc:285
ns3::DhcpHeader::SetChaddr
void SetChaddr(DhcpChaddr addr)
Set the Chaddress of the device.
Definition
dhcp-header.cc:131
ns3::DhcpHeader::SetHWType
void SetHWType(uint8_t htype, uint8_t hlen)
Set the hardware information.
Definition
dhcp-header.cc:106
ns3::Header
Protocol header serialization and deserialization.
Definition
header.h:33
ns3::Ipv4Address
Ipv4 addresses are stored in host order in this class.
Definition
ipv4-address.h:31
ns3::TypeId
a unique identifier for an interface.
Definition
type-id.h:49
uint32_t
ns3::DhcpChaddr
std::array< uint8_t, 16 > DhcpChaddr
This is the Chaddr field, which is 16 bytes long.
Definition
dhcp-header.h:44
ns3::DhcpChaddrToString
std::string DhcpChaddrToString(const DhcpChaddr &chaddr)
Function to pretty-print a Chaddr.
Definition
dhcp-header.cc:36
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
src
internet-apps
model
dhcp-header.h
Generated on
for ns-3 by
1.15.0