From f64a6648b6b5cb474fb0fabd1a8e2f81706ef5aa Mon Sep 17 00:00:00 2001 From: Matthias Hannig Date: Fri, 25 Jan 2019 10:49:50 +0100 Subject: [PATCH] use numeric type, error on failed type assertation --- bird/bird.go | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/bird/bird.go b/bird/bird.go index 1a1a5cd..239b5d5 100644 --- a/bird/bird.go +++ b/bird/bird.go @@ -31,11 +31,11 @@ var CacheRedis *RedisCache var NilParse Parsed = (Parsed)(nil) var BirdError Parsed = Parsed{"error": "bird unreachable"} -var FilteredCommunities = []string{ - "34307:60001", - "34307:60002", - "34307:60003", - "34307:60004", +var FilteredCommunities = [][]float64{ + []float64{34307, 60001}, + []float64{34307, 60002}, + []float64{34307, 60003}, + []float64{34307, 60004}, } func isSpecial(ret Parsed) bool { @@ -44,14 +44,8 @@ func isSpecial(ret Parsed) bool { func isRouteFiltered(rdata interface{}) bool { // Get communities from parsed result - route, ok := rdata.(map[string]interface{}) - if !ok { - return false - } - bgpInfo, ok := route["bgp"].(map[string]interface{}) - if !ok { - return false - } + route := rdata.(map[string]interface{}) + bgpInfo := route["bgp"].(map[string]interface{}) communities := bgpInfo["communities"].([]interface{}) for _, comdata := range communities { @@ -62,11 +56,10 @@ func isRouteFiltered(rdata interface{}) bool { if len(cdata) < 2 { return false } - comm := strconv.Itoa(int(cdata[0].(float64))) + ":" + - strconv.Itoa(int(cdata[1].(float64))) for _, filter := range FilteredCommunities { - if comm == filter { + if cdata[0].(float64) == filter[0] && + cdata[1].(float64) == filter[1] { return true } }