diff options
-rw-r--r-- | src/vnet/mpls/mpls.api | 2 | ||||
-rw-r--r-- | src/vnet/mpls/mpls_api.c | 1 | ||||
-rw-r--r-- | src/vnet/mpls/mpls_tunnel.c | 9 | ||||
-rw-r--r-- | test/vpp_mpls_tunnel_interface.py | 20 | ||||
-rw-r--r-- | test/vpp_papi_provider.py | 3 |
5 files changed, 29 insertions, 6 deletions
diff --git a/src/vnet/mpls/mpls.api b/src/vnet/mpls/mpls.api index 7fa24f4812d..7d38ffc5bdc 100644 --- a/src/vnet/mpls/mpls.api +++ b/src/vnet/mpls/mpls.api @@ -88,7 +88,7 @@ define mpls_tunnel_dump manual_endian manual_print define mpls_tunnel_details { u32 context; - u8 mt_sw_if_index; + u32 mt_sw_if_index; u8 mt_tunnel_index; u8 mt_l2_only; u8 mt_is_multicast; diff --git a/src/vnet/mpls/mpls_api.c b/src/vnet/mpls/mpls_api.c index dbd1d8b6e31..97b66965190 100644 --- a/src/vnet/mpls/mpls_api.c +++ b/src/vnet/mpls/mpls_api.c @@ -439,6 +439,7 @@ send_mpls_tunnel_entry (u32 mti, void *arg) mp->context = ctx->context; mp->mt_tunnel_index = ntohl (mti); + mp->mt_sw_if_index = ntohl (mt->mt_sw_if_index); mp->mt_count = ntohl (n); fib_path_list_walk (mt->mt_path_list, fib_path_encode, &api_rpaths); diff --git a/src/vnet/mpls/mpls_tunnel.c b/src/vnet/mpls/mpls_tunnel.c index 1d85c3bc78c..55b60cdb1e5 100644 --- a/src/vnet/mpls/mpls_tunnel.c +++ b/src/vnet/mpls/mpls_tunnel.c @@ -165,9 +165,12 @@ mpls_tunnel_mk_lb (mpls_tunnel_t *mt, lb_proto = fib_forw_chain_type_to_dpo_proto(fct); - fib_path_list_walk(mt->mt_path_list, - mpls_tunnel_collect_forwarding, - &ctx); + if (FIB_NODE_INDEX_INVALID != mt->mt_path_list) + { + fib_path_list_walk(mt->mt_path_list, + mpls_tunnel_collect_forwarding, + &ctx); + } if (!dpo_id_is_valid(dpo_lb)) { diff --git a/test/vpp_mpls_tunnel_interface.py b/test/vpp_mpls_tunnel_interface.py index b125f3c7277..3cbf856dfc5 100644 --- a/test/vpp_mpls_tunnel_interface.py +++ b/test/vpp_mpls_tunnel_interface.py @@ -33,9 +33,12 @@ class VppMPLSTunnelInterface(VppInterface): l2_only=self.is_l2) sw_if_index = reply.sw_if_index self.set_sw_if_index(sw_if_index) + self._test.registry.register(self, self._test.logger) def remove_vpp_config(self): for path in self.t_paths: + lstack = path.encode_labels() + self.test.vapi.mpls_tunnel_add_del( self.sw_if_index, 1, # IPv4 next-hop @@ -44,6 +47,19 @@ class VppMPLSTunnelInterface(VppInterface): path.nh_table_id, path.weight, next_hop_via_label=path.nh_via_label, - next_hop_out_label_stack=path.nh_labels, - next_hop_n_out_labels=len(path.nh_labels), + next_hop_out_label_stack=lstack, + next_hop_n_out_labels=len(lstack), is_add=0) + + def query_vpp_config(self): + dump = self._test.vapi.mpls_tunnel_dump() + for t in dump: + if self.sw_if_index == t.mt_sw_if_index: + return True + return False + + def __str__(self): + return self.object_id() + + def object_id(self): + return ("mpls-tunnel%d" % self.sw_if_index) diff --git a/test/vpp_papi_provider.py b/test/vpp_papi_provider.py index 92173ef9a64..0c98f7ae1a0 100644 --- a/test/vpp_papi_provider.py +++ b/test/vpp_papi_provider.py @@ -1345,6 +1345,9 @@ class VppPapiProvider(object): 'mt_next_hop_via_label': next_hop_via_label, 'mt_next_hop_out_label_stack': next_hop_out_label_stack}) + def mpls_tunnel_dump(self): + return self.api(self.papi.mpls_tunnel_dump, {}) + def nat44_interface_add_del_feature( self, sw_if_index, |