diff options
author | ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp> | 2015-06-30 17:32:38 +0900 |
---|---|---|
committer | ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp> | 2015-07-01 11:56:31 +0900 |
commit | 834df87c82f75b787c432d9194b4c82bff78e9d6 (patch) | |
tree | ac838ec242048aa2162311b5b5602a681bdc1f28 /table/path.go | |
parent | e7cefb51f9cfd0012384239ee736375841af7a76 (diff) |
table: check paths' equivalence deeper
if we add same path multiple times by the following gobgp cli commands,
$ gobgp global rib add 10.0.0.0/24
$ gobgp global rib add 10.0.0.0/24
$ gobgp global rib add 10.0.0.0/24
current implementation sends multiple update messages to peers
even through the content of the path is same.
This is due to the shallow equivalence checking.
This patch checks paths' equivalence deeper by adding Equal() method to Path.
Signed-off-by: ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>
Diffstat (limited to 'table/path.go')
-rw-r--r-- | table/path.go | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/table/path.go b/table/path.go index 0b8f732a..1fd15308 100644 --- a/table/path.go +++ b/table/path.go @@ -16,6 +16,8 @@ package table import ( + "bytes" + "encoding/json" "fmt" log "github.com/Sirupsen/logrus" "github.com/osrg/gobgp/api" @@ -456,3 +458,18 @@ func (path *Path) SetMed(med int64, doReplace bool) error { } return nil } + +func (lhs *Path) Equal(rhs *Path) bool { + if rhs == nil { + return false + } else if lhs == rhs { + return true + } + f := func(p *Path) []byte { + s := p.ToApiStruct() + s.Age = 0 + buf, _ := json.Marshal(s) + return buf + } + return bytes.Equal(f(lhs), f(rhs)) +} |