Difference between revisions of "VPP/Using mTCP user mode TCP stack with VPP"

From fd.io
< VPP
Jump to: navigation, search
Line 24: Line 24:
  
 
sudo insmod netmap.ko
 
sudo insmod netmap.ko
 +
</pre>
  
 +
To verify that module is loaded, you can use the following command which should show you (Module-name , Size  and Used by):
 +
<pre>
 
lsmod | grep netmap
 
lsmod | grep netmap
 
</pre>
 
</pre>
Line 32: Line 35:
 
We assume that you are already running vpp. If it is not the case, please follow the following link to build, install and test VPP:
 
We assume that you are already running vpp. If it is not the case, please follow the following link to build, install and test VPP:
  
    https://wiki.fd.io/view/VPP/Build,_install,_and_test_images
+
  https://wiki.fd.io/view/VPP/Build,_install,_and_test_images
 
+
  
 
'''mTCP'''
 
'''mTCP'''
Line 44: Line 46:
 
<pre>
 
<pre>
 
./configure --enable-netmap
 
./configure --enable-netmap
</pre>
 
  
Enter to <mtcp-ROOT>/mtcp/src/ directory and run the following command:
 
<pre>
 
make
 
</pre>
 
 
Enter into <mtcp-ROOT>/apps/example/ directory and run the following command:
 
<pre>
 
 
make
 
make
 
</pre>
 
</pre>
Line 73: Line 67:
  
 
=== Modify Config Files ===
 
=== Modify Config Files ===
 +
 +
'''mTCP'''
 +
 
In <mTCP-ROOT>/apps/example/, you can change the epserver.conf file and epwget.conf.
 
In <mTCP-ROOT>/apps/example/, you can change the epserver.conf file and epwget.conf.
  

Revision as of 12:42, 8 June 2016

NOTE: This page is under construction.

This example shows how to configure and run sample client/server applications using user mode mTCP in 2 linux namespaces (or containers) which communicate through VPP via netmap virtual interfaces.

In this setup we use 2 different namespaces called vpp1 and vpp2 and two sample applications epserver and epwget available with mTCP.

Setup

NETMAP

Download the sources from the upstream repository using following command:

  git clone git@github.com:vpp-dev/netmap.git       OR      https://github.com/vpp-dev/netmap/archive/master.zip

Enter LINUX directory and configure netmap. To compile only NETMAP/VALE (using unmodified drivers):

./configure --no-drivers

make

make apps

sudo insmod netmap.ko

To verify that module is loaded, you can use the following command which should show you (Module-name , Size and Used by):

lsmod | grep netmap

VPP

We assume that you are already running vpp. If it is not the case, please follow the following link to build, install and test VPP:

  https://wiki.fd.io/view/VPP/Build,_install,_and_test_images

mTCP

Download the sources using following command:

  git clone git@github.com:vpp-dev/mtcp.git     OR    https://github.com/vpp-dev/mtcp/archive/master.zip

Enter mtcp root directory and configure mtcp. To compile for netmap module:

./configure --enable-netmap

make

Configure Interfaces

VPP

Run VPP/VPP-lite and create netmap interfaces using the VPP debug Command-line Interface (CLI):

        create netmap name vale00:vpp1 hw-addr 02:FE:3F:34:15:9B pipe master
        create netmap name vale00:vpp2 hw-addr 02:FE:75:C5:43:66 pipe master

        set int state netmap-vale00:vpp2 up
        set int state netmap-vale00:vpp1 up

        set int l2 xcon netmap-vale00:vpp1 netmap-vale00:vpp2
        set int l2 xcon netmap-vale00:vpp2 netmap-vale00:vpp1

Modify Config Files

mTCP

In <mTCP-ROOT>/apps/example/, you can change the epserver.conf file and epwget.conf.

example epserver.conf file:

# module
io = netmap

# Port
port vale00:vpp1}0

# Hw addr of port
hw_addr = 02:fe:3f:34:15:9b

# Ip addr of port
ip_addr = 10.0.42.3

# Netmask of port
netmask = 255.255.255.0

# Maximum concurrency per core
max_concurrency = 10000

# Maximum number of socket buffers per core
max_num_buffers = 10000

# Receive buffer size of sockets
rcvbuf = 16384

# Send buffer size of sockets
sndbuf = 16384

# TCP timeout seconds
tcp_timeout = 30

# TCP timewait seconds
tcp_timewait = 0

# Interface to print stats
stat_print = vale00:vpp1}0

example epwget.conf file

# module
io = netmap

# Port
port vale00:vpp2}0

# Hw addr of port
hw_addr = 02:fe:75:c5:43:66

# Ip addr of port
ip_addr = 10.0.42.2

# Netmask of port
netmask = 255.255.255.0

# Maximum concurrency per core
max_concurrency = 10000

# Maximum number of socket buffers per core
max_num_buffers = 10000

# Receive buffer size of sockets
rcvbuf = 16384

# Send buffer size of sockets
sndbuf = 8192

# TCP timeout seconds
tcp_timeout = 30

# TCP timewait seconds
tcp_timewait = 0

# Interface to print stats
stat_print = vale00:vpp2}0

Test


Using the VPP debug Command-line Interface (CLI) we can verify interface statistics.

Use the VPP CLI command :


Use the command show interface:



Use the command :