-----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;
        }

Reply via email to