[Bug 653] NetDevice link change callback (SetLinkChangeCallback -> AddLinkChangeCallback).
1.1 --- a/CHANGES.html Mon Sep 07 18:27:40 2009 +0200
1.2 +++ b/CHANGES.html Tue Sep 08 06:29:26 2009 +0200
1.3 @@ -109,6 +109,13 @@
1.4 <li><b>WifiMode</b>
1.5 <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>
1.6 </li>
1.7 +<li><b>NetDevice</b>
1.8 +<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>
1.9 +<pre>
1.10 +- virtual void SetLinkChangeCallback (Callback<void> callback);
1.11 ++ virtual void AddLinkChangeCallback (Callback<void> callback);</pre>
1.12 +Now each NetDevice subclasses have a TracedCallback<> object (list of callbacks) instead of Callback<void> ones.
1.13 +</li>
1.14 </ul>
1.15
1.16 <hr>
2.1 --- a/src/devices/bridge/bridge-net-device.cc Mon Sep 07 18:27:40 2009 +0200
2.2 +++ b/src/devices/bridge/bridge-net-device.cc Tue Sep 08 06:29:26 2009 +0200
2.3 @@ -317,7 +317,7 @@
2.4
2.5
2.6 void
2.7 -BridgeNetDevice::SetLinkChangeCallback (Callback<void> callback)
2.8 +BridgeNetDevice::AddLinkChangeCallback (Callback<void> callback)
2.9 {}
2.10
2.11
3.1 --- a/src/devices/bridge/bridge-net-device.h Mon Sep 07 18:27:40 2009 +0200
3.2 +++ b/src/devices/bridge/bridge-net-device.h Tue Sep 08 06:29:26 2009 +0200
3.3 @@ -96,7 +96,7 @@
3.4 virtual bool SetMtu (const uint16_t mtu);
3.5 virtual uint16_t GetMtu (void) const;
3.6 virtual bool IsLinkUp (void) const;
3.7 - virtual void SetLinkChangeCallback (Callback<void> callback);
3.8 + virtual void AddLinkChangeCallback (Callback<void> callback);
3.9 virtual bool IsBroadcast (void) const;
3.10 virtual Address GetBroadcast (void) const;
3.11 virtual bool IsMulticast (void) const;
4.1 --- a/src/devices/csma/csma-net-device.cc Mon Sep 07 18:27:40 2009 +0200
4.2 +++ b/src/devices/csma/csma-net-device.cc Tue Sep 08 06:29:26 2009 +0200
4.3 @@ -839,12 +839,8 @@
4.4 CsmaNetDevice::NotifyLinkUp (void)
4.5 {
4.6 NS_LOG_FUNCTION_NOARGS ();
4.7 -
4.8 m_linkUp = true;
4.9 - if (m_linkChangeCallback.IsNull () == false)
4.10 - {
4.11 - m_linkChangeCallback ();
4.12 - }
4.13 + m_linkChangeCallbacks ();
4.14 }
4.15
4.16 void
4.17 @@ -890,10 +886,10 @@
4.18 }
4.19
4.20 void
4.21 -CsmaNetDevice::SetLinkChangeCallback (Callback<void> callback)
4.22 +CsmaNetDevice::AddLinkChangeCallback (Callback<void> callback)
4.23 {
4.24 NS_LOG_FUNCTION (&callback);
4.25 - m_linkChangeCallback = callback;
4.26 + m_linkChangeCallbacks.ConnectWithoutContext (callback);
4.27 }
4.28
4.29 bool
5.1 --- a/src/devices/csma/csma-net-device.h Mon Sep 07 18:27:40 2009 +0200
5.2 +++ b/src/devices/csma/csma-net-device.h Tue Sep 08 06:29:26 2009 +0200
5.3 @@ -306,7 +306,7 @@
5.4 virtual void SetAddress (Address address);
5.5 virtual Address GetAddress (void) const;
5.6 virtual bool IsLinkUp (void) const;
5.7 - virtual void SetLinkChangeCallback (Callback<void> callback);
5.8 + virtual void AddLinkChangeCallback (Callback<void> callback);
5.9 virtual bool IsBroadcast (void) const;
5.10 virtual Address GetBroadcast (void) const;
5.11 virtual bool IsMulticast (void) const;
5.12 @@ -806,9 +806,9 @@
5.13 bool m_linkUp;
5.14
5.15 /**
5.16 - * Callback to fire if the link changes state (up or down).
5.17 + * List of callbacks to fire if the link changes state (up or down).
5.18 */
5.19 - Callback<void> m_linkChangeCallback;
5.20 + TracedCallback<> m_linkChangeCallbacks;
5.21
5.22 static const uint16_t DEFAULT_FRAME_SIZE = 1518;
5.23 static const uint16_t ETHERNET_OVERHEAD = 18;
6.1 --- a/src/devices/emu/emu-net-device.cc Mon Sep 07 18:27:40 2009 +0200
6.2 +++ b/src/devices/emu/emu-net-device.cc Tue Sep 08 06:29:26 2009 +0200
6.3 @@ -869,10 +869,7 @@
6.4 EmuNetDevice::NotifyLinkUp (void)
6.5 {
6.6 m_linkUp = true;
6.7 - if (!m_linkChangeCallback.IsNull ())
6.8 - {
6.9 - m_linkChangeCallback ();
6.10 - }
6.11 + m_linkChangeCallbacks ();
6.12 }
6.13
6.14 void
6.15 @@ -943,9 +940,9 @@
6.16 }
6.17
6.18 void
6.19 -EmuNetDevice::SetLinkChangeCallback (Callback<void> callback)
6.20 +EmuNetDevice::AddLinkChangeCallback (Callback<void> callback)
6.21 {
6.22 - m_linkChangeCallback = callback;
6.23 + m_linkChangeCallbacks.ConnectWithoutContext (callback);
6.24 }
6.25
6.26 bool
7.1 --- a/src/devices/emu/emu-net-device.h Mon Sep 07 18:27:40 2009 +0200
7.2 +++ b/src/devices/emu/emu-net-device.h Tue Sep 08 06:29:26 2009 +0200
7.3 @@ -110,7 +110,7 @@
7.4
7.5 virtual bool IsLinkUp (void) const;
7.6
7.7 - virtual void SetLinkChangeCallback (Callback<void> callback);
7.8 + virtual void AddLinkChangeCallback (Callback<void> callback);
7.9
7.10 virtual bool IsBroadcast (void) const;
7.11 virtual Address GetBroadcast (void) const;
7.12 @@ -459,9 +459,9 @@
7.13 bool m_isMulticast;
7.14
7.15 /**
7.16 - * Callback to fire if the link changes state (up or down).
7.17 + * Callbacks to fire if the link changes state (up or down).
7.18 */
7.19 - Callback<void> m_linkChangeCallback;
7.20 + TracedCallback<> m_linkChangeCallbacks;
7.21
7.22 /**
7.23 * The unix/linux name of the underlying device (e.g., eth0)
8.1 --- a/src/devices/point-to-point/point-to-point-net-device.cc Mon Sep 07 18:27:40 2009 +0200
8.2 +++ b/src/devices/point-to-point/point-to-point-net-device.cc Tue Sep 08 06:29:26 2009 +0200
8.3 @@ -366,10 +366,7 @@
8.4 PointToPointNetDevice::NotifyLinkUp (void)
8.5 {
8.6 m_linkUp = true;
8.7 - if (!m_linkChangeCallback.IsNull ())
8.8 - {
8.9 - m_linkChangeCallback ();
8.10 - }
8.11 + m_linkChangeCallbacks ();
8.12 }
8.13
8.14 void
8.15 @@ -415,9 +412,9 @@
8.16 }
8.17
8.18 void
8.19 -PointToPointNetDevice::SetLinkChangeCallback (Callback<void> callback)
8.20 +PointToPointNetDevice::AddLinkChangeCallback (Callback<void> callback)
8.21 {
8.22 - m_linkChangeCallback = callback;
8.23 + m_linkChangeCallbacks.ConnectWithoutContext (callback);
8.24 }
8.25
8.26 //
9.1 --- a/src/devices/point-to-point/point-to-point-net-device.h Mon Sep 07 18:27:40 2009 +0200
9.2 +++ b/src/devices/point-to-point/point-to-point-net-device.h Tue Sep 08 06:29:26 2009 +0200
9.3 @@ -231,7 +231,7 @@
9.4
9.5 virtual bool IsLinkUp (void) const;
9.6
9.7 - virtual void SetLinkChangeCallback (Callback<void> callback);
9.8 + virtual void AddLinkChangeCallback (Callback<void> callback);
9.9
9.10 virtual bool IsBroadcast (void) const;
9.11 virtual Address GetBroadcast (void) const;
9.12 @@ -520,7 +520,7 @@
9.13 NetDevice::PromiscReceiveCallback m_promiscCallback;
9.14 uint32_t m_ifIndex;
9.15 bool m_linkUp;
9.16 - Callback<void> m_linkChangeCallback;
9.17 + TracedCallback<> m_linkChangeCallbacks;
9.18
9.19 static const uint16_t DEFAULT_MTU = 1500;
9.20 static const uint16_t PPP_OVERHEAD = 2;
10.1 --- a/src/devices/tap-bridge/tap-bridge.cc Mon Sep 07 18:27:40 2009 +0200
10.2 +++ b/src/devices/tap-bridge/tap-bridge.cc Tue Sep 08 06:29:26 2009 +0200
10.3 @@ -1026,7 +1026,7 @@
10.4 }
10.5
10.6 void
10.7 -TapBridge::SetLinkChangeCallback (Callback<void> callback)
10.8 +TapBridge::AddLinkChangeCallback (Callback<void> callback)
10.9 {
10.10 NS_LOG_FUNCTION_NOARGS ();
10.11 }
11.1 --- a/src/devices/tap-bridge/tap-bridge.h Mon Sep 07 18:27:40 2009 +0200
11.2 +++ b/src/devices/tap-bridge/tap-bridge.h Tue Sep 08 06:29:26 2009 +0200
11.3 @@ -181,7 +181,7 @@
11.4 virtual bool SetMtu (const uint16_t mtu);
11.5 virtual uint16_t GetMtu (void) const;
11.6 virtual bool IsLinkUp (void) const;
11.7 - virtual void SetLinkChangeCallback (Callback<void> callback);
11.8 + virtual void AddLinkChangeCallback (Callback<void> callback);
11.9 virtual bool IsBroadcast (void) const;
11.10 virtual Address GetBroadcast (void) const;
11.11 virtual bool IsMulticast (void) const;
12.1 --- a/src/devices/virtual-net-device/virtual-net-device.cc Mon Sep 07 18:27:40 2009 +0200
12.2 +++ b/src/devices/virtual-net-device/virtual-net-device.cc Tue Sep 08 06:29:26 2009 +0200
12.3 @@ -194,7 +194,7 @@
12.4 }
12.5
12.6 void
12.7 -VirtualNetDevice::SetLinkChangeCallback (Callback<void> callback)
12.8 +VirtualNetDevice::AddLinkChangeCallback (Callback<void> callback)
12.9 {
12.10 }
12.11
13.1 --- a/src/devices/virtual-net-device/virtual-net-device.h Mon Sep 07 18:27:40 2009 +0200
13.2 +++ b/src/devices/virtual-net-device/virtual-net-device.h Tue Sep 08 06:29:26 2009 +0200
13.3 @@ -122,7 +122,7 @@
13.4 virtual Address GetAddress (void) const;
13.5 virtual uint16_t GetMtu (void) const;
13.6 virtual bool IsLinkUp (void) const;
13.7 - virtual void SetLinkChangeCallback (Callback<void> callback);
13.8 + virtual void AddLinkChangeCallback (Callback<void> callback);
13.9 virtual bool IsBroadcast (void) const;
13.10 virtual Address GetBroadcast (void) const;
13.11 virtual bool IsMulticast (void) const;
14.1 --- a/src/devices/wifi/wifi-net-device.cc Mon Sep 07 18:27:40 2009 +0200
14.2 +++ b/src/devices/wifi/wifi-net-device.cc Tue Sep 08 06:29:26 2009 +0200
14.3 @@ -196,9 +196,9 @@
14.4 return m_phy != 0 && m_linkUp;
14.5 }
14.6 void
14.7 -WifiNetDevice::SetLinkChangeCallback (Callback<void> callback)
14.8 +WifiNetDevice::AddLinkChangeCallback (Callback<void> callback)
14.9 {
14.10 - m_linkChange = callback;
14.11 + m_linkChanges.ConnectWithoutContext (callback);
14.12 }
14.13 bool
14.14 WifiNetDevice::IsBroadcast (void) const
14.15 @@ -312,19 +312,13 @@
14.16 WifiNetDevice::LinkUp (void)
14.17 {
14.18 m_linkUp = true;
14.19 - if (!m_linkChange.IsNull ())
14.20 - {
14.21 - m_linkChange ();
14.22 - }
14.23 + m_linkChanges ();
14.24 }
14.25 void
14.26 WifiNetDevice::LinkDown (void)
14.27 {
14.28 m_linkUp = false;
14.29 - if (!m_linkChange.IsNull ())
14.30 - {
14.31 - m_linkChange ();
14.32 - }
14.33 + m_linkChanges ();
14.34 }
14.35
14.36 bool
15.1 --- a/src/devices/wifi/wifi-net-device.h Mon Sep 07 18:27:40 2009 +0200
15.2 +++ b/src/devices/wifi/wifi-net-device.h Tue Sep 08 06:29:26 2009 +0200
15.3 @@ -83,7 +83,7 @@
15.4 virtual bool SetMtu (const uint16_t mtu);
15.5 virtual uint16_t GetMtu (void) const;
15.6 virtual bool IsLinkUp (void) const;
15.7 - virtual void SetLinkChangeCallback (Callback<void> callback);
15.8 + virtual void AddLinkChangeCallback (Callback<void> callback);
15.9 virtual bool IsBroadcast (void) const;
15.10 virtual Address GetBroadcast (void) const;
15.11 virtual bool IsMulticast (void) const;
15.12 @@ -123,7 +123,7 @@
15.13
15.14 uint32_t m_ifIndex;
15.15 bool m_linkUp;
15.16 - Callback<void> m_linkChange;
15.17 + TracedCallback<> m_linkChanges;
15.18 mutable uint16_t m_mtu;
15.19 bool m_configComplete;
15.20 };
16.1 --- a/src/internet-stack/arp-l3-protocol.cc Mon Sep 07 18:27:40 2009 +0200
16.2 +++ b/src/internet-stack/arp-l3-protocol.cc Tue Sep 08 06:29:26 2009 +0200
16.3 @@ -116,7 +116,7 @@
16.4 Ptr<ArpCache> cache = CreateObject<ArpCache> ();
16.5 cache->SetDevice (device, interface);
16.6 NS_ASSERT (device->IsBroadcast ());
16.7 - device->SetLinkChangeCallback (MakeCallback (&ArpCache::Flush, cache));
16.8 + device->AddLinkChangeCallback (MakeCallback (&ArpCache::Flush, cache));
16.9 cache->SetArpRequestCallback (MakeCallback (&ArpL3Protocol::SendArpRequest, this));
16.10 m_cacheList.push_back (cache);
16.11 return cache;
17.1 --- a/src/internet-stack/icmpv6-l4-protocol.cc Mon Sep 07 18:27:40 2009 +0200
17.2 +++ b/src/internet-stack/icmpv6-l4-protocol.cc Tue Sep 08 06:29:26 2009 +0200
17.3 @@ -1076,12 +1076,9 @@
17.4 {
17.5 Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
17.6 Ptr<NdiscCache> cache = CreateObject<NdiscCache> ();
17.7 +
17.8 cache->SetDevice (device, interface);
17.9 -
17.10 - /* XXX : make a list of callback in net-device.cc
17.11 - * else we override IPv4 flushing ARP table...
17.12 - */
17.13 -/* device->SetLinkChangeCallback (MakeCallback (&NdiscCache::Flush, cache)); */
17.14 + device->AddLinkChangeCallback (MakeCallback (&NdiscCache::Flush, cache));
17.15 m_cacheList.push_back (cache);
17.16 return cache;
17.17 }
18.1 --- a/src/internet-stack/loopback-net-device.cc Mon Sep 07 18:27:40 2009 +0200
18.2 +++ b/src/internet-stack/loopback-net-device.cc Tue Sep 08 06:29:26 2009 +0200
18.3 @@ -125,7 +125,7 @@
18.4 }
18.5
18.6 void
18.7 -LoopbackNetDevice::SetLinkChangeCallback (Callback<void> callback)
18.8 +LoopbackNetDevice::AddLinkChangeCallback (Callback<void> callback)
18.9 {}
18.10
18.11 bool
19.1 --- a/src/internet-stack/loopback-net-device.h Mon Sep 07 18:27:40 2009 +0200
19.2 +++ b/src/internet-stack/loopback-net-device.h Tue Sep 08 06:29:26 2009 +0200
19.3 @@ -50,7 +50,7 @@
19.4 virtual bool SetMtu (const uint16_t mtu);
19.5 virtual uint16_t GetMtu (void) const;
19.6 virtual bool IsLinkUp (void) const;
19.7 - virtual void SetLinkChangeCallback (Callback<void> callback);
19.8 + virtual void AddLinkChangeCallback (Callback<void> callback);
19.9 virtual bool IsBroadcast (void) const;
19.10 virtual Address GetBroadcast (void) const;
19.11 virtual bool IsMulticast (void) const;
20.1 --- a/src/node/net-device.h Mon Sep 07 18:27:40 2009 +0200
20.2 +++ b/src/node/net-device.h Tue Sep 08 06:29:26 2009 +0200
20.3 @@ -128,12 +128,12 @@
20.4 /**
20.5 * \param callback the callback to invoke
20.6 *
20.7 - * Register a callback invoked whenever the link
20.8 + * Add a callback invoked whenever the link
20.9 * status changes to UP. This callback is typically used
20.10 - * by the IP/ARP layer to flush the ARP cache
20.11 - * whenever the link goes up.
20.12 + * by the IP/ARP layer to flush the ARP cache and by IPv6 stack
20.13 + * to flush NDISC cache whenever the link goes up.
20.14 */
20.15 - virtual void SetLinkChangeCallback (Callback<void> callback) = 0;
20.16 + virtual void AddLinkChangeCallback (Callback<void> callback) = 0;
20.17 /**
20.18 * \return true if this interface supports a broadcast address,
20.19 * false otherwise.
21.1 --- a/src/node/simple-net-device.cc Mon Sep 07 18:27:40 2009 +0200
21.2 +++ b/src/node/simple-net-device.cc Tue Sep 08 06:29:26 2009 +0200
21.3 @@ -121,7 +121,7 @@
21.4 return true;
21.5 }
21.6 void
21.7 -SimpleNetDevice::SetLinkChangeCallback (Callback<void> callback)
21.8 +SimpleNetDevice::AddLinkChangeCallback (Callback<void> callback)
21.9 {}
21.10 bool
21.11 SimpleNetDevice::IsBroadcast (void) const
22.1 --- a/src/node/simple-net-device.h Mon Sep 07 18:27:40 2009 +0200
22.2 +++ b/src/node/simple-net-device.h Tue Sep 08 06:29:26 2009 +0200
22.3 @@ -53,7 +53,7 @@
22.4 virtual bool SetMtu (const uint16_t mtu);
22.5 virtual uint16_t GetMtu (void) const;
22.6 virtual bool IsLinkUp (void) const;
22.7 - virtual void SetLinkChangeCallback (Callback<void> callback);
22.8 + virtual void AddLinkChangeCallback (Callback<void> callback);
22.9 virtual bool IsBroadcast (void) const;
22.10 virtual Address GetBroadcast (void) const;
22.11 virtual bool IsMulticast (void) const;