From 47059e55c64dcfe968ad9e1bb0b5bbf9c18f610a Mon Sep 17 00:00:00 2001 From: Julien Charbon Date: Thu, 24 Mar 2016 14:51:48 +0000 Subject: [PATCH] [VRSNBSD-199]: Fix bird/bird6 wrong LSA collision detection --- net/bird/Makefile | 1 + net/bird/files/patch-proto__ospf__lsupd.c | 11 +++++++ net/bird/files/patch-proto__ospf__topology.c | 32 ++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 net/bird/files/patch-proto__ospf__lsupd.c create mode 100644 net/bird/files/patch-proto__ospf__topology.c diff --git a/net/bird/Makefile b/net/bird/Makefile index e24cd42be77..331324a9b90 100644 --- a/net/bird/Makefile +++ b/net/bird/Makefile @@ -3,6 +3,7 @@ PORTNAME= bird PORTVERSION= 1.6.4 +PORTREVISION= 1 CATEGORIES= net MASTER_SITES= ftp://bird.network.cz/pub/bird/ diff --git a/net/bird/files/patch-proto__ospf__lsupd.c b/net/bird/files/patch-proto__ospf__lsupd.c new file mode 100644 index 00000000000..7366734a6b6 --- /dev/null +++ b/net/bird/files/patch-proto__ospf__lsupd.c @@ -0,0 +1,11 @@ +--- proto/ospf/lsupd.c 2015-04-22 14:41:44.000000000 +0000 ++++ proto/ospf/lsupd.c 2016-03-22 13:09:59.000000000 +0000 +@@ -593,7 +593,7 @@ + if ((lsa.rt == p->router_id) || + (ospf_is_v2(p) && (lsa_type == LSA_T_NET) && ospf_addr_is_local(p, ifa->oa, ipa_from_u32(lsa.id)))) + { +- OSPF_TRACE(D_EVENTS, "Received unexpected self-originated LSA"); ++ log(L_INFO "Received unexpected self-originated LSA"); + ospf_advance_lsa(p, en, &lsa, lsa_type, lsa_domain, body); + continue; + } diff --git a/net/bird/files/patch-proto__ospf__topology.c b/net/bird/files/patch-proto__ospf__topology.c new file mode 100644 index 00000000000..ec0ac503e25 --- /dev/null +++ b/net/bird/files/patch-proto__ospf__topology.c @@ -0,0 +1,32 @@ +--- proto/ospf/topology.c 2015-04-22 14:41:44.000000000 +0000 ++++ proto/ospf/topology.c 2016-03-24 13:36:04.000000000 +0000 +@@ -79,8 +79,12 @@ + * then we have en->mode from the postponed LSA origination. + */ + +- OSPF_TRACE(D_EVENTS, "Installing LSA: Type: %04x, Id: %R, Rt: %R, Seq: %08x, Age: %u", +- en->lsa_type, en->lsa.id, en->lsa.rt, en->lsa.sn, en->lsa.age); ++ if (en->lsa.rt == p->router_id || (p->p.debug & D_EVENTS) || ++ OSPF_FORCE_DEBUG) ++ { ++ log(L_INFO "Installing LSA: Type: %04x, Id: %R, Rt: %R, Seq: %08x, Age: %u", ++ en->lsa_type, en->lsa.id, en->lsa.rt, en->lsa.sn, en->lsa.age); ++ } + + if (change) + ospf_schedule_rtcalc(p); +@@ -281,6 +285,14 @@ + if (!en->nf || !en->lsa_body) + en->nf = lsa->nf; + ++ if (en->lsa_body && (en->lsa.age == LSA_MAXAGE)) ++ { ++ /* en could be an unexpected self-originated lsa in which case nf is NULL */ ++ log(L_INFO "%s: Found flushing LSA while originating %I/%d with fib: %p", ++ p->p.name, lsa->nf->fn.prefix, lsa->nf->fn.pxlen, en->nf); ++ en->nf = lsa->nf; ++ } ++ + if (en->nf != lsa->nf) + { + log(L_ERR "%s: LSA ID collision for %I/%d", -- 2.18.0