fib: Fix crash on cover update to non activated adj source

if the adj source is not active then there is no existing cover
during a cover update

Type: fix
Ticket: VPP-1803
Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: Ie912f1c99345de4fb012bdcd97b443098d4a7351
This commit is contained in:
Neale Ranns
2019-11-26 19:30:08 +00:00
committed by Damjan Marion
parent acaa04a22d
commit 9efcee6e7b
3 changed files with 76 additions and 7 deletions

View File

@@ -20,6 +20,7 @@ from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpMRoute, \
from vpp_sub_interface import VppSubInterface, VppDot1QSubint, VppDot1ADSubint
from vpp_papi import VppEnum
from vpp_neighbor import VppNeighbor
from vpp_lo_interface import VppLoInterface
NUM_PKTS = 67
@@ -2091,5 +2092,68 @@ class TestIPReplace(VppTestCase):
self.assertEqual(len(t.mdump()), 1)
class TestIPCover(VppTestCase):
""" IPv4 Table Cover """
@classmethod
def setUpClass(cls):
super(TestIPCover, cls).setUpClass()
@classmethod
def tearDownClass(cls):
super(TestIPCover, cls).tearDownClass()
def setUp(self):
super(TestIPCover, self).setUp()
self.create_pg_interfaces(range(4))
table_id = 1
self.tables = []
for i in self.pg_interfaces:
i.admin_up()
i.config_ip4()
i.resolve_arp()
i.generate_remote_hosts(2)
self.tables.append(VppIpTable(self, table_id).add_vpp_config())
table_id += 1
def tearDown(self):
super(TestIPCover, self).tearDown()
for i in self.pg_interfaces:
i.admin_down()
i.unconfig_ip4()
def test_cover(self):
""" IP Table Cover """
# add a loop back with a /32 prefix
lo = VppLoInterface(self)
lo.admin_up()
a = VppIpInterfaceAddress(self, lo, "127.0.0.1", 32).add_vpp_config()
# add a neighbour that matches the loopback's /32
nbr = VppNeighbor(self,
lo.sw_if_index,
lo.remote_mac,
"127.0.0.1").add_vpp_config()
# add the default route which will be the cover for /32
r = VppIpRoute(self, "0.0.0.0", 0,
[VppRoutePath("127.0.0.1",
lo.sw_if_index)],
register=False).add_vpp_config()
# add/remove/add a longer mask cover
r = VppIpRoute(self, "127.0.0.0", 8,
[VppRoutePath("127.0.0.1",
lo.sw_if_index)]).add_vpp_config()
r.remove_vpp_config()
r.add_vpp_config()
# remove the default route
r.remove_vpp_config()
if __name__ == '__main__':
unittest.main(testRunner=VppTestRunner)

View File

@@ -246,6 +246,7 @@ class VppIpInterfaceAddress(VppObject):
sw_if_index=self.intf.sw_if_index, prefix=self.prefix,
is_add=1)
self._test.registry.register(self, self._test.logger)
return self
def remove_vpp_config(self):
self._test.vapi.sw_interface_add_del_address(