22#ifndef _NETSIM_OSLR_H_
23#define _NETSIM_OSLR_H_
28#define NW_PROTOCOL_NDP NW_PROTOCOL_OLSR
31#define OLSR_HELLO_INTERVAL_DEFAULT 2
32#define OLSR_REFERESH_INTERVAL_DEFAULT 2
33#define OLSR_TC_INTERVAL_DEFAULT 5
34#define OLSR_ZONE_RADIUS_DEFAULT INFINITE
37#define TC_REDUNDANCY 0
39#define MAXJITTER OLSR_HELLO_INTERVAL_DEFAULT/4.0*SECOND
42#define NEIGHB_HOLD_TIME OLSR_REFERESH_INTERVAL_DEFAULT*3*SECOND
43#define TOP_HOLD_TIME OLSR_TC_INTERVAL_DEFAULT*3*SECOND
44#define DUP_HOLD_TIME 30*SECOND
47#define OLSR_HEADER_SIZE 4
48#define MESSAGE_HEADER_SIZE 12
49#define HELLO_MESSAGE_SIZE 4
50#define HELLO_LINK_SIZE 8
51#define TC_MESSAGE_SIZE_FIXED 4
54#define TC_MESSAGE_TTL 255
55#define HELLO_MESSAGE_TTL 1
58#define SCALE_FACTOR 0.0625
61#define MAXVALUE_SEQUENCE_NUMBER 0xFFFF
62#define SEQUENCE_NUMBER_GREATER_THAN(s1,s2) (((s1>s2) && ((s1-s2)<=(MAXVALUE_SEQUENCE_NUMBER/2))) || ((s2>s1) && ((s2-s1)>(MAXVALUE_SEQUENCE_NUMBER/2))))
99#define OLSR_CONTROL_PACKET(x) NW_PROTOCOL_OLSR*100+x
159 }OLSR_NEIGHBOR_TYPES;
188 MESSAGE_TYPE MessageType;
190 unsigned short int MessageSize;
191 NETSIM_IPAddress OriginatorAddress;
192 unsigned int TimeToLive:8;
193 unsigned int HopCount:8;
194 unsigned short int MessageSequenceNumber;
200 unsigned short int PacketLength;
201 unsigned short int PacketSequenceNumber;
202 OLSR_HEADER_MESSAGE* message;
248 OLSR_LINK_TYPE linkType;
249 OLSR_NEIGHBOR_TYPES neighTypes;
251 unsigned int Reserved:8;
252 unsigned short int LinkMessageSize;
253 NETSIM_IPAddress NeighborInterfaceAddress;
258 unsigned short int Reserved;
260 WILLINGNESS Willingness;
261 OLSR_HELLO_LINK* link;
283 unsigned short int ANSN;
284 unsigned short int Reserved;
285 unsigned short int AdvertisedNeighborCount;
286 NETSIM_IPAddress* AdvertisedNeighborMainAddress;
291 NETSIM_IPAddress N_neighbor_main_addr;
292 OLSR_NEIGHBOR_TYPES N_status;
293 WILLINGNESS N_willingness;
296#define NEIGHBOR_TUPLES_ALLOC() (struct stru_OLSR_NeighborTuples*)list_alloc(sizeof(struct stru_OLSR_NeighborTuples),offsetof(struct stru_OLSR_NeighborTuples,ele))
300 NETSIM_IPAddress N_neighbor_main_addr;
301 NETSIM_IPAddress N_2hop_addr;
305#define OLSR_2HOPTUPLES_ALLOC() (struct stru_OLSR_2HopTuples*)list_alloc(sizeof(struct stru_OLSR_2HopTuples),offsetof(struct stru_OLSR_2HopTuples,ele))
309 NETSIM_IPAddress neighborAddress;
312#define MPRSET_ALLOC() (struct stru_OLSR_MPRSet*)list_alloc(sizeof(struct stru_OLSR_MPRSet),offsetof(struct stru_OLSR_MPRSet,ele))
316 NETSIM_IPAddress MS_main_addr;
320#define MPR_SELECTION_SET_ALLOC() (struct stru_OLSR_MPR_Selection_Tuples*)list_alloc(sizeof(struct stru_OLSR_MPR_Selection_Tuples),offsetof(struct stru_OLSR_MPR_Selection_Tuples,ele))
324 NETSIM_IPAddress T_dest_addr;
325 NETSIM_IPAddress T_last_addr;
330#define TOPOLOGY_INFO_BASE_ALLOC() (struct stru_OLSR_TopologyTuple*)list_alloc(sizeof(struct stru_OLSR_TopologyTuple),offsetof(struct stru_OLSR_TopologyTuple,ele))
334 NETSIM_IPAddress L_local_iface_addr;
335 NETSIM_IPAddress L_neighbor_iface_addr;
341#define LINK_SET_ALLOC() (OLSR_LINK_SET*)list_alloc(sizeof(OLSR_LINK_SET),offsetof(struct stru_OLSR_LinkTuples,ele))
354 NETSIM_IPAddress D_addr;
355 unsigned short int D_seq_num;
356 bool D_retransmitted;
357 NETSIM_IPAddress D_iface_list;
361#define DUPLICATE_SET_ALLOC() (OLSR_DUPLICATE_SET*)list_alloc(sizeof(OLSR_DUPLICATE_SET),offsetof(struct stru_OLSR_DuplicateTuples,ele))
366 double dHelloInterval;
367 double dRefereshInterval;
369 unsigned int nZoneRadius;
371 WILLINGNESS willingness;
372 NETSIM_IPAddress mainAddress;
375 OLSR_NEIGHBOR_SET* neighborSet;
376 OLSR_2HOP_NEIGHBOR_SET* twoHopNeighborSet;
377 OLSR_MPR_SET* mprSet;
378 OLSR_MPR_SELECTION_SET* mprSelectionSet;
379 OLSR_TOPOLOGY_INFORMATION_BASE* topologyInfoBase;
380 OLSR_LINK_SET* linkSet;
383 unsigned short int nPacketSequenceNumber;
384 unsigned short int nMessageSequenceNumber;
385 unsigned short int ANSN;
388 OLSR_DUPLICATE_SET* duplicateSet;
391 bool bRoutingTableUpdate;
392 ptrIP_WRAPPER ipWrapper;
397 unsigned char olsrConvertDoubleToME(
double val);
398 double olsrConvertMEToDouble(
unsigned char val);
399 NODE_OLSR* GetOLSRData(NETSIM_ID nDeviceId);
400 OLSR_LINK_SET* olsrFindLinkSet(NODE_OLSR* olsr,NETSIM_IPAddress ip);
401 int fn_NetSim_NDP_ScheduleHelloTransmission(NETSIM_ID nNodeId,
double dEventTime);
402 OLSR_NEIGHBOR_SET* olsrFindNeighborSet(OLSR_NEIGHBOR_SET* neighborSet,NETSIM_IPAddress ip);
403 OLSR_HELLO_LINK* olsrFinkLinkInfoFromHello(OLSR_HELLO_LINK* link,NETSIM_IPAddress ip);
404 OLSR_2HOP_NEIGHBOR_SET* olsrFind2HopNeighbor(NODE_OLSR* olsr,NETSIM_IPAddress neighborAddress,NETSIM_IPAddress N_2_Hop_Address);
405 OLSR_2HOP_NEIGHBOR_SET* olsrFill2HopNeighbor(NODE_OLSR* olsr);
406 OLSR_NEIGHBOR_SET* olsrFillNeighbor(NODE_OLSR* olsr);
407 int olsrAddtoMPRSet(OLSR_MPR_SET** mpr,OLSR_NEIGHBOR_SET* N,OLSR_2HOP_NEIGHBOR_SET* N2);
408 int fn_NetSim_OLSR_PopulateLinkSet();
409 int fn_NetSim_NDP_CopyHelloMessage(OLSR_HEADER_MESSAGE* dest,OLSR_HEADER_MESSAGE* src);
410 unsigned short int fn_NetSim_Fill_Link_To_Hello(NODE_OLSR* olsr,OLSR_HELLO_PACKET* hello,
double dCurrentTime);
411 int fn_NetSim_OLSR_Populate2HopNeighbor();
412 int fn_NetSim_OLSR_PopulateMPRSet();
413 int fn_NetSim_NDP_FreeHelloMessage(OLSR_HEADER_MESSAGE* message);
414 int fn_NetSim_NDP_Init();
415 int fn_NetSim_NDP_ReceiveHello();
416 int fn_NetSim_OLSR_PopulateNeighborSet();
417 int fn_NetSim_NDP_TransmitHello();
418 int fn_NetSim_OLSR_Configure_F(
void** var,
void** data);
419 int fn_NetSim_OLSR_CopyOLSRHeader(
const NetSim_PACKET* destPacket,
const NetSim_PACKET* srcPacket);
420 int fn_NetSim_OLSR_FreeOLSRHeader(NetSim_PACKET* packet);
421 int fn_NetSim_OLSR_Init();
422 OLSR_MPR_SELECTION_SET* olsrFindMPRSelectorSet(OLSR_MPR_SELECTION_SET* set,NETSIM_IPAddress ip);
423 OLSR_DUPLICATE_SET* olsrFindDuplicateSet(OLSR_DUPLICATE_SET* duplicate,NETSIM_IPAddress ip,
unsigned short int seq_no);
424 int fn_NetSim_OLSR_CopyTCMessage(OLSR_HEADER_MESSAGE* dest,OLSR_HEADER_MESSAGE* src);
425 int fn_NetSim_OLSR_Finish_F();
426 int fn_NetSim_OLSR_FreeTCMessage(OLSR_HEADER_MESSAGE* message);
427 int fn_NetSim_OLSR_LinkTupleExpire();
428 int fn_NetSim_OLSR_UpdateRoutingTable();
429 int fn_NetSim_OLSR_PacketForwarding();
430 int fn_NetSim_OLSR_PacketProcessing();
431 int fn_NetSim_OLSR_PopulateMPRSelectorSet();
432 int fn_NetSim_OLSR_ReceiveTC();
433 int fn_NetSim_OLSR_Remove2HopTuple(NODE_OLSR* olsr,OLSR_NEIGHBOR_SET* neighbor);
434 int fn_NetSim_OLSR_RemoveNeighbortuple(OLSR_LINK_SET* link);
435 int fn_NetSim_OLSR_ScheduleTCTransmission(NETSIM_ID nNodeId,
double dTime);
436 int fn_NetSim_OLSR_TransmitTCMessage();
437 int olsrAddLinktuplesExpiryEvent(OLSR_LINK_SET* link);
438 bool olsrExistInDuplicateSet(OLSR_DUPLICATE_SET* set,OLSR_HEADER* header);
439 int olsrFlushroutingTable(ptrIP_WRAPPER wrapper,NETSIM_ID nNodeId);
440 int olsrMarkMPR(NODE_OLSR* olsr);
441 int olsrPrintMPR(OLSR_MPR_SET* mprSet);
442 int olsrUpdateIptable(ptrIP_ROUTINGTABLE table,NETSIM_ID nNodeId);
443 int olsrUpdateTopologySet(NODE_OLSR* olsr,OLSR_TOPOLOGY_INFORMATION_BASE** topology,OLSR_HEADER_MESSAGE* message);
444 bool olsrValidateTopologyInfoOnCondition2(OLSR_TOPOLOGY_INFORMATION_BASE* topology,NETSIM_IPAddress originator,
unsigned short int ANSN);