Mr Murphy, is there any explanation why l2_multi use Floyd-Warshall
algorithm, instead of Dijkstra or any other shortest path algorithm?

thanks


On Thu, Dec 19, 2013 at 2:09 AM, Murphy McCauley
<murphy.mccau...@gmail.com>wrote:

> The barrier sort of serves as a confirmation message.  When you send a
> switch a flow-mod, you ordinarily have no way of knowing when or if it has
> taken effect since there's no positive acknowledgement.  We don't even know
> if it's valid.  The switch might send an error, but we have no idea *when*
> it will send an error.  However, according to the specification, when a
> switch sends a barrier reply, everything before the barrier should have
> been processed -- the table entry should actually be active, and if there
> was an error, the error messages should have been sent *before* we get the
> barrier reply.
>
> The reason for clearing the flow tables when a link has changed is that
> the link event signifies that the topology has changed. This may mean that
> a path which was previously valid (which we are using!) is no longer valid.
>  It may also mean that a path which was previously the shortest is no
> longer the shortest.  If l2_multi kept track of all the paths it had
> installed and which were active, etc., it could figure this out and just
> fix the particular paths that need adjusting.  But it doesn't, since this
> would considerably complicate what is supposed to be a relatively
> straightforward example.  So it just clears everything and lets everything
> get rebuilt from scratch.
>
> -- Murphy
>
> On Dec 18, 2013, at 8:45 AM, Amer <amer7...@hotmail.com> wrote:
>
> > Hello,
> >
> > Very helpful explanation,
> > I would like to ask you about the barrier command and its replay. What
> is the benefit from using it in l2_multi. Also, what is the benefit from
> clearing flow-table contents, while receiving a LinkEvent.
> >
> > Best regards,
> > Amer
> >
> > On ١٦‏/١٢‏/٢٠١٣, at ٩:٢٦ ص, Murphy McCauley <murphy.mccau...@gmail.com>
> wrote:
> >
> >> There isn't.  In short, it's like this:
> >>
> >> The discovery component raises LinkEvents when links change.
> >>
> >> l2_multi keeps an "adjacency" map.  The value of adjacency[sw1][sw2] is
> the port which connects sw1 to sw2.  This is updated by the l2_multi class,
> which watches LinkEvents.  LinkEvents also cause all switches to have their
> tables cleared.
> >>
> >> The Switch class watches PacketIn events.  When one occurs, it "learns"
> the source MAC (stored in mac_map).  In the usual case, this should only be
> from a port which *doesn't* connect two switches (and therefore won't be in
> the the adjacency map).  If we know the destination, we install a path from
> the current switch all the way to its final destination (if we don't, as
> usual, we flood).
> >>
> >> To install a path, we find the shortest path using the Floyd-Warshall
> algorithm, and then fill in the port numbers from the adjacency map.  We
> send the flow-mods to all the switches on the path, followed by a barrier.
>  When we have gotten the barrier reply from each switch, the entire path
> should be ready, so we send the waiting packet (that is, the packet which
> caused us to want to install the flow in the first place).
> >>
> >>
> >> Most of the rest of the code is to handle "exceptional" cases like
> multicasts, partitions, etc.
> >>
> >> Don't look to l2_multi as an example of a "good" way to write
> network-wide forwarding code, though.  It's just a 500 line example which
> is meant to be relatively easy to understand.
> >>
> >> -- Murphy
> >>
> >> On Dec 15, 2013, at 8:24 PM, Amer <amer7...@hotmail.com> wrote:
> >>
> >>> Hello,
> >>>
> >>> I would like to ask you if there is a document that help me to
> understand l2_multi code.
> >>>
> >>> Best regards,
> >>> Amer
> >>
> >>
>
>


-- 

Dhanu Dwiardhika
SJI.1102.00583
powered by Pajak n Devisa

Reply via email to