NetSim Source Code Help
Loading...
Searching...
No Matches
TCP_NetworkInterface.c
Go to the documentation of this file.
1/************************************************************************************
2* Copyright (C) 2020 *
3* TETCOS, Bangalore. India *
4* *
5* Tetcos owns the intellectual property rights in the Product and its content. *
6* The copying, redistribution, reselling or publication of any or all of the *
7* Product or its content without express prior written consent of Tetcos is *
8* prohibited. Ownership and / or any other right relating to the software and all *
9* intellectual property rights therein shall remain at all times with Tetcos. *
10* *
11* Author: Shashi Kant Suman *
12* *
13* ---------------------------------------------------------------------------------*/
14#include "main.h"
15#include "TCP.h"
16#include "List.h"
17#include "TCP_Header.h"
18
20{
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,
27 hdr->SeqNum,
28 hdr->AckNum,
29 hdr->Syn,
30 hdr->Ack,
31 hdr->Rst,
32 hdr->Urg,
33 hdr->Fin,
34 get_seg_len(packet));
35
38
40 memcpy(&pevent, pstruEventDetails, sizeof pevent);
42 if (packet->pstruAppData)
43 {
45 pevent.nSegmentId = packet->pstruAppData->nSegmentId;
46 }
47 else
48 {
49 pevent.nSegmentId = 0;
50 }
51
53 pevent.nPacketId = packet->nPacketId;
55 pevent.nSubEventType = 0;
56 pevent.pPacket = packet;
57 pevent.szOtherDetails = NULL;
58 fnpAddEvent(&pevent);
59}
60
62{
63#ifdef _TEST_TCP_
64 if (!pass_test())
65 {
66 //Packet is dropped by test suite
68 return;
69 }
70#endif
74 if (s && s->tcb)
75 {
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",
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,
83 hdr->SeqNum,
84 hdr->AckNum,
85 hdr->Syn,
86 hdr->Ack,
87 hdr->Rst,
88 hdr->Urg,
89 hdr->Fin,
90 get_seg_len(packet));
91
93
96
97 else if (s->tcb->tcp_state == TCPCONNECTION_LISTEN)
99
100 else if (s->tcb->tcp_state == TCPCONNECTION_SYN_SENT)
102
103 else
105 }
106 else
107 {
108 print_tcp_log("Packet arrive to TCP for device %d for which there is no connection. Discarding..",
112 }
113}
NETWORK_LAYER_PROTOCOL fn_NetSim_Stack_GetNWProtocol(NETSIM_ID nDeviceId)
@ NETWORK_OUT_EVENT
Definition: Stack.h:108
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
Definition: Stack.h:837
void update_seq_num_on_receiving(PNETSIM_SOCKET s, NetSim_PACKET *p)
Definition: TCB.c:358
UINT32 get_seg_len(NetSim_PACKET *p)
Definition: TCB.c:307
@ TCPCONNECTION_LISTEN
Definition: TCP.h:59
@ TCPCONNECTION_CLOSED
Definition: TCP.h:58
@ TCPCONNECTION_SYN_SENT
Definition: TCP.h:60
void print_tcp_log(char *format,...)
void packet_arrives_at_synsent_state(PNETSIM_SOCKET s, NetSim_PACKET *p)
PNETSIM_SOCKET find_socket_at_dest(NetSim_PACKET *packet)
Definition: TCP_Socket.c:164
void packet_arrive_at_closed_state(PNETSIM_SOCKET s, NetSim_PACKET *p)
void packet_arrives_at_incoming_tcp(PNETSIM_SOCKET s, NetSim_PACKET *p)
Definition: TCP_Incoming.c:427
void packet_arrives_at_listen_state(PNETSIM_SOCKET s, NetSim_PACKET *p)
static PTCP_SEGMENT_HDR TCP_GET_SEGMENT_HDR(NetSim_PACKET *packet)
Definition: TCP_Header.h:107
void send_to_network(NetSim_PACKET *packet, PNETSIM_SOCKET s)
void packet_arrive_from_network_layer()
bool pass_test()
Definition: TCP_Test.c:23
#define fn_NetSim_Packet_FreePacket(pstruPacket)
Definition: main.h:177
#define fnpAddEvent(pstruEvent)
Definition: main.h:191
NETSIM_ID nApplicationId
Definition: Stack.h:752
EVENT_TYPE nEventType
Definition: Stack.h:747
NETSIM_ID nProtocolId
Definition: Stack.h:748
struct stru_NetSim_Packet * pPacket
Definition: Stack.h:754
NETSIM_ID nSubEventType
Definition: Stack.h:757
NETSIM_ID nDeviceId
Definition: Stack.h:750
long long int nPacketId
Definition: Stack.h:755
long long int nPacketId
Definition: Packet.h:256
struct stru_NetSim_Packet_AppLayer * pstruAppData
Definition: Packet.h:273
struct stru_NetSim_Packet_TransportLayer * pstruTransportData
Definition: Packet.h:274
PTCB tcb
Definition: TCP.h:132
PSOCKETADDRESS localAddr
Definition: TCP.h:121
PSOCKETADDRESS remoteAddr
Definition: TCP.h:122
char str_ip[_NETSIM_IP_LEN]
Definition: IP_Addressing.h:54
NETSIM_IPAddress ip
Definition: TCP.h:114
UINT16 port
Definition: TCP.h:115
TCP_CONNECTION_STATE tcp_state
Present State of the TCP Connection.
Definition: TCB.h:47