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
19
void
send_to_network
(
NetSim_PACKET
* packet,
PNETSIM_SOCKET
s)
20
{
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
,
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
36
packet->
pstruTransportData
->
dStartTime
=
pstruEventDetails
->
dEventTime
;
37
packet->
pstruTransportData
->
dEndTime
=
pstruEventDetails
->
dEventTime
;
38
39
NetSim_EVENTDETAILS
pevent;
40
memcpy(&pevent,
pstruEventDetails
,
sizeof
pevent);
41
pevent.
dPacketSize
= packet->
pstruTransportData
->
dPacketSize
;
42
if
(packet->
pstruAppData
)
43
{
44
pevent.
nApplicationId
= packet->
pstruAppData
->
nApplicationId
;
45
pevent.
nSegmentId
= packet->
pstruAppData
->
nSegmentId
;
46
}
47
else
48
{
49
pevent.
nSegmentId
= 0;
50
}
51
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;
58
fnpAddEvent
(&pevent);
59
}
60
61
void
packet_arrive_from_network_layer
()
62
{
63
#ifdef _TEST_TCP_
64
if
(!
pass_test
())
65
{
66
//Packet is dropped by test suite
67
fn_NetSim_Packet_FreePacket
(
pstruEventDetails
->
pPacket
);
68
return
;
69
}
70
#endif
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);
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"
,
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
,
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
92
update_seq_num_on_receiving
(s, packet);
93
94
if
(s->
tcb
->
tcp_state
==
TCPCONNECTION_CLOSED
)
95
packet_arrive_at_closed_state
(s, packet);
96
97
else
if
(s->
tcb
->
tcp_state
==
TCPCONNECTION_LISTEN
)
98
packet_arrives_at_listen_state
(s, packet);
99
100
else
if
(s->
tcb
->
tcp_state
==
TCPCONNECTION_SYN_SENT
)
101
packet_arrives_at_synsent_state
(s, packet);
102
103
else
104
packet_arrives_at_incoming_tcp
(s, packet);
105
}
106
else
107
{
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;
112
}
113
}
List.h
fn_NetSim_Stack_GetNWProtocol
NETWORK_LAYER_PROTOCOL fn_NetSim_Stack_GetNWProtocol(NETSIM_ID nDeviceId)
NETWORK_OUT_EVENT
@ NETWORK_OUT_EVENT
Definition:
Stack.h:108
pstruEventDetails
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
Definition:
Stack.h:837
update_seq_num_on_receiving
void update_seq_num_on_receiving(PNETSIM_SOCKET s, NetSim_PACKET *p)
Definition:
TCB.c:358
get_seg_len
UINT32 get_seg_len(NetSim_PACKET *p)
Definition:
TCB.c:307
TCP.h
TCPCONNECTION_LISTEN
@ TCPCONNECTION_LISTEN
Definition:
TCP.h:59
TCPCONNECTION_CLOSED
@ TCPCONNECTION_CLOSED
Definition:
TCP.h:58
TCPCONNECTION_SYN_SENT
@ TCPCONNECTION_SYN_SENT
Definition:
TCP.h:60
print_tcp_log
void print_tcp_log(char *format,...)
packet_arrives_at_synsent_state
void packet_arrives_at_synsent_state(PNETSIM_SOCKET s, NetSim_PACKET *p)
Definition:
TCP_Connection.c:259
find_socket_at_dest
PNETSIM_SOCKET find_socket_at_dest(NetSim_PACKET *packet)
Definition:
TCP_Socket.c:164
packet_arrive_at_closed_state
void packet_arrive_at_closed_state(PNETSIM_SOCKET s, NetSim_PACKET *p)
Definition:
TCP_Connection.c:206
packet_arrives_at_incoming_tcp
void packet_arrives_at_incoming_tcp(PNETSIM_SOCKET s, NetSim_PACKET *p)
Definition:
TCP_Incoming.c:427
packet_arrives_at_listen_state
void packet_arrives_at_listen_state(PNETSIM_SOCKET s, NetSim_PACKET *p)
Definition:
TCP_Connection.c:231
TCP_Header.h
TCP_GET_SEGMENT_HDR
static PTCP_SEGMENT_HDR TCP_GET_SEGMENT_HDR(NetSim_PACKET *packet)
Definition:
TCP_Header.h:107
send_to_network
void send_to_network(NetSim_PACKET *packet, PNETSIM_SOCKET s)
Definition:
TCP_NetworkInterface.c:19
packet_arrive_from_network_layer
void packet_arrive_from_network_layer()
Definition:
TCP_NetworkInterface.c:61
pass_test
bool pass_test()
Definition:
TCP_Test.c:23
main.h
fn_NetSim_Packet_FreePacket
#define fn_NetSim_Packet_FreePacket(pstruPacket)
Definition:
main.h:177
fnpAddEvent
#define fnpAddEvent(pstruEvent)
Definition:
main.h:191
stru_NetSim_EventDetails
Definition:
Stack.h:744
stru_NetSim_EventDetails::nApplicationId
NETSIM_ID nApplicationId
Definition:
Stack.h:752
stru_NetSim_EventDetails::nEventType
EVENT_TYPE nEventType
Definition:
Stack.h:747
stru_NetSim_EventDetails::nProtocolId
NETSIM_ID nProtocolId
Definition:
Stack.h:748
stru_NetSim_EventDetails::pPacket
struct stru_NetSim_Packet * pPacket
Definition:
Stack.h:754
stru_NetSim_EventDetails::nSubEventType
NETSIM_ID nSubEventType
Definition:
Stack.h:757
stru_NetSim_EventDetails::nDeviceId
NETSIM_ID nDeviceId
Definition:
Stack.h:750
stru_NetSim_EventDetails::nPacketId
long long int nPacketId
Definition:
Stack.h:755
stru_NetSim_EventDetails::szOtherDetails
void * szOtherDetails
Definition:
Stack.h:758
stru_NetSim_EventDetails::dEventTime
double dEventTime
Definition:
Stack.h:746
stru_NetSim_EventDetails::nSegmentId
int nSegmentId
Definition:
Stack.h:756
stru_NetSim_EventDetails::dPacketSize
double dPacketSize
Definition:
Stack.h:753
stru_NetSim_Packet_AppLayer::nSegmentId
int nSegmentId
Definition:
Packet.h:161
stru_NetSim_Packet_AppLayer::nApplicationId
NETSIM_ID nApplicationId
Definition:
Packet.h:162
stru_NetSim_Packet_TransportLayer::dPacketSize
double dPacketSize
Definition:
Packet.h:181
stru_NetSim_Packet_TransportLayer::dStartTime
double dStartTime
Definition:
Packet.h:179
stru_NetSim_Packet_TransportLayer::dEndTime
double dEndTime
Definition:
Packet.h:180
stru_NetSim_Packet
Definition:
Packet.h:255
stru_NetSim_Packet::nPacketId
long long int nPacketId
Definition:
Packet.h:256
stru_NetSim_Packet::pstruAppData
struct stru_NetSim_Packet_AppLayer * pstruAppData
Definition:
Packet.h:273
stru_NetSim_Packet::pstruTransportData
struct stru_NetSim_Packet_TransportLayer * pstruTransportData
Definition:
Packet.h:274
stru_TCP_Socket
Definition:
TCP.h:119
stru_TCP_Socket::tcb
PTCB tcb
Definition:
TCP.h:132
stru_TCP_Socket::localAddr
PSOCKETADDRESS localAddr
Definition:
TCP.h:121
stru_TCP_Socket::remoteAddr
PSOCKETADDRESS remoteAddr
Definition:
TCP.h:122
stru_ip::str_ip
char str_ip[_NETSIM_IP_LEN]
Definition:
IP_Addressing.h:54
stru_socket_addr::ip
NETSIM_IPAddress ip
Definition:
TCP.h:114
stru_socket_addr::port
UINT16 port
Definition:
TCP.h:115
stru_tcp_Transmission_Control_Block::tcp_state
TCP_CONNECTION_STATE tcp_state
Present State of the TCP Connection.
Definition:
TCB.h:47
stru_tcp_header
Definition:
TCP_Header.h:85
stru_tcp_header::Syn
UINT32 Syn
Definition:
TCP_Header.h:92
stru_tcp_header::AckNum
UINT32 AckNum
Definition:
TCP_Header.h:89
stru_tcp_header::Fin
UINT32 Fin
Definition:
TCP_Header.h:91
stru_tcp_header::SeqNum
UINT32 SeqNum
Definition:
TCP_Header.h:88
stru_tcp_header::Rst
UINT32 Rst
Definition:
TCP_Header.h:93
stru_tcp_header::Urg
UINT32 Urg
Definition:
TCP_Header.h:96
stru_tcp_header::Ack
UINT32 Ack
Definition:
TCP_Header.h:95
ALL
Component 1
Part 2
TCP
TCP_NetworkInterface.c
Generated on Fri Dec 9 2022 10:22:45 for NetSim Source Code Help by
1.9.5