From: Vladislav Grishenko Date: Sun, 15 May 2022 20:44:43 +0000 (+0500) Subject: fib: fix dpo-receive address in ip6-ll fibs X-Git-Tag: v23.06-rc0~226 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F42%2F37242%2F5;p=vpp.git fib: fix dpo-receive address in ip6-ll fibs Need to fill frp_addr for local path, it's used by dpo-receive. If not, address output can be invalid: $ sudo vppctl sh ip6-ll fe80::dcad:ff:fe00:3/128 IP6-link-local:loop3, fib_index:2, locks:[IPv6-nd:1, ] fe80::dcad:ff:fe00:3/128 fib:2 index:55 locks:2 IPv6-nd refs:1 entry-flags:connected,import,local, src-flags:added,contributing,active, path-list:[72] locks:2 flags:shared,local, uPRF-list:58 len:0 itfs:[] path:[82] pl-index:72 ip6 weight=1 pref=0 receive: oper-flags:resolved, cfg-flags:local,glean, [@0]: dpo-receive: 8000:100:fe80::dcad:ff on loop3 forwarding: unicast-ip6-chain [@0]: dpo-load-balance: [proto:ip6 index:57 buckets:1 uRPF:58 to:[0:0]] [0] [@2]: dpo-receive: 8000:100:fe80::dcad:ff on loop3 Type: fix Change-Id: Ib9874c5eac74af789e721098d512a1058cb8e404 Signed-off-by: Vladislav Grishenko --- diff --git a/src/vnet/ip/ip6_ll_table.c b/src/vnet/ip/ip6_ll_table.c index b3f42daf26c..3dc251707bb 100644 --- a/src/vnet/ip/ip6_ll_table.c +++ b/src/vnet/ip/ip6_ll_table.c @@ -111,8 +111,13 @@ ip6_ll_table_entry_update (const ip6_ll_prefix_t * ilp, .frp_flags = flags, .frp_sw_if_index = ilp->ilp_sw_if_index, .frp_proto = DPO_PROTO_IP6, + .frp_fib_index = ~0, + .frp_weight = 1, }; - fib_prefix_t fp; + fib_prefix_t fp = { 0 }; + + if (flags & FIB_ROUTE_PATH_LOCAL) + rpath.frp_addr.ip6 = ilp->ilp_addr; vec_validate_init_empty (ip6_ll_table.ilt_fibs, ilp->ilp_sw_if_index, ~0); diff --git a/test/test_ip6.py b/test/test_ip6.py index 01a6d94288c..38bce973e86 100644 --- a/test/test_ip6.py +++ b/test/test_ip6.py @@ -274,7 +274,7 @@ class TestIPv6(TestIPv6ND): def tearDown(self): """Run standard test teardown and log ``show ip6 neighbors``.""" - for i in self.interfaces: + for i in reversed(self.interfaces): i.unconfig_ip6() i.admin_down() for i in self.sub_interfaces: @@ -1100,6 +1100,8 @@ class TestIPv6(TestIPv6ND): self.pg_start() subitf = VppDot1QSubint(self, self.pg1, 99) + self.interfaces.append(subitf) + self.sub_interfaces.append(subitf) subitf.admin_up() subitf.config_ip6()