[Bug 653] NetDevice link change callback (SetLinkChangeCallback -> AddLinkChangeCallback).
--- a/CHANGES.html Mon Sep 07 18:27:40 2009 +0200
+++ b/CHANGES.html Tue Sep 08 06:29:26 2009 +0200
@@ -109,6 +109,13 @@
<li><b>WifiMode</b>
<p>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().</p>
</li>
+<li><b>NetDevice</b>
+<p>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:</p>
+<pre>
+- virtual void SetLinkChangeCallback (Callback<void> callback);
++ virtual void AddLinkChangeCallback (Callback<void> callback);</pre>
+Now each NetDevice subclasses have a TracedCallback<> object (list of callbacks) instead of Callback<void> ones.
+</li>
</ul>
<hr>
--- a/src/devices/bridge/bridge-net-device.cc Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/bridge/bridge-net-device.cc Tue Sep 08 06:29:26 2009 +0200
@@ -317,7 +317,7 @@
void
-BridgeNetDevice::SetLinkChangeCallback (Callback<void> callback)
+BridgeNetDevice::AddLinkChangeCallback (Callback<void> callback)
{}
--- a/src/devices/bridge/bridge-net-device.h Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/bridge/bridge-net-device.h Tue Sep 08 06:29:26 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<void> callback);
+ virtual void AddLinkChangeCallback (Callback<void> callback);
virtual bool IsBroadcast (void) const;
virtual Address GetBroadcast (void) const;
virtual bool IsMulticast (void) const;
--- a/src/devices/csma/csma-net-device.cc Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/csma/csma-net-device.cc Tue Sep 08 06:29:26 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<void> callback)
+CsmaNetDevice::AddLinkChangeCallback (Callback<void> callback)
{
NS_LOG_FUNCTION (&callback);
- m_linkChangeCallback = callback;
+ m_linkChangeCallbacks.ConnectWithoutContext (callback);
}
bool
--- a/src/devices/csma/csma-net-device.h Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/csma/csma-net-device.h Tue Sep 08 06:29:26 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<void> callback);
+ virtual void AddLinkChangeCallback (Callback<void> 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<void> m_linkChangeCallback;
+ TracedCallback<> m_linkChangeCallbacks;
static const uint16_t DEFAULT_FRAME_SIZE = 1518;
static const uint16_t ETHERNET_OVERHEAD = 18;
--- a/src/devices/emu/emu-net-device.cc Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/emu/emu-net-device.cc Tue Sep 08 06:29:26 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<void> callback)
+EmuNetDevice::AddLinkChangeCallback (Callback<void> callback)
{
- m_linkChangeCallback = callback;
+ m_linkChangeCallbacks.ConnectWithoutContext (callback);
}
bool
--- a/src/devices/emu/emu-net-device.h Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/emu/emu-net-device.h Tue Sep 08 06:29:26 2009 +0200
@@ -110,7 +110,7 @@
virtual bool IsLinkUp (void) const;
- virtual void SetLinkChangeCallback (Callback<void> callback);
+ virtual void AddLinkChangeCallback (Callback<void> 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<void> m_linkChangeCallback;
+ TracedCallback<> m_linkChangeCallbacks;
/**
* The unix/linux name of the underlying device (e.g., eth0)
--- a/src/devices/point-to-point/point-to-point-net-device.cc Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/point-to-point/point-to-point-net-device.cc Tue Sep 08 06:29:26 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<void> callback)
+PointToPointNetDevice::AddLinkChangeCallback (Callback<void> callback)
{
- m_linkChangeCallback = callback;
+ m_linkChangeCallbacks.ConnectWithoutContext (callback);
}
//
--- a/src/devices/point-to-point/point-to-point-net-device.h Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/point-to-point/point-to-point-net-device.h Tue Sep 08 06:29:26 2009 +0200
@@ -231,7 +231,7 @@
virtual bool IsLinkUp (void) const;
- virtual void SetLinkChangeCallback (Callback<void> callback);
+ virtual void AddLinkChangeCallback (Callback<void> 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<void> m_linkChangeCallback;
+ TracedCallback<> m_linkChangeCallbacks;
static const uint16_t DEFAULT_MTU = 1500;
static const uint16_t PPP_OVERHEAD = 2;
--- a/src/devices/tap-bridge/tap-bridge.cc Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/tap-bridge/tap-bridge.cc Tue Sep 08 06:29:26 2009 +0200
@@ -1026,7 +1026,7 @@
}
void
-TapBridge::SetLinkChangeCallback (Callback<void> callback)
+TapBridge::AddLinkChangeCallback (Callback<void> callback)
{
NS_LOG_FUNCTION_NOARGS ();
}
--- a/src/devices/tap-bridge/tap-bridge.h Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/tap-bridge/tap-bridge.h Tue Sep 08 06:29:26 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<void> callback);
+ virtual void AddLinkChangeCallback (Callback<void> callback);
virtual bool IsBroadcast (void) const;
virtual Address GetBroadcast (void) const;
virtual bool IsMulticast (void) const;
--- a/src/devices/virtual-net-device/virtual-net-device.cc Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/virtual-net-device/virtual-net-device.cc Tue Sep 08 06:29:26 2009 +0200
@@ -194,7 +194,7 @@
}
void
-VirtualNetDevice::SetLinkChangeCallback (Callback<void> callback)
+VirtualNetDevice::AddLinkChangeCallback (Callback<void> callback)
{
}
--- a/src/devices/virtual-net-device/virtual-net-device.h Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/virtual-net-device/virtual-net-device.h Tue Sep 08 06:29:26 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<void> callback);
+ virtual void AddLinkChangeCallback (Callback<void> callback);
virtual bool IsBroadcast (void) const;
virtual Address GetBroadcast (void) const;
virtual bool IsMulticast (void) const;
--- a/src/devices/wifi/wifi-net-device.cc Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/wifi/wifi-net-device.cc Tue Sep 08 06:29:26 2009 +0200
@@ -196,9 +196,9 @@
return m_phy != 0 && m_linkUp;
}
void
-WifiNetDevice::SetLinkChangeCallback (Callback<void> callback)
+WifiNetDevice::AddLinkChangeCallback (Callback<void> 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
--- a/src/devices/wifi/wifi-net-device.h Mon Sep 07 18:27:40 2009 +0200
+++ b/src/devices/wifi/wifi-net-device.h Tue Sep 08 06:29:26 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<void> callback);
+ virtual void AddLinkChangeCallback (Callback<void> 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<void> m_linkChange;
+ TracedCallback<> m_linkChanges;
mutable uint16_t m_mtu;
bool m_configComplete;
};
--- a/src/internet-stack/arp-l3-protocol.cc Mon Sep 07 18:27:40 2009 +0200
+++ b/src/internet-stack/arp-l3-protocol.cc Tue Sep 08 06:29:26 2009 +0200
@@ -116,7 +116,7 @@
Ptr<ArpCache> cache = CreateObject<ArpCache> ();
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;
--- a/src/internet-stack/icmpv6-l4-protocol.cc Mon Sep 07 18:27:40 2009 +0200
+++ b/src/internet-stack/icmpv6-l4-protocol.cc Tue Sep 08 06:29:26 2009 +0200
@@ -1076,12 +1076,9 @@
{
Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
Ptr<NdiscCache> cache = CreateObject<NdiscCache> ();
+
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;
}
--- a/src/internet-stack/loopback-net-device.cc Mon Sep 07 18:27:40 2009 +0200
+++ b/src/internet-stack/loopback-net-device.cc Tue Sep 08 06:29:26 2009 +0200
@@ -125,7 +125,7 @@
}
void
-LoopbackNetDevice::SetLinkChangeCallback (Callback<void> callback)
+LoopbackNetDevice::AddLinkChangeCallback (Callback<void> callback)
{}
bool
--- a/src/internet-stack/loopback-net-device.h Mon Sep 07 18:27:40 2009 +0200
+++ b/src/internet-stack/loopback-net-device.h Tue Sep 08 06:29:26 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<void> callback);
+ virtual void AddLinkChangeCallback (Callback<void> callback);
virtual bool IsBroadcast (void) const;
virtual Address GetBroadcast (void) const;
virtual bool IsMulticast (void) const;
--- a/src/node/net-device.h Mon Sep 07 18:27:40 2009 +0200
+++ b/src/node/net-device.h Tue Sep 08 06:29:26 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<void> callback) = 0;
+ virtual void AddLinkChangeCallback (Callback<void> callback) = 0;
/**
* \return true if this interface supports a broadcast address,
* false otherwise.
--- a/src/node/simple-net-device.cc Mon Sep 07 18:27:40 2009 +0200
+++ b/src/node/simple-net-device.cc Tue Sep 08 06:29:26 2009 +0200
@@ -121,7 +121,7 @@
return true;
}
void
-SimpleNetDevice::SetLinkChangeCallback (Callback<void> callback)
+SimpleNetDevice::AddLinkChangeCallback (Callback<void> callback)
{}
bool
SimpleNetDevice::IsBroadcast (void) const
--- a/src/node/simple-net-device.h Mon Sep 07 18:27:40 2009 +0200
+++ b/src/node/simple-net-device.h Tue Sep 08 06:29:26 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<void> callback);
+ virtual void AddLinkChangeCallback (Callback<void> callback);
virtual bool IsBroadcast (void) const;
virtual Address GetBroadcast (void) const;
virtual bool IsMulticast (void) const;