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)
56 typedef enum enum_DSR_Subevent DSR_SUBEVENT;
57 typedef enum enum_DSR_ControlPacket DSR_CONTROL_PACKET;
58 typedef enum enum_DSR_OptionType DSR_OPTION_TYPE;
74 typedef struct stru_DSR_Primitives DSR_PRIMITIVES;
77 enum enum_DSR_Subevent
79 subevent_RREQ_TIMEOUT=NW_PROTOCOL_DSR*100+1,
80 subevent_MAINT_TIMEOUT,
81 subevent_PROCESS_RERR,
85 enum enum_DSR_ControlPacket
87 ctrlPacket_ROUTE_REQUEST=NW_PROTOCOL_DSR*100+1,
88 ctrlPacket_ROUTE_REPLY,
89 ctrlPacket_ROUTE_ERROR,
94 enum enum_DSR_OptionType
96 optType_RouteRequest=1,
100 optType_SourceRoute=96,
101 optType_AckRequest=160,
249 NETSIM_IPAddress targetAddress;
388 FLOW_STATE_NOT_SUPPORTED,
389 OPTION_NOT_SUPPORTED,
431 unsigned int nSegsLeft;
432 NETSIM_IPAddress* Address;
557 unsigned int nPayloadLength:16;
566 DSR_ACK_REQ_OPTION* ackRequestOption;
582 unsigned int nLength:8;
583 NETSIM_IPAddress* address;
612 NETSIM_IPAddress target;
615 unsigned long long int nEventId;
638 unsigned int rreqSent;
639 unsigned int rreqForwarded;
640 unsigned int rrepSent;
641 unsigned int rrepForwarded;
642 unsigned int rerrSent;
643 unsigned int rerrForwarded;
644 unsigned int routeBreak;
645 unsigned int packetTransmitted;
646 unsigned int packetOrginated;
647 unsigned int packetReceived;
648 unsigned int packetDropped;
656 unsigned int nRREQIdentification;
669 DSR_ROUTE_CACHE* fn_NetSim_DSR_FindCache(DSR_DEVICE_VAR* devVar,NETSIM_IPAddress address,
double dTime);
670 int fn_NetSim_DSR_GeneralPacketProcessing(NetSim_EVENTDETAILS* pstruEventDetails);
671 bool fn_NetSim_DSR_CheckRouteFound(NETSIM_IPAddress destAddress,DSR_DEVICE_VAR* devVar,NETSIM_IPAddress* nextHop,
double dTime,DSR_ROUTE_CACHE** cache);
672 int fn_NetSim_DSR_AddSourceRouteOption(NetSim_PACKET* packet,DSR_ROUTE_CACHE* cache);
673 int fn_NetSim_DSR_ProcessSourceRouteOption(NetSim_EVENTDETAILS* pstruEventDetails);
674 int fn_NetSim_DSR_AddToMaintBuffer(NETSIM_ID nDeviceId,
675 NetSim_PACKET* pstruPacket,
677 int fn_NetSim_DSR_MaintTimeout(NetSim_EVENTDETAILS* pstruEventDetails);
678 int fn_NetSim_DSR_RetransmitBuffer(DSR_MAINT_BUFFER* maintBuffer,NetSim_EVENTDETAILS* pstruEventDetails);
679 int fn_NetSim_DSR_EmptyMaintBuffer(NETSIM_ID nDeviceId,NETSIM_ID nextHop);
680 bool fn_NetSim_DSR_AddToSendBuffer(DSR_SEND_BUFFER** sendBuffer,NetSim_PACKET* packet,
double dTime);
681 void fn_NetSim_DSR_EmptySendBuffer(NETSIM_IPAddress targetAddress,NETSIM_ID nDeviceId);
682 void fn_NetSim_DSR_CheckSendBuffer(NETSIM_ID nDeviceId,
double dTime);
683 int fn_NetSim_DSR_TransmitPacketFromSendBuffer(DSR_SEND_BUFFER* sendBuffer,
686 int fn_NetSim_DSR_UpdateRouteCache(
unsigned int length,
687 NETSIM_IPAddress* address,
689 DSR_ROUTE_CACHE* fn_NetSim_DSR_FindCache(DSR_DEVICE_VAR* devVar,NETSIM_IPAddress address,
double dTime);
690 bool fn_NetSim_DSR_ValidateRouteCache(DSR_ROUTE_CACHE* cache,NETSIM_IPAddress* addList,
int count);
691 int fn_NetSim_DSR_DeleteEntryFromRouteCache(DSR_ROUTE_CACHE** ppcache,
692 NETSIM_IPAddress ip1,
693 NETSIM_IPAddress ip2);
694 int fn_NetSim_DSR_GenerateRREP(NetSim_PACKET* rreqPacket,NetSim_EVENTDETAILS* pstruEventDetails);
695 int fn_NetSim_DSR_ProcessRREP(NetSim_EVENTDETAILS* pstruEventDetails);
696 bool fn_NetSim_DSR_GenerateRREPUsingRouteCache(DSR_DEVICE_VAR* devVar,
697 NetSim_PACKET* rreqPacket,
699 NetSim_EVENTDETAILS* pstruEventDetails);
700 int fn_NetSim_DSR_ForwardRREP();
701 int fn_NetSim_DSR_GenerateRERR(DSR_MAINT_BUFFER* maintBuffer,NetSim_EVENTDETAILS* pstruEventDetails);
702 int fn_NetSim_DSR_ProcessRerr(NetSim_EVENTDETAILS* pstruEventDetails);
703 NetSim_PACKET* fn_NetSim_DSR_InitRouteRequest(NETSIM_IPAddress target, DSR_RREQ_TABLE** rreqTable,
706 NetSim_EVENTDETAILS* pstruEventDetails);
707 int fn_NetSim_DSR_RREQTimeout(NetSim_EVENTDETAILS* pstruEventDetails);
708 NetSim_PACKET* fn_NetSim_DSR_RetryRREQ(NETSIM_IPAddress targetAddress,
711 NetSim_EVENTDETAILS* pstruEventDetails);
712 int fn_NetSim_DSR_ProcessRREQ(NetSim_EVENTDETAILS* pstruEventDetails);
713 int fn_NetSim_DSR_Add_Ack_request_Option(NetSim_PACKET* packet,NetSim_EVENTDETAILS* pstruEventDetails);
714 int fn_NetSim_DSR_ProcessAckOption(NetSim_EVENTDETAILS* pstruEventDetails);
715 int fn_NetSim_DSR_Process_AckRequestOption(NetSim_PACKET* packet,NetSim_EVENTDETAILS* pstruEventDetails);
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);
755 NetSim_PACKET* fn_NetSim_DSR_GenerateCtrlPacket(NETSIM_ID src,
759 DSR_CONTROL_PACKET type);
760 double fn_NetSim_DSR_GetBroadCastJitter();
761 int fn_NetSim_DSR_LinkLayerAck(NetSim_PACKET*);
762 unsigned int fn_NetSim_DSR_FillAddress(DSR_SOURCE_ROUTE_OPTION* srcOption,DSR_ROUTE_CACHE* cache,NETSIM_IPAddress src,NETSIM_IPAddress dest);
763 int fn_NetSim_DSR_Finish_F();
764 DSR_RREQ_TABLE* getRREQTable(NETSIM_IPAddress target,DSR_RREQ_TABLE* table);
767 NETSIM_IPAddress dsr_get_curr_ip();
768 NETSIM_ID dsr_get_curr_if();
769 NETSIM_IPAddress dsr_get_dev_ip(NETSIM_ID d);
770 bool isDsrConfigured(NETSIM_ID d, NETSIM_ID in);
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))
782 _declspec(dllexport)
int fn_NetSim_DSR_FreePacket(NetSim_PACKET* packet);
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
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.
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 nTTL
nTTL - Time to Live
struct element * ele
ele - next RouteRequestTable
unsigned int nIdentification
Identification value.
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
void * TypeSpecificInformation
enum stru_NetSim_DSR_RERR_Option::@234164063043207073373340307253340021156076321263 nErrorType
NETSIM_IPAddress errorSourceAddress
NETSIM_IPAddress errorDestinationAddress
NETSIM_IPAddress * Address
DSR_OPTION_TYPE nOptionType
unsigned int nLastHopExternal
DSR_OPTION_TYPE nOptionType
NETSIM_IPAddress * address
unsigned int nIdentification
NETSIM_IPAddress * Address
DSR_OPTION_TYPE nOptionType