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
vpp-dev@lists.fd.io
https://lists.fd.io/mailman/listinfo/vpp-dev

Reply via email to