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

Member Function Documentation

void inet::tcp::TCPSegmentTransmitInfoList::clearTo ( uint32_t  endseg)

Referenced by inet::tcp::TCPWestwood::dataSent(), inet::tcp::TCPVegas::dataSent(), inet::tcp::TCPWestwood::receivedDataAck(), inet::tcp::TCPVegas::receivedDataAck(), and inet::tcp::TCPVegas::receivedDuplicateAck().

88 {
89  while (!regions.empty() && seqLE(regions.front().end, endseq))
90  regions.pop_front();
91  if (!regions.empty() && seqLess(regions.front().beg, endseq))
92  regions.front().beg = endseq;
93 }
bool seqLess(uint32 a, uint32 b)
Definition: TCPSegment.h:32
bool seqLE(uint32 a, uint32 b)
Definition: TCPSegment.h:33
TCPSegmentTransmitInfoItems regions
Definition: TCPSegmentTransmitInfoList.h:54
const TCPSegmentTransmitInfoList::Item * inet::tcp::TCPSegmentTransmitInfoList::get ( uint32_t  seq) const

returns pointer to Item, or nullptr if not found

Referenced by inet::tcp::TCPWestwood::receivedDataAck(), inet::tcp::TCPVegas::receivedDataAck(), and inet::tcp::TCPVegas::receivedDuplicateAck().

77 {
78  for (const auto & elem : regions) {
79  if (seqLess(seq, elem.beg))
80  break;
81  if (seqLE(elem.beg, seq) && seqLess(seq, elem.end))
82  return &(elem);
83  }
84  return nullptr;
85 }
bool seqLess(uint32 a, uint32 b)
Definition: TCPSegment.h:32
bool seqLE(uint32 a, uint32 b)
Definition: TCPSegment.h:33
TCPSegmentTransmitInfoItems regions
Definition: TCPSegmentTransmitInfoList.h:54
void inet::tcp::TCPSegmentTransmitInfoList::set ( uint32_t  beg,
uint32_t  end,
simtime_t  sentTime 
)

Referenced by inet::tcp::TCPWestwood::dataSent(), inet::tcp::TCPVegas::dataSent(), inet::tcp::TCPWestwood::segmentRetransmitted(), and inet::tcp::TCPVegas::segmentRetransmitted().

29 {
30  ASSERT(seqLess(beg, end));
31  ASSERT(regions.empty() || (seqLE(regions.front().beg, beg) && seqLE(beg, regions.back().end)));
32 
33  if (regions.empty() || (regions.back().end == beg))
34  regions.push_back(Item(beg, end, sentTime, sentTime, 1));
35  else if (end == regions.front().beg)
36  regions.push_front(Item(beg, end, sentTime, sentTime, 1));
37  else {
38  auto i = regions.begin();
39  while (seqLE(i->end, beg))
40  ++i;
41 
42  ASSERT(seqLE(i->beg, beg));
43  if (beg != i->beg) {
44  regions.insert(i, Item(i->beg, beg, i->firstSentTime, i->lastSentTime, i->transmitCount));
45  i->beg = beg;
46  }
47  while (i != regions.end() && seqLE(i->end, end)) {
48  ASSERT(beg == i->beg);
49  if (i->firstSentTime > sentTime)
50  i->firstSentTime = sentTime;
51  if (i->lastSentTime < sentTime)
52  i->lastSentTime = sentTime;
53  i->transmitCount++;
54  beg = i->end;
55  ++i;
56  }
57 
58  if (beg != end) {
59  if (i != regions.end()) {
60  ASSERT(beg == i->beg);
61  simtime_t firstSent = std::min(i->firstSentTime, sentTime);
62  simtime_t lastSent = std::max(i->lastSentTime, sentTime);
63 // if (firstSent > sentTime)
64 // firstSent = sentTime;
65 // if (lastSent < sentTime)
66 // lastSent = sentTime;
67  regions.insert(i, Item(beg, end, firstSent, lastSent, i->transmitCount + 1));
68  i->beg = end;
69  }
70  else
71  regions.push_back(Item(beg, end, sentTime, sentTime, 1));
72  }
73  }
74 }
double min(const double a, const double b)
Returns the minimum of a and b.
Definition: SCTPAssociation.h:270
double max(double a, double b)
Returns the greater of the given parameters.
Definition: INETMath.h:161
bool seqLess(uint32 a, uint32 b)
Definition: TCPSegment.h:32
bool seqLE(uint32 a, uint32 b)
Definition: TCPSegment.h:33
TCPSegmentTransmitInfoItems regions
Definition: TCPSegmentTransmitInfoList.h:54

Member Data Documentation

TCPSegmentTransmitInfoItems inet::tcp::TCPSegmentTransmitInfoList::regions

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


The documentation for this class was generated from the following files: