From: Richard Whitehouse Date: Fri, 15 Apr 2011 21:30:16 +0000 (+0100) Subject: Limit Ethernet Bridge state table size (default 8000 - configurable) X-Git-Url: https://git.richardwhiuk.com/?a=commitdiff_plain;h=877923eb87c03194d365fbd1e6556319b4b81c2f;p=ns-moose.git Limit Ethernet Bridge state table size (default 8000 - configurable) --- diff --git a/src/devices/bridge/model/bridge-net-device.cc b/src/devices/bridge/model/bridge-net-device.cc index 100fa1b..83a7122 100644 --- a/src/devices/bridge/model/bridge-net-device.cc +++ b/src/devices/bridge/model/bridge-net-device.cc @@ -42,7 +42,12 @@ BridgeNetDevice::GetTypeId (void) UintegerValue (1500), MakeUintegerAccessor (&BridgeNetDevice::SetMtu, &BridgeNetDevice::GetMtu), - MakeUintegerChecker ()) + MakeUintegerChecker ()) + .AddAttribute ("StateSize", "The size of the State Table", + UintegerValue (8000), + MakeUintegerAccessor (&BridgeNetDevice::SetStateSize, + &BridgeNetDevice::GetStateSize), + MakeUintegerChecker ()) .AddAttribute ("EnableLearning", "Enable the learning mode of the Learning Bridge", BooleanValue (true), @@ -50,7 +55,7 @@ BridgeNetDevice::GetTypeId (void) MakeBooleanChecker ()) .AddAttribute ("ExpirationTime", "Time it takes for learned MAC state entry to expire.", - TimeValue (Seconds (30)), + TimeValue (Seconds (300)), MakeTimeAccessor (&BridgeNetDevice::m_expirationTime), MakeTimeChecker ()) ; @@ -177,9 +182,12 @@ void BridgeNetDevice::Learn (Address const &src, Ptr port) if (m_enableLearning) { - LearnedState &state = m_learnState[src48]; - state.associatedPort = port; - state.expirationTime = Simulator::Now () + m_expirationTime; + std::map::iterator it = m_learnState.find(src48); + if(it != m_learnState.end() || m_learnState.size() < m_maxStateSize){ + LearnedState &state = m_learnState[src48]; + state.associatedPort = port; + state.expirationTime = Simulator::Now () + m_expirationTime; + } } } @@ -301,6 +309,27 @@ BridgeNetDevice::GetMtu (void) const return m_mtu; } +bool +BridgeNetDevice::SetMaxStateSize (const unsigned long maxStateSize ) +{ + NS_LOG_FUNCTION_NOARGS (); + m_maxStateSize = maxStateSize ; + return true; +} + +unsigned long +BridgeNetDevice::GetMaxStateSize (void) const +{ + NS_LOG_FUNCTION_NOARGS (); + return m_maxStateSize; +} + +unsigned long +BridgeNetDevice::GetStateSize (void) const +{ + NS_LOG_FUNCTION_NOARGS (); + return m_learnState.size(); +} bool BridgeNetDevice::IsLinkUp (void) const diff --git a/src/devices/bridge/model/bridge-net-device.h b/src/devices/bridge/model/bridge-net-device.h index 1b63ff9..2709919 100644 --- a/src/devices/bridge/model/bridge-net-device.h +++ b/src/devices/bridge/model/bridge-net-device.h @@ -100,6 +100,11 @@ public: virtual Address GetAddress (void) const; virtual bool SetMtu (const uint16_t mtu); virtual uint16_t GetMtu (void) const; + + virtual bool SetMaxStateSize (const unsigned long maxStateSize ); + virtual unsigned long GetMaxStateSize (void) const; + virtual unsigned long GetStateSize (void) const; + virtual bool IsLinkUp (void) const; virtual void AddLinkChangeCallback (Callback callback); virtual bool IsBroadcast (void) const; @@ -150,6 +155,7 @@ private: uint16_t mPortNumber; uint32_t m_ifIndex; uint16_t m_mtu; + unsigned long m_maxStateSize; bool m_enableLearning; };