diff --git a/routingtable/vrf/vrf.go b/routingtable/vrf/vrf.go index 2a850939e092e854dee9d8e3aeb06c00eb4a9242..f829549ea050262ee0bf26a34e1e8c0f4b761ec9 100644 --- a/routingtable/vrf/vrf.go +++ b/routingtable/vrf/vrf.go @@ -121,3 +121,16 @@ func (v *VRF) RIBByName(name string) (rib *locRIB.LocRIB, found bool) { rib, found = v.ribNames[name] return rib, found } + +// GetRIBNames returns an []string containing all rib-names +func (v *VRF) GetRIBNames() []string { + v.mu.Lock() + defer v.mu.Unlock() + + ribNames := make([]string, 0) + for ribName := range v.ribNames { + ribNames = append(ribNames, ribName) + } + + return ribNames +} diff --git a/routingtable/vrf/vrf_test.go b/routingtable/vrf/vrf_test.go index 4caa68418ae142270e5625b61e4cbb1aeebe1ffe..3ee44dbdf72ddfdeb547fd7c3fd86d2417de6abc 100644 --- a/routingtable/vrf/vrf_test.go +++ b/routingtable/vrf/vrf_test.go @@ -81,3 +81,15 @@ func TestUnregister(t *testing.T) { _, found = globalRegistry.vrfsID[vrfID] assert.False(t, found, "vrf must not be in global registry") } + +func TestGetRIBNames(t *testing.T) { + vrfName := "namedRIBs" + vrfID := uint32(8) + v, err := New(vrfName, vrfID) + assert.Nil(t, err, "error must be nil on first invokation") + + ribNames := v.GetRIBNames() + expectedRibNames := []string{"inet.8", "inet6.8"} + + assert.EqualValues(t, expectedRibNames, ribNames, "rib names must match") +}