17#include "NetSim_utility.h"
19static bool isCalledOnce =
false;
24_declspec (dllexport)
int fn_NetSim_ZRP_Init()
32 return fn_NetSim_ZRP_Init_F();
39_declspec (dllexport)
int fn_NetSim_ZRP_Run()
41 switch(pstruEventDetails->nEventType)
43 case NETWORK_OUT_EVENT:
45 NetSim_PACKET* packet = pstruEventDetails->pPacket;
46 if(packet->nControlDataType/100 == NW_PROTOCOL_OLSR ||
47 DEVICE_NWLAYER(pstruEventDetails->nDeviceId)->nRoutingProtocolId == NW_PROTOCOL_OLSR || isBroadcastPacket(packet))
51 fn_NetSim_IERP_RoutePacket();
54 case NETWORK_IN_EVENT:
56 NetSim_PACKET* packet = pstruEventDetails->pPacket;
57 if(packet->nControlDataType/100 == NW_PROTOCOL_ZRP ||
58 packet->nControlDataType/100 == NW_PROTOCOL_OLSR)
60 switch(packet->nControlDataType)
62 case OLSR_CONTROL_PACKET(HELLO_MESSAGE):
63 fn_NetSim_NDP_ReceiveHello();
65 case OLSR_CONTROL_PACKET(TC_MESSAGE):
66 fn_NetSim_OLSR_PacketProcessing();
68 case IERP_ROUTE_REPLY_WITH_BRP_HEADER:
69 case IERP_ROUTE_REQUEST_WITH_BRP_HEADER:
70 fn_NetSim_BRP_ProcessPacket();
72 case IERP_ROUTE_REPLY:
73 fn_NetSim_IERP_ProcessRouteReply();
76 fnNetSimError(
"Unknown control packet %d for ZRP protocol",packet->nControlDataType);
84 switch(pstruEventDetails->nSubEventType)
86 case NDP_ScheduleHelloTransmission:
88 double time=pstruEventDetails->dEventTime;
89 NETSIM_ID nodeId=pstruEventDetails->nDeviceId;
90 fn_NetSim_NDP_TransmitHello();
91 fn_NetSim_NDP_ScheduleHelloTransmission(nodeId,time);
94 case OLSR_ScheduleTCTransmission:
95 fn_NetSim_OLSR_TransmitTCMessage();
96 fn_NetSim_OLSR_ScheduleTCTransmission(pstruEventDetails->nDeviceId,pstruEventDetails->dEventTime);
98 case OLSR_LINK_TUPLE_Expire:
99 fn_NetSim_OLSR_LinkTupleExpire();
102 fnNetSimError(
"Unknown subevent %d fro ZRP protocol",pstruEventDetails->nSubEventType);
108 fnNetSimError(
"Unknow event %d for ZRP protocol",pstruEventDetails->nEventType);
118_declspec(dllexport)
int fn_NetSim_ZRP_Finish()
121 return fn_NetSim_ZRP_Finish_F();
128_declspec (dllexport)
char* fn_NetSim_ZRP_Trace(NETSIM_ID nSubEvent)
130 return fn_NetSim_ZRP_Trace_F(nSubEvent);
137_declspec(dllexport)
int fn_NetSim_ZRP_Configure(
void** var)
139 return fn_NetSim_ZRP_Configure_F(var);
145_declspec(dllexport)
int fn_NetSim_ZRP_FreePacket(NetSim_PACKET* pstruPacket)
147 return fn_NetSim_ZRP_FreePacket_F(pstruPacket);
154_declspec(dllexport)
int fn_NetSim_ZRP_CopyPacket(NetSim_PACKET* pstruDestPacket,NetSim_PACKET* pstruSrcPacket)
156 return fn_NetSim_ZRP_CopyPacket_F(pstruDestPacket,pstruSrcPacket);
162_declspec(dllexport)
int fn_NetSim_ZRP_Metrics()
170_declspec(dllexport)
char* fn_NetSim_ZRP_ConfigPacketTrace()
178_declspec(dllexport)
char* fn_NetSim_ZRP_WritePacketTrace()
183int addToZoneList(NODE_ZRP* zrp,NETSIM_IPAddress ip)
185 ZRP_ZONE* zone=ZRP_ZONE_ALLOC();
186 zone->zoneNodeIP=IP_COPY(ip);
187 LIST_ADD_LAST((
void**)&zrp->zone,zone);
191bool checkDestInZone(NetSim_PACKET* packet)
193 NETSIM_IPAddress dest=packet->pstruNetworkData->szDestIP;
194 NODE_ZRP* zrp=(NODE_ZRP*)DEVICE_NWROUTINGVAR(pstruEventDetails->nDeviceId);
195 ZRP_ZONE* zone=zrp->zone;
198 if(!IP_COMPARE(zone->zoneNodeIP,dest))
200 zone=(ZRP_ZONE*)LIST_NEXT(zone);
205static void init_MPR_log()
207 if (get_protocol_log_status(
"OLSRNeighborandMPRLog"))
209 sprintf(MPR_Log_filename,
"%s\\%s", pszIOLogPath,
"OLSR_Neighbor_MPR_log.csv");
210 fpRMlog = fopen(MPR_Log_filename,
"w");
213 fnSystemError(
"Unable to open %s file", MPR_Log_filename);
214 perror(MPR_Log_filename);
218 fprintf(fpRMlog,
"%s,%s,%s,%s,%s,%s",
219 "Time(ms)",
"Device Name",
"Device ID",
"MPR Nodes",
"One hop neighbors",
"Two hop neighbors");
220 fprintf(fpRMlog,
"\n");
221 if (nDbgFlag) fflush(fpRMlog);
226static void close_MPR_log()
232bool get_protocol_log_status(
char* logname)
238 sprintf(str,
"%s/%s", pszIOPath,
"ProtocolLogsConfig.txt");
239 fp = fopen(str,
"r");
243 sprintf(str,
"%s=true", logname);
245 while (fgets(data, BUFSIZ, fp))
248 if (!_strnicmp(data, str, strlen(str)))