17#include "TCP_Header.h"
19void send_to_network(NetSim_PACKET* packet, PNETSIM_SOCKET s)
21 PTCP_SEGMENT_HDR hdr = TCP_GET_SEGMENT_HDR(packet);
22 print_tcp_log(
"Sending segment from outgoing tcp, local addr:%s:%d, Remote addr %s:%d, SEQ=%d, ACK=%d,SYN=%d,ACK=%d,RST=%d,URG=%d,FIN=%d,LEN=%d",
23 s->localAddr == NULL ?
"0.0.0.0" : s->localAddr->ip->str_ip,
24 s->localAddr == NULL ? 0 : s->localAddr->port,
25 s->remoteAddr == NULL ?
"0.0.0.0" : s->remoteAddr->ip->str_ip,
26 s->remoteAddr == NULL ? 0 : s->remoteAddr->port,
36 packet->pstruTransportData->dStartTime = pstruEventDetails->dEventTime;
37 packet->pstruTransportData->dEndTime = pstruEventDetails->dEventTime;
39 NetSim_EVENTDETAILS pevent;
40 memcpy(&pevent, pstruEventDetails,
sizeof pevent);
41 pevent.dPacketSize = packet->pstruTransportData->dPacketSize;
42 if (packet->pstruAppData)
44 pevent.nApplicationId = packet->pstruAppData->nApplicationId;
45 pevent.nSegmentId = packet->pstruAppData->nSegmentId;
49 pevent.nSegmentId = 0;
52 pevent.nEventType = NETWORK_OUT_EVENT;
53 pevent.nPacketId = packet->nPacketId;
54 pevent.nProtocolId = fn_NetSim_Stack_GetNWProtocol(pevent.nDeviceId);
55 pevent.nSubEventType = 0;
56 pevent.pPacket = packet;
57 pevent.szOtherDetails = NULL;
61void packet_arrive_from_network_layer()
67 fn_NetSim_Packet_FreePacket(pstruEventDetails->pPacket);
71 NetSim_PACKET* packet = pstruEventDetails->pPacket;
72 PNETSIM_SOCKET s = find_socket_at_dest(packet);
73 PTCP_SEGMENT_HDR hdr = TCP_GET_SEGMENT_HDR(packet);
76 print_tcp_log(
"\nDevice %d, Time %0.2lf: segment arrives at incoming tcp, local addr:%s:%d, Remote addr %s:%d, SEQ=%d, ACK=%d,SYN=%d,ACK=%d,RST=%d,URG=%d,FIN=%d,LEN=%d",
77 pstruEventDetails->nDeviceId,
78 pstruEventDetails->dEventTime,
79 s->localAddr == NULL ?
"0.0.0.0" : s->localAddr->ip->str_ip,
80 s->localAddr == NULL ? 0 : s->localAddr->port,
81 s->remoteAddr == NULL ?
"0.0.0.0" : s->remoteAddr->ip->str_ip,
82 s->remoteAddr == NULL ? 0 : s->remoteAddr->port,
92 update_seq_num_on_receiving(s, packet);
94 if (s->tcb->tcp_state == TCPCONNECTION_CLOSED)
95 packet_arrive_at_closed_state(s, packet);
97 else if (s->tcb->tcp_state == TCPCONNECTION_LISTEN)
98 packet_arrives_at_listen_state(s, packet);
100 else if (s->tcb->tcp_state == TCPCONNECTION_SYN_SENT)
101 packet_arrives_at_synsent_state(s, packet);
104 packet_arrives_at_incoming_tcp(s, packet);
108 print_tcp_log(
"Packet arrive to TCP for device %d for which there is no connection. Discarding..",
109 pstruEventDetails->nDeviceId);
110 fn_NetSim_Packet_FreePacket(pstruEventDetails->pPacket);
111 pstruEventDetails->pPacket = NULL;