README.api
author Tom Henderson <tomh@tomh.org>
Fri, 17 Apr 2009 12:33:17 -0700
changeset 4379 44c7757fb216
parent 4378 3ad10f8db106
permissions -rw-r--r--
merge with tip

This repository handles changes to the Ipv4 interface class and Ipv4Impl
class.

1. Changeset: d99061f1167c

Synopsis:
--------
- deconflict NetDevice::ifIndex and Ipv4::ifIndex (bug 85)

Changed public API (src/node)
--------

All function parameters named "ifIndex" that refer to an Ipv4 interface
are instead named "interface". 

- 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 will be later 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)


New public API or classes (src/node)
--------

None.

Changed private API (src/internet-node)
--------

(similar API changes to the IPv4 implementation classes instantiating
the above public API) 

New private API or classes (src/internet-node)
--------

None.


========================================================================

2.  Changeset: e493e80274bd (implementation added in parallel)
    Changeset: db81fdcb06e7 (cut over of client code, remove old code)

Synopsis:
--------
- allow multiple IPv4 addresses to be assigned to an interface (bug 188)

Changed public API:
--------

We now have a new class and methods to account for the possibility of having
multiple IP addresses on an interface:

+  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;

Regarding legacy API usage, typically where you once did the following,
using the public Ipv4 class interface (e.g.):

  ipv4A->SetAddress (ifIndexA, Ipv4Address ("172.16.1.1"));
  ipv4A->SetNetworkMask (ifIndexA, Ipv4Mask ("255.255.255.255"));

you now do:

  Ipv4InterfaceAddress ipv4IfAddrA = Ipv4InterfaceAddress (Ipv4Address ("172.16.1.1"), Ipv4Mask ("255.255.255.255"));
  ipv4A->AddAddress (ifIndexA, ipv4IfAddrA);


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: 

Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i)
+ Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i, uint32_t j)


New public API or classes (src/node)
--------

class Ipv4InterfaceAddress:  This is a new class to parallel Linux 
struct in_ifaddr.  It holds IP addressing information, including mask, 
broadcast address, scope, whether primary or secondary, etc.

Location:  src/node/ipv4-interface-address.h

========================================================================

3.  Changeset: 2a05a47dba22

Synopsis:
--------
- Remove class Ipv4Impl from src/internet-stack

Changed public API:
--------

None

Changed private API
---------

Remove class Ipv4Impl; class Ipv4L3Protocol now inherits from class Ipv4
allow multiple IPv4 addresses to be assigned to an interface (bug 188)