-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Fedor Dikarev wrote: > On 29.09.2011 18:15, Alexander V. Chernikov wrote: >> Alex Bligh wrote: >> >> >>> --On 29 September 2011 17:39:05 +0400 Fedor Dikarev <f...@rambler-co.ru> >>> wrote: >>>> I've got the problem: I'm trying to reditribute lo-address-es to ospf >>>> nssa area: >> Do you really need such redistribution? >> Much better thing to do is just adding interface "lo1" { stub; }; to >> appropriate area. > Yes, I really need so -- at production environment part of them must be > advertised as NSSA N1 and others as NSSA N2. Okay, there is a small bug in bird preventing actual errors to come up. Patch attached.
Real error is: bird: ospf1: Cannot find forwarding address for NSSA-LSA 81.19.94.167/32 Actual problem with redistribution resides in the following: when ospf comes up it interpretes all its active interfaces as interfaces with DOWN state. Interfaces with DOWN state are skipped on forwarding address lookup (we need to do this since P-bit is set). As a temporary workaround you can do the following: * apply attached patch (it is simple "sed -I'' s/log(L_ERR,/log(L_ERR/") * do birdc -c 'restart direct1' several seconds after bird is started. > >> >>> My understanding was that OSPF NSSA does not work in bird. I'd love >>> to be told I'm wrong! >> bird supports NSSA since 1.3.3 > -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.14 (FreeBSD) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk6EkHcACgkQwcJ4iSZ1q2mMRQCePOml2ed8mgGc5CFFg1NgqW2p +PMAnRl7+7AdZdYa8qaTpOrkzfPDiNSk =kjxD -----END PGP SIGNATURE-----
--- proto/ospf/topology.c.orig 2011-09-11 23:44:45.000000000 +0400 +++ proto/ospf/topology.c 2011-09-29 19:34:49.000000000 +0400 @@ -786,7 +786,7 @@ { if (check_sum_net_lsaid_collision(fn, en)) { - log(L_ERR, "%s: LSAID collision for %I/%d", + log(L_ERR "%s: LSAID collision for %I/%d", p->name, fn->prefix, fn->pxlen); return; } @@ -864,7 +864,7 @@ { if ((type == ORT_NET) && check_sum_net_lsaid_collision(fn, en)) { - log(L_ERR, "%s: LSAID collision for %I/%d", + log(L_ERR "%s: LSAID collision for %I/%d", p->name, fn->prefix, fn->pxlen); return; } @@ -1091,7 +1091,7 @@ fwaddr = find_surrogate_fwaddr(oa); if (ipa_zero(fwaddr)) { - log(L_ERR, "%s: Cannot find forwarding address for NSSA-LSA %I/%d", + log(L_ERR "%s: Cannot find forwarding address for NSSA-LSA %I/%d", p->name, fn->prefix, fn->pxlen); return; } @@ -1102,7 +1102,7 @@ int rv = check_ext_lsa(en, fn, metric, fwaddr, tag); if (rv < 0) { - log(L_ERR, "%s: LSAID collision for %I/%d", + log(L_ERR "%s: LSAID collision for %I/%d", p->name, fn->prefix, fn->pxlen); return; } @@ -1150,7 +1150,7 @@ { if (check_ext_lsa(en, fn, 0, IPA_NONE, 0) < 0) { - log(L_ERR, "%s: LSAID collision for %I/%d", + log(L_ERR "%s: LSAID collision for %I/%d", p->name, fn->prefix, fn->pxlen); return; }