Reverse Path Forwarding fix for Broadcast of Moose Frames
authorRichard Whitehouse <github@richardwhiuk.com>
Sun, 20 Feb 2011 02:26:15 +0000 (02:26 +0000)
committerRichard Whitehouse <github@richardwhiuk.com>
Sun, 20 Feb 2011 02:26:15 +0000 (02:26 +0000)
code/src/devices/bridge/model/moose-bridge-net-device.cc
code/src/devices/bridge/model/moose-bridge-net-device.h

index 70ac1e50945b32d59f760784228403959e6c6e7b..b765525ab9f5faf0096f3717c049721b2e23f2c7 100644 (file)
@@ -280,13 +280,34 @@ MooseBridgeNetDevice::ForwardUnicast (Ptr<BridgePortNetDevice> incomingPort, Ptr
 
 }
 
+void MooseBridgeNetDevice::ForwardBroadcast (Ptr<BridgePortNetDevice> incomingPort, Ptr<const Packet> 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> packet, const Address& dest, uint16_t protocolNumber);
-//bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
-void Learn (Address const &src, Ptr<BridgePortNetDevice> port);
-Ptr<BridgePortNetDevice> GetLearnedState (Mac48Address source);*/
+  // This is as simple as finding out the best port for sending and checking for equality
+
+  Ptr<BridgePortNetDevice> 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<BridgePortNetDevice> >::iterator iter = m_ports.begin ();
+         iter != m_ports.end (); iter++)
+    {
+      Ptr<BridgePortNetDevice> port = *iter;
+      if (port != incomingPort)
+        {
+          port->Send(packet->Copy (), src, dst, protocol);
+        }
+    }
+}
 
 
 }
index eebc55b09a0dee34b15604605b8dd2c602dc6361..740974a693fb64c913699f38cddc5678c3e26946 100644 (file)
@@ -52,7 +52,7 @@ public:
 protected:
 
   virtual void ForwardUnicast (Ptr<BridgePortNetDevice> incomingPort, Ptr<const Packet> packet, uint16_t protocol, Mac48Address src, Mac48Address dst);
-       
+  virtual void ForwardBroadcast (Ptr<BridgePortNetDevice> incomingPort, Ptr<const Packet> packet, uint16_t protocol, Mac48Address src, Mac48Address dst)
 
   virtual Ptr<BridgePortNetDevice> CreateBridgePort(Ptr<BridgeNetDevice> bridge, Ptr<NetDevice> device, Ptr<Node> node);