diff -r 5ea754089561 CHANGES.html --- a/CHANGES.html Sun Aug 23 20:54:31 2009 -0700 +++ b/CHANGES.html Mon Aug 24 10:04:32 2009 +0200 @@ -86,6 +86,13 @@
  • WifiMode

    WifiMode now has a WifiPhyStandard attribute which identifies the standard the WifiMode belongs to. To properly set this attribute when creating a new WifiMode, it is now required to explicitly pass a WifiPhyStandard parameter to all WifiModeFactory::CreateXXXX() methods. The WifiPhyStandard value of an existing WifiMode can be retrieved using the new method WifiMode::GetStandard().

  • +
  • NetDevice +

    In order to have multiple link change callback in NetDevice (i.e. to flush ARP and IPv6 neighbor discovery caches), the following member method has been renamed:

    +
    +- virtual void SetLinkChangeCallback (Callback<void> callback);
    ++ virtual void AddLinkChangeCallback (Callback<void> callback);
    +Now each NetDevice subclasses have a TracedCallback<> object (list of callbacks) instead of Callback<void> ones. +

  • diff -r 5ea754089561 src/devices/bridge/bridge-net-device.cc --- a/src/devices/bridge/bridge-net-device.cc Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/bridge/bridge-net-device.cc Mon Aug 24 10:04:32 2009 +0200 @@ -317,7 +317,7 @@ void -BridgeNetDevice::SetLinkChangeCallback (Callback callback) +BridgeNetDevice::AddLinkChangeCallback (Callback callback) {} diff -r 5ea754089561 src/devices/bridge/bridge-net-device.h --- a/src/devices/bridge/bridge-net-device.h Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/bridge/bridge-net-device.h Mon Aug 24 10:04:32 2009 +0200 @@ -96,7 +96,7 @@ virtual bool SetMtu (const uint16_t mtu); virtual uint16_t GetMtu (void) const; virtual bool IsLinkUp (void) const; - virtual void SetLinkChangeCallback (Callback callback); + virtual void AddLinkChangeCallback (Callback callback); virtual bool IsBroadcast (void) const; virtual Address GetBroadcast (void) const; virtual bool IsMulticast (void) const; diff -r 5ea754089561 src/devices/csma/csma-net-device.cc --- a/src/devices/csma/csma-net-device.cc Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/csma/csma-net-device.cc Mon Aug 24 10:04:32 2009 +0200 @@ -839,12 +839,8 @@ CsmaNetDevice::NotifyLinkUp (void) { NS_LOG_FUNCTION_NOARGS (); - m_linkUp = true; - if (m_linkChangeCallback.IsNull () == false) - { - m_linkChangeCallback (); - } + m_linkChangeCallbacks (); } void @@ -890,10 +886,10 @@ } void -CsmaNetDevice::SetLinkChangeCallback (Callback callback) +CsmaNetDevice::AddLinkChangeCallback (Callback callback) { NS_LOG_FUNCTION (&callback); - m_linkChangeCallback = callback; + m_linkChangeCallbacks.ConnectWithoutContext (callback); } bool diff -r 5ea754089561 src/devices/csma/csma-net-device.h --- a/src/devices/csma/csma-net-device.h Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/csma/csma-net-device.h Mon Aug 24 10:04:32 2009 +0200 @@ -306,7 +306,7 @@ virtual void SetAddress (Address address); virtual Address GetAddress (void) const; virtual bool IsLinkUp (void) const; - virtual void SetLinkChangeCallback (Callback callback); + virtual void AddLinkChangeCallback (Callback callback); virtual bool IsBroadcast (void) const; virtual Address GetBroadcast (void) const; virtual bool IsMulticast (void) const; @@ -806,9 +806,9 @@ bool m_linkUp; /** - * Callback to fire if the link changes state (up or down). + * List of callbacks to fire if the link changes state (up or down). */ - Callback m_linkChangeCallback; + TracedCallback<> m_linkChangeCallbacks; static const uint16_t DEFAULT_FRAME_SIZE = 1518; static const uint16_t ETHERNET_OVERHEAD = 18; diff -r 5ea754089561 src/devices/emu/emu-net-device.cc --- a/src/devices/emu/emu-net-device.cc Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/emu/emu-net-device.cc Mon Aug 24 10:04:32 2009 +0200 @@ -869,10 +869,7 @@ EmuNetDevice::NotifyLinkUp (void) { m_linkUp = true; - if (!m_linkChangeCallback.IsNull ()) - { - m_linkChangeCallback (); - } + m_linkChangeCallbacks (); } void @@ -943,9 +940,9 @@ } void -EmuNetDevice::SetLinkChangeCallback (Callback callback) +EmuNetDevice::AddLinkChangeCallback (Callback callback) { - m_linkChangeCallback = callback; + m_linkChangeCallbacks.ConnectWithoutContext (callback); } bool diff -r 5ea754089561 src/devices/emu/emu-net-device.h --- a/src/devices/emu/emu-net-device.h Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/emu/emu-net-device.h Mon Aug 24 10:04:32 2009 +0200 @@ -110,7 +110,7 @@ virtual bool IsLinkUp (void) const; - virtual void SetLinkChangeCallback (Callback callback); + virtual void AddLinkChangeCallback (Callback callback); virtual bool IsBroadcast (void) const; virtual Address GetBroadcast (void) const; @@ -459,9 +459,9 @@ bool m_isMulticast; /** - * Callback to fire if the link changes state (up or down). + * Callbacks to fire if the link changes state (up or down). */ - Callback m_linkChangeCallback; + TracedCallback<> m_linkChangeCallbacks; /** * The unix/linux name of the underlying device (e.g., eth0) diff -r 5ea754089561 src/devices/point-to-point/point-to-point-net-device.cc --- a/src/devices/point-to-point/point-to-point-net-device.cc Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/point-to-point/point-to-point-net-device.cc Mon Aug 24 10:04:32 2009 +0200 @@ -366,10 +366,7 @@ PointToPointNetDevice::NotifyLinkUp (void) { m_linkUp = true; - if (!m_linkChangeCallback.IsNull ()) - { - m_linkChangeCallback (); - } + m_linkChangeCallbacks (); } void @@ -415,9 +412,9 @@ } void -PointToPointNetDevice::SetLinkChangeCallback (Callback callback) +PointToPointNetDevice::AddLinkChangeCallback (Callback callback) { - m_linkChangeCallback = callback; + m_linkChangeCallbacks.ConnectWithoutContext (callback); } // diff -r 5ea754089561 src/devices/point-to-point/point-to-point-net-device.h --- a/src/devices/point-to-point/point-to-point-net-device.h Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/point-to-point/point-to-point-net-device.h Mon Aug 24 10:04:32 2009 +0200 @@ -231,7 +231,7 @@ virtual bool IsLinkUp (void) const; - virtual void SetLinkChangeCallback (Callback callback); + virtual void AddLinkChangeCallback (Callback callback); virtual bool IsBroadcast (void) const; virtual Address GetBroadcast (void) const; @@ -520,7 +520,7 @@ NetDevice::PromiscReceiveCallback m_promiscCallback; uint32_t m_ifIndex; bool m_linkUp; - Callback m_linkChangeCallback; + TracedCallback<> m_linkChangeCallbacks; static const uint16_t DEFAULT_MTU = 1500; static const uint16_t PPP_OVERHEAD = 2; diff -r 5ea754089561 src/devices/tap-bridge/tap-bridge.cc --- a/src/devices/tap-bridge/tap-bridge.cc Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/tap-bridge/tap-bridge.cc Mon Aug 24 10:04:32 2009 +0200 @@ -1026,7 +1026,7 @@ } void -TapBridge::SetLinkChangeCallback (Callback callback) +TapBridge::AddLinkChangeCallback (Callback callback) { NS_LOG_FUNCTION_NOARGS (); } diff -r 5ea754089561 src/devices/tap-bridge/tap-bridge.h --- a/src/devices/tap-bridge/tap-bridge.h Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/tap-bridge/tap-bridge.h Mon Aug 24 10:04:32 2009 +0200 @@ -181,7 +181,7 @@ virtual bool SetMtu (const uint16_t mtu); virtual uint16_t GetMtu (void) const; virtual bool IsLinkUp (void) const; - virtual void SetLinkChangeCallback (Callback callback); + virtual void AddLinkChangeCallback (Callback callback); virtual bool IsBroadcast (void) const; virtual Address GetBroadcast (void) const; virtual bool IsMulticast (void) const; diff -r 5ea754089561 src/devices/virtual-net-device/virtual-net-device.cc --- a/src/devices/virtual-net-device/virtual-net-device.cc Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/virtual-net-device/virtual-net-device.cc Mon Aug 24 10:04:32 2009 +0200 @@ -194,7 +194,7 @@ } void -VirtualNetDevice::SetLinkChangeCallback (Callback callback) +VirtualNetDevice::AddLinkChangeCallback (Callback callback) { } diff -r 5ea754089561 src/devices/virtual-net-device/virtual-net-device.h --- a/src/devices/virtual-net-device/virtual-net-device.h Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/virtual-net-device/virtual-net-device.h Mon Aug 24 10:04:32 2009 +0200 @@ -122,7 +122,7 @@ virtual Address GetAddress (void) const; virtual uint16_t GetMtu (void) const; virtual bool IsLinkUp (void) const; - virtual void SetLinkChangeCallback (Callback callback); + virtual void AddLinkChangeCallback (Callback callback); virtual bool IsBroadcast (void) const; virtual Address GetBroadcast (void) const; virtual bool IsMulticast (void) const; diff -r 5ea754089561 src/devices/wifi/wifi-net-device.cc --- a/src/devices/wifi/wifi-net-device.cc Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/wifi/wifi-net-device.cc Mon Aug 24 10:04:32 2009 +0200 @@ -196,9 +196,9 @@ return m_phy != 0 && m_linkUp; } void -WifiNetDevice::SetLinkChangeCallback (Callback callback) +WifiNetDevice::AddLinkChangeCallback (Callback callback) { - m_linkChange = callback; + m_linkChanges.ConnectWithoutContext (callback); } bool WifiNetDevice::IsBroadcast (void) const @@ -312,19 +312,13 @@ WifiNetDevice::LinkUp (void) { m_linkUp = true; - if (!m_linkChange.IsNull ()) - { - m_linkChange (); - } + m_linkChanges (); } void WifiNetDevice::LinkDown (void) { m_linkUp = false; - if (!m_linkChange.IsNull ()) - { - m_linkChange (); - } + m_linkChanges (); } bool diff -r 5ea754089561 src/devices/wifi/wifi-net-device.h --- a/src/devices/wifi/wifi-net-device.h Sun Aug 23 20:54:31 2009 -0700 +++ b/src/devices/wifi/wifi-net-device.h Mon Aug 24 10:04:32 2009 +0200 @@ -83,7 +83,7 @@ virtual bool SetMtu (const uint16_t mtu); virtual uint16_t GetMtu (void) const; virtual bool IsLinkUp (void) const; - virtual void SetLinkChangeCallback (Callback callback); + virtual void AddLinkChangeCallback (Callback callback); virtual bool IsBroadcast (void) const; virtual Address GetBroadcast (void) const; virtual bool IsMulticast (void) const; @@ -123,7 +123,7 @@ uint32_t m_ifIndex; bool m_linkUp; - Callback m_linkChange; + TracedCallback<> m_linkChanges; mutable uint16_t m_mtu; bool m_configComplete; }; diff -r 5ea754089561 src/internet-stack/arp-l3-protocol.cc --- a/src/internet-stack/arp-l3-protocol.cc Sun Aug 23 20:54:31 2009 -0700 +++ b/src/internet-stack/arp-l3-protocol.cc Mon Aug 24 10:04:32 2009 +0200 @@ -116,7 +116,7 @@ Ptr cache = CreateObject (); cache->SetDevice (device, interface); NS_ASSERT (device->IsBroadcast ()); - device->SetLinkChangeCallback (MakeCallback (&ArpCache::Flush, cache)); + device->AddLinkChangeCallback (MakeCallback (&ArpCache::Flush, cache)); cache->SetArpRequestCallback (MakeCallback (&ArpL3Protocol::SendArpRequest, this)); m_cacheList.push_back (cache); return cache; diff -r 5ea754089561 src/internet-stack/icmpv6-l4-protocol.cc --- a/src/internet-stack/icmpv6-l4-protocol.cc Sun Aug 23 20:54:31 2009 -0700 +++ b/src/internet-stack/icmpv6-l4-protocol.cc Mon Aug 24 10:04:32 2009 +0200 @@ -1076,12 +1076,9 @@ { Ptr ipv6 = m_node->GetObject (); Ptr cache = CreateObject (); + cache->SetDevice (device, interface); - - /* XXX : make a list of callback in net-device.cc - * else we override IPv4 flushing ARP table... - */ -/* device->SetLinkChangeCallback (MakeCallback (&NdiscCache::Flush, cache)); */ + device->AddLinkChangeCallback (MakeCallback (&NdiscCache::Flush, cache)); m_cacheList.push_back (cache); return cache; } diff -r 5ea754089561 src/internet-stack/loopback-net-device.cc --- a/src/internet-stack/loopback-net-device.cc Sun Aug 23 20:54:31 2009 -0700 +++ b/src/internet-stack/loopback-net-device.cc Mon Aug 24 10:04:32 2009 +0200 @@ -125,7 +125,7 @@ } void -LoopbackNetDevice::SetLinkChangeCallback (Callback callback) +LoopbackNetDevice::AddLinkChangeCallback (Callback callback) {} bool diff -r 5ea754089561 src/internet-stack/loopback-net-device.h --- a/src/internet-stack/loopback-net-device.h Sun Aug 23 20:54:31 2009 -0700 +++ b/src/internet-stack/loopback-net-device.h Mon Aug 24 10:04:32 2009 +0200 @@ -50,7 +50,7 @@ virtual bool SetMtu (const uint16_t mtu); virtual uint16_t GetMtu (void) const; virtual bool IsLinkUp (void) const; - virtual void SetLinkChangeCallback (Callback callback); + virtual void AddLinkChangeCallback (Callback callback); virtual bool IsBroadcast (void) const; virtual Address GetBroadcast (void) const; virtual bool IsMulticast (void) const; diff -r 5ea754089561 src/node/net-device.h --- a/src/node/net-device.h Sun Aug 23 20:54:31 2009 -0700 +++ b/src/node/net-device.h Mon Aug 24 10:04:32 2009 +0200 @@ -128,12 +128,12 @@ /** * \param callback the callback to invoke * - * Register a callback invoked whenever the link + * Add a callback invoked whenever the link * status changes to UP. This callback is typically used - * by the IP/ARP layer to flush the ARP cache - * whenever the link goes up. + * by the IP/ARP layer to flush the ARP cache and by IPv6 stack + * to flush NDISC cache whenever the link goes up. */ - virtual void SetLinkChangeCallback (Callback callback) = 0; + virtual void AddLinkChangeCallback (Callback callback) = 0; /** * \return true if this interface supports a broadcast address, * false otherwise. diff -r 5ea754089561 src/node/simple-net-device.cc --- a/src/node/simple-net-device.cc Sun Aug 23 20:54:31 2009 -0700 +++ b/src/node/simple-net-device.cc Mon Aug 24 10:04:32 2009 +0200 @@ -121,7 +121,7 @@ return true; } void -SimpleNetDevice::SetLinkChangeCallback (Callback callback) +SimpleNetDevice::AddLinkChangeCallback (Callback callback) {} bool SimpleNetDevice::IsBroadcast (void) const diff -r 5ea754089561 src/node/simple-net-device.h --- a/src/node/simple-net-device.h Sun Aug 23 20:54:31 2009 -0700 +++ b/src/node/simple-net-device.h Mon Aug 24 10:04:32 2009 +0200 @@ -53,7 +53,7 @@ virtual bool SetMtu (const uint16_t mtu); virtual uint16_t GetMtu (void) const; virtual bool IsLinkUp (void) const; - virtual void SetLinkChangeCallback (Callback callback); + virtual void AddLinkChangeCallback (Callback callback); virtual bool IsBroadcast (void) const; virtual Address GetBroadcast (void) const; virtual bool IsMulticast (void) const;