Ondrej Zajicek <santiago@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