summaryrefslogtreecommitdiffhomepage
path: root/table
diff options
context:
space:
mode:
authorIWASE Yusuke <iwase.yusuke0@gmail.com>2018-01-23 17:00:44 +0900
committerIWASE Yusuke <iwase.yusuke0@gmail.com>2018-02-08 15:33:34 +0900
commit1fd46103728f0ed421a74a5fd6b96cb74b44bb38 (patch)
treed57428c3e439cfa63c6f6b60153b40c0913e29d5 /table
parent5322e63522e9320bc460f5a68538d24d11c5a0ef (diff)
config: Option to disable best path selection
Note: When this option is specified, no path will be redistributed to any peer, because there is no best path. Signed-off-by: IWASE Yusuke <iwase.yusuke0@gmail.com>
Diffstat (limited to 'table')
-rw-r--r--table/destination.go8
-rw-r--r--table/table_manager.go11
2 files changed, 17 insertions, 2 deletions
diff --git a/table/destination.go b/table/destination.go
index 15029d52..c1da67cf 100644
--- a/table/destination.go
+++ b/table/destination.go
@@ -36,6 +36,7 @@ type BestPathReason uint8
const (
BPR_UNKNOWN BestPathReason = iota
+ BPR_DISABLED
BPR_ONLY_PATH
BPR_REACHABLE_NEXT_HOP
BPR_HIGHEST_WEIGHT
@@ -53,6 +54,7 @@ const (
var BestPathReasonStringMap = map[BestPathReason]string{
BPR_UNKNOWN: "Unknown",
+ BPR_DISABLED: "Bestpath selection disabled",
BPR_ONLY_PATH: "Only Path",
BPR_REACHABLE_NEXT_HOP: "Reachable Next Hop",
BPR_HIGHEST_WEIGHT: "Highest Weight",
@@ -515,6 +517,12 @@ func (dest *Destination) implicitWithdraw() paths {
}
func (dest *Destination) computeKnownBestPath() (*Path, BestPathReason, error) {
+ if SelectionOptions.DisableBestPathSelection {
+ log.WithFields(log.Fields{
+ "Topic": "Table",
+ }).Debug("computeKnownBestPath skipped")
+ return nil, BPR_DISABLED, nil
+ }
// If we do not have any paths to this destination, then we do not have
// new best path.
diff --git a/table/table_manager.go b/table/table_manager.go
index b94b546e..498aabad 100644
--- a/table/table_manager.go
+++ b/table/table_manager.go
@@ -22,8 +22,9 @@ import (
"time"
farm "github.com/dgryski/go-farm"
- "github.com/osrg/gobgp/packet/bgp"
log "github.com/sirupsen/logrus"
+
+ "github.com/osrg/gobgp/packet/bgp"
)
const (
@@ -306,6 +307,10 @@ func (manager *TableManager) getDestinationCount(rfList []bgp.RouteFamily) int {
}
func (manager *TableManager) GetBestPathList(id string, rfList []bgp.RouteFamily) []*Path {
+ if SelectionOptions.DisableBestPathSelection {
+ // Note: If best path selection disabled, there is no best path.
+ return nil
+ }
paths := make([]*Path, 0, manager.getDestinationCount(rfList))
for _, t := range manager.tables(rfList...) {
paths = append(paths, t.Bests(id)...)
@@ -314,7 +319,9 @@ func (manager *TableManager) GetBestPathList(id string, rfList []bgp.RouteFamily
}
func (manager *TableManager) GetBestMultiPathList(id string, rfList []bgp.RouteFamily) [][]*Path {
- if !UseMultiplePaths.Enabled {
+ if !UseMultiplePaths.Enabled || SelectionOptions.DisableBestPathSelection {
+ // Note: If multi path not enabled or best path selection disabled,
+ // there is no best multi path.
return nil
}
paths := make([][]*Path, 0, manager.getDestinationCount(rfList))