diff --git a/src/devices/mesh/flame/flame-protocol-mac.cc b/src/devices/mesh/flame/flame-protocol-mac.cc index 85dda116d..7f3ddca1b 100644 --- a/src/devices/mesh/flame/flame-protocol-mac.cc +++ b/src/devices/mesh/flame/flame-protocol-mac.cc @@ -49,7 +49,8 @@ FlameProtocolMac::Receive (Ptr packet, const WifiMacHeader & header) { NS_FATAL_ERROR ("FLAME tag is not supposed to be received by network"); } - tag.address = header.GetAddr2 (); + tag.receiver = header.GetAddr1 (); + tag.transmitter = header.GetAddr2 (); packet->AddPacketTag (tag); return true; } @@ -63,7 +64,7 @@ FlameProtocolMac::UpdateOutcomingFrame (Ptr packet, WifiMacHeader & head { NS_FATAL_ERROR ("FLAME tag must exist here"); } - header.SetAddr1 (tag.address); + header.SetAddr1 (tag.receiver); return true; } uint16_t diff --git a/src/devices/mesh/flame/flame-protocol.cc b/src/devices/mesh/flame/flame-protocol.cc index 8d4fd31f3..a90c73fae 100644 --- a/src/devices/mesh/flame/flame-protocol.cc +++ b/src/devices/mesh/flame/flame-protocol.cc @@ -56,16 +56,20 @@ FlameTag::GetInstanceTypeId () const uint32_t FlameTag::GetSerializedSize () const { - return 6; + return 12; } void FlameTag::Serialize (TagBuffer i) const { uint8_t buf[6]; - address.CopyTo (buf); + receiver.CopyTo (buf); for (int j = 0; j < 6; j ++) i.WriteU8 (buf[j]); + transmitter.CopyTo (buf); + for (int j = 0; j < 6; j ++) + i.WriteU8 (buf[j]); + } void @@ -74,13 +78,17 @@ FlameTag::Deserialize (TagBuffer i) uint8_t buf[6]; for (int j = 0; j < 6; j ++) buf[j] = i.ReadU8 (); - address.CopyFrom (buf); + receiver.CopyFrom (buf); + for (int j = 0; j < 6; j ++) + buf[j] = i.ReadU8 (); + transmitter.CopyFrom (buf); + } void FlameTag::Print (std::ostream &os) const { - os << "address = " << address; + os << "receiver = " << receiver << ", transmitter = " << transmitter; } //----------------------------------------------------------------------------- @@ -125,7 +133,7 @@ FlameProtocol::RequestRoute (uint32_t sourceIface, const Mac48Address source, c Ptr const_packet, uint16_t protocolType, RouteReplyCallback routeReply) { Ptr packet = const_packet->Copy (); - if (source == m_address) + if (sourceIface == m_mp->GetIfIndex ()) { //Packet from upper layer! FlameTag tag; @@ -133,22 +141,22 @@ FlameProtocol::RequestRoute (uint32_t sourceIface, const Mac48Address source, c { NS_FATAL_ERROR ("FLAME tag is not supposed to be received from upper layers"); } - FlameHeader flameHdr; FlameRtable::LookupResult result = m_rtable->Lookup(destination); - if(tag.address == Mac48Address::GetBroadcast ()) - m_lastBroadcast = Simulator::Now (); if(m_lastBroadcast + m_broadcastInterval < Simulator::Now ()) { result.retransmitter = Mac48Address::GetBroadcast (); result.ifIndex = FlameRtable::INTERFACE_ANY; + m_lastBroadcast = Simulator::Now (); } + FlameHeader flameHdr; flameHdr.AddCost (0); flameHdr.SetSeqno (m_myLastSeqno ++); flameHdr.SetProtocol (protocolType); flameHdr.SetOrigDst (destination); flameHdr.SetOrigSrc (source); packet->AddHeader (flameHdr); - tag.address = result.retransmitter; + tag.receiver = result.retransmitter; + NS_LOG_DEBUG("Source: send packet with RA = " << tag.receiver); packet->AddPacketTag (tag); routeReply (true, packet, source, destination, FLAME_PORT, result.ifIndex); } @@ -159,12 +167,21 @@ FlameProtocol::RequestRoute (uint32_t sourceIface, const Mac48Address source, c FlameTag tag; if(!packet->RemovePacketTag (tag)) { - NS_FATAL_ERROR ("FLAME tag is not supposed to be received by network"); + NS_FATAL_ERROR ("FLAME tag must exust here"); + } + if(source == GetAddress ()) + { + if(tag.receiver != Mac48Address::GetBroadcast ()) + NS_LOG_DEBUG( + "received packet with SA = GetAddress (), RA = " << tag.receiver << + ", TA = " << tag.transmitter << + ", I am "<AddHeader (flameHdr); @@ -174,15 +191,20 @@ FlameProtocol::RequestRoute (uint32_t sourceIface, const Mac48Address source, c } else { - if(HandleDataFrame(flameHdr.GetSeqno (), source, flameHdr, tag.address, sourceIface)) + if(HandleDataFrame(flameHdr.GetSeqno (), source, flameHdr, tag.transmitter, sourceIface)) return false; FlameRtable::LookupResult result = m_rtable->Lookup(destination); - if(tag.address != Mac48Address::GetBroadcast ()) + if(tag.receiver != Mac48Address::GetBroadcast ()) { if(result.retransmitter == Mac48Address::GetBroadcast ()) + { + NS_LOG_DEBUG("unicast packet dropped, because no route! I am "<