37 #if (defined(_MSC_VER) && defined(ITPP_SHARED_LIB) && !(defined(itpp_EXPORTS) || defined(itpp_debug_EXPORTS))) 39 #ifndef ITPP_PROTOCOL_EXCLUDED 40 #define ITPP_PROTOCOL_EXCLUDED 41 #pragma message( "PROTOCOL definitions are not available for MSVC shared builds" ) 171 bool can_be_combined(
const TCP_Segment &segment)
const;
173 bool is_contained(
const TCP_Segment &segment)
const;
255 virtual void print_header(std::ostream &)
const;
334 virtual void setup();
336 virtual void release(std::string trace_filename =
"");
339 virtual void print_item(std::ostream &,
const std::string &);
342 virtual void set_debug(
const bool enable_debug =
true);
344 virtual void set_debug(
bool enable_debug,
bool enable_signal_debug);
346 virtual void set_trace(
const bool enable_trace =
true);
348 virtual void save_trace(std::string filename);
366 std::queue<itpp::Packet*> SocketWriteQueue;
368 virtual void InitStatistics();
370 virtual void SendNewData(
bool skipSWSA =
false);
371 virtual void UnaRetransmit();
372 virtual void FinishFastRecovery();
373 virtual void ReduceSSThresh();
375 virtual void HandleRtxTimeout(
Ttype);
376 virtual void IdleCheck();
377 virtual void HandleSWSATimeout(
Ttype);
379 virtual unsigned SendWindow()
const;
380 virtual double CalcRTOValue()
const;
381 virtual void SetRtxTimer();
382 virtual void UpdateRTTVariables(
double sampleRTT);
383 virtual void TraceCWnd();
386 virtual void TraceRTTVariables(
double sampleRTT);
387 virtual void TraceSSThresh();
388 virtual std::string GenerateFilename();
390 void StopTransientPhase();
392 enum eTCPVersion {kTahoe, kReno, kNewReno};
394 virtual void set_label(
int label);
400 virtual void HandleUserMessageIndication(
itpp::Packet *user_data);
404 eTCPVersion fTCPVersion;
406 unsigned fTCPIPHeaderLength;
408 unsigned fInitialCWnd;
409 unsigned fInitialSSThresh;
411 unsigned fDupACKThreshold;
412 double fTimerGranularity;
414 unsigned fMaxBackoff;
415 bool fImmediateBackoffReset;
418 bool fFlightSizeRecovery;
419 bool fRenoConservation;
420 bool fCarefulSSThreshReduction;
421 bool fIgnoreDupACKOnTORecovery;
422 bool fCarefulMulFastRtxAvoidance;
424 double fSWSATimerValue;
425 bool fRestartAfterIdle;
427 bool fTraceSentSeqNo;
428 bool fTraceACKedSeqNo;
455 bool fPendingBackoffReset;
464 double fRTTMStartTime;
467 unsigned long fNumberOfTimeouts;
468 unsigned long fNumberOfFastRetransmits;
469 unsigned long fNumberOfRTTMeasurements;
470 unsigned long fNumberOfReceivedACKs;
471 unsigned long fNumberOfIdleTimeouts;
481 ivec sent_seq_num_val;
482 vec sent_seq_num_time;
483 int sent_seq_num_index;
485 ivec sender_recv_ack_seq_num_val;
486 vec sender_recv_ack_seq_num_time;
487 int sender_recv_ack_seq_num_index;
490 vec RTTEstimate_time;
491 int RTTEstimate_index;
532 void read(
unsigned noOfBytes);
534 unsigned first_block_size()
const;
538 unsigned window()
const;
541 std::ostream &info(std::ostream &os,
int detail = 0)
const;
546 std::list <TCP_Segment> fBufList;
593 virtual void setup();
595 virtual void release(std::string trace_filename =
"");
599 bool is_user_message_available();
601 virtual void set_debug(
const bool enable_debug =
true);
604 virtual void set_debug(
bool enable_debug,
bool enable_signal_debug);
606 virtual void set_trace(
const bool enable_trace =
true);
608 virtual void save_trace(std::string filename);
619 void IndicateUserMessage();
622 virtual void ReceiveDataPacket(
TCP_Packet & packet);
623 virtual void SendACK(
bool);
624 virtual void ScheduleACKMessage();
625 virtual void SendACKMessage(
Ttype);
626 virtual void DelayedACKHandler(
Ttype);
627 virtual void PeriodicACKHandler(
Ttype);
628 virtual void HandleEndOfProcessing(
Ttype);
630 virtual std::string GenerateFilename();
637 unsigned fTCPIPHeaderLength;
639 unsigned fBufferSize;
642 bool fSendPeriodicACKs;
643 bool fStrictPeriodicACKs;
644 Ttype fPeriodicACKInterval;
645 Ttype fACKSchedulingDelay;
646 bool fACKOnBufferWrite;
647 bool fACKOnBufferRead;
648 unsigned fMaxUserBlockSize;
649 unsigned fMinUserBlockSize;
650 double fUserBlockProcDelay;
673 ivec received_seq_num_val;
674 vec received_seq_num_time;
675 int received_seq_num_index;
693 if (fBufList.empty()) {
697 return fBufList.back().end();
704 return fFirstByte + first_block_size();
712 it_assert(seq_begin <= seq_end,
"TCP_Segment::begin, end byte " +
to_str(seq_end.value()) +
" < begin byte " +
to_str(seq_begin.value()));
720 it_assert(seq_begin <= seq_end,
"TCP_Segment::set_begin, end byte " +
to_str(seq_end.value()) +
" < begin byte " +
to_str(seq_begin.value()));
726 return (this->seq_begin == segment.
seq_begin) && (this->seq_end == segment.
seq_end);
732 return (this->seq_begin != segment.
seq_begin) || (this->seq_end != segment.
seq_end);
738 return (this->seq_begin <= segment.
seq_end) && (segment.
seq_begin <= this->seq_end);
744 return (segment.
seq_begin <= this->seq_begin) && (this->seq_end <= segment.
seq_end);
750 return seq_end - seq_begin;
760 #endif // #ifndef TCP_H void set_source_port(unsigned val)
ADD DOCUMENTATION HERE.
bool operator<=(const Sequence_Number &n) const
ADD DOCUMENTATION HERE.
bool operator>(const Sequence_Number &n) const
ADD DOCUMENTATION HERE.
Sequence_Number & operator=(const Sequence_Number &n)
ADD DOCUMENTATION HERE.
Signal< itpp::Packet * > tcp_send_ack
ADD DOCUMENTATION HERE.
TDebugInfo * fInfo
ADD DOCUMENTATION HERE.
Sequence_Number & operator+=(const int n)
ADD DOCUMENTATION HERE.
double Ttype
64-bit floating point time
Sequence_Number & operator=(const int &rep)
ADD DOCUMENTATION HERE.
Sequence_Number last_byte() const
highest byte received (+1)
unsigned fRecWnd
ADD DOCUMENTATION HERE.
bool operator!=(const TCP_Segment &segment) const
ADD DOCUMENTATION HERE.
bool operator==(const Sequence_Number &n) const
ADD DOCUMENTATION HERE.
bool operator==(const TCP_Segment &segment) const
ADD DOCUMENTATION HERE.
int operator-(const Sequence_Number &n) const
ADD DOCUMENTATION HERE.
bool operator<(const Sequence_Number &n) const
ADD DOCUMENTATION HERE.
unsigned fCWnd
ADD DOCUMENTATION HERE.
unsigned get_source_port() const
ADD DOCUMENTATION HERE.
Sequence_Number fSndUna
ADD DOCUMENTATION HERE.
Sequence_Number()
Default constructor.
unsigned fWnd
window size (advertised by receiver)
void set_session_id(int val)
ADD DOCUMENTATION HERE.
std::string to_str(const T &i)
Convert anything to string.
void set_destination_port(unsigned val)
ADD DOCUMENTATION HERE.
Signal< itpp::Packet * > tcp_send
ADD DOCUMENTATION HERE.
#define it_assert(t, s)
Abort if t is not true.
unsigned fSSThresh
ADD DOCUMENTATION HERE.
int length(const Vec< T > &v)
Length of vector.
Signal< int > tcp_new_data
indicate new data to higher layer
double fRTTEstimate
ADD DOCUMENTATION HERE.
void set_begin(const Sequence_Number &sn)
ADD DOCUMENTATION HERE.
Definitions of converters between different vector and matrix types.
Sequence_Number first_byte() const
first byte stored or missing
Sequence_Number end() const
ADD DOCUMENTATION HERE.
Slot< TCP_Sender, std::string > tcp_release
ADD DOCUMENTATION HERE.
int fSessionId
session identifier
T min(const Vec< T > &in)
Minimum value of vector.
Sequence_Number seq_begin
no. of first byte of segment
Sequence_Number next_expected() const
first byte missing
bool can_be_combined(const TCP_Segment &segment) const
ADD DOCUMENTATION HERE.
void set_wnd(unsigned val)
ADD DOCUMENTATION HERE.
Definitions of an event-based simulation class.
Sequence_Number operator-(const int n) const
ADD DOCUMENTATION HERE.
int value() const
Access to internal representation.
void set_segment(const TCP_Segment &seg)
ADD DOCUMENTATION HERE.
T max(const Vec< T > &v)
Maximum value of vector.
void set_ACK(Sequence_Number val)
ADD DOCUMENTATION HERE.
Slot< TCP_Sender, itpp::Packet * > tcp_socket_write
ADD DOCUMENTATION HERE.
Sequence_Number fSndNxt
ADD DOCUMENTATION HERE.
friend std::ostream & operator<<(std::ostream &os, const Sequence_Number &n)
ADD DOCUMENTATION HERE.
bool is_contained(const TCP_Segment &segment) const
ADD DOCUMENTATION HERE.
TCP_Segment fSegment
data segment to be transmitted
Sequence_Number & operator-=(const int n)
ADD DOCUMENTATION HERE.
Sequence_Number fACK
acknowledgment (next expected sn)
Sequence_Number fFirstByte
first byte stored or missing
int get_session_id() const
ADD DOCUMENTATION HERE.
Sequence_Number(const Sequence_Number &n)
ADD DOCUMENTATION HERE.
Sequence_Number get_ACK() const
ADD DOCUMENTATION HERE.
Slot< TCP_Receiver, itpp::Packet * > tcp_receive
ADD DOCUMENTATION HERE.
friend Sequence_Number operator+(const int n1, const Sequence_Number &n2)
ADD DOCUMENTATION HERE.
Sequence_Number begin() const
ADD DOCUMENTATION HERE.
Sequence_Number operator+(const int n) const
ADD DOCUMENTATION HERE.
Sequence_Number(int n)
ADD DOCUMENTATION HERE.
Definition of a Packet class.
unsigned get_wnd() const
ADD DOCUMENTATION HERE.
int seq
ADD DOCUMENTATION HERE.
bool operator!=(const Sequence_Number &n) const
ADD DOCUMENTATION HERE.
unsigned fSourcePort
ADD DOCUMENTATION HERE.
Sequence_Number seq_end
no. of last byte of segment + 1
bool fRtxFlag
ADD DOCUMENTATION HERE.
unsigned get_destination_port() const
ADD DOCUMENTATION HERE.
unsigned length() const
ADD DOCUMENTATION HERE.
bool operator>=(const Sequence_Number &n) const
ADD DOCUMENTATION HERE.
Slot< TCP_Sender, itpp::Packet * > tcp_receive_ack
ADD DOCUMENTATION HERE.
TCP_Segment get_segment() const
ADD DOCUMENTATION HERE.
unsigned fDestinationPort
ADD DOCUMENTATION HERE.
Templated Vector Class Definitions.
void set_end(const Sequence_Number &sn)
ADD DOCUMENTATION HERE.