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

From fd.io
< VPP
Jump to: navigation, search
Line 77: Line 77:
  
 
=== Modify Config Files ===
 
=== Modify Config Files ===
 +
In mTCP/apps/example/, you can change the epserver.conf file and epwget.conf.
  
 +
example epserver.conf file:
 
<pre>
 
<pre>
 +
# module
 +
io = netmap
  
</pre>  
+
# 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
 +
</pre>
 +
 
 +
example epwget.conf file
 +
<pre>
 +
# 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
 +
</pre>
  
 
=== Test ===
 
=== Test ===

Revision as of 11:08, 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

lsmod | grep netmap

VPP



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 directory and configure mtcp. To compile for netmap module:

./configure --enable-netmap

goto mtcp/src/

make

goto apps/example

make

Configure Interfaces

VPP

Run VPP/VPP-lite and create netmap interfaces using following commands:

        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

In mTCP/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 :