From 2b7efe725fe9255c0f8a646d45b58c141638ea96 Mon Sep 17 00:00:00 2001 From: Annika Hannig Date: Wed, 16 Nov 2022 13:42:51 +0100 Subject: [PATCH] deduplicate extended communities --- pkg/pools/communities.go | 5 ----- pkg/sources/birdwatcher/parsers.go | 8 +++++--- pkg/sources/gobgp/routes.go | 1 + pkg/sources/openbgpd/decoders.go | 2 +- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/pkg/pools/communities.go b/pkg/pools/communities.go index 8403f88..00a4b4b 100644 --- a/pkg/pools/communities.go +++ b/pkg/pools/communities.go @@ -1,7 +1,6 @@ package pools import ( - "log" "reflect" "sync" @@ -60,10 +59,6 @@ func (p *CommunitiesPool) AcquireExt(communities []api.ExtCommunity) []api.ExtCo // Make identification list ids := make([]int, len(communities)) for i, comm := range communities { - if len(comm) != 3 { - log.Println("ERROR: malformed ext. bgp community:", comm) - continue - } r := 0 // RO if comm[0].(string) == "rt" { r = 1 diff --git a/pkg/sources/birdwatcher/parsers.go b/pkg/sources/birdwatcher/parsers.go index b9d6b12..33b1f75 100644 --- a/pkg/sources/birdwatcher/parsers.go +++ b/pkg/sources/birdwatcher/parsers.go @@ -259,7 +259,7 @@ func parseRouteBgpInfo(data interface{}) *api.BGPInfo { LocalPref: localPref, Med: med, Communities: pools.Communities.Acquire(communities), - ExtCommunities: extCommunities, + ExtCommunities: pools.ExtCommunities.AcquireExt(extCommunities), LargeCommunities: pools.LargeCommunities.Acquire(largeCommunities), } return bgp @@ -300,10 +300,12 @@ func parseExtBgpCommunities(data interface{}) []api.ExtCommunity { log.Println("Ignoring malformed ext community:", cdata) continue } + val1, _ := strconv.Atoi(cdata[1].(string)) + val2, _ := strconv.Atoi(cdata[2].(string)) communities = append(communities, api.ExtCommunity{ cdata[0], - cdata[1], - cdata[2], + val1, + val2, }) } diff --git a/pkg/sources/gobgp/routes.go b/pkg/sources/gobgp/routes.go index 9a65f22..3e97f86 100644 --- a/pkg/sources/gobgp/routes.go +++ b/pkg/sources/gobgp/routes.go @@ -159,6 +159,7 @@ func (gobgp *GoBGP) parsePathIntoRoute( route.BGP.AsPath = pools.ASPaths.Acquire(route.BGP.AsPath) route.BGP.Communities = pools.Communities.Acquire(route.BGP.Communities) + route.BGP.ExtCommunities = pools.ExtCommunities.AcquireExt(route.BGP.ExtCommunities) route.BGP.LargeCommunities = pools.LargeCommunities.Acquire(route.BGP.LargeCommunities) route.Metric = (route.BGP.LocalPref + route.BGP.Med) diff --git a/pkg/sources/openbgpd/decoders.go b/pkg/sources/openbgpd/decoders.go index cecb191..deea8fa 100644 --- a/pkg/sources/openbgpd/decoders.go +++ b/pkg/sources/openbgpd/decoders.go @@ -184,7 +184,7 @@ func decodeRoute(details map[string]interface{}) (*api.Route, error) { AsPath: pools.ASPaths.Acquire(asPath), NextHop: pools.Gateways4.Acquire(trueNextHop), Communities: pools.Communities.Acquire(communities), - ExtCommunities: extendedCommunities, + ExtCommunities: pools.ExtCommunities.AcquireExt(extendedCommunities), LargeCommunities: pools.LargeCommunities.Acquire(largeCommunities), LocalPref: localPref, }