summaryrefslogtreecommitdiffhomepage
path: root/table
diff options
context:
space:
mode:
Diffstat (limited to 'table')
-rw-r--r--table/destination.go21
1 files changed, 20 insertions, 1 deletions
diff --git a/table/destination.go b/table/destination.go
index 232ed032..e3e1b914 100644
--- a/table/destination.go
+++ b/table/destination.go
@@ -254,7 +254,26 @@ func (dest *Destination) Calculate(ids []string) (map[string]*Path, []*Path) {
return nil
}()
best := dest.GetBestPath(id)
- if best != nil && best.Equal(old) {
+ equal := func(lhs, rhs *Path) bool {
+ // already know the NLRIs are same and
+ // timestamp must be ignored so check out only
+ // source.
+ if lhs.GetSource() != rhs.GetSource() {
+ return false
+ }
+
+ pattrs := func(arg []bgp.PathAttributeInterface) []byte {
+ ret := make([]byte, 0)
+ for _, a := range arg {
+ aa, _ := a.Serialize()
+ ret = append(ret, aa...)
+ }
+ return ret
+ }
+ return bytes.Equal(pattrs(lhs.GetPathAttrs()), pattrs(rhs.GetPathAttrs()))
+ }
+
+ if best != nil && old != nil && equal(best, old) {
// RFC4684 3.2. Intra-AS VPN Route Distribution
// When processing RT membership NLRIs received from internal iBGP
// peers, it is necessary to consider all available iBGP paths for a