NetSim Source Code Help
Loading...
Searching...
No Matches
OpenFlowMsg.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 "OpenFlow.h"
16
18 UINT id,
19 NETSIM_ID src,
20 NETSIM_ID dest,
21 NETSIM_IPAddress srcIP,
22 NETSIM_IPAddress destIP,
23 UINT16 srcPort,
24 UINT16 destPort,
25 void* payload,
26 int len,
27 bool isMore)
28{
31 packet->nControlDataType = type;
35 packet->nQOS = QOS_BE;
37 packet->nSourceId = src;
38 packet->nTransmitterId = src;
39
43 packet->pstruAppData->dPayload = len;
45 packet->pstruAppData->dPacketSize = packet->pstruAppData->dPayload +
46 packet->pstruAppData->dOverhead;
49
50 add_dest_to_packet(packet, dest);
51
52 packet->pstruTransportData->nSourcePort = srcPort;
53 packet->pstruTransportData->nDestinationPort = destPort;
54
55 packet->pstruNetworkData->szDestIP = destIP;
56 packet->pstruNetworkData->szSourceIP = srcIP;
57 packet->pstruNetworkData->nTTL = MAX_TTL;
58
59
60 ptrOPENFLOWMSG ofmsg = calloc(1, sizeof* ofmsg);
61 ofmsg->payload = payload;
62 ofmsg->id = id;
63 ofmsg->len = len;
65 ofmsg->isMore = isMore;
66
67 packet->pstruAppData->Packet_AppProtocol = ofmsg;
68
69 return packet;
70}
71
73 NetSim_PACKET* packet,
75{
76 if (!DEVICE(d)->pstruTransportLayer->isTCP)
77 {
78 fnNetSimError("TCP is disabled for device %d.\n"
79 "Open flow protocol will run only over TCP.",
82 return;
83 }
84
86 if (!DEVICE(dest)->pstruTransportLayer->isTCP)
87 {
88 fnNetSimError("TCP is disabled for device %d.\n"
89 "Open flow protocol will run only over TCP.",
90 DEVICE_CONFIGID(dest));
92 return;
93 }
94
95 int nSegmentCount=fn_NetSim_Stack_FragmentPacket(packet,(int)fn_NetSim_Stack_GetMSS(packet));
98 memset(&pevent, 0, sizeof pevent);
100 pevent.dPacketSize = packet->pstruAppData->dPacketSize;
101 pevent.nDeviceId = d;
102 pevent.nDeviceType = DEVICE_TYPE(d);
105 pevent.pPacket = packet;
106 pevent.szOtherDetails = sock;
107 fnpAddEvent(&pevent);
108}
109
111 void* handle,
112 void* command,
113 UINT len)
114{
117 if (!sd)
118 {
119 fnNetSimError("%d is not a SDN controller for device %d.\n",
121 DEVICE_CONFIGID(dest));
122 return false;
123 }
124
126 ++of->msgId,
128 sd->clientId,
129 of->myIP,
130 sd->clientIP,
132 sd->clientPort,
133 command,
134 len,
135 false);
136
139 packet,
140 sd->sock);
141
142 return true;
143}
144
146 UINT id,
147 char* payload,
148 int len,
149 bool isMore)
150{
153 id,
154 dev,
156 of->myIP,
160 payload,
161 len,
162 isMore);
164 response,
166}
unsigned int NETSIM_ID
Definition: Animation.h:45
#define MAX_TTL
Definition: Application.h:34
static ANIM_HANDLE handle
Definition: BatteryModel.c:197
void openFlow_saveHandle(NETSIM_ID d, UINT id, void *handle)
Definition: CLIInterface.c:18
#define UINT
Definition: Linux.h:38
#define fnNetSimError(x,...)
Definition: Linux.h:56
#define UINT16
Definition: Linux.h:33
#define calloc(c, s)
Definition: Memory.h:29
#define GET_OPENFLOW_VAR(d)
Definition: OpenFlow.h:72
ptrSDNCLIENTINFO openFlow_find_clientInfo(NETSIM_ID ct, NETSIM_ID ci)
Definition: SDNController.c:27
#define OFMSG_PORT
Definition: OpenFlow.h:76
#define OFMSG_OVERHEAD
Definition: OpenFlow.h:75
enum enumOpenFlowMsgType OFMSGTYPE
@ OFMSGTYPE_COMMAND
Definition: OpenFlow.h:79
@ OFMSGTYPE_RESPONSE
Definition: OpenFlow.h:80
static NetSim_PACKET * openFlow_CreatePacket(OFMSGTYPE type, UINT id, NETSIM_ID src, NETSIM_ID dest, NETSIM_IPAddress srcIP, NETSIM_IPAddress destIP, UINT16 srcPort, UINT16 destPort, void *payload, int len, bool isMore)
Definition: OpenFlowMsg.c:17
static void openFlow_send_packet(NETSIM_ID d, NetSim_PACKET *packet, ptrSOCKETINTERFACE sock)
Definition: OpenFlowMsg.c:72
void openFlow_send_response(NETSIM_ID dev, UINT id, char *payload, int len, bool isMore)
Definition: OpenFlowMsg.c:145
bool fn_NetSim_OPEN_FLOW_SendCommand(NETSIM_ID dest, void *handle, void *command, UINT len)
Definition: OpenFlowMsg.c:110
@ QOS_BE
Definition: Packet.h:92
int fn_NetSim_Stack_FragmentPacket(NetSim_PACKET *pstruPacket, int nMSS)
@ ServiceType_NULL
Definition: Packet.h:71
@ PacketType_Control
Definition: Packet.h:66
@ Segment_Unfragment
Definition: Packet.h:115
NETSIM_ID get_first_dest_from_packet(NetSim_PACKET *packet)
void add_dest_to_packet(NetSim_PACKET *packet, NETSIM_ID dest)
@ Priority_Normal
Definition: Packet.h:80
@ PacketStatus_NoError
Definition: Packet.h:101
#define DEVICE(DeviceId)
Definition: Stack.h:769
double fn_NetSim_Stack_GetMSS(const NetSim_PACKET *pPacket)
void fn_NetSim_Socket_PassPacketToInterface(NETSIM_ID deviceId, NetSim_PACKET *packet, ptrSOCKETINTERFACE socketInterface)
#define DEVICE_TYPE(DeviceId)
Definition: Stack.h:773
@ APP_PROTOCOL_OPENFLOW
Definition: Stack.h:158
@ TX_PROTOCOL_TCP
Definition: Stack.h:180
#define DEVICE_CONFIGID(DeviceId)
Definition: Stack.h:779
@ TRANSPORT_OUT_EVENT
Definition: Stack.h:110
@ APPLICATION_LAYER
Definition: Stack.h:98
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
Definition: Stack.h:837
#define fn_NetSim_Packet_CreatePacket(layer)
Definition: main.h:186
#define fn_NetSim_Packet_FreePacket(pstruPacket)
Definition: main.h:177
#define fnpAddEvent(pstruEvent)
Definition: main.h:191
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 nDeviceId
Definition: Stack.h:750
netsimDEVICE_TYPE nDeviceType
Definition: Stack.h:749
PACKET_FRAGMENT nPacketFragment
Definition: Packet.h:163
APPLICATION_LAYER_PROTOCOL nApplicationProtocol
Definition: Packet.h:172
NETSIM_IPAddress szDestIP
Definition: Packet.h:199
NETSIM_IPAddress szSourceIP
Definition: Packet.h:198
unsigned short int nSourcePort
Definition: Packet.h:184
unsigned short int nDestinationPort
Definition: Packet.h:185
struct stru_NetSim_Packet_AppLayer * pstruAppData
Definition: Packet.h:273
PACKET_STATUS nPacketStatus
Definition: Packet.h:272
struct stru_NetSim_Packet_NetworkLayer * pstruNetworkData
Definition: Packet.h:275
double dEventTime
Definition: Packet.h:262
unsigned int nControlDataType
Definition: Packet.h:258
NETSIM_ID nTransmitterId
Definition: Packet.h:265
QUALITY_OF_SERVICE nQOS
Definition: Packet.h:261
PACKET_TYPE nPacketType
Definition: Packet.h:257
struct stru_NetSim_Packet_TransportLayer * pstruTransportData
Definition: Packet.h:274
PACKET_PRIORITY nPacketPriority
Definition: Packet.h:260
SERVICE_TYPE nServiceType
Definition: Packet.h:259
NETSIM_ID nSourceId
Definition: Packet.h:263
NETSIM_ID clientId
Definition: OpenFlow.h:31
NETSIM_IPAddress clientIP
Definition: OpenFlow.h:33
UINT16 clientPort
Definition: OpenFlow.h:32
ptrSOCKETINTERFACE sock
Definition: OpenFlow.h:34
NETSIM_IPAddress controllerIP
Definition: OpenFlow.h:41
NETSIM_ID controllerId
Definition: OpenFlow.h:40
ptrSOCKETINTERFACE sock
Definition: OpenFlow.h:43
void * payload
Definition: OpenFlow.h:87
OFMSGTYPE msgTYpe
Definition: OpenFlow.h:86
UINT msgId
Definition: OpenFlow.h:69
NETSIM_IPAddress myIP
Definition: OpenFlow.h:58
union stru_openflow::sdn_info INFO
ptrSDNCONTROLLERINFO controllerInfo
Definition: OpenFlow.h:65