[Ns-developers] release update [feedback needed]
Mathieu Lacage
mathieu.lacage at sophia.inria.fr
Tue Jun 9 23:43:21 PDT 2009
A related question about this code: why do we keep around all these base
class + implementation classes in src/node and src/internet-stack for
ListRouting ? I understand why you did this for StaticRouting but,
ListRouting does not look immediately useful and appears to merely
increase the pain of introducing modifications there. Would you object
if I removed the Ipv4ListRouting base class and removed the Impl postfix
of the impl class ?
Mathieu
On Tue, 2009-06-09 at 22:38 -0700, Tom Henderson wrote:
> Mathieu Lacage wrote:
> > On Tue, 2009-06-09 at 16:03 +0000, Tom Henderson wrote:
> >
> >> I like the general idea. It could be expanded to align with how
> >
> > Shall I infer from the above that you approve of the patch as-is and
> > that I can push it ? Or that you plan to review it carefully later ?
>
> this patch cleans up a sore spot in the implementation. More work needs
> to be done for static multicast routes, but regression tests pass, and I
> think it is an improvement.
>
> The main API is in the Ipv4RoutingProtocol base class:
> + /**
> + * \param i the index of the interface we are being notified about
> + * \param isUp is this interface coming up or down ?
> + *
> + * Protocols are expected to implement this method to be notified of
> the state change of
> + * an interface in a node. When a new protocol is added to a node, it
> is notified
> + * of all existing interfaces.
> + */
> + virtual void NotifyInterface (uint32_t i, bool isUp) = 0;
>
> This is similar to what is found in RTM_NEWLINK and RTM_DELLINK for
> rtnetlink in Linux (man rtnetlink), except that the boolean flag allows
> both to be in a single method NotifyInterface. Since the routing
> protocol consuming this message will presumably be able to acquire a
> pointer to class Ipv4 to get whatever other information is needed, the
> interface index is probably sufficient information to pass up.
>
> The questions/concerns I have:
>
> 1) implicit assumptions are made about the order in which these
> operations occur:
> - set an IP interface to up
> - add an IP address to an interface
> - set an IPv4RoutingProtocol to the Ipv4 object
> - add an additional routing protocol to the Ipv4ListRouting protocol
>
> There are certain combinations of operations that will cause this to
> lose information; e.g.
> - add the Ipv4ListRouting to the Ipv4, and subsequently add protocols
> like OLSR (the protocols added later will not get the notifications)
> - add an IP address to an interface (such as a second address) after the
> first address was added and interface was SetUp()
>
> so, it would help to add code to deal with users possibly rearranging
> these operations. For instance, I think that probably these additions
> are needed:
> - NotifyAddAddress (uint32_t i, Ipv4InterfaceAddress addr)
> - NotifyRemoveAddress (uint32_t i, Ipv4InterfaceAddress addr)
>
> or, for symmetry with NotifyInterface(), it could be:
> - NotifyAddress (uint32_t i, Ipv4InterfaceAddress addr, bool IsAdded);
>
> and probably Ipv4ListRoutingImpl::AddRoutingProtocol () needs to notify
> the new routing protocol added of the interfaces, in case it is added
> after being hooked to Ipv4.
>
> 2) implicit assumption about the user not repeating these methods or
> calling them out of order-- e.g. can NotifyInterface (i, true); be
> called multiple times (resulting in multiple redundant routes)? Should,
> for instance, the current state of an interface be saved so that these
> calls can be detected and avoided?
>
> 3) I had thought about putting in an rtnetlink-like framework for what
> you posted, but that may be overkill for the moment. However, suppose
> someone wanted to add an rtnetlink notification framework to ns-3 in the
> future. What kind of notification framework would you recommend?
> Multicast messaging internally? Some kind of callback framework (could
> you have multiple users register callbacks somewhere for the same event,
> and where would they register (a Netlink object?)?
>
> Thanks for the patch,
> Tom
More information about the Ns-developers
mailing list