17#include "NetSim_utility.h"
19int fn_NetSim_AODV_Init_F();
20char* fn_NetSim_AODV_Trace_F(NETSIM_ID);
21int fn_NetSim_AODV_FreePacket_F();
22int fn_NetSim_AODV_CopyPacket_F();
23int fn_NetSim_AODV_Metrics_F(PMETRICSWRITER metricsWriter);
24int fn_NetSim_AODV_Configure_F();
25char* fn_NetSim_AODV_ConfigPacketTrace_F();
26int fn_NetSim_AODV_Finish_F();
27char* fn_NetSim_AODV_WritePacketTrace_F();
36_declspec(dllexport)
int fn_NetSim_AODV_Init()
38 return fn_NetSim_AODV_Init_F();
55_declspec(dllexport)
int fn_NetSim_AODV_Run()
58 NETSIM_ID in = aodv_get_curr_if();
59 if (!isAodvConfigured(pstruEventDetails->nDeviceId, in))
62 switch(pstruEventDetails->nEventType)
64 case NETWORK_OUT_EVENT:
66 if(pstruEventDetails->pPacket->nPacketType != PacketType_Control ||
67 pstruEventDetails->pPacket->nControlDataType/100 != NW_PROTOCOL_AODV)
69 NETSIM_IPAddress n1,n2;
70 NETSIM_IPAddress dest = pstruEventDetails->pPacket->pstruNetworkData->szDestIP;
71 NETSIM_IPAddress ip = aodv_get_curr_ip();
72 if(ip->type != dest->type)
74 n1=IP_NETWORK_ADDRESS(ip,
75 DEVICE_INTERFACE(pstruEventDetails->nDeviceId,in)->szSubnetMask,
76 DEVICE_INTERFACE(pstruEventDetails->nDeviceId,in)->prefix_len);
77 n2=IP_NETWORK_ADDRESS(dest,
78 DEVICE_INTERFACE(pstruEventDetails->nDeviceId,in)->szSubnetMask,
79 DEVICE_INTERFACE(pstruEventDetails->nDeviceId,in)->prefix_len);
81 if(!IP_COMPARE(n1,n2))
82 AODV_PACKET_PROCESSING();
89 pstruEventDetails->pPacket->pstruNetworkData->szNextHopIp=aodv_get_dev_ip(pstruEventDetails->pPacket->nReceiverId);
91 if (pstruEventDetails->pPacket)
93 if (pstruEventDetails->pPacket->pstruNetworkData->nTTL > 1)
95 pstruEventDetails->nInterfaceId = in;
96 if (!pstruEventDetails->pPacket->nReceiverId)
97 AODV_DEV_VAR(pstruEventDetails->nDeviceId)->dLastBroadcastTime = pstruEventDetails->dEventTime;
101 fn_NetSim_Packet_FreePacket(pstruEventDetails->pPacket);
102 pstruEventDetails->pPacket = NULL;
103 pstruEventDetails->nInterfaceId = 0;
107 pstruEventDetails->nInterfaceId = 0;
110 case NETWORK_IN_EVENT:
111 switch(pstruEventDetails->pPacket->nControlDataType)
113 case AODVctrlPacket_RREQ:
115 pstruEventDetails->pPacket=NULL;
117 case AODVctrlPacket_RREP:
119 pstruEventDetails->pPacket=NULL;
121 case AODVctrlPacket_RERR:
123 pstruEventDetails->pPacket=NULL;
127 NetSim_PACKET* packet = pstruEventDetails->pPacket;
128 if (isDestFoundinPacket(packet, pstruEventDetails->nDeviceId))
131 sprintf(comment,
"Received Data/Non-AODV control as Destination");
132 AODV_UPDATE_ROUTE_TABLE(packet->pstruNetworkData->szSourceIP,
133 pstruEventDetails->dEventTime + AODV_ACTIVE_ROUTE_TIMEOUT);
137 packet->pstruNetworkData->szNextHopIp = NULL;
138 packet->DropNotification = NULL;
139 sprintf(comment,
"Received Data/Non-AODV control as Relay");
141 AODV_UPDATE_ROUTE_TABLE(packet->pstruNetworkData->szDestIP,
142 pstruEventDetails->dEventTime + AODV_ACTIVE_ROUTE_TIMEOUT);
144 AODV_UPDATE_ROUTE_TABLE(packet->pstruNetworkData->szSourceIP,
145 pstruEventDetails->dEventTime + AODV_ACTIVE_ROUTE_TIMEOUT);
152 switch(pstruEventDetails->nSubEventType)
154 case AODVsubevent_RREQ_TIMEOUT:
157 case AODVsubevent_TRANSMIT_HELLO:
158 AODV_TRANSMIT_HELLO();
160 case AODVsubevent_ACTIVE_ROUTE_TIMEOUT:
161 AODV_ACTIVE_ROUTE_TIMEOUT_EVENT();
164 fnNetSimError(
"Unknown subevent for AODV");
169 fnNetSimError(
"Unknown event type for AODV");
178_declspec(dllexport)
char* fn_NetSim_AODV_Trace(NETSIM_ID
id)
180 return fn_NetSim_AODV_Trace_F(
id);
185_declspec(dllexport)
int fn_NetSim_AODV_FreePacket(NetSim_PACKET* packet)
187 return fn_NetSim_AODV_FreePacket_F(packet);
193_declspec(dllexport)
int fn_NetSim_AODV_CopyPacket(
const NetSim_PACKET* destPacket,
const NetSim_PACKET* srcPacket)
195 return fn_NetSim_AODV_CopyPacket_F(destPacket,srcPacket);
200_declspec(dllexport)
int fn_NetSim_AODV_Metrics(PMETRICSWRITER metricsWriter)
202 return fn_NetSim_AODV_Metrics_F(metricsWriter);
208_declspec(dllexport)
int fn_NetSim_AODV_Configure(
void** var)
210 return fn_NetSim_AODV_Configure_F(var);
215_declspec(dllexport)
char* fn_NetSim_AODV_ConfigPacketTrace()
217 return fn_NetSim_AODV_ConfigPacketTrace_F();
223_declspec(dllexport)
int fn_NetSim_AODV_Finish()
225 return fn_NetSim_AODV_Finish_F();
230_declspec(dllexport)
char* fn_NetSim_AODV_WritePacketTrace()
232 return fn_NetSim_AODV_WritePacketTrace_F();
235bool get_protocol_log_status(
char* logname)
241 sprintf(str,
"%s/%s", pszIOPath,
"ProtocolLogsConfig.txt");
242 fp = fopen(str,
"r");
246 sprintf(str,
"%s=true", logname);
248 while (fgets(data, BUFSIZ, fp))
251 if (!_strnicmp(data, str, strlen(str)))