diff --git a/src/devices/mesh/dot11s/hwmp-mac-plugin.cc b/src/devices/mesh/dot11s/hwmp-mac-plugin.cc index 5492fd826..520812f19 100644 --- a/src/devices/mesh/dot11s/hwmp-mac-plugin.cc +++ b/src/devices/mesh/dot11s/hwmp-mac-plugin.cc @@ -170,7 +170,7 @@ HwmpMacPlugin::RequestDestination (Mac48Address dst, uint32_t originator_seqno, preq.SetOriginatorAddress (m_protocol->GetAddress ()); preq.SetOriginatorSeqNumber (originator_seqno); preq.SetLifetime (m_protocol->GetActivePathLifetime ()); - preq.AddDestinationAddressElement (false, false, dst, dst_seqno); + preq.AddDestinationAddressElement (m_protocol->GetDoFlag (), m_protocol->GetRfFlag (), dst, dst_seqno); m_preqQueue.push_back (preq); //set iterator position to my preq: SendOnePreq (); diff --git a/src/devices/mesh/dot11s/hwmp-protocol.cc b/src/devices/mesh/dot11s/hwmp-protocol.cc index 53452fc86..e9a1b5a8a 100644 --- a/src/devices/mesh/dot11s/hwmp-protocol.cc +++ b/src/devices/mesh/dot11s/hwmp-protocol.cc @@ -361,7 +361,6 @@ HwmpProtocol::ReceivePreq (IePreq preq, Mac48Address from, uint32_t interface, u } if ((*i)->GetDestinationAddress () == GetAddress ()) { - preq.DelDestinationAddressElement ((*i)->GetDestinationAddress()); SendPrep ( GetAddress (), preq.GetOriginatorAddress (), @@ -372,29 +371,30 @@ HwmpProtocol::ReceivePreq (IePreq preq, Mac48Address from, uint32_t interface, u preq.GetLifetime (), interface ); + preq.DelDestinationAddressElement ((*i)->GetDestinationAddress()); continue; } //check if can answer: HwmpRtable::LookupResult result = m_rtable->LookupReactive ((*i)->GetDestinationAddress()); if ((! ((*i)->IsDo())) && (result.retransmitter != Mac48Address::GetBroadcast())) { - //have a valid information and acn answer + //have a valid information and can answer + SendPrep ( + (*i)->GetDestinationAddress (), + preq.GetOriginatorAddress (), + from, + result.metric, + preq.GetOriginatorSeqNumber (), + result.seqnum +1, + preq.GetLifetime (), + interface + ); + if ((*i)->IsRf ()) - (*i)->SetFlags (true, false, (*i)->IsUsn ()); //DO = 1, RF = 0 (as it was) + (*i)->SetFlags (true, false, (*i)->IsUsn ()); //DO = 1, RF = 0 else { - //send a PREP and delete destination preq.DelDestinationAddressElement ((*i)->GetDestinationAddress()); - SendPrep ( - (*i)->GetDestinationAddress (), - preq.GetOriginatorAddress (), - from, - result.metric, - preq.GetOriginatorSeqNumber (), - result.seqnum +1, - preq.GetLifetime (), - interface - ); continue; } }