summaryrefslogtreecommitdiffhomepage
path: root/server/zclient.go
diff options
context:
space:
mode:
authorWataru Ishida <ishida.wataru@lab.ntt.co.jp>2016-11-28 01:35:23 -0500
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2016-11-29 15:45:19 -0800
commit33ff2fff1f1e4aa693c2ce010d516934d189e538 (patch)
tree3df7fb9f9ed478ba847c08ef0620563da4d0d47c /server/zclient.go
parent0f5f9078ea27de52756c63fbf87f9eb286f829d8 (diff)
zebra: add flags for recursive nexthop lookup if necessary
Signed-off-by: Wataru Ishida <ishida.wataru@lab.ntt.co.jp>
Diffstat (limited to 'server/zclient.go')
-rw-r--r--server/zclient.go14
1 files changed, 11 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,