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