From 8f9327ff3a20d9e870a7bdfea21cc42c5af922ff Mon Sep 17 00:00:00 2001
From: Maximilian Wilhelm <max@sdn.clinic>
Date: Mon, 2 Jul 2018 20:37:30 +0200
Subject: [PATCH] Include OriginatorID and ClusterList in byte length
 calculation of BGPPath.

Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
---
 route/bgp_path.go | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/route/bgp_path.go b/route/bgp_path.go
index 333758bd..a19813aa 100644
--- a/route/bgp_path.go
+++ b/route/bgp_path.go
@@ -49,12 +49,22 @@ func (b *BGPPath) Length() uint16 {
 		largeCommunitiesLen += 3 + uint16(len(b.LargeCommunities)*12)
 	}
 
+	clusterListLen := uint16(0)
+	if len(b.ClusterList) != 0 {
+		clusterListLen += 3 + uint16(len(b.ClusterList)*4)
+	}
+
 	unknownAttributesLen := uint16(0)
 	for _, unknownAttr := range b.UnknownAttributes {
 		unknownAttributesLen += unknownAttr.WireLength()
 	}
 
-	return communitiesLen + largeCommunitiesLen + 4*7 + 4 + asPathLen + unknownAttributesLen
+	originatorID := uint16(0)
+	if b.OriginatorID != 0 {
+		originatorID = 4
+	}
+
+	return communitiesLen + largeCommunitiesLen + 4*7 + 4 + originatorID + asPathLen + unknownAttributesLen
 }
 
 // ECMP determines if routes b and c are euqal in terms of ECMP
-- 
GitLab