86 print_tcp_log(
"Connection Refused for local addr %s:%d, remote addr %s:%d",
100 print_tcp_log(
"Connection Reset for local addr %s:%d, remote addr %s:%d",
131 print_tcp_log(
"Connection Reset for local addr %s:%d, remote addr %s:%d",
146 fprintf(fp,
"%lf,,,,,%d,\n",
213 bool isContinueProcessing=
false;
237 if (isContinueProcessing)
243 if (isContinueProcessing)
251 if (isContinueProcessing)
256 if (isContinueProcessing)
291 goto DISCARD_SEGMENT;
365 fprintf(fp,
"%lf,%d,,,,,\n",
434 fp = fopen(
"IncomingTCP.csv",
"w");
435 fprintf(fp,
"Time,Seq,,,Ack\n");
456 if (isContinue && hdr->
Fin)
bool send_ack_or_not(PNETSIM_SOCKET s)
#define fnNetSimError(x,...)
double calculate_RTO(double R, double *srtt, double *rtt_var)
void restart_rto_timer(PNETSIM_SOCKET s)
void receive_sack_option(PNETSIM_SOCKET s, PTCP_SEGMENT_HDR hdr)
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
void delete_all_segment_from_queue(PTCP_QUEUE queue)
void tcp_change_state(PNETSIM_SOCKET s, TCP_CONNECTION_STATE state)
bool isSegmentInQueue(PTCP_QUEUE queue, NetSim_PACKET *packet)
void delete_segment_from_queue(PTCP_QUEUE queue, UINT32 ackNo)
void check_segment_in_queue(PNETSIM_SOCKET s)
double get_RTT(PTCB tcb, UINT ackNo)
void set_timestamp_value(PNETSIM_SOCKET s, PTCP_SEGMENT_HDR hdr, PTSopt opt)
void delete_tcb(PNETSIM_SOCKET s)
char * state_to_str(TCP_CONNECTION_STATE state)
void add_packet_to_queue(PTCP_QUEUE queue, NetSim_PACKET *packet, double time)
void start_timewait_timer(PNETSIM_SOCKET s)
void write_congestion_plot(PNETSIM_SOCKET s, NetSim_PACKET *packet)
void send_ack(PNETSIM_SOCKET s, double time, UINT32 seqNo, UINT32 ackNo)
void send_rst(PNETSIM_SOCKET s, NetSim_PACKET *p, UINT c)
void send_to_application(PNETSIM_SOCKET s, NetSim_PACKET *p)
void send_fin(PNETSIM_SOCKET s)
@ TCPCONNECTION_FIN_WAIT_2
@ TCPCONNECTION_SYN_RECEIVED
@ TCPCONNECTION_TIME_WAIT
@ TCPCONNECTION_CLOSE_WAIT
@ TCPCONNECTION_FIN_WAIT_1
@ TCPCONNECTION_ESTABLISHED
void print_tcp_log(char *format,...)
void send_segment(PNETSIM_SOCKET s)
void send_fin_ack(PNETSIM_SOCKET s, double time, UINT32 seqNo, UINT32 ackNo)
void tcp_close_socket(PNETSIM_SOCKET s, NETSIM_ID devId)
static bool process_ack_in_establishedState(PNETSIM_SOCKET s, PTCP_SEGMENT_HDR hdr)
static void process_ack_packet(PNETSIM_SOCKET s, NetSim_PACKET *p)
static bool process_segment_text(PNETSIM_SOCKET s, NetSim_PACKET *p)
static void process_syn_packet(PNETSIM_SOCKET s, NetSim_PACKET *p)
static void process_rst_packet(PNETSIM_SOCKET s, NetSim_PACKET *p)
static void process_fin_packet(PNETSIM_SOCKET s, NetSim_PACKET *p)
static bool check_segment(PNETSIM_SOCKET s, NetSim_PACKET *p)
void packet_arrives_at_incoming_tcp(PNETSIM_SOCKET s, NetSim_PACKET *p)
static bool Validate_segment(PNETSIM_SOCKET s)
#define fn_NetSim_Packet_FreePacket(pstruPacket)
struct stru_NetSim_Packet * pPacket
PSOCKETADDRESS remoteAddr
char str_ip[_NETSIM_IP_LEN]
TCP_CONNECTION_STATE tcp_state
Present State of the TCP Connection.
struct stru_tcp_Transmission_Control_Block::stru_tcb_send_seq_var SND
TCP_QUEUE retransmissionQueue
TCP_QUEUE outOfOrderSegment
struct stru_tcp_Transmission_Control_Block::stru_tcb_recv_seq_var RCV
void(* ack_received)(PNETSIM_SOCKET)
TCP_CONNECTION_STATE tcp_prev_state
Present State of the Connection.
bool istimewaittimerrestarted
struct stru_tcp_Transmission_Control_Block::stru_tcb_curr_seg_var SEG
UINT outOfOrderSegmentReceived