ECMP/multipath support
Joakim Tjernlund
joakim.tjernlund at transmode.se
Fri Dec 17 14:36:50 CET 2010
> >
> > >
> > > Ondrej Zajicek <santiago at crfreenet.org> wrote on 2010/12/17 00:50:41:
> > > >
> > > > On Thu, Dec 16, 2010 at 08:41:24PM +0100, Joakim Tjernlund wrote:
> > > > > This will find any ptp link that matches and several of them will match.
> > > >
> > > > Not really. For unnumbered ptp links (where sharing of IP addresses
> > > > between several interfaces is common), the match is based on interface
> > > > ID, which is unique. For numbered ptp links, the match is based on
> > > > IP address, but in that case sharing IP addresses (and therefore
> > > > network prefixes) is pathological and would cause other problems.
> > >
> > > I don't remember all the details anymore but sharing IP address for numbered
> > > ptp I/Fs is not pathological. It should just work. Also any combination of
> > > numbered vs. unnumbered, IP address or no IP address(even pppd supports no IP address
> > > on ptp links).
> > > If you do it my way you can combine ptp links any way you want and it will scale better too.
Question:
in calc_next_hop() does this* match
16.1.1 para 5. ...the parent vertex is a network that
directly connects the calculating router to the destination
router. The list of next hops is then determined by
examining the destination's router-LSA...
*)
/* The third case - bcast or nbma neighbor */
if ((en->lsa.type == LSA_T_RT) && (par->lsa.type == LSA_T_NET))
{
/* par->nhi should be defined from parent's calc_next_hop() */
if (!pn)
goto bad;
#ifdef OSPFv2
/*
* In this case, next-hop is the same as link-back, which is
* already computed in link_back().
*/
if (ipa_zero(en->lb))
goto bad;
return new_nexthop(po, en->lb, pn->iface, pn->weight);
#else /* OSPFv3 */
/*
* Next-hop is taken from lladdr field of Link-LSA, en->lb_id
* is computed in link_back().
*/
struct top_hash_entry *lhe;
lhe = ospf_hash_find(po->gr, pn->iface->index, en->lb_id, rid, LSA_T_LINK);
if (!lhe)
return NULL;
struct ospf_lsa_link *llsa = lhe->lsa_body;
if (ipa_zero(llsa->lladdr))
return NULL;
return new_nexthop(po, llsa->lladdr, pn->iface, pn->weight);
#endif
}
Should not OSPF add a nexthop for ALL links that point back:
...For each link in the router-LSA that points back to the
parent network, the link's Link Data field provides the IP
address of a next hop router. The outgoing interface to
use can then be derived from the next hop IP address (or
it can be inherited from the parent network).
?
Jocke
More information about the Bird-users
mailing list