NetSim Source Code Help v14.4
All 13 Components
 
Loading...
Searching...
No Matches
OpenFlow.h
1#pragma once
2/************************************************************************************
3* Copyright (C) 2023 *
4* TETCOS, Bangalore. India *
5* *
6* Tetcos owns the intellectual property rights in the Product and its content. *
7* The copying, redistribution, reselling or publication of any or all of the *
8* Product or its content without express prior written consent of Tetcos is *
9* prohibited. Ownership and / or any other right relating to the software and all *
10* intellectual property rights therein shall remain at all times with Tetcos. *
11* *
12* Author: Shashi Kant Suman *
13* *
14* ---------------------------------------------------------------------------------*/
15
16#ifndef _NETSIM_SDN_H_
17#define _NETSIM_SDN_H_
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22#pragma comment(lib,"NetworkStack.lib")
23
24 //Default config parameter
25#define OPENFLOW_SDN_CONTROLLER_DEFAULT false
26#define OPENFLOW_OPEN_FLOW_ENABLE_DEFAULT false
27#define OPENFLOW_SDN_CONTROLLER_DEVICE_DEFAULT _strdup("unknown")
28
29 typedef struct stru_clientInfo
30 {
31 NETSIM_ID clientId;
32 UINT16 clientPort;
33 NETSIM_IPAddress clientIP;
34 ptrSOCKETINTERFACE sock;
35 struct stru_clientInfo* next;
36 }SDNCLIENTINFO,*ptrSDNCLIENTINFO;
37
38 typedef struct stru_controllerInfo
39 {
40 NETSIM_ID controllerId;
41 NETSIM_IPAddress controllerIP;
42 UINT16 port;
43 ptrSOCKETINTERFACE sock;
44 }SDNCONTROLLERINFO, *ptrSDNCONTROLLERINFO;
45
46 typedef struct stru_HandleInfo
47 {
48 UINT id;
49 void* handle;
50 struct stru_HandleInfo* next;
51 }HANDLEINFO, *ptrHANDLEINFO;
52
53 typedef struct stru_openflow
54 {
55 bool isSDNConfigured;
56 bool isSDNController;
57
58 NETSIM_IPAddress myIP;
59
60 char* sdnControllerDev;
61 NETSIM_ID sdnControllerId;
62
64 {
65 ptrSDNCONTROLLERINFO controllerInfo;
66 ptrSDNCLIENTINFO clientInfo;
67 }INFO;
68
69 UINT msgId;
70 ptrHANDLEINFO handleInfo;
71 }OPENFLOW, *ptrOPENFLOW;
72#define GET_OPENFLOW_VAR(d) ((ptrOPENFLOW)(DEVICE_APPVAR(d,APP_PROTOCOL_OPENFLOW)))
73#define SET_OPENFLOW_VAR(d,var) (fn_NetSim_Stack_SetAppProtocolData(d,APP_PROTOCOL_OPENFLOW,var))
74
75#define OFMSG_OVERHEAD 50
76#define OFMSG_PORT 99
77 typedef enum enumOpenFlowMsgType
78 {
79 OFMSGTYPE_COMMAND = APP_PROTOCOL_OPENFLOW * 100 + 1,
80 OFMSGTYPE_RESPONSE,
81 }OFMSGTYPE;
82
83 typedef struct stru_openFlowMsg
84 {
85 UINT id;
86 OFMSGTYPE msgTYpe;
87 void* payload;
88 int len;
89 bool isMore;
90 }OPENFLOWMSG, *ptrOPENFLOWMSG;
91
92 //Open flow utility function
93 bool isOPENFLOWConfigured(NETSIM_ID d);
94 NETSIM_IPAddress openFlow_find_client_IP(NETSIM_ID d);
95
96 //CLI Interface
97 void handle_cli_input();
98 char* openFlow_execute_command(void* handle, NETSIM_ID d, UINT id, int* len, bool* isMore);
99 void openFlow_saveHandle(NETSIM_ID d,
100 UINT id,
101 void* handle);
102 ptrHANDLEINFO openFlow_getHandle(NETSIM_ID d,
103 UINT id);
104
105 //SDN Controller
106 bool isSDNController(NETSIM_ID d);
107 void openFlow_add_new_client(NETSIM_ID ct,
108 NETSIM_ID ci,
109 UINT16 port);
110 ptrSDNCLIENTINFO openFlow_find_clientInfo(NETSIM_ID ct, NETSIM_ID ci);
111
112 //Open flow msg
113 bool fn_NetSim_OPEN_FLOW_SendCommand(NETSIM_ID dest,
114 void* handle,
115 void* command,
116 UINT len);
117 void openFlow_send_response(NETSIM_ID dev,
118 UINT id,
119 char* payload,
120 int len,
121 bool isMore);
122 void openFlow_print_response(NETSIM_ID d,
123 UINT id,
124 void* msg,
125 int len,
126 bool isMore);
127
128#ifdef __cplusplus
129}
130#endif
131#endif