A Discrete-Event Network Simulator
QKDNetSim v2.0 (NS-3 v3.41) @ (+)
API
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
dhcp-header.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011 UPB
3  * Copyright (c) 2017 NITK Surathkal
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Radu Lupu <rlupu@elcom.pub.ro>
19  * Ankit Deepak <adadeepak8@gmail.com>
20  * Deepti Rajagopal <deeptir96@gmail.com>
21  *
22  */
23 
24 #ifndef DHCP_HEADER_H
25 #define DHCP_HEADER_H
26 
27 #include "ns3/address.h"
28 #include "ns3/buffer.h"
29 #include "ns3/header.h"
30 #include "ns3/ipv4-address.h"
31 
32 namespace ns3
33 {
34 
84 class DhcpHeader : public Header
85 {
86  public:
91  static TypeId GetTypeId();
92 
96  DhcpHeader();
97 
101  ~DhcpHeader() override;
102 
104  enum Options
105  {
106  OP_MASK = 1,
107  OP_ROUTE = 3,
108  OP_ADDREQ = 50,
109  OP_LEASE = 51,
110  OP_MSGTYPE = 53,
111  OP_SERVID = 54,
112  OP_RENEW = 58,
113  OP_REBIND = 59,
114  OP_END = 255
115  };
116 
118  enum Messages
119  {
121  DHCPOFFER = 1,
122  DHCPREQ = 2,
123  DHCPACK = 4,
124  DHCPNACK = 5
125  };
126 
131  void SetType(uint8_t type);
132 
137  uint8_t GetType() const;
138 
144  void SetHWType(uint8_t htype, uint8_t hlen);
145 
150  void SetTran(uint32_t tran);
151 
156  uint32_t GetTran() const;
157 
161  void SetTime();
162 
170  void SetChaddr(Address addr);
171 
177  void SetChaddr(uint8_t* addr, uint8_t len);
178 
186  Address GetChaddr();
187 
192  void SetYiaddr(Ipv4Address addr);
193 
198  Ipv4Address GetYiaddr() const;
199 
204  void SetDhcps(Ipv4Address addr);
205 
210  Ipv4Address GetDhcps() const;
211 
216  void SetReq(Ipv4Address addr);
217 
222  Ipv4Address GetReq() const;
223 
228  void SetMask(uint32_t addr);
229 
234  uint32_t GetMask() const;
235 
240  void SetRouter(Ipv4Address addr);
241 
246  Ipv4Address GetRouter() const;
247 
252  void SetLease(uint32_t time);
253 
258  uint32_t GetLease() const;
259 
264  void SetRenew(uint32_t time);
265 
270  uint32_t GetRenew() const;
271 
276  void SetRebind(uint32_t time);
277 
282  uint32_t GetRebind() const;
283 
287  void ResetOpt();
288 
289  private:
290  TypeId GetInstanceTypeId() const override;
291  void Print(std::ostream& os) const override;
292  uint32_t GetSerializedSize() const override;
293  void Serialize(Buffer::Iterator start) const override;
294  uint32_t Deserialize(Buffer::Iterator start) override;
295 
296  uint8_t m_op;
297  uint8_t m_bootp;
298  uint8_t m_hType;
299  uint8_t m_hLen;
300  uint8_t m_hops;
301  uint32_t m_xid;
302  uint32_t m_mask;
303  uint32_t m_len;
304  uint16_t m_secs;
305  uint16_t m_flags;
306  uint8_t m_chaddr[16];
314  uint8_t m_sname[64];
315  uint8_t m_file[128];
316  uint8_t m_magic_cookie[4];
317  uint32_t m_lease;
318  uint32_t m_renew;
319  uint32_t m_rebind;
320  bool m_opt[255];
321 };
322 
323 } // namespace ns3
324 
325 #endif /* DHCP_HEADER_H */
a polymophic address class
Definition: address.h:101
iterator in a Buffer instance
Definition: buffer.h:100
BOOTP header with DHCP messages supports the following options: Subnet Mask (1), Address Request (50)...
Definition: dhcp-header.h:85
uint32_t GetLease() const
Return the lease time of the IPv4Address.
Definition: dhcp-header.cc:234
void SetTime()
Set the time when message is sent.
Definition: dhcp-header.cc:113
Ipv4Address m_ciAddr
The IP address of the client.
Definition: dhcp-header.h:308
Ipv4Address GetReq() const
Get the IPv4Address requested by the client.
Definition: dhcp-header.cc:183
uint32_t m_rebind
The rebinding time for the client.
Definition: dhcp-header.h:319
uint8_t m_chaddr[16]
The address identifier.
Definition: dhcp-header.h:306
void Serialize(Buffer::Iterator start) const override
Definition: dhcp-header.cc:313
Ipv4Address m_giAddr
Relay Agent IP address.
Definition: dhcp-header.h:310
void ResetOpt()
Reset the BOOTP options.
Definition: dhcp-header.cc:274
uint8_t m_hops
The number of hops covered by the message.
Definition: dhcp-header.h:300
Ipv4Address GetRouter() const
Return the Ipv4Address of gateway to be used.
Definition: dhcp-header.cc:217
uint8_t m_bootp
The BOOTP Message type.
Definition: dhcp-header.h:297
uint32_t m_lease
The lease time of the address.
Definition: dhcp-header.h:317
void SetType(uint8_t type)
Set the type of BOOTP and DHCP messages.
Definition: dhcp-header.cc:76
Messages
DHCP messages.
Definition: dhcp-header.h:119
@ DHCPACK
Code for DHCP ACK.
Definition: dhcp-header.h:123
@ DHCPOFFER
Code for DHCP Offer.
Definition: dhcp-header.h:121
@ DHCPDISCOVER
Code for DHCP Discover.
Definition: dhcp-header.h:120
@ DHCPREQ
Code for DHCP Request.
Definition: dhcp-header.h:122
@ DHCPNACK
Code for DHCP NACK.
Definition: dhcp-header.h:124
void SetTran(uint32_t tran)
Set the transaction ID.
Definition: dhcp-header.cc:101
Address GetChaddr()
Get the Address of the client.
Definition: dhcp-header.cc:135
uint8_t m_sname[64]
Server name (Padded for now)
Definition: dhcp-header.h:314
Ipv4Address GetDhcps() const
Get the information about the DHCP server.
Definition: dhcp-header.cc:166
Ipv4Address m_yiAddr
Your (client) IP address.
Definition: dhcp-header.h:307
~DhcpHeader() override
Destructor.
Definition: dhcp-header.cc:71
void SetYiaddr(Ipv4Address addr)
Set the IPv4Address of the client.
Definition: dhcp-header.cc:143
uint32_t m_len
The length of the header.
Definition: dhcp-header.h:303
void SetDhcps(Ipv4Address addr)
Set the DHCP server information.
Definition: dhcp-header.cc:155
uint16_t m_secs
Seconds elapsed.
Definition: dhcp-header.h:304
uint32_t GetMask() const
Return the mask of the network.
Definition: dhcp-header.cc:200
uint32_t m_mask
The mask of the network.
Definition: dhcp-header.h:302
Ipv4Address m_dhcps
DHCP server IP address.
Definition: dhcp-header.h:311
Ipv4Address m_siAddr
Next Server IP address.
Definition: dhcp-header.h:309
uint8_t GetType() const
Return the type of DHCP message.
Definition: dhcp-header.cc:88
void SetRenew(uint32_t time)
Set the Renewal time of the IPv4Address.
Definition: dhcp-header.cc:240
uint32_t GetTran() const
Get the transaction id.
Definition: dhcp-header.cc:107
bool m_opt[255]
BOOTP option list.
Definition: dhcp-header.h:320
uint8_t m_magic_cookie[4]
DHCP Magic Cookie.
Definition: dhcp-header.h:316
void SetLease(uint32_t time)
Set the lease time of the IPv4Address.
Definition: dhcp-header.cc:223
static TypeId GetTypeId()
Get the type ID.
Definition: dhcp-header.cc:291
Options
BOOTP options.
Definition: dhcp-header.h:105
@ OP_SERVID
BOOTP Option 54: Server Identifier.
Definition: dhcp-header.h:111
@ OP_MASK
BOOTP Option 1: Address Mask.
Definition: dhcp-header.h:106
@ OP_REBIND
BOOTP Option 59: Address Rebind Time.
Definition: dhcp-header.h:113
@ OP_MSGTYPE
BOOTP Option 53: DHCP Message Type.
Definition: dhcp-header.h:110
@ OP_RENEW
BOOTP Option 58: Address Renewal Time.
Definition: dhcp-header.h:112
@ OP_ADDREQ
BOOTP Option 50: Requested Address.
Definition: dhcp-header.h:108
@ OP_ROUTE
BOOTP Option 3: Router Option.
Definition: dhcp-header.h:107
@ OP_END
BOOTP Option 255: END.
Definition: dhcp-header.h:114
@ OP_LEASE
BOOTP Option 51: Address Lease Time.
Definition: dhcp-header.h:109
uint8_t m_hLen
The hardware length.
Definition: dhcp-header.h:299
DhcpHeader()
Constructor.
Definition: dhcp-header.cc:37
void SetRouter(Ipv4Address addr)
Set the Ipv4Address of gateway to be used.
Definition: dhcp-header.cc:206
void SetMask(uint32_t addr)
Set the mask of the IPv4Address.
Definition: dhcp-header.cc:189
uint32_t m_renew
The renewal time for the client.
Definition: dhcp-header.h:318
uint8_t m_hType
The hardware type.
Definition: dhcp-header.h:298
void SetReq(Ipv4Address addr)
Set the Ipv4Address requested by the client.
Definition: dhcp-header.cc:172
uint16_t m_flags
BOOTP flags.
Definition: dhcp-header.h:305
Ipv4Address GetYiaddr() const
Get the IPv4Address of the client.
Definition: dhcp-header.cc:149
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
Definition: dhcp-header.cc:301
void SetRebind(uint32_t time)
Set the Rebind time of the IPv4Address.
Definition: dhcp-header.cc:257
void Print(std::ostream &os) const override
Definition: dhcp-header.cc:307
Ipv4Address m_route
Router Option Address.
Definition: dhcp-header.h:313
uint8_t m_op
The DHCP Message type.
Definition: dhcp-header.h:296
uint32_t m_xid
The transaction number.
Definition: dhcp-header.h:301
uint32_t GetRebind() const
Return the Rebind time of the address.
Definition: dhcp-header.cc:268
Ipv4Address m_req
Requested Address.
Definition: dhcp-header.h:312
void SetChaddr(Address addr)
Set the Address of the device.
Definition: dhcp-header.cc:119
uint32_t GetRenew() const
Return the Renewal time of the address.
Definition: dhcp-header.cc:251
uint8_t m_file[128]
File name (Padded for now)
Definition: dhcp-header.h:315
uint32_t GetSerializedSize() const override
Definition: dhcp-header.cc:285
void SetHWType(uint8_t htype, uint8_t hlen)
Set the hardware information.
Definition: dhcp-header.cc:94
Protocol header serialization and deserialization.
Definition: header.h:44
virtual uint32_t Deserialize(Buffer::Iterator start)=0
Deserialize the object from a buffer iterator.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:42
a unique identifier for an interface.
Definition: type-id.h:59
Every class exported by the ns3 library is enclosed in the ns3 namespace.