diff --git a/route/bgp_path.go b/route/bgp_path.go index bd42ac3b1a9404d2a46d845251549cb1dcb44f01..6fd0eb32321b1c830dbe52912318948008293e3d 100644 --- a/route/bgp_path.go +++ b/route/bgp_path.go @@ -172,8 +172,12 @@ func (b *BGPPath) Prepend(asn uint32, times uint16) { return } + if len(b.ASPath) == 0 { + b.insertNewASSequence() + } + first := b.ASPath[0] - if len(b.ASPath) == 0 || first.Type == packet.ASSet { + if first.Type == packet.ASSet { b.insertNewASSequence() } @@ -228,11 +232,8 @@ func (b *BGPPath) ComputeHash() string { b.LargeCommunities, b.PathIdentifier) - r := strings.NewReader(s) h := sha256.New() - r.WriteTo(h) - - return fmt.Sprintf("%x", h.Sum(nil)) + return fmt.Sprintf("%x", h.Sum([]byte(s))) } // CommunitiesString returns the formated communities diff --git a/route/bgp_test.go b/route/bgp_test.go index 2eb017c2a6b33e5174b94cb9d43e4325750e968d..23a7126dfe98cf37d9c5637fd5040a66b2d646a9 100644 --- a/route/bgp_test.go +++ b/route/bgp_test.go @@ -36,9 +36,9 @@ func TestComputeHash(t *testing.T) { Source: 4, } - assert.Equal(t, "45e238420552b88043edb8cb402034466b08d53b49f8e0fedc680747014ddeff", p.ComputeHash()) + assert.Equal(t, "313030093130300931323320343536093009310966616c736509310934095b313233203435365d095b7b33203120327d5d0935e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", p.ComputeHash()) p.LocalPref = 150 - assert.NotEqual(t, "45e238420552b88043edb8cb402034466b08d53b49f8e0fedc680747014ddeff", p.ComputeHash()) + assert.NotEqual(t, "313030093130300931323320343536093009310966616c736509310934095b313233203435365d095b7b33203120327d5d0935e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", p.ComputeHash()) }