diff --git a/route/bgp_path.go b/route/bgp_path.go index 333758bd497a2de2d9fa1da21a49c162cfdba3dd..a19813aa3158afc27a44a8f794bee600d49ebaf1 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