INET Framework for OMNeT++/OMNEST
inet::tcp::TcpSegmentTransmitInfoList Class Reference

#include <TcpSegmentTransmitInfoList.h>

Classes

class  Item
 

Public Types

typedef std::list< ItemTcpSegmentTransmitInfoItems
 

Public Member Functions

void set (uint32_t beg, uint32_t end, simtime_t sentTime)
 
const Itemget (uint32_t seq) const
 returns pointer to Item, or nullptr if not found More...
 
void clearTo (uint32_t endseg)
 

Public Attributes

TcpSegmentTransmitInfoItems regions
 

Member Typedef Documentation

◆ TcpSegmentTransmitInfoItems

Member Function Documentation

◆ clearTo()

void inet::tcp::TcpSegmentTransmitInfoList::clearTo ( uint32_t  endseg)
76 {
77  while (!regions.empty() && seqLE(regions.front().end, endseq))
78  regions.pop_front();
79  if (!regions.empty() && seqLess(regions.front().beg, endseq))
80  regions.front().beg = endseq;
81 }

Referenced by inet::tcp::TcpWestwood::dataSent(), inet::tcp::TcpVegas::dataSent(), inet::tcp::TcpWestwood::receivedDataAck(), inet::tcp::TcpVegas::receivedDataAck(), and inet::tcp::TcpVegas::receivedDuplicateAck().

◆ get()

const TcpSegmentTransmitInfoList::Item * inet::tcp::TcpSegmentTransmitInfoList::get ( uint32_t  seq) const

returns pointer to Item, or nullptr if not found

65 {
66  for (const auto& elem : regions) {
67  if (seqLess(seq, elem.beg))
68  break;
69  if (seqLE(elem.beg, seq) && seqLess(seq, elem.end))
70  return &(elem);
71  }
72  return nullptr;
73 }

Referenced by inet::tcp::TcpWestwood::receivedDataAck(), inet::tcp::TcpVegas::receivedDataAck(), and inet::tcp::TcpVegas::receivedDuplicateAck().

◆ set()

void inet::tcp::TcpSegmentTransmitInfoList::set ( uint32_t  beg,
uint32_t  end,
simtime_t  sentTime 
)
17 {
18  ASSERT(seqLess(beg, end));
19  ASSERT(regions.empty() || (seqLE(regions.front().beg, beg) && seqLE(beg, regions.back().end)));
20 
21  if (regions.empty() || (regions.back().end == beg))
22  regions.push_back(Item(beg, end, sentTime, sentTime, 1));
23  else if (end == regions.front().beg)
24  regions.push_front(Item(beg, end, sentTime, sentTime, 1));
25  else {
26  auto i = regions.begin();
27  while (seqLE(i->end, beg))
28  ++i;
29 
30  ASSERT(seqLE(i->beg, beg));
31  if (beg != i->beg) {
32  regions.insert(i, Item(i->beg, beg, i->firstSentTime, i->lastSentTime, i->transmitCount));
33  i->beg = beg;
34  }
35  while (i != regions.end() && seqLE(i->end, end)) {
36  ASSERT(beg == i->beg);
37  if (i->firstSentTime > sentTime)
38  i->firstSentTime = sentTime;
39  if (i->lastSentTime < sentTime)
40  i->lastSentTime = sentTime;
41  i->transmitCount++;
42  beg = i->end;
43  ++i;
44  }
45 
46  if (beg != end) {
47  if (i != regions.end()) {
48  ASSERT(beg == i->beg);
49  simtime_t firstSent = std::min(i->firstSentTime, sentTime);
50  simtime_t lastSent = std::max(i->lastSentTime, sentTime);
51 // if (firstSent > sentTime)
52 // firstSent = sentTime;
53 // if (lastSent < sentTime)
54 // lastSent = sentTime;
55  regions.insert(i, Item(beg, end, firstSent, lastSent, i->transmitCount + 1));
56  i->beg = end;
57  }
58  else
59  regions.push_back(Item(beg, end, sentTime, sentTime, 1));
60  }
61  }
62 }

Referenced by inet::tcp::TcpWestwood::dataSent(), inet::tcp::TcpVegas::dataSent(), inet::tcp::TcpWestwood::segmentRetransmitted(), and inet::tcp::TcpVegas::segmentRetransmitted().

Member Data Documentation

◆ regions

TcpSegmentTransmitInfoItems inet::tcp::TcpSegmentTransmitInfoList::regions

Referenced by clearTo(), get(), and set().


The documentation for this class was generated from the following files:
inet::sctp::min
double min(const double a, const double b)
Returns the minimum of a and b.
Definition: SctpAssociation.h:261
inet::tcp::seqLess
bool seqLess(uint32_t a, uint32_t b)
Definition: TcpHeader.h:21
inet::tcp::seqLE
bool seqLE(uint32_t a, uint32_t b)
Definition: TcpHeader.h:22
inet::tcp::TcpSegmentTransmitInfoList::regions
TcpSegmentTransmitInfoItems regions
Definition: TcpSegmentTransmitInfoList.h:39
inet::sctp::max
double max(const double a, const double b)
Returns the maximum of a and b.
Definition: SctpAssociation.h:266