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