CHANGES.html
changeset 4385 1114152c44dd
parent 4305 9ec113d84cc8
child 4413 4726838efe7c
--- a/CHANGES.html	Mon Apr 20 20:15:17 2009 -0700
+++ b/CHANGES.html	Mon Apr 20 20:52:51 2009 -0700
@@ -44,9 +44,78 @@
 us a note on ns-developers mailing list.  </p>
 
 <hr>
+<h1>Changes from ns-3.4 to ns-3.5</h1>
+
+<h2>Changes to build system:</h2>
+<ul>
+</ul>
+
+<h2>New API:</h2>
+<ul>
+</ul>
+
+<h2>Changes to existing API:</h2>
+<ul>
+<li> deconflict NetDevice::ifIndex and Ipv4::ifIndex (bug 85). All function parameters named "ifIndex" that refer 
+to an Ipv4 interface are instead named "interface".
+<pre>
+- static const uint32_t Ipv4RoutingProtocol::IF_INDEX_ANY = 0xffffffff;
++ static const uint32_t Ipv4RoutingProtocol::INTERFACE_ANY = 0xffffffff;
+
+- bool Ipv4RoutingProtocol::RequestIfIndex (Ipv4Address destination, uint32_t& ifIndex);
++ bool Ipv4RoutingProtocol::RequestInterface (Ipv4Address destination, uint32_t& interface);
+(N.B. this particular function is planned to be renamed to RouteOutput() in the
+proposed IPv4 routing refactoring)
+
+- uint32_t Ipv4::GetIfIndexByAddress (Ipv4Address addr, Ipv4Mask mask);
++ int_32t Ipv4::GetInterfaceForAddress (Ipv4Address address, Ipv4Mask mask) const;
+
+- bool Ipv4::GetIfIndexForDestination (Ipv4Address dest, uint32_t &ifIndex) const;
++ bool Ipv4::GetInterfaceForDestination (Ipv4Address dest, uint32_t &interface) const;
+(N.B. this function is not needed in the proposed Ipv4 routing refactoring)
+</pre>
+<li> allow multiple IPv4 addresses to be assigned to an interface (bug 188).  
+<ul>
+<li> Add class Ipv4InterfaceAddress:  
+This is a new class to resemble Linux's struct in_ifaddr.  It holds IP addressing information, including mask,
+broadcast address, scope, whether primary or secondary, etc.
+<pre>
++  virtual uint32_t AddAddress (uint32_t interface, Ipv4InterfaceAddress address) = 0;
++  virtual Ipv4InterfaceAddress GetAddress (uint32_t interface, uint32_t addressIndex) const = 0;
++  virtual uint32_t GetNAddresses (uint32_t interface) const = 0;
+</pre>
+<li>Regarding legacy API usage, typically where you once did the following,
+using the public Ipv4 class interface (e.g.):
+<pre>
+  ipv4A->SetAddress (ifIndexA, Ipv4Address ("172.16.1.1"));
+  ipv4A->SetNetworkMask (ifIndexA, Ipv4Mask ("255.255.255.255"));
+</pre>
+you now do:
+<pre>
+  Ipv4InterfaceAddress ipv4IfAddrA = Ipv4InterfaceAddress (Ipv4Address ("172.16.1.1"), Ipv4Mask ("255.255.255.255"));
+  ipv4A->AddAddress (ifIndexA, ipv4IfAddrA);
+</pre>
+<li> At the helper API level, one often gets an address from an interface
+container.  We preserve the legacy GetAddress (uint32_t i) but it
+is documented that this will return only the first (address index 0)
+address on the interface, if there are multiple such addresses. 
+We provide also an overloaded variant for the multi-address case: 
+
+<pre>
+Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i)
++ Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i, uint32_t j)
+</pre>
+</ul>
+</ul>
+
+<h2>Changed behavior:</h2>
+<ul>
+</ul>
+
+<hr>
 <h1>Changes from ns-3.3 to ns-3.4</h1>
 
-<h2>Changes to build system</h2>
+<h2>Changes to build system:</h2>
 <ul>
 <li>A major option regarding the downloading and building of ns-3 has been
 added for ns-3.4 -- the ns-3-allinone feature.  This allows a user to