aboutsummaryrefslogtreecommitdiffstats
path: root/turbotap/README.md
blob: 4debcd9dcf3cee2d75fee9ee6f9bd467a10ad5e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# A plugin to provide turbotap driver

This repository provides an Experimental work, a plugin to use tap
interfaces using socket API system calls "sendmmsg" or "recvmmsg"
which allows to send/receive multiple packets using one single system
call. It is a replacement for tapcli driver in VPP, which uses one
system call per packet. Hence save the time for 'context switching'
between userspace and kernel space.

The linux kernel doesn't support socket API for tap interfaces. Therefore,
a separate turbotap 'LINUX KERNEL MODULE' has been implemented to support
send and receive socket system calls.

More information can be found on the wiki page:
- http://wiki.fd.io/view/VPP_Sandbox/turbotap

Source code, build and install turbotap kernel module:
- https://github.com/vpp-dev/turbotap

## Build/Install

The turbotap driver is implemented as a plugin to send/receive packets from
kernel tap interfaces. To use it, you must BUILD and INSTALL turbotap kernel
module at first.
Then you must build plugin and put it in VPPs runtime plugin directory.
The plugin depends on vpp. This README assumes familiarity with the build
environment for both projects.

Build vpp and turbotap both at once by creating symbolic links in the
top level vpp directory to the turbotap directory as well as
symbolic links to the respective .mk files in 'build-data/packages'.

```
$ cd /git/vpp
$ ln -sf /git/vppsb/turbotap
$ ln -sf ../../turbotap/turbotap.mk build-data/packages/
```

Now build everything and create a link to the plugin in vpp's plugin path.

```
$ cd build-root
$ ./bootstrap.sh
$ make V=0 PLATFORM=vpp TAG=vpp_debug turbotap-install
$ ln -sf /git/vpp/build-root/install-vpp_debug-native/turbotap/lib64/turbotap.so.0.0.0 \
         /usr/lib/vpp_plugins/
```

Once VPP is running and the plugin is loaded, turbotap interfaces can be created or deleted.

```
$ vppctl turbotap connect turbotap0
$ vppctl turbotap delete turbotap0
```

The host operating system should see a turbotap named 'turbotap0'.

## Administrative

### Current status

Currently the turbotap driver plugin uses socket API system calls. Most of the
code is borrowed from tapcli driver in VPP. One can extend it to multi-queue driver.

### Objective

The objective of this project is to continue to build out better integration
with host operating system and for providing a basis to enable completely
or partially unmodified applications to take advantage of a fast datapath.

### Main contributors

Mohsin KAZMI  - LF-ID:sykazmi