Re: [vpp-dev] [vppsb-dev] Router plugin with VPP 1707 - incoming OSPF Hello packets are dropped by VPP
Probably, but I don’t know the command. Essentially you want a CLI command that configures a fib to direct packets/flows to an arbitrary node. Maybe “ip route” or “ip mroute” has what you need. DBGvpp# ip help mroute ip mroute [add|del] / [table ] [via [], … route ip route [add|del] [count ] / [table ] [via \ [] [weight ]] | [via arp ] | [via drop|punt|local|arp|classify ] [lookup in table ] -Jeff From: Michael Borokhovich [mailto:michael...@gmail.com] Sent: Monday, October 09, 2017 3:26 PM To: Shaw, Jeffrey B Cc: vpp-dev ; vppsb-...@lists.fd.io Subject: Re: [vppsb-dev] Router plugin with VPP 1707 - incoming OSPF Hello packets are dropped by VPP Jef, is there a cli command I can use to instruct VPP to forward multicast to that node? On Mon, Oct 9, 2017 at 6:23 PM, Shaw, Jeffrey B mailto:jeffrey.b.s...@intel.com>> wrote: We have this code, which is supposed to tell the fib that packets going to the 224.0.0.x/24 network should be delivered to our node. { dpo_proto_t proto = 0; dpo_id_t dpo = DPO_INVALID; fib_prefix_t pfx = {}; pfx.fp_addr.ip4.as_u32 = 0x00E0; /* 224.0.0.0 */ pfx.fp_len = 24; pfx.fp_proto = FIB_PROTOCOL_IP4; proto = DPO_PROTO_IP4; vlib_node_add_next (vm, ip4_lookup_node.index, im->tx_node_index); dpo_set(&dpo, tap_inject_dpo_type, proto, ~0); fib_table_entry_special_dpo_add(0, &pfx, FIB_SOURCE_API, FIB_ENTRY_FLAG_EXCLUSIVE, &dpo); dpo_reset(&dpo); } It is possible this code isn’t working the same as it has in the past. With the FIB changes since the router plugin was initially developed, there might be a different/better way to get multicast packets delivered to our node. -Jef From: vppsb-dev-boun...@lists.fd.io<mailto:vppsb-dev-boun...@lists.fd.io> [mailto:vppsb-dev-boun...@lists.fd.io<mailto:vppsb-dev-boun...@lists.fd.io>] On Behalf Of Michael Borokhovich Sent: Monday, October 09, 2017 3:16 PM To: vpp-dev mailto:vpp-dev@lists.fd.io>>; vppsb-...@lists.fd.io<mailto:vppsb-...@lists.fd.io> Subject: Re: [vppsb-dev] Router plugin with VPP 1707 - incoming OSPF Hello packets are dropped by VPP Here is the trace of the packet that is dropped. Any help is very appreciated. 00:05:18:275995: dpdk-input GigabitEthernet0/4/0 rx queue 0 buffer 0x446a: current data 14, length 68, free-list 0, clone-count 0, totlen-nifb 0, trace 0x1 PKT MBUF: port 0, nb_segs 1, pkt_len 82 buf_len 2176, data_len 82, ol_flags 0x0, data_off 128, phys_addr 0x6990d980 packet_type 0x0 IP4: fa:16:3e:4a:b3:60 -> 01:00:5e:00:00:05 OSPF: 10.0.10.1 -> 224.0.0.5 tos 0xc0, ttl 1, length 68, checksum 0x2986 fragment id 0x9b15 00:05:18:276166: ip4-input OSPF: 10.0.10.1 -> 224.0.0.5 tos 0xc0, ttl 1, length 68, checksum 0x2986 fragment id 0x9b15 00:05:18:276403: ip4-mfib-forward-lookup fib 0 entry 0 00:05:18:276503: ip4-mfib-forward-rpf entry 0 -1 00:05:18:276516: ip4-drop OSPF: 10.0.10.1 -> 224.0.0.5 tos 0xc0, ttl 1, length 68, checksum 0x2986 fragment id 0x9b15 00:05:18:276595: error-drop ip4-input: ip4 adjacency drop On Mon, Oct 9, 2017 at 12:14 PM, Michael Borokhovich mailto:michael...@gmail.com>> wrote: Hi, After applying the fixes suggested by Jeff, I was able to compile the router plugin with VPP 1707. It runs and allows to enable tap-inject and set up interfaces addresses without crashing. The problem I'm facing now is with setting up FRR OSPF on top of the VPP+router plugin. FRR OSPF is configured and I see OSPF Hello packets flowing out of the machine. However, the incoming OSPF Hello packets are dropped by VPP (with the reason "ip4 adjacency drop") and never reach the FRR. The same settings worked with VPP 1609 + router plugin. Maybe I need to configure something manually in VPP to allow reception of OSPF multicast packets? So, to summarize the problem, incoming OSPF Hello packets are dropped by VPP, while the outgoing hello packets successfully sent by FRR via VPP to the neighbouring router. Any help is appreciated. Thanks, Michael. ___ vpp-dev mailing list vpp-dev@lists.fd.io https://lists.fd.io/mailman/listinfo/vpp-dev
Re: [vpp-dev] [vppsb-dev] Router plugin with VPP 1707 - incoming OSPF Hello packets are dropped by VPP
We have this code, which is supposed to tell the fib that packets going to the 224.0.0.x/24 network should be delivered to our node. { dpo_proto_t proto = 0; dpo_id_t dpo = DPO_INVALID; fib_prefix_t pfx = {}; pfx.fp_addr.ip4.as_u32 = 0x00E0; /* 224.0.0.0 */ pfx.fp_len = 24; pfx.fp_proto = FIB_PROTOCOL_IP4; proto = DPO_PROTO_IP4; vlib_node_add_next (vm, ip4_lookup_node.index, im->tx_node_index); dpo_set(&dpo, tap_inject_dpo_type, proto, ~0); fib_table_entry_special_dpo_add(0, &pfx, FIB_SOURCE_API, FIB_ENTRY_FLAG_EXCLUSIVE, &dpo); dpo_reset(&dpo); } It is possible this code isn’t working the same as it has in the past. With the FIB changes since the router plugin was initially developed, there might be a different/better way to get multicast packets delivered to our node. -Jef From: vppsb-dev-boun...@lists.fd.io [mailto:vppsb-dev-boun...@lists.fd.io] On Behalf Of Michael Borokhovich Sent: Monday, October 09, 2017 3:16 PM To: vpp-dev ; vppsb-...@lists.fd.io Subject: Re: [vppsb-dev] Router plugin with VPP 1707 - incoming OSPF Hello packets are dropped by VPP Here is the trace of the packet that is dropped. Any help is very appreciated. 00:05:18:275995: dpdk-input GigabitEthernet0/4/0 rx queue 0 buffer 0x446a: current data 14, length 68, free-list 0, clone-count 0, totlen-nifb 0, trace 0x1 PKT MBUF: port 0, nb_segs 1, pkt_len 82 buf_len 2176, data_len 82, ol_flags 0x0, data_off 128, phys_addr 0x6990d980 packet_type 0x0 IP4: fa:16:3e:4a:b3:60 -> 01:00:5e:00:00:05 OSPF: 10.0.10.1 -> 224.0.0.5 tos 0xc0, ttl 1, length 68, checksum 0x2986 fragment id 0x9b15 00:05:18:276166: ip4-input OSPF: 10.0.10.1 -> 224.0.0.5 tos 0xc0, ttl 1, length 68, checksum 0x2986 fragment id 0x9b15 00:05:18:276403: ip4-mfib-forward-lookup fib 0 entry 0 00:05:18:276503: ip4-mfib-forward-rpf entry 0 -1 00:05:18:276516: ip4-drop OSPF: 10.0.10.1 -> 224.0.0.5 tos 0xc0, ttl 1, length 68, checksum 0x2986 fragment id 0x9b15 00:05:18:276595: error-drop ip4-input: ip4 adjacency drop On Mon, Oct 9, 2017 at 12:14 PM, Michael Borokhovich mailto:michael...@gmail.com>> wrote: Hi, After applying the fixes suggested by Jeff, I was able to compile the router plugin with VPP 1707. It runs and allows to enable tap-inject and set up interfaces addresses without crashing. The problem I'm facing now is with setting up FRR OSPF on top of the VPP+router plugin. FRR OSPF is configured and I see OSPF Hello packets flowing out of the machine. However, the incoming OSPF Hello packets are dropped by VPP (with the reason "ip4 adjacency drop") and never reach the FRR. The same settings worked with VPP 1609 + router plugin. Maybe I need to configure something manually in VPP to allow reception of OSPF multicast packets? So, to summarize the problem, incoming OSPF Hello packets are dropped by VPP, while the outgoing hello packets successfully sent by FRR via VPP to the neighbouring router. Any help is appreciated. Thanks, Michael. ___ vpp-dev mailing list vpp-dev@lists.fd.io https://lists.fd.io/mailman/listinfo/vpp-dev
Re: [vpp-dev] Multiple VRFs in 1609
I’ve submitted changes 8716, 8717, and 8718, which should fix the issues we’ve discussed in this thread. Thanks, Jeff From: Michael Borokhovich [mailto:michael...@gmail.com] Sent: Monday, October 09, 2017 9:07 AM To: Ni, Hongjun Cc: Neale Ranns (nranns) ; Shaw, Jeffrey B ; vppsb-...@lists.fd.io; vpp-dev Subject: Re: [vpp-dev] Multiple VRFs in 1609 Thanks, Hongjun, I will check this once I see that the routing plugin works with VPP1707. On Fri, Oct 6, 2017 at 7:25 PM, Ni, Hongjun mailto:hongjun...@intel.com>> wrote: Hi Michael and Neale, As per my previous fixing experience on router plugin, I guess that the cause may locate at: Function tap_inject_enabel(): add IPv4 multicast route. Please take a look at this function and multicast route involved. -Hongjun From: vpp-dev-boun...@lists.fd.io<mailto:vpp-dev-boun...@lists.fd.io> [mailto:vpp-dev-boun...@lists.fd.io<mailto:vpp-dev-boun...@lists.fd.io>] On Behalf Of Michael Borokhovich Sent: Friday, October 6, 2017 11:22 PM To: Neale Ranns (nranns) mailto:nra...@cisco.com>> Cc: Shaw, Jeffrey B mailto:jeffrey.b.s...@intel.com>>; vppsb-...@lists.fd.io<mailto:vppsb-...@lists.fd.io>; vpp-dev mailto:vpp-dev@lists.fd.io>> Subject: Re: [vpp-dev] Multiple VRFs in 1609 I will look into it. It looks like the calling function is in the file "turbotap/turbotap/device.c" in vppsb. However, I'm not familiar with the logic there... I will try to fix it temporary locally directly in the "vlib_increment_simple_counter" function and see if it works. Thanks! On Fri, Oct 6, 2017 at 11:08 AM, Neale Ranns (nranns) mailto:nra...@cisco.com>> wrote: Hi Michael, It would be best if you fixed the caller to not pass ~0. In this case the ~0 is coming from the packet VLIB_RX interface. So best to find and fix the input node that should have set this correctly. /neale From: Michael Borokhovich mailto:michael...@gmail.com>> Date: Friday, 6 October 2017 at 15:49 To: "Shaw, Jeffrey B" mailto:jeffrey.b.s...@intel.com>> Cc: "Pierre Pfister (ppfister)" mailto:ppfis...@cisco.com>>, Florin Coras mailto:fcoras.li...@gmail.com>>, vpp-dev mailto:vpp-dev@lists.fd.io>>, "Neale Ranns (nranns)" mailto:nra...@cisco.com>>, "vppsb-...@lists.fd.io<mailto:vppsb-...@lists.fd.io>" mailto:vppsb-...@lists.fd.io>> Subject: Re: [vpp-dev] Multiple VRFs in 1609 Hi Jeff, Regarding the workaround for the problem [3] (segfault). Do you think it is enough just to add a simple check e.g., if(index != ~0)? Or we have a problem somewhere else since the ~0 index should not be passed to this function? Thanks, Michael. On Thu, Oct 5, 2017 at 1:03 PM, Shaw, Jeffrey B mailto:jeffrey.b.s...@intel.com>> wrote: Hi Michael, do you really need the router plugin? Based on the commands you’re using it seems you’re adding routes using the vpp cli interface, which is not how the router plugin is supposed to work. Those routes won’t show up on the control side (i.e. Linux). Nor is there any support for multiple routing tables. The routes should be added from the control side, then they are mirrored to VPP. @Pierre, I was able to get the router plugin to work with VPP 1707 (348edb1 [origin/stable/1707] Set MAC address needs the HW interface index). I used vppsb commit 529ec1b [origin/master] Fix name of VCL LD_PRELOAD lib dir env var. A few things went wrong: 1) Had to disable testrtnl_plugin in vppsb/netlink[1] to get netlink to compile 2) Delete the reference to vlib_buffer_chain_validate() in vppsb/router after symbol lookup failure[2] 3) Work-around a segmentation fault[3] in vlib_increment_simple_counter()due to an index being set to ~0 I can submit two patches to fix 1 and 2. For number 3, it looks like we might want to check for an invalid interface? This function is probably used often, so adding that check will be bad for performance. Maybe we can check for invalid interface in process_drop_punt() instead. always_inline void vlib_increment_simple_counter (vlib_simple_counter_main_t * cm, u32 thread_index, u32 index, u64 increment) { counter_t *my_counters; my_counters = cm->counters[thread_index]; my_counters[index] += increment; <--- seg-fault happens here when index is ~0, maybe check it? } -Jeff More details… [1] Building netlink fails... need to disable test.c /root/vpp/build-data/../netlink/test/test.c: In function ‘mapper_ns_add_command_fn’: /root/vpp/build-data/../netlink/test/test.c:125:14: error: implicit declaration of function ‘ip4_fib_index_from_table_id’ [-Werror=implicit-function-declaration] u32 fib4 = ip4_fib_index_from_table_id(table_id); ^ /root/vpp/build-data/../netlink/test/test.c:126:14: error: implicit declaration of function ‘ip6_fib_index_from_
Re: [vpp-dev] Multiple VRFs in 1609
Hi Michael, do you really need the router plugin? Based on the commands you’re using it seems you’re adding routes using the vpp cli interface, which is not how the router plugin is supposed to work. Those routes won’t show up on the control side (i.e. Linux). Nor is there any support for multiple routing tables. The routes should be added from the control side, then they are mirrored to VPP. @Pierre, I was able to get the router plugin to work with VPP 1707 (348edb1 [origin/stable/1707] Set MAC address needs the HW interface index). I used vppsb commit 529ec1b [origin/master] Fix name of VCL LD_PRELOAD lib dir env var. A few things went wrong: 1) Had to disable testrtnl_plugin in vppsb/netlink[1] to get netlink to compile 2) Delete the reference to vlib_buffer_chain_validate() in vppsb/router after symbol lookup failure[2] 3) Work-around a segmentation fault[3] in vlib_increment_simple_counter()due to an index being set to ~0 I can submit two patches to fix 1 and 2. For number 3, it looks like we might want to check for an invalid interface? This function is probably used often, so adding that check will be bad for performance. Maybe we can check for invalid interface in process_drop_punt() instead. always_inline void vlib_increment_simple_counter (vlib_simple_counter_main_t * cm, u32 thread_index, u32 index, u64 increment) { counter_t *my_counters; my_counters = cm->counters[thread_index]; my_counters[index] += increment; <--- seg-fault happens here when index is ~0, maybe check it? } -Jeff More details… [1] Building netlink fails... need to disable test.c /root/vpp/build-data/../netlink/test/test.c: In function ‘mapper_ns_add_command_fn’: /root/vpp/build-data/../netlink/test/test.c:125:14: error: implicit declaration of function ‘ip4_fib_index_from_table_id’ [-Werror=implicit-function-declaration] u32 fib4 = ip4_fib_index_from_table_id(table_id); ^ /root/vpp/build-data/../netlink/test/test.c:126:14: error: implicit declaration of function ‘ip6_fib_index_from_table_id’ [-Werror=implicit-function-declaration] u32 fib6 = ip6_fib_index_from_table_id(table_id); ^ cc1: all warnings being treated as errors [2] After "enable tap-inject", we see vpp0 in the Linux "ip link". Setting "ip link set dev vpp0 up" produces the following error... need to not call that function. /root/vpp/build-root/install-vpp_debug-native/vpp/bin/vpp: symbol lookup error: /usr/lib/vpp_plugins/router.so: undefined symbol: vlib_buffer_chain_validate [3] Segmentation fault because the "index" is ~0 Thread 1 "vpp_main" received signal SIGSEGV, Segmentation fault. 0x76d985a6 in vlib_increment_simple_counter (cm=0x7fffb67143bc, thread_index=0, index=4294967295, increment=1) at /root/vpp/build-data/../src/vlib/counter.h:84 84my_counters[index] += increment; (gdb) bt #0 0x76d985a6 in vlib_increment_simple_counter (cm=0x7fffb67143bc, thread_index=0, index=4294967295, increment=1) at /root/vpp/build-data/../src/vlib/counter.h:84 #1 0x76d9c8d8 in process_drop_punt (vm=0x77b9d440 , node=0x7fffb6758ec0, frame=0x7fffb5c92400, disposition=VNET_ERROR_DISPOSITION_DROP) at /root/vpp/build-data/../src/vnet/interface_output.c:1018 #2 0x76d9cebb in process_drop (vm=0x77b9d440 , node=0x7fffb6758ec0, frame=0x7fffb5c92400) at /root/vpp/build-data/../src/vnet/interface_output.c:1155 #3 0x778f40f0 in dispatch_node (vm=0x77b9d440 , node=0x7fffb6758ec0, type=VLIB_NODE_TYPE_INTERNAL, dispatch_state=VLIB_NODE_STATE_POLLING, frame=0x7fffb5c92400, last_time_stamp=1322800753683) at /root/vpp/build-data/../src/vlib/main.c:1016 #4 0x778f46a9 in dispatch_pending_node (vm=0x77b9d440 , pending_frame_index=1, last_time_stamp=1322800753683) at /root/vpp/build-data/../src/vlib/main.c:1166 #5 0x778f6725 in vlib_main_or_worker_loop (vm=0x77b9d440 , is_main=1) at /root/vpp/build-data/../src/vlib/main.c:1625 #6 0x778f67d6 in vlib_main_loop (vm=0x77b9d440 ) at /root/vpp/build-data/../src/vlib/main.c:1644 #7 0x778f6e61 in vlib_main (vm=0x77b9d440 , input=0x7fffb669efb0) at /root/vpp/build-data/../src/vlib/main.c:1774 #8 0x779647d1 in thread0 (arg=140737349538880) at /root/vpp/build-data/../src/vlib/unix/main.c:514 #9 0x7663100c in clib_calljmp () at /root/vpp/build-data/../src/vppinfra/longjmp.S:110 #10 0x7fffd380 in ?? () #11 0x77964c24 in vlib_unix_main (argc=25, argv=0x6f6840) at /root/vpp/build-data/../src/vlib/unix/main.c:577 #12 0x004079ea in main (argc=25, argv=0x6f6840) at /root/vpp/build-data/../src/vpp/vnet/main.c:202 From: Michael Borokhovich [mailto:michael...@gmail.com] Sent: Thursday, October 05, 2017 9:39 AM To: Pierre Pfister (ppfister) Cc: Florin Coras ; vp
Re: [vpp-dev] Building router plugin
Hello, Dave and Pierre are correct, the router plugin is no longer being maintained. There was not much interest in the community for this project at the time and I have since moved on to other things. I’d be happy to help a new maintainer with any questions they may have. If you really want to just test it out, I suggest attempting to checkout a commit of VPP close to the last commit on the router plugin. Somewhere closely following VPP commit 0bfe5d8c792abcdb, “A Protocol Independent Hierarchical FIB (VPP-352)” will work (you might have to git bisect to get something that compiles right away). If necessary, I can submit a patch to remove the router plugin from the VPP sandbox with a note on the wiki page mentioning the finalization of the project. I recall there being an 8-month time limit for these the sandbox projects. -Jeff From: Dave Barach (dbarach) [mailto:dbar...@cisco.com] Sent: Sunday, March 26, 2017 6:21 AM To: Pierre Pfister (ppfister) ; Łukasz Chrustek ; Shaw, Jeffrey B Cc: Łukasz Chrustek ; vpp-dev@lists.fd.io; Neale Ranns (nranns) Subject: RE: [vpp-dev] Building router plugin +1. See diffs below, which are a start on the problem / fix first-order build and infra issues. The “router” component needs FIB 2.0 brain-police. I’m pretty sure that Pierre meant to write: “netlink and router plugin are NOT really maintained. It is not surprising that they do not compile without a bit of effort.” HTH... Dave diff --git a/netlink/librtnl/mapper.c b/netlink/librtnl/mapper.c index b82fae8..b20a1f7 100644 --- a/netlink/librtnl/mapper.c +++ b/netlink/librtnl/mapper.c @@ -96,7 +96,8 @@ int mapper_add_del_route(mapper_ns_t *ns, ns_route_t *route, int del) fib_table_entry_path_add (ns->v6fib_index, &prefix, FIB_SOURCE_API, FIB_ENTRY_FLAG_NONE, prefix.fp_proto, &nh, map->sw_if_index, ns->v6fib_index, - 0 /* weight */, MPLS_LABEL_INVALID, + 0 /* weight */, + (mpls_label_t *) MPLS_LABEL_INVALID, FIB_ROUTE_PATH_FLAG_NONE); #endif /* FIB_VERSION == 1 */ } else { @@ -126,7 +127,8 @@ int mapper_add_del_route(mapper_ns_t *ns, ns_route_t *route, int del) fib_table_entry_path_add (ns->v4fib_index, &prefix, FIB_SOURCE_API, FIB_ENTRY_FLAG_NONE, prefix.fp_proto, &nh, map->sw_if_index, ns->v4fib_index, - 0 /* weight */, MPLS_LABEL_INVALID, + 0 /* weight */, + (mpls_label_t *) MPLS_LABEL_INVALID, FIB_ROUTE_PATH_FLAG_NONE); #endif /* FIB_VERSION == 1 */ } diff --git a/netlink/netlink.mk b/netlink/netlink.mk index 677a1b5..610205f 100644 --- a/netlink/netlink.mk +++ b/netlink/netlink.mk @@ -1,31 +1,5 @@ -netlink_configure_depend = \ -vppinfra-install \ -dpdk-install \ -svm-install \ -vlib-api-install \ -vlib-install \ -vnet-install \ -vpp-install \ -vpp-api-test-install +netlink_configure_depend = vpp-install -netlink_CPPFLAGS = $(call installed_includes_fn, \ -vppinfra \ -dpdk \ -openssl \ -svm \ -vlib \ -vlib-api \ -vnet \ -vpp \ -vpp-api-test) +netlink_CPPFLAGS = $(call installed_includes_fn, vpp) -netlink_LDFLAGS = $(call installed_libs_fn, \ -vppinfra \ -dpdk \ -openssl \ -svm \ -vlib \ -vlib-api \ -vnet \ -vpp \ -vpp-api-test) +netlink_LDFLAGS = $(call installed_libs_fn, vpp) diff --git a/netlink/test/test.c b/netlink/test/test.c index 96f49f8..2922a40 100644 --- a/netlink/test/test.c +++ b/netlink/test/test.c @@ -200,11 +200,10 @@ VLIB_CLI_COMMAND (mapper_iface_command, static) = { .function = mapper_iface_command_fn, }; -clib_error_t * -vlib_plugin_register (vlib_main_t * vm, vnet_plugin_handoff_t * h, - int from_early_init) -{ - clib_warning("Loaded module"); - return 0; -} +/* *INDENT-OFF* */ +VLIB_PLUGIN_REGISTER () = { +// .version = VPP_BUILD_VER, FIXME +.description = "netlink", +}; +/* *INDENT-ON* */ diff --git a/router/router.mk b/router/router.mk index f9bb917..c5a6a4a 100644 --- a/router/router.mk +++ b/router/router.mk @@ -1,34 +1,11 @@ -router_co
Re: [vpp-dev] Building router plugin
The mailman did not let my last message go through because it was too big so I am removing the previous threads to keep this message under 100KB limit. Hello, Dave and Pierre are correct, the router plugin is no longer being maintained. There was not much interest in the community for this project at the time and I have since moved on to other things. I’d be happy to help a new maintainer with any questions they may have. If you really want to just test it out, I suggest attempting to checkout a commit of VPP close to the last commit on the router plugin. Somewhere closely following VPP commit 0bfe5d8c792abcdb, “A Protocol Independent Hierarchical FIB (VPP-352)” will work (you might have to git bisect to get something that compiles right away). If necessary, I can submit a patch to remove the router plugin from the VPP sandbox with a note on the wiki page mentioning the finalization of the project. I recall there being an 8-month time limit for these the sandbox projects. -Jeff ___ vpp-dev mailing list vpp-dev@lists.fd.io https://lists.fd.io/mailman/listinfo/vpp-dev