From: Richard Whitehouse Date: Sun, 20 Feb 2011 02:26:15 +0000 (+0000) Subject: Reverse Path Forwarding fix for Broadcast of Moose Frames X-Git-Url: https://git.richardwhiuk.com/?a=commitdiff_plain;h=0029689b52503dc5a4b8211be8ff11fe4ca6b097;p=ns-moose.git Reverse Path Forwarding fix for Broadcast of Moose Frames --- diff --git a/code/src/devices/bridge/model/moose-bridge-net-device.cc b/code/src/devices/bridge/model/moose-bridge-net-device.cc index 70ac1e5..b765525 100644 --- a/code/src/devices/bridge/model/moose-bridge-net-device.cc +++ b/code/src/devices/bridge/model/moose-bridge-net-device.cc @@ -280,13 +280,34 @@ MooseBridgeNetDevice::ForwardUnicast (Ptr incomingPort, Ptr } +void MooseBridgeNetDevice::ForwardBroadcast (Ptr incomingPort, Ptr packet, uint16_t protocol, Mac48Address src, Mac48Address dst) +{ + NS_LOG_FUNCTION_NOARGS (); + // We need to do reverse path forwarding to prevent loops -/* -//bool Send (Ptr packet, const Address& dest, uint16_t protocolNumber); -//bool SendFrom (Ptr packet, const Address& source, const Address& dest, uint16_t protocolNumber); -void Learn (Address const &src, Ptr port); -Ptr GetLearnedState (Mac48Address source);*/ + // This is as simple as finding out the best port for sending and checking for equality + + Ptr bestPort = GetLearnedPort(MooseAddress(src)); + + if(bestPort == NULL){ + // Tricky. Best idea: Forward to all ports and hope that we can resolve later :) + } else if(bestPort != incomingPort){ + return; + } + + // Now we can forward. + + for (std::vector< Ptr >::iterator iter = m_ports.begin (); + iter != m_ports.end (); iter++) + { + Ptr port = *iter; + if (port != incomingPort) + { + port->Send(packet->Copy (), src, dst, protocol); + } + } +} } diff --git a/code/src/devices/bridge/model/moose-bridge-net-device.h b/code/src/devices/bridge/model/moose-bridge-net-device.h index eebc55b..740974a 100644 --- a/code/src/devices/bridge/model/moose-bridge-net-device.h +++ b/code/src/devices/bridge/model/moose-bridge-net-device.h @@ -52,7 +52,7 @@ public: protected: virtual void ForwardUnicast (Ptr incomingPort, Ptr packet, uint16_t protocol, Mac48Address src, Mac48Address dst); - + virtual void ForwardBroadcast (Ptr incomingPort, Ptr packet, uint16_t protocol, Mac48Address src, Mac48Address dst) virtual Ptr CreateBridgePort(Ptr bridge, Ptr device, Ptr node);