summaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/table/table.go
diff options
context:
space:
mode:
authorPavel Vorontsov <pvorontsovd@gmail.com>2020-02-17 19:27:17 +0300
committerFUJITA Tomonori <fujita.tomonori@gmail.com>2020-02-19 13:35:10 +0900
commit789664e8c32730b0a98874dccfbb167fd9fe20b0 (patch)
treec756e2ad69f0107142bdfb29d94b5367f082cebf /internal/pkg/table/table.go
parent9291621c6ae65c6b11bf1670b1eefae994d92684 (diff)
add support GetTable method for vrfs #2235
Diffstat (limited to 'internal/pkg/table/table.go')
-rw-r--r--internal/pkg/table/table.go39
1 files changed, 33 insertions, 6 deletions
diff --git a/internal/pkg/table/table.go b/internal/pkg/table/table.go
index bfcf2059..2e0dc94a 100644
--- a/internal/pkg/table/table.go
+++ b/internal/pkg/table/table.go
@@ -434,14 +434,41 @@ type TableInfo struct {
NumAccepted int
}
-func (t *Table) Info(id string, as uint32) *TableInfo {
+type TableInfoOptions struct {
+ ID string
+ AS uint32
+ VRF *Vrf
+}
+
+func (t *Table) Info(option ...TableInfoOptions) *TableInfo {
var numD, numP int
+
+ id := GLOBAL_RIB_NAME
+ var vrf *Vrf
+ as := uint32(0)
+
+ for _, o := range option {
+ if o.ID != "" {
+ id = o.ID
+ }
+ if o.VRF != nil {
+ vrf = o.VRF
+ }
+ as = o.AS
+ }
+
for _, d := range t.destinations {
- n := 0
- if id == GLOBAL_RIB_NAME {
- n = len(d.knownPathList)
- } else {
- n = len(d.GetKnownPathList(id, as))
+ paths := d.GetKnownPathList(id, as)
+ n := len(paths)
+
+ if vrf != nil {
+ ps := make([]*Path, 0, len(paths))
+ for _, p := range paths {
+ if CanImportToVrf(vrf, p) {
+ ps = append(ps, p.ToLocal())
+ }
+ }
+ n = len(ps)
}
if n != 0 {
numD++