24 #include "ns3/address-utils.h"
25 #include "ns3/buffer.h"
41 static const char* flagNames[8] = {
"FIN",
"SYN",
"RST",
"PSH",
"ACK",
"URG",
"ECE",
"CWR"};
42 std::string flagsDescription =
"";
43 for (uint8_t i = 0; i < 8; ++i)
47 if (!flagsDescription.empty())
49 flagsDescription += delimiter;
51 flagsDescription.append(flagNames[i]);
54 return flagsDescription;
208 uint32_t hdrSize = 0;
247 .SetGroupName(
"Internet")
272 os <<
" " << (*op)->GetInstanceTypeId().GetName() <<
"(";
300 uint32_t optionLen = 0;
304 optionLen += (*op)->GetSerializedSize();
306 i.
Next((*op)->GetSerializedSize());
310 while (optionLen % 4)
347 uint32_t optionLen = (
m_length - 5) * 4;
350 NS_LOG_ERROR(
"Illegal TCP option length " << optionLen <<
"; options discarded");
355 uint8_t kind = i.
PeekU8();
365 NS_LOG_WARN(
"Option kind " <<
static_cast<int>(kind) <<
" unknown, skipping.");
367 optionSize = op->Deserialize(i);
368 if (optionSize != op->GetSerializedSize())
373 if (optionLen >= optionSize)
375 optionLen -= optionSize;
382 NS_LOG_ERROR(
"Option exceeds TCP option space; option discarded");
399 NS_LOG_ERROR(
"Mismatch between calculated length and in-header value");
421 len += (*i)->GetSerializedSize();
426 len += 4 - (len % 4);
438 NS_LOG_WARN(
"The option kind " <<
static_cast<int>(option->
GetKind()) <<
" is unknown");
468 if ((*i)->GetKind() == kind)
482 if ((*i)->GetKind() == kind)
a polymophic address class
static constexpr uint32_t MAX_SIZE
The maximum size of a byte buffer which can be stored in an Address instance.
iterator in a Buffer instance
uint16_t CalculateIpChecksum(uint16_t size)
Calculate the checksum.
void WriteU8(uint8_t data)
void WriteU16(uint16_t data)
void WriteHtonU16(uint16_t data)
void WriteHtonU32(uint32_t data)
void Next()
go forward by one byte
automatically resized byte buffer
void AddAtStart(uint32_t start)
Buffer::Iterator Begin() const
Ipv4 addresses are stored in host order in this class.
static bool IsMatchingType(const Address &address)
Describes an IPv6 address.
Smart pointer class similar to boost::intrusive_ptr.
NUMERIC_TYPE GetValue() const
Extracts the numeric value of the sequence number.
static Ptr< TcpOption > CreateOption(uint8_t kind)
Creates an option.
virtual uint8_t GetKind() const =0
Get the ‘kind’ (as in RFC 793) of this option.
static bool IsKindKnown(uint8_t kind)
Check if the option is implemented.
@ UNKNOWN
not a standardized value; for unknown recv'd options
virtual uint32_t GetSerializedSize() const =0
Returns number of bytes required for Option serialization.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
#define NS_LOG_ERROR(msg)
Use NS_LOG to output a message of level LOG_ERROR.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool operator==(const EventId &a, const EventId &b)
void WriteTo(Buffer::Iterator &i, Ipv4Address ad)
Write an Ipv4Address to a Buffer.
std::ostream & operator<<(std::ostream &os, const Angles &a)