DcTcpFamilyStateVariables¶
Namespace: inet::tcp
struct DcTcpFamilyStateVariables
State variables for DcTcpFamily.
Inheritance diagram¶
Extends¶
Name |
Type |
Description |
|---|---|---|
struct |
State variables for TcpTahoeRenoFamily. |
Fields¶
Name |
Type |
Description |
|---|---|---|
active |
bool |
set if the connection was initiated by an active open |
fork |
bool |
if passive and in LISTEN: whether to fork on an incoming connection |
snd_mss |
uint32_t |
sender maximum segment size (without headers, i.e. only segment text); see RFC 2581, page 1. This will be set to the minimum of the local smss parameter and the value specified in the MSS option received during connection setup. |
snd_una |
uint32_t |
send unacknowledged |
snd_nxt |
uint32_t |
send next (drops back on retransmission) |
snd_max |
uint32_t |
max seq number sent (needed because snd_nxt is re-set on retransmission) |
snd_wnd |
uint32_t |
send window |
snd_up |
uint32_t |
send urgent pointer |
snd_wl1 |
uint32_t |
segment sequence number used for last window update |
snd_wl2 |
uint32_t |
segment ack. number used for last window update |
iss |
uint32_t |
initial sequence number (ISS) |
rcv_nxt |
uint32_t |
receive next |
rcv_wnd |
uint32_t |
receive window |
rcv_up |
uint32_t |
receive urgent pointer; |
irs |
uint32_t |
initial receive sequence number |
rcv_adv |
uint32_t |
advertised window |
syn_rexmit_count |
int |
number of SYN/SYN+ACK retransmissions (=1 after first rexmit) |
syn_rexmit_timeout |
simtime_t |
current SYN/SYN+ACK retransmission timeout |
fin_ack_rcvd |
bool |
whether ACK of our FIN has been received. Needed in FIN bit processing to decide between transition to TIME-WAIT and CLOSING (set event code TCP_E_RCV_FIN or TCP_E_RCV_FIN_ACK). |
send_fin |
bool |
true if a user CLOSE command has been “queued” |
snd_fin_seq |
uint32_t |
if send_fin == true: FIN should be sent just before this sequence number |
fin_rcvd |
bool |
whether FIN received or not |
rcv_fin_seq |
uint32_t |
if fin_rcvd: sequence number of received FIN |
nagle_enabled |
bool |
set if Nagle’s algorithm (RFC 896) is enabled |
delayed_acks_enabled |
bool |
set if delayed ACK algorithm (RFC 1122) is enabled |
limited_transmit_enabled |
bool |
set if Limited Transmit algorithm (RFC 3042) is enabled |
increased_IW_enabled |
bool |
set if Increased Initial Window (RFC 3390) is enabled |
full_sized_segment_counter |
uint32_t |
this counter is needed for delayed ACK |
ack_now |
bool |
send ACK immediately, needed if delayed_acks_enabled is set Based on [Stevens, W.R.: TCP/IP Illustrated, Volume 2, page 861]. ack_now should be set when: delayed ACK timer expires; an out-of-order segment is received; SYN is received during the three-way handshake; a persist probe is received; FIN is received |
afterRto |
bool |
set at RTO, reset when snd_nxt == snd_max or snd_una == snd_max |
ws_support |
bool |
set if the host supports Window Scale (header option) (RFC 1323) |
ws_enabled |
bool |
set if the connection uses Window Scale (header option) |
ws_manual_scale |
int |
the value of scale parameter if it was set manually (-1 otherwise) |
snd_ws |
bool |
set if initial WINDOW_SCALE has been sent |
rcv_ws |
bool |
set if initial WINDOW_SCALE has been received |
rcv_wnd_scale |
unsigned int |
RFC 1323, page 31: “Receive window scale power” |
snd_wnd_scale |
unsigned int |
RFC 1323, page 31: “Send window scale power” |
ts_support |
bool |
set if the host supports Timestamps (header option) (RFC 1322) |
ts_enabled |
bool |
set if the connection uses Window Scale (header option) |
snd_initial_ts |
bool |
set if initial TIMESTAMP has been sent |
rcv_initial_ts |
bool |
set if initial TIMESTAMP has been received |
ts_recent |
uint32_t |
RFC 1323, page 31: “Latest received Timestamp” |
last_ack_sent |
uint32_t |
RFC 1323, page 31: “Last ACK field sent” |
time_last_data_sent |
simtime_t |
time at which the last data segment was sent (needed to compute the IDLE time for PAWS) |
sack_support |
bool |
set if the host supports selective acknowledgment (header option) (RFC 2018, 2883, 3517) |
sack_enabled |
bool |
set if the connection uses selective acknowledgment (header option) |
snd_sack_perm |
bool |
set if SACK_PERMITTED has been sent |
rcv_sack_perm |
bool |
set if SACK_PERMITTED has been received |
start_seqno |
uint32_t |
start sequence number of last received out-of-order segment |
end_seqno |
uint32_t |
end sequence number of last received out-of-order segment |
snd_sack |
bool |
set if received vaild out-of-order segment or rcv_nxt changed, but receivedQueue is not empty |
snd_dsack |
bool |
set if received duplicated segment (sequenceNo+PLength < rcv_nxt) or (segment is not acceptable) |
sacks_array |
MAX_SACK_BLOCKS is set to 60 |
|
highRxt |
uint32_t |
RFC 3517, page 3: “”HighRxt” is the highest sequence number which has been retransmitted during the current loss recovery phase.” |
pipe |
uint32_t |
RFC 3517, page 3: “”Pipe” is a sender’s estimate of the number of bytes outstanding in the network.” |
recoveryPoint |
uint32_t |
RFC 3517 |
sackedBytes |
uint32_t |
number of sackedBytes |
sackedBytes_old |
uint32_t |
old number of sackedBytes - needed for RFC 3042 to check if last dupAck contained new sack information |
lossRecovery |
bool |
indicates if algorithm is in loss recovery phase |
sendQueueLimit |
uint32_t |
queue management |
queueUpdate |
bool |
|
dupacks |
uint32_t |
current number of received consecutive duplicate ACKs |
snd_sacks |
uint32_t |
number of sent sacks |
rcv_sacks |
uint32_t |
number of received sacks |
rcv_oooseg |
uint32_t |
number of received out-of-order segments |
rcv_naseg |
uint32_t |
number of received not acceptable segments |
maxRcvBuffer |
uint32_t |
maximal amount of bytes in tcp receive queue |
usedRcvBuffer |
uint32_t |
current amount of used bytes in tcp receive queue |
freeRcvBuffer |
uint32_t |
current amount of free bytes in tcp receive queue |
tcpRcvQueueDrops |
uint32_t |
number of drops in tcp receive queue |
ecnEchoState |
bool |
indicates if connection is in echo mode (got CE indication from IP and didn’t get CWR from sender yet) |
sndCwr |
bool |
set if ECE was handled |
gotEce |
bool |
set if packet with ECE arrived |
gotCeIndication |
bool |
set if CE was set in controlInfo from IP |
ect |
bool |
set if this connection is ECN Capable (ECT stands for ECN-Capable transport - rfc-3168) |
endPointIsWillingECN |
bool |
set if the other end-point is willing to use ECN |
ecnSynSent |
bool |
set if ECN-setup SYN packet was sent |
ecnWillingness |
bool |
set if current host is willing to use ECN |
sndAck |
bool |
set if sending Ack packet, used to set relevant info in controlInfo. |
rexmit |
bool |
set if retransmitting data, used to send not-ECT codepoint (rfc3168, p. 20) |
eceReactionTime |
simtime_t |
records the time of the last ECE reaction |
dupthresh |
uint32_t |
used for TcpTahoe, TcpReno and SACK (RFC 3517) |
pmtudEnabled |
bool |
set if Path MTU Discovery is enabled |
pmtudOriginalMss |
uint32_t |
negotiated MSS before any PMTUD reduction |
pmtudTimeout |
simtime_t |
time after which the original MSS is restored to probe for increased path MTU |
pmtudLastMssReduction |
simtime_t |
timestamp of last PMTUD-triggered MSS reduction (-1 = never reduced) |
rexmit_count |
int |
< number of retransmissions (=1 after first rexmit) |
rexmit_timeout |
simtime_t |
< current retransmission timeout (aka RTO) @} |
persist_factor |
unsigned int |
< factor needed for simplified PERSIST timer calculation |
persist_timeout |
simtime_t |
< current persist timeout @} |
snd_cwnd |
uint32_t |
< congestion window @} |
rtseq |
uint32_t |
< starting sequence number of timed data |
rtseq_sendtime |
simtime_t |
< time when rtseq was sent (0 if RTT measurement is not running) @} |
srtt |
simtime_t |
< smoothed round-trip time |
rttvar |
simtime_t |
< variance of round-trip time @} |
numRtos |
uint32_t |
< total number of RTOs @} |
recover |
uint32_t |
< recover (RFC 3782) |
firstPartialACK |
bool |
< first partial acknowledgement (RFC 3782) @} |
ssthresh |
uint32_t |
< slow start threshold |
dctcp_ce |
bool |
DCTCP |
dctcp_windEnd |
uint32_t |
|
dctcp_bytesAcked |
uint32_t |
|
dctcp_bytesMarked |
uint32_t |
amount of bytes marked |
dctcp_alpha |
double |
|
dctcp_gamma |
double |
1/16 (backup 0.16) TODO make it NED parameter; |
Properties¶
Name |
Value |
Description |
|---|---|---|
descriptor |
readonly |
|
implements |
cObject |
Source code¶
///
/// State variables for DcTcpFamily.
///
struct DcTcpFamilyStateVariables extends TcpTahoeRenoFamilyStateVariables
{
@descriptor(readonly);
// DCTCP
bool dctcp_ce = false;
uint32_t dctcp_windEnd = snd_una;
uint32_t dctcp_bytesAcked = 0;
uint32_t dctcp_bytesMarked = 0; // amount of bytes marked
double dctcp_alpha = 0;
double dctcp_gamma = 0.0625; // 1/16 (backup 0.16) TODO make it NED parameter;
};
File: src/inet/transportlayer/tcp/flavours/DcTcpFamilyState.msg