Hi Ray,
> Suggest adding vpphost and iperfvpp to different network namespaces.
> All that is happening at the moment is the kernel is recognizing it owns
> both IPs and bypassing everything.
> You also need to add vppiperf and vppout to a bridge domain in VPP.
Indeed, I thought that could be an issue. Therefore, I already had an
alternative using namespaces. Here is what I use to build the topology, with
bridge domain addition:
_________ _____________
| | host-vpp2 | |
| VPP |---- 10.10.2.1 --------vpp2 namespace-------| veth_vpp2 |
|_________| | 10.10.2.2 |
| |_____________|
host-vpp1
10.10.1.1
|
|
vpp1 namespace
|
_____|_______
| |
| veth_vpp1 |
| 10.10.1.2 |
|_____________|
###### BEGIN ######
# create namespaces
sudo ip netns add vpp1
sudo ip netns add vpp2
# create and configure first veth pair
sudo ip link add name veth_vpp1 type veth peer name vpp1
sudo ip link set dev vpp1 up
sudo ip link set dev veth_vpp1 up netns vpp1
sudo ip netns exec vpp1 \
bash -c "
ip link set dev lo up
ip addr add 10.10.1.2/24 dev veth_vpp1
ip route add 10.10.2.0/24 via 10.10.1.1
"
# create and configure second veth pair
sudo ip link add name veth_vpp2 type veth peer name vpp2
sudo ip link set dev vpp2 up
sudo ip link set dev veth_vpp2 up netns vpp2
sudo ip netns exec vpp2 \
bash -c "
ip link set dev lo up
ip addr add 10.10.2.2/24 dev veth_vpp2
ip route add 10.10.1.0/24 via 10.10.2.1
"
# create and configure vpp instance
sudo vpp unix { log /tmp/vpp.log cli-listen /run/vpp/cli-vpp.sock } api-segment
{ prefix vpp } plugins { plugin dpdk_plugin.so { disable } }
sleep 1
sudo vppctl -s /run/vpp/cli-vpp.sock create host-interface name vpp1
sudo vppctl -s /run/vpp/cli-vpp.sock create host-interface name vpp2
sudo vppctl -s /run/vpp/cli-vpp.sock set int state host-vpp1 up
sudo vppctl -s /run/vpp/cli-vpp.sock set int state host-vpp2 up
sudo vppctl -s /run/vpp/cli-vpp.sock set int ip address host-vpp1 10.10.1.1/24
sudo vppctl -s /run/vpp/cli-vpp.sock set int ip address host-vpp2 10.10.2.1/24
# vpp bridge domain
sudo vppctl -s /run/vpp/cli-vpp.sock set interface l2 bridge host-vpp1 1
sudo vppctl -s /run/vpp/cli-vpp.sock set interface l2 bridge host-vpp2 1
###### END ######
Without the bridge domain, I'm able to ping from vpp1 to vpp2 namespaces and
vice versa and see packets in VPP instance:
sudo ip netns exec vpp1 ping 10.10.2.2 -c 5
sudo ip netns exec vpp2 ping 10.10.1.2 -c 5
However, iperf3 client seems to hang and never returns a result, even if
"vppctl show run" tells me packets went through VPP. Still don't know why:
sudo ip netns exec vpp2 iperf3 -s -D
sudo ip netns exec vpp1 iperf3 -c 10.10.2.2
With bridge domain, pings don't work anymore. Are you absolutely sure I need it
? It is not used in the VPP example when connecting two instances.
> Take a look at VPP bootstrap in vppsb, it does 98% of what you are
> trying to do here.
> https://git.fd.io/vppsb/tree/vpp-bootstrap
Thanks for that but I'm not sure I need this since I already build my own vpp
"box" environment. What's wrong with my topology/configuration ? All I want is
to pass packets from vpp1 namespace to vpp2 namespace, and the opposite too (by
using iperf3). Packets have to go through my VPP instance. Thanks for your help
!
Justin
_______________________________________________
vpp-dev mailing list
[email protected]
https://lists.fd.io/mailman/listinfo/vpp-dev