diff --git a/fw/table/fib-strategy-hashtable.go b/fw/table/fib-strategy-hashtable.go index afadb021..8f85f00e 100644 --- a/fw/table/fib-strategy-hashtable.go +++ b/fw/table/fib-strategy-hashtable.go @@ -214,7 +214,8 @@ func (f *FibStrategyHashTable) pruneTables(entry *baseFibStrategyEntry) { delete(f.virtTable, virtNameHash) } else { // Update with length of next longest real prefix associated - // with this virtual prefix + // with this virtual prefix. + virtEntry.md = 0 for _, l := range f.virtTableNames[virtNameHash] { virtEntry.md = max(virtEntry.md, l) } diff --git a/fw/table/fib-strategy-hashtable_test.go b/fw/table/fib-strategy-hashtable_test.go index 31771cae..34f7510d 100644 --- a/fw/table/fib-strategy-hashtable_test.go +++ b/fw/table/fib-strategy-hashtable_test.go @@ -489,3 +489,18 @@ func TestFIB_HT_RealAndVirtualNodes(t *testing.T) { testFIB_HT_Details(t, uint16(i)) } } + +func TestPruneRecomputesVirtualDepth_HT(t *testing.T) { + newFibStrategyTableHashTable(2) + + shortName, _ := enc.NameFromStr("/a/b/c") + longName, _ := enc.NameFromStr("/a/b/c/d") + FibStrategyTable.InsertNextHopEnc(shortName, 1, 1) + FibStrategyTable.InsertNextHopEnc(longName, 2, 1) + + FibStrategyTable.RemoveNextHopEnc(longName, 2) + + table := FibStrategyTable.(*FibStrategyHashTable) + virtualName, _ := enc.NameFromStr("/a/b") + assert.Equal(t, len(shortName), table.virtTable[virtualName.Hash()].md) +}