Add ability to specify bridge address. Add learning static routes. Check the expirati...
authorRichard Whitehouse <github@richardwhiuk.com>
Sun, 20 Feb 2011 02:10:12 +0000 (02:10 +0000)
committerRichard Whitehouse <github@richardwhiuk.com>
Sun, 20 Feb 2011 02:10:12 +0000 (02:10 +0000)
code/src/devices/bridge/model/moose-bridge-net-device.cc
code/src/devices/bridge/model/moose-bridge-net-device.h

index ae81609d32cfa05ce0754d92df9cbcd61e0d3767..70ac1e50945b32d59f760784228403959e6c6e7b 100644 (file)
@@ -36,6 +36,11 @@ MooseBridgeNetDevice::GetTypeId (void)
   static TypeId tid = TypeId ("ns3::MooseBridgeNetDevice")
     .SetParent<BridgeNetDevice> ()
     .AddConstructor<MooseBridgeNetDevice> ()
+    .AddAttribute ("MooseAddress",
+                  "Bridge MOOSE Address",
+                  MooseAddressValue(),
+                  MakeMooseAddressAccessor (&MooseBridgeNetDevice::m_mooseAddress),
+                  MakeMooseAddressChecker ())
     .AddAttribute ("MooseExpirationTime",
                    "Time it takes for learned MOOSE state entry to expire.",
                    TimeValue (Seconds (30)),
@@ -135,7 +140,9 @@ MooseAddress MooseBridgeNetDevice::ToMoose(MooseAddress const& addr){
 
            NS_LOG_LOGIC("Using Allocated MOOSE Suffix: (" << moose.GetMoosePrefix().GetInt() << "," << moose.GetMooseSuffix().GetInt() << ")");
 
-            state.expirationTime = now + m_expirationTime;
+            if(now + m_expirationTime > state.expirationTime){
+               state.expirationTime = now + m_expirationTime;
+            }
         } else {
             // Delete old and alloc new
 
@@ -167,6 +174,18 @@ MooseAddress MooseBridgeNetDevice::ToMoose(MooseAddress const& addr){
 
 }
 
+void MooseBridgeNetDevice::AddRoutes(std::map<MoosePrefixAddress, Ptr<BridgePortNetDevice> > routes){
+
+       for(std::map<MoosePrefixAddress, Ptr<BridgePortNetDevice> >::iterator it = routes.begin(); it != routes.end(); it ++){
+               
+               PrefixState &state = m_prefixState[it->first];
+               state.associatedPort = it->second;
+               state.expirationTime = Simulator::GetMaximumSimulationTime();
+
+       }
+
+}
+
 void MooseBridgeNetDevice::Learn(MooseAddress const& addr, Ptr<BridgePortNetDevice> port){
   NS_LOG_FUNCTION_NOARGS ();
   
@@ -178,13 +197,17 @@ void MooseBridgeNetDevice::Learn(MooseAddress const& addr, Ptr<BridgePortNetDevi
      
      PrefixState &state = m_prefixState[addr.GetMoosePrefix()];
      state.associatedPort = port;
-     state.expirationTime = now + m_expirationTime;
+     if(now + m_expirationTime > state.expirationTime){
+            state.expirationTime = now + m_expirationTime;
+     }
 
   } else {
 
      PortState &state = m_portState[addr.GetMooseSuffix()];
      state.associatedPort = port;
-     state.expirationTime = now + m_expirationTime;
+     if(now + m_expirationTime > state.expirationTime){
+            state.expirationTime = now + m_expirationTime;
+     }
 
   }
  
index 91fd1d7e89a98c4cb2b84eb001e19fada19e85f5..eebc55b09a0dee34b15604605b8dd2c602dc6361 100644 (file)
@@ -44,26 +44,15 @@ public:
   MooseAddress ToMoose(MooseAddress const& addr);
   MooseAddress FromMoose(MooseAddress const& addr);
 
+  void AddRoutes(std::map<MoosePrefixAddress, Ptr<BridgePortNetDevice> > routes);
+
+  void SetMoosePrefixAddress(MoosePrefixAddress const& prefix);
+  MoosePrefixAddress GetMoosePrefixAddress();
 
 protected:
 
   virtual void ForwardUnicast (Ptr<BridgePortNetDevice> incomingPort, Ptr<const Packet> packet, uint16_t protocol, Mac48Address src, Mac48Address dst);
-
-// From NetDevice
-
-// Unconvinced we need these...
-
-//  virtual bool Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
-//  virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
-
-// From BridgeNetDevice
-
-/*
-
-  virtual void Forward (Ptr<BridgePortNetDevice> port, Ptr<const Packet> packet, uint16_t protocol, Address const &src, Address const &dst, PacketType packetType);
-  virtual void ForwardBroadcast (Ptr<BridgePortNetDevice> incomingPort, Ptr<const Packet> packet, uint16_t protocol, Mac48Address src, Mac48Address dst);
-  virtual void Learn (Address const &src, Ptr<BridgePortNetDevice> port);
-  virtual Ptr<BridgePortNetDevice> GetLearnedState (Mac48Address source); */
+       
 
   virtual Ptr<BridgePortNetDevice> CreateBridgePort(Ptr<BridgeNetDevice> bridge, Ptr<NetDevice> device, Ptr<Node> node);