25#pragma comment(lib,"NetworkStack.lib")
26#pragma comment(lib,"DSR.lib")
30#define DSR_OPTION_HEADER_SIZE 4
31#define DSR_RREQ_SIZE_FIXED 8
32#define DSR_RREQ_SIZE_IPV6_FIXED 20
33#define DSR_RREP_SIZE_FIXED 7
34#define DSR_SOURCEROUTE_SIZE_FIXED 4
35#define DSR_RERR_SIZE_FIXED 12+4
36#define DSR_ACK_OPTION_LEN 10
37#define DSR_ACK_REQUEST_LEN 4
39#define DSR_RREQ_OPT_LEN 6
40#define DSR_DISCOVERY_HOP_LIMIT 255
41#define DSR_MAX_REQUEST_REXMT 16
42#define DSR_MaxMaintRexmt 2
45#define NO_NEXT_HEADER 59
46#define NonpropRequestTimeout (30* MILLISECOND)
47#define DSR_REQUEST_PERIOD (500* MILLISECOND)
48#define DSR_MAX_REQUEST_PERIOD (10* SECOND)
49#define ROUTE_CACHE_TIMEOUT (300* SECOND)
50#define BROADCAST_JITTER (10* MILLISECOND)
51#define MAINT_HOLD_OFF_TIME (250* MILLISECOND)
53#define isDSRPACKET(packet) (packet->nControlDataType/100 == NW_PROTOCOL_DSR)
717#define DSR_PACKET_PROCESSING() fn_NetSim_DSR_GeneralPacketProcessing(pstruEventDetails)
718#define DSR_CHECK_ROUTE_FOUND(destAddress,devVar,nextHop,dTime,ppcache) fn_NetSim_DSR_CheckRouteFound(destAddress,devVar,nextHop,dTime,ppcache)
720#define DSR_ADD_TO_MAINT_BUFFER(nDeviceId,pstruPacket,dTime) fn_NetSim_DSR_AddToMaintBuffer(nDeviceId,pstruPacket,dTime);
721#define DSR_MAINT_TIMEOUT() fn_NetSim_DSR_MaintTimeout(pstruEventDetails)
722#define DSR_RETRANSMIT_BUFFER(maintBuffer) fn_NetSim_DSR_RetransmitBuffer(maintBuffer,pstruEventDetails)
723#define DSR_EMPTY_MAINT_BUFFER(nDeviceId,nextHop) fn_NetSim_DSR_EmptyMaintBuffer(nDeviceId,nextHop)
725#define DSR_UPDATE_ROUTE_CACHE(length,address,dTime) fn_NetSim_DSR_UpdateRouteCache(length,address,dTime)
726#define DSR_FIND_CACHE(devVar,address,dTime) fn_NetSim_DSR_FindCache(devVar,address,dTime)
727#define DSR_VALIDATE_CACHE(cache,addList,count) fn_NetSim_DSR_ValidateRouteCache(cache,addList,count)
728#define DSR_DELETE_ENTRY_CACHE(ppcache,ip1,ip2) fn_NetSim_DSR_DeleteEntryFromRouteCache(ppcache,ip1,ip2)
730#define DSR_GENERATE_RERR(maintBuffer) fn_NetSim_DSR_GenerateRERR(maintBuffer,pstruEventDetails)
731#define DSR_PROCESS_RERR() fn_NetSim_DSR_ProcessRerr(pstruEventDetails)
733#define DSR_GENERATE_RREP(rreqPacket) fn_NetSim_DSR_GenerateRREP(rreqPacket,pstruEventDetails)
734#define DSR_PROCESS_RREP() fn_NetSim_DSR_ProcessRREP(pstruEventDetails)
735#define DSR_GENERATE_RREP_USING_CACHE(devVar,rreqPacket,dTime) fn_NetSim_DSR_GenerateRREPUsingRouteCache(devVar,rreqPacket,dTime,pstruEventDetails)
737#define DSR_INIT_RREQ(target,pprreqTable,nDeviceId,dTime) fn_NetSim_DSR_InitRouteRequest(target,pprreqTable,nDeviceId,dTime,pstruEventDetails)
738#define DSR_RREQ_TIMEOUT() fn_NetSim_DSR_RREQTimeout(pstruEventDetails)
739#define DSR_RETRY_RREQ(targetAddress,nDeviceId,dTime) fn_NetSim_DSR_RetryRREQ(targetAddress,nDeviceId,dTime,pstruEventDetails)
740#define DSR_PROCESS_RREQ() fn_NetSim_DSR_ProcessRREQ(pstruEventDetails)
742#define DSR_ADD_TO_SEND_BUFFER(ppsendBuffer,packet,dTime) fn_NetSim_DSR_AddToSendBuffer(ppsendBuffer,packet,dTime)
743#define DSR_EMPTY_SEND_BUFFER(targetAddress,nDeviceId) fn_NetSim_DSR_EmptySendBuffer(targetAddress,nDeviceId)
744#define DSR_CHECK_SEND_BUFFER(nDeviceId,dTime) fn_NetSim_DSR_CheckSendBuffer(nDeviceId,dTime)
745#define DSR_TRANSMIT_SEND_BUFFER(sendBuffer,nDeviceId,dTime) fn_NetSim_DSR_TransmitPacketFromSendBuffer(sendBuffer,nDeviceId,dTime)
747#define DSR_ADD_SRC_ROUTE(packet,cache) fn_NetSim_DSR_AddSourceRouteOption(packet,cache)
748#define DSR_PROCESS_SRC_ROUTE() fn_NetSim_DSR_ProcessSourceRouteOption(pstruEventDetails)
750#define DSR_ADD_ACK_REQUEST(packet) fn_NetSim_DSR_Add_Ack_request_Option(packet,pstruEventDetails)
751#define DSR_PROCESS_ACK_REQUEST(packet) fn_NetSim_DSR_Process_AckRequestOption(packet,pstruEventDetails)
752#define DSR_PROCESS_ACK() fn_NetSim_DSR_ProcessAckOption(pstruEventDetails);
772#define DSR_DEV_VAR(dev) ((DSR_DEVICE_VAR*)NETWORK->ppstruDeviceList[dev-1]->pstruNetworkLayer->RoutingVar)
773#define DSR_RREQ_LEN(rreq) (int)(rreq->nOptDataLen-6)/4
774#define DSR_RREP_LEN(rrep) (int)(rrep->nOptDataLen-3)/4+1
777#define SENDBUFFER_ALLOC() list_alloc(sizeof(struct stru_DSR_SendBuffer),offsetof(struct stru_DSR_SendBuffer,ele))
778#define RREQTABLE_ALLOC() (DSR_RREQ_TABLE*)list_alloc(sizeof(struct stru_DSR_RouteRequestTable),offsetof(struct stru_DSR_RouteRequestTable,ele))
779#define ROUTECACHE_ALLOC() (DSR_ROUTE_CACHE*)list_alloc(sizeof(struct stru_DSR_RouteCache),offsetof(struct stru_DSR_RouteCache,ele))
780#define MAINTBUFFER_ALLOC() (DSR_MAINT_BUFFER*)list_alloc(sizeof(DSR_MAINT_BUFFER),offsetof(DSR_MAINT_BUFFER,ele))
NETSIM_IPAddress dsr_get_dev_ip(NETSIM_ID d)
DSR_RREQ_TABLE * getRREQTable(NETSIM_IPAddress target, DSR_RREQ_TABLE *table)
enum enum_DSR_Subevent DSR_SUBEVENT
bool fn_NetSim_DSR_GenerateRREPUsingRouteCache(DSR_DEVICE_VAR *devVar, NetSim_PACKET *rreqPacket, double dTime, NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_DSR_MaintTimeout(NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_DSR_Add_Ack_request_Option(NetSim_PACKET *packet, NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_DSR_FreePacket(NetSim_PACKET *packet)
unsigned int fn_NetSim_DSR_FillAddress(DSR_SOURCE_ROUTE_OPTION *srcOption, DSR_ROUTE_CACHE *cache, NETSIM_IPAddress src, NETSIM_IPAddress dest)
int fn_NetSim_DSR_AddSourceRouteOption(NetSim_PACKET *packet, DSR_ROUTE_CACHE *cache)
int fn_NetSim_DSR_UpdateRouteCache(unsigned int length, NETSIM_IPAddress *address, double dTime)
enum_DSR_Subevent
Enumeration for DSR Subevents.
bool fn_NetSim_DSR_AddToSendBuffer(DSR_SEND_BUFFER **sendBuffer, NetSim_PACKET *packet, double dTime)
int fn_NetSim_DSR_ProcessRREP(NetSim_EVENTDETAILS *pstruEventDetails)
bool fn_NetSim_DSR_ValidateRouteCache(DSR_ROUTE_CACHE *cache, NETSIM_IPAddress *addList, int count)
int fn_NetSim_DSR_RREQTimeout(NetSim_EVENTDETAILS *pstruEventDetails)
DSR_ROUTE_CACHE * fn_NetSim_DSR_FindCache(DSR_DEVICE_VAR *devVar, NETSIM_IPAddress address, double dTime)
int fn_NetSim_DSR_ProcessRerr(NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_DSR_ProcessRREQ(NetSim_EVENTDETAILS *pstruEventDetails)
void fn_NetSim_DSR_CheckSendBuffer(NETSIM_ID nDeviceId, double dTime)
int fn_NetSim_DSR_ProcessSourceRouteOption(NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_DSR_Process_AckRequestOption(NetSim_PACKET *packet, NetSim_EVENTDETAILS *pstruEventDetails)
void fn_NetSim_DSR_EmptySendBuffer(NETSIM_IPAddress targetAddress, NETSIM_ID nDeviceId)
NETSIM_ID dsr_get_curr_if()
int fn_NetSim_DSR_TransmitPacketFromSendBuffer(DSR_SEND_BUFFER *sendBuffer, NETSIM_ID nDeviceId, double dTime)
int fn_NetSim_DSR_DeleteEntryFromRouteCache(DSR_ROUTE_CACHE **ppcache, NETSIM_IPAddress ip1, NETSIM_IPAddress ip2)
int fn_NetSim_DSR_ForwardRREP()
int fn_NetSim_DSR_GeneralPacketProcessing(NetSim_EVENTDETAILS *pstruEventDetails)
bool fn_NetSim_DSR_CheckRouteFound(NETSIM_IPAddress destAddress, DSR_DEVICE_VAR *devVar, NETSIM_IPAddress *nextHop, double dTime, DSR_ROUTE_CACHE **cache)
enum enum_DSR_ControlPacket DSR_CONTROL_PACKET
bool isDsrConfigured(NETSIM_ID d, NETSIM_ID in)
int fn_NetSim_DSR_EmptyMaintBuffer(NETSIM_ID nDeviceId, NETSIM_ID nextHop)
NetSim_PACKET * fn_NetSim_DSR_RetryRREQ(NETSIM_IPAddress targetAddress, NETSIM_ID nDeviceId, double dTime, NetSim_EVENTDETAILS *pstruEventDetails)
enum_DSR_ControlPacket
Enumeration for DSR Control Packets.
@ ctrlPacket_ROUTE_REQUEST
int fn_NetSim_DSR_GenerateRERR(DSR_MAINT_BUFFER *maintBuffer, NetSim_EVENTDETAILS *pstruEventDetails)
enum enum_DSR_OptionType DSR_OPTION_TYPE
NetSim_PACKET * fn_NetSim_DSR_GenerateCtrlPacket(NETSIM_ID src, NETSIM_ID dest, NETSIM_ID recv, double dTime, DSR_CONTROL_PACKET type)
int fn_NetSim_DSR_RetransmitBuffer(DSR_MAINT_BUFFER *maintBuffer, NetSim_EVENTDETAILS *pstruEventDetails)
struct stru_DSR_Primitives DSR_PRIMITIVES
int fn_NetSim_DSR_GenerateRREP(NetSim_PACKET *rreqPacket, NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_DSR_AddToMaintBuffer(NETSIM_ID nDeviceId, NetSim_PACKET *pstruPacket, double dTime)
NetSim_PACKET * fn_NetSim_DSR_InitRouteRequest(NETSIM_IPAddress target, DSR_RREQ_TABLE **rreqTable, NETSIM_ID nDeviceId, double dTime, NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_DSR_Finish_F()
double fn_NetSim_DSR_GetBroadCastJitter()
NETSIM_IPAddress dsr_get_curr_ip()
int fn_NetSim_DSR_LinkLayerAck(NetSim_PACKET *)
enum_DSR_OptionType
Enumeration for DSR option types.
int fn_NetSim_DSR_ProcessAckOption(NetSim_EVENTDETAILS *pstruEventDetails)
#define _declspec(dllexport)
This function is used to trigger the update.
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
unsigned int nIdentification
NETSIM_IPAddress DestAddress
NETSIM_IPAddress sourceAddress
unsigned int nOptionDataLen
DSR_OPTION_TYPE nOptionType
unsigned int nOptionDataLen
unsigned int nIdentification
DSR_OPTION_TYPE nOptionType
unsigned int nRREQIdentification
enum stru_DSR_DeviceVar::@12 AckType
struct stru_DSR_RouteCache * pstruRouteCache
List of routes to particular destination.
struct stru_DSR_SendBuffer * pstruSendBuffer
Buffer in which packets are added if route to target is not known.
DSR_MAINT_BUFFER * pstruMaintBuffer
Buffer in which packets sent to next HOP are added.
struct stru_DSR_RouteRequestTable * pstruRREQTable
A table in which entry of RREQ initiated is made.
struct stru_DSR_Metrics dsrMetrics
NetSim_PACKET * packetList
packetList - list of packets sent to the destination
struct element * ele
Next MaintBuffer.
NETSIM_ID nextHop
Next hop ID of a route.
unsigned int packetTransmitted
unsigned int packetDropped
unsigned int rrepForwarded
unsigned int rerrForwarded
unsigned int rreqForwarded
unsigned int packetOrginated
unsigned int packetReceived
NETSIM_IPAddress * address
unsigned int nTTL
nTTL - Time to Live
struct element * ele
ele - next RouteRequestTable
unsigned int nIdentification
Identification value.
unsigned long long int nEventId
struct element * ele
Next SendBuffer.
NETSIM_IPAddress target
Target IP address.
NetSim_PACKET * packet
List of packets to a particular Dest IP.
DSR_OPTION_TYPE nOptionType
@ FLOW_STATE_NOT_SUPPORTED
void * TypeSpecificInformation
NETSIM_IPAddress errorSourceAddress
NETSIM_IPAddress errorDestinationAddress
enum stru_NetSim_DSR_RERR_Option::@11 nErrorType
NETSIM_IPAddress * Address
NETSIM_IPAddress * Address
DSR_OPTION_TYPE nOptionType
unsigned int nLastHopExternal
DSR_OPTION_TYPE nOptionType
NETSIM_IPAddress * address
NETSIM_IPAddress targetAddress
unsigned int nIdentification
NETSIM_IPAddress * Address
DSR_OPTION_TYPE nOptionType