NetSim Source Code Help
Loading...
Searching...
No Matches
RPL.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 "RPL.h"
16#include "RPL_enum.h"
17
24
25/**
26RPL Init function initializes the RPL parameters.
27*/
28_declspec (dllexport) int fn_NetSim_RPL_Init(struct stru_NetSim_Network *NETWORK_Formal,
32 int nVersion_Type,
33 void **fnPointer)
34{
35 return fn_NetSim_RPL_Init_F();
36}
37
38/**
39This function is called by NetworkStack.dll, whenever the event gets triggered
40inside the NetworkStack.dll for the RPL protocol
41*/
43{
45 {
47 {
48 }
49 break;
51 {
54 {
58 }
59 }
60 break;
61 case TIMER_EVENT:
62 {
64 {
65 case RPL_TRICKLE_T_TIMEOUT:
67 break;
68 case RPL_TRICKLE_I_TIMEOUT:
70 break;
71 case RPL_SEND_DAO:
73 break;
74 case RPL_NEW_PREF_PARENT:
75 // Do nothing for now.
76 /* This event is written for customer
77 * who want to perform some action if
78 * new parent is selected.
79 */
80 break;
81 case RPL_DAO_ROUTE_TIMEOUT:
83 break;
84 case RPL_SEND_DIS:
86 break;
87 default:
88 fnNetSimError("Unknown subevent %d for RPL.", pstruEventDetails->nSubEventType);
89 break;
90 }
91 }
92 break;
93 default:
94 fnNetSimError("Unknow event %d for RPL protocol", pstruEventDetails->nEventType);
95 break;
96 }
97 return 0;
98}
99
100/**
101This function is called by NetworkStack.dll, once simulation end to free the
102allocated memory for the network.
103*/
105{
106 return fn_NetSim_RPL_Finish_F();
107}
108
109/**
110This function is called by NetworkStack.dll, while writing the event trace
111to get the sub event as a string.
112*/
113_declspec (dllexport) char* fn_NetSim_RPL_Trace(NETSIM_ID nSubEvent)
114{
115 return GetStringRPL_Subevent(nSubEvent);
116}
117
118/**
119This function is called by NetworkStack.dll, while configuring the device
120for RPL protocol.
121*/
122_declspec(dllexport) int fn_NetSim_RPL_Configure(void** var)
123{
124 return fn_NetSim_RPL_Configure_F(var);
125}
126
127/**
128This function is called by NetworkStack.dll, to free the RPL protocol data.
129*/
131{
132 return fn_NetSim_RPL_FreePacket_F(pstruPacket);
133}
134
135/**
136This function is called by NetworkStack.dll, to copy the RPL protocol
137details from source packet to destination.
138*/
139_declspec(dllexport) int fn_NetSim_RPL_CopyPacket(NetSim_PACKET* pstruDestPacket, NetSim_PACKET* pstruSrcPacket)
140{
141 return fn_NetSim_RPL_CopyPacket_F(pstruDestPacket, pstruSrcPacket);
142}
143
144/**
145This function write the Metrics
146*/
147_declspec(dllexport) int fn_NetSim_RPL_Metrics(PMETRICSWRITER metricsWriter)
148{
149 return 0;
150}
151
152/**
153This function will return the string to write packet trace heading.
154*/
156{
157 return "";
158}
159
160/**
161This function will return the string to write packet trace.
162*/
163_declspec(dllexport) char* fn_NetSim_RPL_WritePacketTrace(NetSim_PACKET* pstruPacket, char** ppszTrace)
164{
165 return "";
166}
167
169{
170 PRPL_ROOT root_info = calloc(1,sizeof* root_info);
171 memcpy(root_info, get_global_root_info(), sizeof* root_info);
172
173 root_info->dodag_id = NULL;
174 root_info->configured_dodag_id = NULL;
175 root_info->dodag_pref = RPL_DEFAULT_DAG_PREF;
176 root_info->grounded = FALSE;
177 root_info->min_hop_rank_inc = 1;
178 return root_info;
179}
180
182{
183 PRPL_NODE r = GET_RPL_NODE(d);
185
186 //Schedule the DIS message transmission
187 memset(pstruEventDetails, 0, sizeof* pstruEventDetails);
193 pstruEventDetails->nSubEventType = RPL_SEND_DIS;
195}
196
198{
199 PRPL_NODE rpl = GET_RPL_NODE(d);
200
201 /* forget about all previous DIO routes */
203
205
206 if (rpl->joined_dodag != NULL)
207 {
209 rpl->joined_dodag = NULL;
210 }
211
212 if (rpl->root_info->dodag_id == NULL)
213 {
214 if (rpl->root_info->configured_dodag_id == NULL)
215 {
217 }
218 else
219 {
221 }
222 }
224}
unsigned int NETSIM_ID
Definition: Animation.h:45
void rpl_send_dao()
Definition: DAO.c:43
void rpl_dao_route_timeout()
Definition: DAO.c:183
void rpl_dis_pdu_send()
Definition: DIS.c:20
void rpl_dodag_destroy(PRPL_DODAG dodag)
Definition: DODAG.c:53
NETSIM_IPAddress IP_COPY(NETSIM_IPAddress ip)
#define _declspec(dllexport)
This function is used to trigger the update.
Definition: Linux.h:41
#define fnNetSimError(x,...)
Definition: Linux.h:56
#define FALSE
Definition: Linux.h:76
#define calloc(c, s)
Definition: Memory.h:29
void * PMETRICSWRITER
Definition: MetricsWriter.h:27
void forget_neighbor_messages(PRPL_NODE rpl)
Definition: Neighbor.c:107
void rpl_add_to_neighbor_list()
Definition: Neighbor.c:44
NetSim_EVENTDETAILS * pstruEventDetails_Formal
Definition: RIP.h:178
NetSim_EVENTDETAILS char * pszAppPath_Formal
Definition: RIP.h:178
NetSim_EVENTDETAILS char char int nVersion_Type
Definition: RIP.h:178
NetSim_EVENTDETAILS char char * pszWritePath_Formal
Definition: RIP.h:178
NetSim_EVENTDETAILS char char int void ** fnPointer
Definition: RIP.h:178
int fn_NetSim_RPL_Finish_F()
char * fn_NetSim_RPL_ConfigPacketTrace()
Definition: RPL.c:155
char * fn_NetSim_RPL_Trace(NETSIM_ID nSubEvent)
Definition: RPL.c:113
void rpl_node_init(NETSIM_ID d)
Definition: RPL.c:181
int fn_NetSim_RPL_Configure_F(void **var)
void start_as_root(NETSIM_ID d)
Definition: RPL.c:197
int fn_NetSim_RPL_Init(struct stru_NetSim_Network *NETWORK_Formal, NetSim_EVENTDETAILS *pstruEventDetails_Formal, char *pszAppPath_Formal, char *pszWritePath_Formal, int nVersion_Type, void **fnPointer)
Definition: RPL.c:28
int fn_NetSim_RPL_CopyPacket_F(NetSim_PACKET *destPacket, NetSim_PACKET *srcPacket)
int fn_NetSim_RPL_Run()
Definition: RPL.c:42
int fn_NetSim_RPL_Finish()
Definition: RPL.c:104
int fn_NetSim_RPL_Init_F()
int fn_NetSim_RPL_FreePacket(NetSim_PACKET *pstruPacket)
Definition: RPL.c:130
char * fn_NetSim_RPL_WritePacketTrace(NetSim_PACKET *pstruPacket, char **ppszTrace)
Definition: RPL.c:163
int fn_NetSim_RPL_Configure(void **var)
Definition: RPL.c:122
static PRPL_ROOT rpl_root_info_create()
Definition: RPL.c:168
int fn_NetSim_RPL_CopyPacket(NetSim_PACKET *pstruDestPacket, NetSim_PACKET *pstruSrcPacket)
Definition: RPL.c:139
char * GetStringRPL_Subevent(NETSIM_ID)
int fn_NetSim_RPL_Metrics(PMETRICSWRITER metricsWriter)
Definition: RPL.c:147
int fn_NetSim_RPL_FreePacket_F(NetSim_PACKET *packet)
void rpl_delete_all_route(NETSIM_ID d)
#define GET_RPL_NODE(d)
Definition: RPL.h:212
void rpl_trickle_handle_t_timeout()
Definition: Trickle.c:76
void rpl_process_ctrl_msg()
Definition: RPL_Message.c:433
#define RPL_DEFAULT_DAG_PREF
Definition: RPL.h:85
void rpl_trickle_handle_i_timeout()
Definition: Trickle.c:86
#define is_rpl_control_packet(packet)
Definition: RPL.h:94
void rpl_trickle_reset(NETSIM_ID nDevId)
Definition: Trickle.c:23
PRPL_ROOT get_global_root_info()
#define DEVICE_TYPE(DeviceId)
Definition: Stack.h:773
#define DEVICE_NWADDRESS(DeviceId, InterfaceId)
Definition: Stack.h:805
@ NW_PROTOCOL_RPL
Definition: Stack.h:200
@ NETWORK_OUT_EVENT
Definition: Stack.h:108
@ TIMER_EVENT
Definition: Stack.h:114
@ NETWORK_IN_EVENT
Definition: Stack.h:109
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
Definition: Stack.h:837
#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 nSubEventType
Definition: Stack.h:757
NETSIM_ID nDeviceId
Definition: Stack.h:750
netsimDEVICE_TYPE nDeviceType
Definition: Stack.h:749
double DISInitDelay
Definition: RPL.h:173
PRPL_DODAG joined_dodag
Definition: RPL.h:178
PRPL_ROOT root_info
Definition: RPL.h:177
DODAGID configured_dodag_id
Definition: RPL.h:125
UINT8 dodag_pref
Definition: RPL.h:126
DODAGID dodag_id
Definition: RPL.h:124
UINT16 min_hop_rank_inc
Definition: RPL.h:136
bool grounded
Definition: RPL.h:127