Small OLSR memory optimisation.
1.1 --- a/src/routing/olsr/olsr-agent-impl.cc Tue Feb 26 01:39:59 2008 +0100
1.2 +++ b/src/routing/olsr/olsr-agent-impl.cc Mon Mar 03 15:02:33 2008 +0000
1.3 @@ -1115,7 +1115,9 @@
1.4 // Schedules topology tuple deletion
1.5 m_events.Track (Simulator::Schedule (DELAY (topologyTuple.expirationTime),
1.6 &AgentImpl::TopologyTupleTimerExpire,
1.7 - this, topologyTuple));
1.8 + this,
1.9 + topologyTuple.destAddr,
1.10 + topologyTuple.lastAddr));
1.11 }
1.12 }
1.13
1.14 @@ -1190,7 +1192,7 @@
1.15 NS_LOG_LOGIC ("New IfaceAssoc added: " << tuple);
1.16 // Schedules iface association tuple deletion
1.17 Simulator::Schedule (DELAY (tuple.time),
1.18 - &AgentImpl::IfaceAssocTupleTimerExpire, this, tuple);
1.19 + &AgentImpl::IfaceAssocTupleTimerExpire, this, tuple.ifaceAddr);
1.20 }
1.21 }
1.22
1.23 @@ -1286,7 +1288,8 @@
1.24 AddDuplicateTuple (newDup);
1.25 // Schedule dup tuple deletion
1.26 Simulator::Schedule (OLSR_DUP_HOLD_TIME,
1.27 - &AgentImpl::DupTupleTimerExpire, this, newDup);
1.28 + &AgentImpl::DupTupleTimerExpire, this,
1.29 + newDup.address, newDup.sequenceNumber);
1.30 }
1.31 }
1.32
1.33 @@ -1670,7 +1673,8 @@
1.34 {
1.35 LinkTupleAdded (*link_tuple, hello.willingness);
1.36 m_events.Track (Simulator::Schedule (DELAY (std::min (link_tuple->time, link_tuple->symTime)),
1.37 - &AgentImpl::LinkTupleTimerExpire, this, *link_tuple));
1.38 + &AgentImpl::LinkTupleTimerExpire, this,
1.39 + link_tuple->neighborIfaceAddr));
1.40 }
1.41 NS_LOG_DEBUG ("@" << now.GetSeconds () << ": Olsr node " << m_mainAddress
1.42 << ": LinkSensing END");
1.43 @@ -1769,7 +1773,8 @@
1.44 // Schedules nb2hop tuple deletion
1.45 m_events.Track (Simulator::Schedule (DELAY (new_nb2hop_tuple.expirationTime),
1.46 &AgentImpl::Nb2hopTupleTimerExpire, this,
1.47 - new_nb2hop_tuple));
1.48 + new_nb2hop_tuple.neighborMainAddr,
1.49 + new_nb2hop_tuple.twoHopNeighborAddr));
1.50 }
1.51 else
1.52 {
1.53 @@ -1839,7 +1844,7 @@
1.54 m_events.Track (Simulator::Schedule
1.55 (DELAY (mprsel_tuple.expirationTime),
1.56 &AgentImpl::MprSelTupleTimerExpire, this,
1.57 - mprsel_tuple));
1.58 + mprsel_tuple.mainAddr));
1.59 }
1.60 else
1.61 {
1.62 @@ -2261,10 +2266,10 @@
1.63 /// \param tuple The tuple which has expired.
1.64 ///
1.65 void
1.66 -AgentImpl::DupTupleTimerExpire (DuplicateTuple tuple_)
1.67 +AgentImpl::DupTupleTimerExpire (Ipv4Address address, uint16_t sequenceNumber)
1.68 {
1.69 DuplicateTuple *tuple =
1.70 - m_state.FindDuplicateTuple (tuple_.address, tuple_.sequenceNumber);
1.71 + m_state.FindDuplicateTuple (address, sequenceNumber);
1.72 if (tuple == NULL)
1.73 {
1.74 return;
1.75 @@ -2277,7 +2282,7 @@
1.76 {
1.77 m_events.Track (Simulator::Schedule (DELAY (tuple->expirationTime),
1.78 &AgentImpl::DupTupleTimerExpire, this,
1.79 - *tuple));
1.80 + address, sequenceNumber));
1.81 }
1.82 }
1.83
1.84 @@ -2293,12 +2298,12 @@
1.85 /// \param e The event which has expired.
1.86 ///
1.87 void
1.88 -AgentImpl::LinkTupleTimerExpire (LinkTuple tuple_)
1.89 +AgentImpl::LinkTupleTimerExpire (Ipv4Address neighborIfaceAddr)
1.90 {
1.91 Time now = Simulator::Now ();
1.92
1.93 // the tuple parameter may be a stale copy; get a newer version from m_state
1.94 - LinkTuple *tuple = m_state.FindLinkTuple (tuple_.neighborIfaceAddr);
1.95 + LinkTuple *tuple = m_state.FindLinkTuple (neighborIfaceAddr);
1.96 if (tuple == NULL)
1.97 {
1.98 return;
1.99 @@ -2316,13 +2321,13 @@
1.100
1.101 m_events.Track (Simulator::Schedule (DELAY (tuple->time),
1.102 &AgentImpl::LinkTupleTimerExpire, this,
1.103 - *tuple));
1.104 + neighborIfaceAddr));
1.105 }
1.106 else
1.107 {
1.108 m_events.Track (Simulator::Schedule (DELAY (std::min (tuple->time, tuple->symTime)),
1.109 &AgentImpl::LinkTupleTimerExpire, this,
1.110 - *tuple));
1.111 + neighborIfaceAddr));
1.112 }
1.113 }
1.114
1.115 @@ -2334,11 +2339,10 @@
1.116 /// \param e The event which has expired.
1.117 ///
1.118 void
1.119 -AgentImpl::Nb2hopTupleTimerExpire (TwoHopNeighborTuple tuple_)
1.120 +AgentImpl::Nb2hopTupleTimerExpire (Ipv4Address neighborMainAddr, Ipv4Address twoHopNeighborAddr)
1.121 {
1.122 TwoHopNeighborTuple *tuple;
1.123 - tuple = m_state.FindTwoHopNeighborTuple (tuple_.neighborMainAddr,
1.124 - tuple_.twoHopNeighborAddr);
1.125 + tuple = m_state.FindTwoHopNeighborTuple (neighborMainAddr, twoHopNeighborAddr);
1.126 if (tuple == NULL)
1.127 {
1.128 return;
1.129 @@ -2351,7 +2355,7 @@
1.130 {
1.131 m_events.Track (Simulator::Schedule (DELAY (tuple->expirationTime),
1.132 &AgentImpl::Nb2hopTupleTimerExpire,
1.133 - this, *tuple));
1.134 + this, neighborMainAddr, twoHopNeighborAddr));
1.135 }
1.136 }
1.137
1.138 @@ -2363,9 +2367,9 @@
1.139 /// \param e The event which has expired.
1.140 ///
1.141 void
1.142 -AgentImpl::MprSelTupleTimerExpire (MprSelectorTuple tuple_)
1.143 +AgentImpl::MprSelTupleTimerExpire (Ipv4Address mainAddr)
1.144 {
1.145 - MprSelectorTuple *tuple = m_state.FindMprSelectorTuple (tuple_.mainAddr);
1.146 + MprSelectorTuple *tuple = m_state.FindMprSelectorTuple (mainAddr);
1.147 if (tuple == NULL)
1.148 {
1.149 return;
1.150 @@ -2378,7 +2382,7 @@
1.151 {
1.152 m_events.Track (Simulator::Schedule (DELAY (tuple->expirationTime),
1.153 &AgentImpl::MprSelTupleTimerExpire,
1.154 - this, *tuple));
1.155 + this, mainAddr));
1.156 }
1.157 }
1.158
1.159 @@ -2390,10 +2394,9 @@
1.160 /// \param e The event which has expired.
1.161 ///
1.162 void
1.163 -AgentImpl::TopologyTupleTimerExpire (TopologyTuple tuple_)
1.164 +AgentImpl::TopologyTupleTimerExpire (Ipv4Address destAddr, Ipv4Address lastAddr)
1.165 {
1.166 - TopologyTuple *tuple = m_state.FindTopologyTuple (tuple_.destAddr,
1.167 - tuple_.lastAddr);
1.168 + TopologyTuple *tuple = m_state.FindTopologyTuple (destAddr, lastAddr);
1.169 if (tuple == NULL)
1.170 {
1.171 return;
1.172 @@ -2406,7 +2409,7 @@
1.173 {
1.174 m_events.Track (Simulator::Schedule (DELAY (tuple->expirationTime),
1.175 &AgentImpl::TopologyTupleTimerExpire,
1.176 - this, *tuple));
1.177 + this, tuple->destAddr, tuple->lastAddr));
1.178 }
1.179 }
1.180
1.181 @@ -2416,9 +2419,9 @@
1.182 /// \param e The event which has expired.
1.183 ///
1.184 void
1.185 -AgentImpl::IfaceAssocTupleTimerExpire (IfaceAssocTuple tuple_)
1.186 +AgentImpl::IfaceAssocTupleTimerExpire (Ipv4Address ifaceAddr)
1.187 {
1.188 - IfaceAssocTuple *tuple = m_state.FindIfaceAssocTuple (tuple_.ifaceAddr);
1.189 + IfaceAssocTuple *tuple = m_state.FindIfaceAssocTuple (ifaceAddr);
1.190 if (tuple == NULL)
1.191 {
1.192 return;
1.193 @@ -2431,7 +2434,7 @@
1.194 {
1.195 m_events.Track (Simulator::Schedule (DELAY (tuple->time),
1.196 &AgentImpl::IfaceAssocTupleTimerExpire,
1.197 - this, *tuple));
1.198 + this, ifaceAddr));
1.199 }
1.200 }
1.201
2.1 --- a/src/routing/olsr/olsr-agent-impl.h Tue Feb 26 01:39:59 2008 +0100
2.2 +++ b/src/routing/olsr/olsr-agent-impl.h Mon Mar 03 15:02:33 2008 +0000
2.3 @@ -114,13 +114,13 @@
2.4 Timer m_midTimer;
2.5 void MidTimerExpire ();
2.6
2.7 - void DupTupleTimerExpire (DuplicateTuple tuple);
2.8 + void DupTupleTimerExpire (Ipv4Address address, uint16_t sequenceNumber);
2.9 bool m_linkTupleTimerFirstTime;
2.10 - void LinkTupleTimerExpire (LinkTuple tuple);
2.11 - void Nb2hopTupleTimerExpire (TwoHopNeighborTuple tuple);
2.12 - void MprSelTupleTimerExpire (MprSelectorTuple tuple);
2.13 - void TopologyTupleTimerExpire (TopologyTuple tuple);
2.14 - void IfaceAssocTupleTimerExpire (IfaceAssocTuple tuple);
2.15 + void LinkTupleTimerExpire (Ipv4Address neighborIfaceAddr);
2.16 + void Nb2hopTupleTimerExpire (Ipv4Address neighborMainAddr, Ipv4Address twoHopNeighborAddr);
2.17 + void MprSelTupleTimerExpire (Ipv4Address mainAddr);
2.18 + void TopologyTupleTimerExpire (Ipv4Address destAddr, Ipv4Address lastAddr);
2.19 + void IfaceAssocTupleTimerExpire (Ipv4Address ifaceAddr);
2.20
2.21 void IncrementAnsn ();
2.22