A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
tcp-option-winscale.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011 Adrian Sai-wah Tam
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
7 * Documentation, test cases: Natale Patriciello <natale.patriciello@gmail.com>
8 */
9
10#ifndef TCP_OPTION_WINSCALE_H
11#define TCP_OPTION_WINSCALE_H
12
13#include "tcp-option.h"
14
15namespace ns3
16{
17
18/**
19 * \ingroup tcp
20 *
21 * \brief Defines the TCP option of kind 3 (window scale option) as in \RFC{1323}
22 *
23 * For more efficient use of high bandwidth networks, a larger TCP window size
24 * may be used. The TCP window size field controls the flow of data and its
25 * value is limited to between 2 and 65,535 bytes.
26 *
27 * Since the size field cannot be expanded, a scaling factor is used.
28 * The TCP window scale option, as defined in \RFC{1323}, is an option used
29 * to increase the maximum window size from 65,535 bytes to 1 gigabyte.
30 * Scaling up to larger window sizes is a part of what is necessary for TCP Tuning.
31 *
32 * The window scale option is used only during the TCP 3-way handshake.
33 * The window scale value represents the number of bits to left-shift the
34 * 16-bit window size field. The window scale value can be set from 0
35 * (no shift) to 14 for each direction independently. Both sides must
36 * send the option in their SYN segments to enable window scaling in
37 * either direction.
38 */
40{
41 public:
42 /**
43 * \brief Get the type ID.
44 * \return the object TypeId
45 */
46 static TypeId GetTypeId();
47 TypeId GetInstanceTypeId() const override;
48
50 ~TcpOptionWinScale() override;
51
52 void Print(std::ostream& os) const override;
53 void Serialize(Buffer::Iterator start) const override;
55
56 uint8_t GetKind() const override;
57 uint32_t GetSerializedSize() const override;
58
59 /**
60 * \brief Get the scale value (uint8_t)
61 * \return The scale value
62 */
63 uint8_t GetScale() const;
64
65 /**
66 * \brief Set the scale option
67 *
68 * The scale option SHOULD be <= 14 (as \RFC{1323}).
69 *
70 * \param scale Scale factor
71 */
72 void SetScale(uint8_t scale);
73
74 protected:
75 uint8_t m_scale; //!< Window scaling in number of bit shift
76};
77
78} // namespace ns3
79
80#endif /* TCP_OPTION_WINSCALE */
iterator in a Buffer instance
Definition buffer.h:89
Base class for all kinds of TCP options.
Definition tcp-option.h:27
Defines the TCP option of kind 3 (window scale option) as in RFC 1323
uint8_t GetScale() const
Get the scale value (uint8_t)
uint32_t GetSerializedSize() const override
Returns number of bytes required for Option serialization.
void Serialize(Buffer::Iterator start) const override
Serialize the Option to a buffer iterator.
void Print(std::ostream &os) const override
Print the Option contents.
uint32_t Deserialize(Buffer::Iterator start) override
Deserialize the Option from a buffer iterator.
void SetScale(uint8_t scale)
Set the scale option.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
uint8_t m_scale
Window scaling in number of bit shift.
uint8_t GetKind() const override
Get the ‘kind’ (as in RFC 793 ) of this option.
static TypeId GetTypeId()
Get the type ID.
a unique identifier for an interface.
Definition type-id.h:48
Every class exported by the ns3 library is enclosed in the ns3 namespace.