diff options
-rw-r--r-- | server/zclient.go | 14 | ||||
-rw-r--r-- | table/destination.go | 2 |
2 files changed, 13 insertions, 3 deletions
diff --git a/server/zclient.go b/server/zclient.go index 6ae25e51..3f8627c3 100644 --- a/server/zclient.go +++ b/server/zclient.go @@ -76,11 +76,18 @@ func newIPRouteMessage(dst []*table.Path, version uint8, vrfId uint16) *zebra.Me default: return nil } - flags := uint8(zebra.MESSAGE_NEXTHOP) + msgFlags := uint8(zebra.MESSAGE_NEXTHOP) plen, _ := strconv.Atoi(l[1]) med, err := path.GetMed() if err == nil { - flags |= zebra.MESSAGE_METRIC + msgFlags |= zebra.MESSAGE_METRIC + } + var flags zebra.FLAG + info := path.GetSource() + if info.AS == info.LocalAS { + flags = zebra.FLAG_IBGP | zebra.FLAG_INTERNAL + } else if info.MultihopTtl > 0 { + flags = zebra.FLAG_INTERNAL } return &zebra.Message{ Header: zebra.Header{ @@ -92,8 +99,9 @@ func newIPRouteMessage(dst []*table.Path, version uint8, vrfId uint16) *zebra.Me }, Body: &zebra.IPRouteBody{ Type: zebra.ROUTE_BGP, + Flags: flags, SAFI: zebra.SAFI_UNICAST, - Message: flags, + Message: msgFlags, Prefix: prefix, PrefixLength: uint8(plen), Nexthops: nexthops, diff --git a/table/destination.go b/table/destination.go index f9ed0e2f..ac3ef0c8 100644 --- a/table/destination.go +++ b/table/destination.go @@ -73,6 +73,7 @@ type PeerInfo struct { LocalAddress net.IP RouteReflectorClient bool RouteReflectorClusterID net.IP + MultihopTtl uint8 } func (lhs *PeerInfo) Equal(rhs *PeerInfo) bool { @@ -114,6 +115,7 @@ func NewPeerInfo(g *config.Global, p *config.Neighbor) *PeerInfo { Address: net.ParseIP(p.Config.NeighborAddress), RouteReflectorClient: p.RouteReflector.Config.RouteReflectorClient, RouteReflectorClusterID: id, + MultihopTtl: p.EbgpMultihop.Config.MultihopTtl, } } |