Uploaded image for project: 'vpp'
  1. vpp
  2. VPP-643

Incorect reset of IPv6 FIB

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: High High
    • 17.04
    • None
    • None

      Reset of IPv6 FIB creates incorrect entry in the IPv6 FIB that leads to VPP crash:

      IPv6 VRF 1 before reset:

      ipv6-VRF:1, fib_index 1, flow hash: src dst sport dport proto
      ::/0
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:15 buckets:1 uRPF:13 to:[0:0]]
      [0] [@0]: dpo-drop ip6
      fd01:1::1/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:19 buckets:1 uRPF:17 to:[0:0]]
      [0] [@2]: dpo-receive: fd01:1::1 on pg0
      fd01:1::/64
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:18 buckets:1 uRPF:16 to:[0:0]]
      [0] [@4]: ipv6-glean: pg0
      fd01:1::2/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:21 buckets:1 uRPF:19 to:[0:0]]
      [0] [@5]: ipv6 via fd01:1::2 pg0: IP6: 02:fe:e6:5d:e0:f0 -> 02:01:00:00:ff:02
      fd01:1::3/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:22 buckets:1 uRPF:20 to:[0:0]]
      [0] [@5]: ipv6 via fd01:1::3 pg0: IP6: 02:fe:e6:5d:e0:f0 -> 02:01:00:00:ff:03
      fd01:1::4/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:23 buckets:1 uRPF:21 to:[0:0]]
      [0] [@5]: ipv6 via fd01:1::4 pg0: IP6: 02:fe:e6:5d:e0:f0 -> 02:01:00:00:ff:04
      fd01:1::5/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:24 buckets:1 uRPF:22 to:[0:0]]
      [0] [@5]: ipv6 via fd01:1::5 pg0: IP6: 02:fe:e6:5d:e0:f0 -> 02:01:00:00:ff:05
      fd01:1::6/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:25 buckets:1 uRPF:23 to:[0:0]]
      [0] [@5]: ipv6 via fd01:1::6 pg0: IP6: 02:fe:e6:5d:e0:f0 -> 02:01:00:00:ff:06
      fd01:2::/64
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:26 buckets:1 uRPF:24 to:[0:0]]
      [0] [@4]: ipv6-glean: pg1
      fd01:2::1/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:27 buckets:1 uRPF:25 to:[0:0]]
      [0] [@2]: dpo-receive: fd01:2::1 on pg1
      fd01:2::2/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:29 buckets:1 uRPF:27 to:[0:0]]
      [0] [@5]: ipv6 via fd01:2::2 pg1: IP6: 02:fe:8b:a4:8d:05 -> 02:02:00:00:ff:02
      fd01:2::3/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:30 buckets:1 uRPF:28 to:[0:0]]
      [0] [@5]: ipv6 via fd01:2::3 pg1: IP6: 02:fe:8b:a4:8d:05 -> 02:02:00:00:ff:03
      fd01:2::4/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:31 buckets:1 uRPF:29 to:[0:0]]
      [0] [@5]: ipv6 via fd01:2::4 pg1: IP6: 02:fe:8b:a4:8d:05 -> 02:02:00:00:ff:04
      fd01:2::5/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:32 buckets:1 uRPF:30 to:[0:0]]
      [0] [@5]: ipv6 via fd01:2::5 pg1: IP6: 02:fe:8b:a4:8d:05 -> 02:02:00:00:ff:05
      fd01:2::6/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:33 buckets:1 uRPF:31 to:[0:0]]
      [0] [@5]: ipv6 via fd01:2::6 pg1: IP6: 02:fe:8b:a4:8d:05 -> 02:02:00:00:ff:06
      fd01:3::/64
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:34 buckets:1 uRPF:32 to:[0:0]]
      [0] [@4]: ipv6-glean: pg2
      fd01:3::1/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:35 buckets:1 uRPF:33 to:[0:0]]
      [0] [@2]: dpo-receive: fd01:3::1 on pg2
      fd01:3::2/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:37 buckets:1 uRPF:35 to:[0:0]]
      [0] [@5]: ipv6 via fd01:3::2 pg2: IP6: 02:fe:5d:97:37:2c -> 02:03:00:00:ff:02
      fd01:3::3/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:38 buckets:1 uRPF:36 to:[0:0]]
      [0] [@5]: ipv6 via fd01:3::3 pg2: IP6: 02:fe:5d:97:37:2c -> 02:03:00:00:ff:03
      fd01:3::4/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:39 buckets:1 uRPF:37 to:[0:0]]
      [0] [@5]: ipv6 via fd01:3::4 pg2: IP6: 02:fe:5d:97:37:2c -> 02:03:00:00:ff:04
      fd01:3::5/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:40 buckets:1 uRPF:38 to:[0:0]]
      [0] [@5]: ipv6 via fd01:3::5 pg2: IP6: 02:fe:5d:97:37:2c -> 02:03:00:00:ff:05
      fd01:3::6/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:41 buckets:1 uRPF:39 to:[0:0]]
      [0] [@5]: ipv6 via fd01:3::6 pg2: IP6: 02:fe:5d:97:37:2c -> 02:03:00:00:ff:06
      fe80::/10
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:16 buckets:1 uRPF:14 to:[0:0]]
      [0] [@2]: dpo-receive
      fe80::fe:5dff:fe97:372c/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:36 buckets:1 uRPF:34 to:[0:0]]
      [0] [@2]: dpo-receive: fe80::fe:5dff:fe97:372c on pg2
      fe80::fe:8bff:fea4:8d05/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:28 buckets:1 uRPF:26 to:[0:0]]
      [0] [@2]: dpo-receive: fe80::fe:8bff:fea4:8d05 on pg1
      fe80::fe:e6ff:fe5d:e0f0/128
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:20 buckets:1 uRPF:18 to:[0:0]]
      [0] [@2]: dpo-receive: fe80::fe:e6ff:fe5d:e0f0 on pg0

      and Ipv6 VRF 1 after reset (API: reset_fib (

      {'vrf_id': 1, 'is_ipv6': 1}

      )):

      ipv6-VRF:1, fib_index 1, flow hash: src dst sport dport proto
      ::/0
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:15 buckets:1 uRPF:13 to:[0:0]]
      [0] [@0]: dpo-drop ip6
      fd01:1::/64
      UNRESOLVED

      fe80::/10
      unicast-ip6-chain
      [@0]: dpo-load-balance: [index:16 buckets:1 uRPF:14 to:[0:0]]
      [0] [@2]: dpo-receive

      and then VPP crashes when packet generator is enabled:

      12:14:52,170 CLI: packet-generator enable
      12:14:57,171 — addError() TestIP6VrfMultiInst.test_ip6_vrf_02( IP6 VRF Multi-instance test 2 - delete 2 VRFs
      ) called, err is (<type 'exceptions.IOError'>, IOError(3, 'Waiting for reply timed out'), <traceback object at 0x2abab83db5a8>)
      12:14:57,172 formatted exception is:
      Traceback (most recent call last):
      File "/usr/lib/python2.7/unittest/case.py", line 331, in run
      testMethod()
      File "/home/vpp/Documents/vpp/test/test_ip6_vrf_multi_instance.py", line 365, in test_ip6_vrf_02
      self.run_verify_test()
      File "/home/vpp/Documents/vpp/test/test_ip6_vrf_multi_instance.py", line 322, in run_verify_test
      self.pg_start()
      File "/home/vpp/Documents/vpp/test/framework.py", line 398, in pg_start
      cls.vapi.cli('packet-generator enable')
      File "/home/vpp/Documents/vpp/test/vpp_papi_provider.py", line 169, in cli
      r = self.papi.cli_inband(length=len(cli), cmd=cli)
      File "build/bdist.linux-x86_64/egg/vpp_papi/vpp_papi.py", line 305, in <lambda>
      f = lambda **kwargs: (self._call_vpp(i, msgdef, multipart, **kwargs))
      File "build/bdist.linux-x86_64/egg/vpp_papi/vpp_papi.py", line 547, in _call_vpp
      r = self.results_wait(context)
      File "build/bdist.linux-x86_64/egg/vpp_papi/vpp_papi.py", line 395, in results_wait
      raise IOError(3, 'Waiting for reply timed out')
      IOError: [Errno 3] Waiting for reply timed out

      12:14:57,172 — tearDown() for TestIP6VrfMultiInst.test_ip6_vrf_02( IP6 VRF Multi-instance test 2 - delete 2 VRFs
      ) called —
      12:14:57,172 CLI: show trace
      12:14:57,172 VPP subprocess died unexpectedly with returncode -6 [unknown]
      12:14:57,172 — addError() TestIP6VrfMultiInst.test_ip6_vrf_02( IP6 VRF Multi-instance test 2 - delete 2 VRFs
      ) called, err is (<class 'hook.VppDiedError'>, VppDiedError('VPP subprocess died unexpectedly with returncode -6 [unknown]',), <traceback object at 0x2abab8427098>)
      12:14:57,173 formatted exception is:
      Traceback (most recent call last):
      File "/usr/lib/python2.7/unittest/case.py", line 360, in run
      self.tearDown()
      File "/home/vpp/Documents/vpp/test/test_ip6_vrf_multi_instance.py", line 148, in tearDown
      super(TestIP6VrfMultiInst, self).tearDown()
      File "/home/vpp/Documents/vpp/test/framework.py", line 333, in tearDown
      self.logger.debug(self.vapi.cli("show trace"))
      File "/home/vpp/Documents/vpp/test/vpp_papi_provider.py", line 167, in cli
      self.hook.before_cli(cli)
      File "/home/vpp/Documents/vpp/test/hook.py", line 138, in before_cli
      self.poll_vpp()
      File "/home/vpp/Documents/vpp/test/hook.py", line 115, in poll_vpp
      raise VppDiedError(msg)
      VppDiedError: VPP subprocess died unexpectedly with returncode -6 [unknown]

      More data in attached files.

            nranns Neale Ranns
            jgelety Jan Gelety
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: