diff --git a/route/bgp_path.go b/route/bgp_path.go index 0ab7dc4b2a3f6a23d77be1a0613b68515a5d1604..1f10002439a20564343fdf6e769a36bd4acbbdfb 100644 --- a/route/bgp_path.go +++ b/route/bgp_path.go @@ -40,6 +40,11 @@ func (b *BGPPath) Compare(c *BGPPath) int8 { return -1 } + /* + * 9.1.2.2. Breaking Ties (Phase 2) + */ + + // a) if c.ASPathLen > b.ASPathLen { return 1 } @@ -48,6 +53,7 @@ func (b *BGPPath) Compare(c *BGPPath) int8 { return -1 } + // b) if c.Origin > b.Origin { return 1 } @@ -56,6 +62,7 @@ func (b *BGPPath) Compare(c *BGPPath) int8 { return -1 } + // c) if c.MED > b.MED { return 1 } @@ -64,6 +71,18 @@ func (b *BGPPath) Compare(c *BGPPath) int8 { return -1 } + // d) + if c.EBGP && !b.EBGP { + return -1 + } + + if !c.EBGP && b.EBGP { + return 1 + } + + // e) TODO: interiour cost (hello IS-IS and OSPF) + + // f) if c.BGPIdentifier < b.BGPIdentifier { return 1 } @@ -72,6 +91,7 @@ func (b *BGPPath) Compare(c *BGPPath) int8 { return -1 } + // g) if c.Source < b.Source { return 1 }