20#ifndef _NETSIM_AODV_H_
21#define _NETSIM_AODV_H_
26#define AODV_ACTIVE_ROUTE_TIMEOUT 3000* MILLISECOND
27#define AODV_ALLOWED_HELLO_LOSS 2
28#define AODV_BLACKLIST_TIMEOUT AODV_RREQ_RETRIES * AODV_NET_TRAVERSAL_TIME
29#define AODV_DELETE_PERIOD K * max (AODV_ACTIVE_ROUTE_TIMEOUT, AODV_HELLO_INTERVAL)
31#define AODV_HELLO_INTERVAL 1000* MILLISECOND
32#define AODV_LOCAL_ADD_TTL 2
33#define AODV_MAX_REPAIR_TTL 0.3 * AODV_NET_DIAMETER
34#define AODV_MIN_REPAIR_TTL
35#define AODV_MY_ROUTE_TIMEOUT (2 * AODV_ACTIVE_ROUTE_TIMEOUT)
36#define AODV_NET_DIAMETER 35
37#define AODV_NET_TRAVERSAL_TIME 2 * AODV_NODE_TRAVERSAL_TIME * AODV_NET_DIAMETER
38#define AODV_NEXT_HOP_WAIT AODV_NODE_TRAVERSAL_TIME + 10
39#define AODV_NODE_TRAVERSAL_TIME 40 * MILLISECOND
40#define AODV_PATH_DISCOVERY_TIME 2 * AODV_NET_TRAVERSAL_TIME
41#define AODV_RERR_RATELIMIT 10
42#define AODV_RING_TRAVERSAL_TIME(ttl) 2 * AODV_NODE_TRAVERSAL_TIME *(ttl + AODV_TIMEOUT_BUFFER)
43#define AODV_RREQ_RETRIES 2
44#define AODV_RREQ_RATELIMIT 10
45#define AODV_TIMEOUT_BUFFER 2
46#define AODV_TTL_START 1
47#define AODV_TTL_INCREMENT 2
48#define AODV_TTL_THRESHOLD 7
51#define AODV_RREQ_SIZE_IPV4 24
52#define AODV_RREQ_SIZE_IPV6 72
53#define AODV_RREQ_SIZE(dev) DEVICE_NWPROTOCOL(dev,1) == NW_PROTOCOL_IPV4 ? AODV_RREQ_SIZE_IPV4:AODV_RREQ_SIZE_IPV6
54#define AODV_RREP_SIZE_IPV4 20
55#define AODV_RREP_SIZE_IPV6 56
56#define AODV_RREP_SIZE(dev) DEVICE_NWPROTOCOL(dev,1) == NW_PROTOCOL_IPV4 ? AODV_RREP_SIZE_IPV4:AODV_RREP_SIZE_IPV6
57#define AODV_RERR_SIZE_FIXED 4
391#define AODV_PACKET_PROCESSING() fn_NetSim_AODV_GeneralPacketProcessing(pstruEventDetails)
392#define AODV_CHECK_ROUTE_FOUND(destIP) fn_NetSim_AODV_CheckRouteFound(destIP,pstruEventDetails)
393#define AODV_ADD_TO_FIFO(packet,fifoBuffer,time) fn_NetSim_AODV_AddToFIFOBuffer(packet,fifoBuffer,time)
394#define AODV_GEN_RREQ() fn_NetSim_AODV_GenerateRREQ(pstruEventDetails)
395#define AODV_RETRY_RREQ() fn_NetSim_AODV_RetryRREQ(pstruEventDetails)
396#define AODV_PROCESS_RREQ() fn_NetSim_AODV_ProcessRREQ(pstruEventDetails)
397#define AODV_INSERT_ROUTE_TABLE(ip,seq,hopcount,nexthop,lifeTime) fn_NetSim_AODV_InsertInRouteTable(ip,seq,hopcount,nexthop,lifeTime,pstruEventDetails)
398#define AODV_INSERT_PRECURSOR(ip) fn_NetSim_AODV_InsertInPrecursorsList(ip,pstruEventDetails)
399#define AODV_FORWARD_RREQ() fn_NetSim_AODV_ForwardRREQ(pstruEventDetails)
400#define AODV_GENERATE_RREP() fn_NetSim_AODV_GenerateRREP(pstruEventDetails)
401#define AODV_TRANSMIT_FIFO(devVar) fn_NetSim_AODV_TransmitFIFOBuffer(devVar,pstruEventDetails)
402#define AODV_PROCESS_RREP() fn_NetSim_AODV_ProcessRREP(pstruEventDetails)
403#define AODV_FORWARD_RREP() fn_NetSim_AODV_ForwardRREP(pstruEventDetails)
404#define AODV_FIND_NEXT_HOP(devVar,dest) fn_NetSim_AODV_FindNextHop(devVar,dest,pstruEventDetails)
405#define AODV_GENERATE_RREP_BY_IN() fn_NetSim_AODV_GenerateRREPByIntermediate(pstruEventDetails)
406#define AODV_TRANSMIT_HELLO() fn_NetSim_AODV_TransmitHelloMessage(pstruEventDetails)
407#define AODV_UPDATE_ROUTE_TABLE(ip,lifetime) fn_NetSim_AODV_UpdateRouteTable(ip,lifetime,pstruEventDetails)
408#define AODV_ACTIVE_ROUTE_TIMEOUT_EVENT() fn_NetSim_AODV_ActiveRouteTimeout(pstruEventDetails)
409#define AODV_GENERATE_RERR(DevId,UnreachableIP) fn_NetSim_AODV_GenerateRERR(DevId,UnreachableIP,pstruEventDetails)
410#define AODV_PROCESS_RERR() fn_NetSim_AODV_ProcessRERR(pstruEventDetails)
413#define AODV_DEV_VAR(devId) ((AODV_DEVICE_VAR*)NETWORK->ppstruDeviceList[devId-1]->pstruNetworkLayer->RoutingVar)
414#define AODV_METRICS_VAR(devId) (AODV_DEV_VAR(devId)->aodvMetrics)
415#define FIFO_ALLOC() (AODV_FIFO*)list_alloc(sizeof(AODV_FIFO),offsetof(AODV_FIFO,ele))
416#define RREQSEENTABLE_ALLOC() (AODV_RREQ_SEEN_TABLE*)list_alloc(sizeof(AODV_RREQ_SEEN_TABLE),offsetof(AODV_RREQ_SEEN_TABLE,ele))
417#define RREQSENTTABLE_ALLOC() (AODV_RREQ_SENT_TABLE*)list_alloc(sizeof(AODV_RREQ_SENT_TABLE),offsetof(AODV_RREQ_SENT_TABLE,ele))
418#define ROUTETABLE_ALLOC() (AODV_ROUTETABLE*)list_alloc(sizeof(AODV_ROUTETABLE),offsetof(AODV_ROUTETABLE,ele))
436 unsigned int seqNumber,
437 unsigned int hopCount,
466 unsigned int seqNumber,
467 unsigned int hopCount,
int fn_NetSim_AODV_GenerateRREP(NetSim_EVENTDETAILS *pstruEventDetails)
NETSIM_ID aodv_get_curr_if()
int fn_NetSim_AODV_UpdateRouteTable(NETSIM_IPAddress ip, double lifetime, NetSim_EVENTDETAILS *pstruEventDetails)
unsigned int fnFindSequenceNumber(AODV_DEVICE_VAR *devVar, NETSIM_IPAddress ip)
int fn_NetSim_AODV_TransmitFIFOBuffer(AODV_DEVICE_VAR *devVar, NetSim_EVENTDETAILS *pstruEventDetails)
NetSim_PACKET * fn_NetSim_AODV_GenerateCtrlPacket(NETSIM_ID src, NETSIM_ID dest, NETSIM_ID recv, double dTime, AODV_CONTROL_PACKET type)
int fn_NetSim_AODV_ProcessRERR(NetSim_EVENTDETAILS *pstruEventDetails)
AODV_ROUTETABLE * fnFindRouteTable(AODV_ROUTETABLE *table, NETSIM_IPAddress dest)
@ AODVsubevent_RREQ_TIMEOUT
@ AODVsubevent_TRANSMIT_HELLO
@ AODVsubevent_ACTIVE_ROUTE_TIMEOUT
int fn_NetSim_AODV_ForwardRREQ(NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_AODV_ReceiveHelloMessage(NetSim_EVENTDETAILS *pstruEventDetails)
bool isAodvConfigured(NETSIM_ID d, NETSIM_ID in)
bool fn_NetSim_AODV_AddToFIFOBuffer(NetSim_PACKET *packet, AODV_FIFO **fifoBuffer, double time)
int fn_NetSim_AODV_TransmitHelloMessage(NetSim_EVENTDETAILS *pstruEventDetails)
NETSIM_IPAddress fn_NetSim_AODV_FindNextHop(AODV_DEVICE_VAR *devVar, NETSIM_IPAddress dest, NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_AODV_RetryRREQ(NetSim_EVENTDETAILS *pstruEventDetails)
NETSIM_IPAddress aodv_get_curr_ip()
int fn_NetSim_AODV_ProcessRREP(NetSim_EVENTDETAILS *pstruEventDetails)
@ AODV_RoutingFlag_InValid
@ AODV_RoutingFlag_Repairable
@ AODV_RoutingFlag_beingRepaired
int fn_NetSim_AODV_InsertInPrecursorsList(NETSIM_IPAddress ip, NetSim_EVENTDETAILS *pstruEventDetails)
struct stru_AODV_Primitives AODV_PRIMITIVES
enum enum_AODV_Ctrl_Packet AODV_CONTROL_PACKET
int fn_NetSim_AODV_GeneralPacketProcessing(NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_AODV_GenerateRREPByIntermediate(NetSim_EVENTDETAILS *pstruEventDetails)
NETSIM_IPAddress aodv_get_dev_ip(NETSIM_ID d)
int fn_NetSim_AODV_GenerateRERR(NETSIM_ID nDeviceId, NETSIM_IPAddress UnreachableIP, NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_AODV_InsertInRouteTable(NETSIM_IPAddress ip, unsigned int seqNumber, unsigned int hopCount, NETSIM_IPAddress nextHop, double lifeTime, NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_AODV_ForwardRREP(NetSim_EVENTDETAILS *pstruEventDetails)
NetSim_PACKET * fn_NetSim_AODV_GenerateRREQ(NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_AODV_ProcessRREQ(NetSim_EVENTDETAILS *pstruEventDetails)
int fn_NetSim_AODV_ActiveRouteTimeout(NetSim_EVENTDETAILS *pstruEventDetails)
bool fn_NetSim_AODV_CheckRouteFound(NETSIM_IPAddress ip, NetSim_EVENTDETAILS *pstruEventDetails)
int fnEmptyFIFOBuffer(AODV_DEVICE_VAR *devVar, NETSIM_IPAddress dest)
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
AODV_RREQ_SEEN_TABLE * rreqSeenTable
AODV_RREQ_SENT_TABLE * rreqSentTable
unsigned int nSequenceNumber
AODV_PRECURSORS_LIST * precursorsList
AODV_ROUTETABLE * routeTable
double dLastBroadcastTime
NetSim_PACKET * packetList
PacketList - List of packets added to the FIFO buffer.
NETSIM_IPAddress destination
Destination - destination ip address.
struct element * ele
ele - next buffer
Stucture for AODV Metrics.
unsigned int packetDropped
unsigned int rerrForwarded
unsigned int rrepForwarded
unsigned int packetTransmitted
unsigned int packetReceived
unsigned int rreqForwarded
unsigned int packetOrginated
Structure of RREQ Seen Table in which entry is made of the RREQ received.
struct element * ele
Next AODV_RREQ_Seen_Table
unsigned int nRREQId
RREQ identification no.
NETSIM_IPAddress OrginatingNode
IP address of a node originating RREQ
Structure of RREQ sent Table in which entry of RREQ sent is made.
NETSIM_IPAddress DestAddress
Destination IP Address.
struct element * ele
Next AODV_RREQ_Sent_Table.
unsigned int * UnreachableDestinationSequenceNumber
unsigned int Reserved
Sent as 0; ignored on reception.
NETSIM_IPAddress * UnreachableDestinationIPAddress
NETSIM_IPAddress OriginatorIPaddress
The IP address of the node which originated the RREQ for which the route is supplied.
unsigned int Reserved
Sent as 0; ignored on reception.
unsigned int DestinationSequenceNumber
The destination sequence number associated to the route.
unsigned int Lifetime
The time in milliseconds for which nodes receiving the RREP consider the route to be valid.
NETSIM_IPAddress LastAddress
NETSIM_IPAddress DestinationIPaddress
NETSIM_IPAddress DestinationIPAddress
NETSIM_IPAddress OriginatorIPAddress
unsigned int Reserved
Sent as 0; ignored on reception.
unsigned int OriginatorSequenceNumber
unsigned int DestinationSequenceNumber
NETSIM_IPAddress LastAddress
bool ValidDestinationSequenceNumberflag
NETSIM_ID NetworkInterface
AODV_RoutingFlag routingFlags
NETSIM_IPAddress DestinationIPAddress
unsigned int DestinationSequenceNumber
AODV_PRECURSORS_LIST * ListofPrecursors