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" ) 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);
541 std::ostream &
info(std::ostream &os,
int detail = 0)
const;
593 virtual void setup();
595 virtual void release(std::string trace_filename =
"");
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;
760 #endif // #ifndef TCP_H void set_source_port(unsigned val)
ADD DOCUMENTATION HERE.
bool operator<=(const Sequence_Number &n) const
ADD DOCUMENTATION HERE.
TCP_Segment()
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.
virtual void release(std::string trace_filename="")
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)
virtual void save_trace(std::string filename)
ADD DOCUMENTATION HERE.
virtual void set_trace(const bool enable_trace=true)
ADD DOCUMENTATION HERE.
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.
virtual void setup()
ADD DOCUMENTATION HERE.
bool operator==(const TCP_Segment &segment) const
ADD DOCUMENTATION HERE.
virtual TCP_Packet & clone() 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.
virtual ~TCP_Receiver()
ADD DOCUMENTATION HERE.
Sequence_Number fSndUna
ADD DOCUMENTATION HERE.
Sequence_Number()
Default constructor.
virtual void setup()
ADD DOCUMENTATION HERE.
unsigned fWnd
window size (advertised by receiver)
void set_session_id(int val)
ADD DOCUMENTATION HERE.
friend std::ostream & operator<<(std::ostream &, TCP_Packet &)
ADD DOCUMENTATION HERE.
virtual ~TCP_Sender()
ADD DOCUMENTATION HERE.
std::string to_str(const T &i)
Convert anything to string.
void set_destination_port(unsigned val)
ADD DOCUMENTATION HERE.
std::ostream & info(std::ostream &os, int detail=0) const
print info
void set_info(unsigned ssThresh, unsigned recWnd, unsigned cWnd, double estRTT, Sequence_Number sndUna, Sequence_Number sndNxt, bool isRtx)
ADD DOCUMENTATION HERE.
Signal< itpp::Packet * > tcp_send
ADD DOCUMENTATION HERE.
#define it_assert(t, s)
Abort if t is not true.
virtual void set_trace(const bool enable_trace=true)
ADD DOCUMENTATION HERE.
unsigned fSSThresh
ADD DOCUMENTATION HERE.
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.
Slot< TCP_Receiver, std::string > tcp_release
ADD DOCUMENTATION HERE.
TCP_Packet()
ADD DOCUMENTATION HERE.
TCP_Sender(int label)
ADD DOCUMENTATION HERE.
virtual void print_item(std::ostream &, const std::string &)
Print support.
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.
virtual void release(std::string trace_filename="")
ADD DOCUMENTATION HERE.
int fSessionId
session identifier
T min(const Vec< T > &in)
Minimum value of vector.
virtual void set_debug(const bool enable_debug=true)
ADD DOCUMENTATION HERE.
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.
void read(unsigned noOfBytes)
read up to "noOfBytes" bytes from queue
Sequence_Number operator-(const int n) const
ADD DOCUMENTATION HERE.
int value() const
Access to internal representation.
bool is_user_message_available()
called by higher layer
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.
virtual void save_trace(std::string filename)
ADD DOCUMENTATION HERE.
void reset()
clears internal list structure
bool is_contained(const TCP_Segment &segment) const
ADD DOCUMENTATION HERE.
virtual void set_debug(const bool enable_debug=true)
ADD DOCUMENTATION HERE.
TCP_Segment fSegment
data segment to be transmitted
Sequence_Number & operator-=(const int n)
ADD DOCUMENTATION HERE.
TCP_Receiver_Buffer()
ADD DOCUMENTATION HERE.
void combine(const TCP_Segment &segment)
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.
TCP_Segment & operator=(const TCP_Segment &segment)
ADD DOCUMENTATION HERE.
friend std::ostream & operator<<(std::ostream &os, const TCP_Segment &segment)
ADD DOCUMENTATION HERE.
itpp::Packet & get_user_message()
called by higher layer
Sequence_Number begin() const
ADD DOCUMENTATION HERE.
TCP_Receiver(int label)
ADD DOCUMENTATION HERE.
unsigned first_block_size() const
size of first complete block
Sequence_Number operator+(const int n) const
ADD DOCUMENTATION HERE.
virtual ~TCP_Packet()
ADD DOCUMENTATION HERE.
Sequence_Number(int n)
ADD DOCUMENTATION HERE.
Definition of a Packet class.
void write(TCP_Segment newBlock)
add segment to the queue
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
~TCP_Receiver_Buffer()
ADD DOCUMENTATION HERE.
bool fRtxFlag
ADD DOCUMENTATION HERE.
std::list< TCP_Segment > fBufList
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.
virtual void print_header(std::ostream &) const
ADD DOCUMENTATION HERE.
unsigned fDestinationPort
ADD DOCUMENTATION HERE.
unsigned window() const
ADD DOCUMENTATION HERE.
Templated Vector Class Definitions.
void set_end(const Sequence_Number &sn)
ADD DOCUMENTATION HERE.