diff --git a/CHANGES.html b/CHANGES.html index cf929464c..bafc39380 100644 --- a/CHANGES.html +++ b/CHANGES.html @@ -52,11 +52,94 @@ us a note on ns-developers mailing list.
class Ipv4 now contains attributes in ipv4.cc; the first one +is called "IpForward" that will enable/disable Ipv4 forwarding. +
All calls of the form "Ipv4::AddHostRouteTo ()" etc. (i.e. to +add static routes, both unicast and multicast) have been moved to a new +class Ipv4StaticRouting. In addition, class Ipv4 now holds only +one possible routing protocol; the previous way to add routing protocols +(by ordered list of priority) has been moved to a new class Ipv4ListRouting. +Class Ipv4 has a new minimal routing API (just to set and get the routing +protocol): +
+- virtual void AddRoutingProtocol (Ptr<Ipv4RoutingProtocol> routingProtocol, int16_t priority) = 0; ++ virtual void SetRoutingProtocol (Ptr<Ipv4RoutingProtocol> routingProtocol) = 0; ++ virtual Ptr<Ipv4RoutingProtocol> GetRoutingProtocol (void) const = 0; ++
The abstract base class Ipv4RoutingProtocol has been refactored to +align with corresponding Linux Ipv4 routing architecture, and has been +moved from ipv4.h to a new file ipv4-routing-protocol.h. The new +methods (RouteOutput () and RouteInput ()) are aligned with Linux +ip_route_output() and ip_route_input(). However, +the general nature of these calls (synchronous routing lookup for +locally originated packets, and an asynchronous, callback-based lookup +for forwarded packets) is still the same. +
+- typedef Callback<void, bool, const Ipv4Route&, Ptr<Packet>, const Ipv4Header&> RouteReplyCallback; ++ typedef Callback<void, Ptr<Ipv4Route>, Ptr<const Packet>, const Ipv4Header &> UnicastForwardCallback; ++ typedef Callback<void, Ptr<Ipv4MulticastRoute>, Ptr<const Packet>, const Ipv4Header &> MulticastForwardCallback; ++ typedef Callback<void, Ptr<const Packet>, const Ipv4Header &, uint32_t > LocalDeliverCallback; ++ typedef Callback<void, Ptr<const Packet>, const Ipv4Header &> ErrorCallback; +- virtual bool RequestInterface (Ipv4Address destination, uint32_t& interface) = 0; ++ virtual Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &errno) = 0; +- virtual bool RequestRoute (uint32_t interface, +- const Ipv4Header &ipHeader, +- Ptr<Packet> packet, +- RouteReplyCallback routeReply) = 0; ++ virtual bool RouteInput (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev, ++ UnicastForwardCallback ucb, MulticastForwardCallback mcb, ++ LocalDeliverCallback lcb, ErrorCallback ecb) = 0; ++ +
The previous class Ipv4Route and Ipv4MulticastRoute are used by +Ipv4StaticRouting and Ipv4GlobalRouting to record internal routing table +entries, so they were renamed to class Ipv4RoutingTableEntry and +Ipv4MulticastRoutingTableEntry, respectively. In their place, new +class Ipv4Route and class Ipv4MulticastRoute have been added. These +are reference-counted objects that are analogous to Linux struct +rtable and struct mfc_cache, respectively, to achieve better compatibility +with Linux routing architecture in the future. + +
There was some general cleanup of functions that involve mappings +from Ipv4Address to either NetDevice or Ipv4 interface index. +
+- virtual uint32_t FindInterfaceForAddr (Ipv4Address addr) const = 0;
+- virtual uint32_t FindInterfaceForAddr (Ipv4Address addr, Ipv4Mask mask) const = 0;
++ virtual int32_t GetInterfaceForAddress (Ipv4Address address) const = 0;
++ virtual int32_t GetInterfaceForPrefix (Ipv4Address address, Ipv4Mask mask) const = 0;
+- virtual int32_t FindInterfaceForDevice(Ptr<NetDevice> nd) const = 0;
++ virtual int32_t GetInterfaceForDevice (Ptr<const NetDevice> device) const = 0;
+- virtual Ipv4Address GetSourceAddress (Ipv4Address destination) const = 0;
+- virtual bool GetInterfaceForDestination (Ipv4Address dest,
+- virtual uint32_t GetInterfaceByAddress (Ipv4Address addr, Ipv4Mask mask = Ipv4Mask("255.255.255.255"));
+
+
+The following methods are not really used in present form since IGMP +is not being generated, so they have been removed (planned to be replaced +by multicast socket-based calls in the future): + +
+- virtual void JoinMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0; +- virtual void LeaveMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0; ++ +
All function parameters named "ifIndex" that refer to an Ipv4 interface are instead named "interface". diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 3b55160b9..1edbeadca 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -29,7 +29,9 @@ New user-visible features API changes from ns-3.4 ----------------------- -API changes for this release are documented in the file CHANGES.html +API changes for this release are documented in the file CHANGES.html. The +internal API and composition of the IPv4 stack underwent significant +refactoring in this release cycle. Release 3.4 ===========