[Bug 653] NetDevice link change callback (SetLinkChangeCallback -> AddLinkChangeCallback).
authorSebastien Vincent <vincent@clarinet.u-strasbg.fr>
Tue Sep 08 06:29:26 2009 +0200 (5 months ago)
changeset 4764e90e1ef585b0
parent 4763 19573adf3665
child 4765 150f48a226c3
[Bug 653] NetDevice link change callback (SetLinkChangeCallback -> AddLinkChangeCallback).
CHANGES.html
src/devices/bridge/bridge-net-device.cc
src/devices/bridge/bridge-net-device.h
src/devices/csma/csma-net-device.cc
src/devices/csma/csma-net-device.h
src/devices/emu/emu-net-device.cc
src/devices/emu/emu-net-device.h
src/devices/point-to-point/point-to-point-net-device.cc
src/devices/point-to-point/point-to-point-net-device.h
src/devices/tap-bridge/tap-bridge.cc
src/devices/tap-bridge/tap-bridge.h
src/devices/virtual-net-device/virtual-net-device.cc
src/devices/virtual-net-device/virtual-net-device.h
src/devices/wifi/wifi-net-device.cc
src/devices/wifi/wifi-net-device.h
src/internet-stack/arp-l3-protocol.cc
src/internet-stack/icmpv6-l4-protocol.cc
src/internet-stack/loopback-net-device.cc
src/internet-stack/loopback-net-device.h
src/node/net-device.h
src/node/simple-net-device.cc
src/node/simple-net-device.h
     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&lt;void&gt; callback);
    1.11 ++ virtual void AddLinkChangeCallback (Callback&lt;void&gt; callback);</pre>
    1.12 +Now each NetDevice subclasses have a TracedCallback&lt;&gt; object (list of callbacks) instead of Callback&lt;void&gt; 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;