18int fn_NetSim_OLSR_UpdateRoutingTable()
21 NODE_OLSR* olsr=GetOLSRData(pstruEventDetails->nDeviceId);
22 NETSIM_IPAddress subnet = STR_TO_IP4(
"255.255.255.255");
23 OLSR_NEIGHBOR_SET* neighbor;
24 OLSR_2HOP_NEIGHBOR_SET* two_hop_neighbor;
25 OLSR_TOPOLOGY_INFORMATION_BASE* topology;
26 if(!olsr->bRoutingTableUpdate)
31 olsrFlushroutingTable(olsr->ipWrapper,pstruEventDetails->nDeviceId);
32 olsr->ipWrapper->table = NULL;
35 neighbor=olsr->neighborSet;
38 if(neighbor->N_status>=SYM_NEIGH)
40 NETSIM_ID interfaceId = 1;
41 iptable_add(olsr->ipWrapper,
42 neighbor->N_neighbor_main_addr,
45 neighbor->N_neighbor_main_addr,
53 neighbor=(OLSR_NEIGHBOR_SET*)LIST_NEXT(neighbor);
57 two_hop_neighbor=olsr->twoHopNeighborSet;
58 while(two_hop_neighbor)
60 neighbor=olsrFindNeighborSet(olsr->neighborSet,two_hop_neighbor->N_2hop_addr);
61 if(!neighbor && IP_COMPARE(two_hop_neighbor->N_2hop_addr,olsr->mainAddress))
63 neighbor=olsrFindNeighborSet(olsr->neighborSet,two_hop_neighbor->N_neighbor_main_addr);
64 if(neighbor->N_willingness != WILL_NEVER && neighbor->N_status==MPR_NEIGH)
66 NETSIM_ID interfaceId = 1;
67 iptable_add(olsr->ipWrapper,
68 two_hop_neighbor->N_2hop_addr,
71 two_hop_neighbor->N_neighbor_main_addr,
79 two_hop_neighbor=(OLSR_2HOP_NEIGHBOR_SET*)LIST_NEXT(two_hop_neighbor);
83 topology=olsr->topologyInfoBase;
86 ptrIP_ROUTINGTABLE table=iptable_check((ptrIP_ROUTINGTABLE*)&olsr->ipWrapper->table,topology->T_dest_addr,subnet);
87 if(!table && IP_COMPARE(topology->T_dest_addr,olsr->mainAddress))
89 table=iptable_check((ptrIP_ROUTINGTABLE*)&olsr->ipWrapper->table,topology->T_last_addr,subnet);
90 if(table && table->Metric < olsr->nZoneRadius)
92 NETSIM_ID interfaceId = 1;
93 iptable_add(olsr->ipWrapper,
94 topology->T_dest_addr,
107 topology=(OLSR_TOPOLOGY_INFORMATION_BASE*)LIST_NEXT(topology);
109 olsrUpdateIptable(olsr->ipWrapper->table,pstruEventDetails->nDeviceId);
110 olsr->bRoutingTableUpdate=
false;
111 if(DEVICE_NWLAYER(pstruEventDetails->nDeviceId)->nRoutingProtocolId == NW_PROTOCOL_ZRP)
112 fn_NetSim_BRP_Update(olsr->ipWrapper->table);
115int olsrUpdateIptable(ptrIP_ROUTINGTABLE table,NETSIM_ID nNodeId)
119 iptable_add(IP_WRAPPER_GET(nNodeId),
120 table->networkDestination,
130 table=(ptrIP_ROUTINGTABLE)LIST_NEXT(table);
134int olsrFlushroutingTable(ptrIP_WRAPPER wrapper,NETSIM_ID nNodeId)
136 ptrIP_ROUTINGTABLE iptable = wrapper->table;
139 iptable_delete(IP_WRAPPER_GET(nNodeId), iptable->networkDestination, NULL,
"OLSR");
140 iptable_delete(wrapper, iptable->networkDestination, NULL,
"OLSR");
141 iptable = wrapper->table;