[Ns-developers] release update [feedback needed]
Mathieu Lacage
mathieu.lacage at sophia.inria.fr
Wed Jun 10 01:57:10 PDT 2009
Ok, here is an updated patch which addresses your comments. I was not
able to test NotifyRemoveAddress because there is no Ipv4::RemoveAddress
method.
Mathieu
On Wed, 2009-06-10 at 08:12 +0200, Mathieu Lacage wrote:
> On Tue, 2009-06-09 at 22:38 -0700, Tom Henderson wrote:
> > + 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)
>
> I believe that the above needs to be dealt with by asking routing
> protocols to discover existing interfaces and handle them when they are
> added to a node. The Notify methods then only notify about changes in
> the existing configuration. Initially, to avoid that complexity, I think
> that it would be reasonable to ask users to first setup routing
> protocols and, then, setup ip interfaces. We can improve the routing
> protocol implementations to make them able to handle any ordering of
> operations (add to node, then, add interfaces or add interfaces, then
> add to node) in a separate step. Faker and I have done some work towards
> that recently with the changes you merged to the InternetStackHelper to
> allow users to aggregate the different elements of a udp/tcp/ip/arp
> stack in any order.
>
> > - add an IP address to an interface (such as a second address) after the
> > first address was added and interface was SetUp()
>
> As you mention below, it's easy to deal with the above with extra Notify
> methods.
>
> > 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)
>
> ok, will do the above and split NotifyInterface in NotifyInterfaceUp and
> NotifyInterfaceDown. I was lazy :)
>
> >
> > 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.
>
> What do you mean by this exactly ?
>
> > 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,
>
> No.
>
> > for instance, the current state of an interface be saved so that these
> > calls can be detected and avoided?
>
> It should be easy to invoke these methods only on real state changes.
>
> > 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
>
> It feels overkill for the moment.
>
> > 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?)?
>
> I don't have any good idea about this.
>
> Mathieu
-------------- next part --------------
A non-text attachment was scrubbed...
Name: routing.patch
Type: text/x-patch
Size: 46764 bytes
Desc: not available
Url : http://mailman.isi.edu/pipermail/ns-developers/attachments/20090610/7fa5597e/routing-0001.bin
More information about the Ns-developers
mailing list