summaryrefslogtreecommitdiffstats
path: root/stacks/vpp/doc/README.md
blob: e09aefe11cbdd80e7e7e5068b7a08df308ce0d00 (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# 1. What is VPP Host Stack
VPP's host stack is a user space implementation of a number of transport,
session and application layer protocols that leverages VPP's existing
protocol stack.

# 2. How to use VPP Host Stack

## How to integrate VPP Host Stack into DMM
The file CMakeList.txt defined the compiling process, including downloading
the vpp code and patch it. The patch will modify the makefile to adapt dmm.

Target 'libdmm_vcl' could not be get automatically unless you run
'make vpp-stack' manually. It will compile the adaption code and link the
libraries of vpp and finally generate the library of "libdmm_vcl.so".


## Compile
```sh
    #cd dmm/build && cmake ..
    #make vpp-statck
```
Note:
  After these processes, libdmm_vcl.so library would be generated in
vpp/build-root/install-vpp_debug-native/vpp/lib64/.

##Start VPP Host Stack
- Steps 1: copy the plugins to /usr/lib/.
```sh
	#cp -r vpp/build-root/install-vpp_debug-native/vpp/lib64/vpp_plugins /usr/lib/
```

- Steps 2: load dpdk network card driver manually.
```sh
	#cd dpdk-18.02/x86_64-native-linuxapp-gcc/kmod/
	#modprobe uio
	#insmod igb_uio.ko
```

- Steps 3: choose a network card that is not in use and down it.
```sh
	#ifconfig eth1 down
```
- Steps 4: copy the config file and start vpp
```sh
    #cp dmm/stacks/vpp/configure/startup.conf /etc/vpp/
	#cp dmm/stacks/vpp/configure/vpp_config /etc/vpp/
    #cd vpp/build-root/install-vpp_debug-native/vpp/bin
	#./vpp -c /etc/vpp/startup.conf
```
Note:
  1.modify the dev of dpdk in startup.conf.
  2.modify the interface name and ip in vpp_config.

## Test app
Note:
  Before testing, we should anotation the dmm code that "close (listenFd);" in
  function process_server_accept_thread for server. Otherwize the app can
  not send and recieve packets.

- Steps 1: copy the libdmm_vcl.so to dmm/release/lib64/
- Steps 2: copy the config file from dmm/stacks/vpp/configure/*.json to
           dmm/release/bin and modify the rd_config.json.
```sh
	#vim rd_config.json
	  //set "subnet": "192.168.21.1/24"
```
Note:
  Means dmm will hijack data from subnet 192.168.21.*

- Steps 3: Communication test between machine A(as server) with machine B
		(as client)

##### Run in machine A
```sh
    #cd dmm/release/bin/
	#./vs_epoll -p 20000 -d 192.168.21.180 -a 10000 -s 192.168.21.181 -l 1000 -t 500000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 50000 -e 10 -x 1
```
Note:
  Means the current machine would be server, and it's
destination address is 192.168.21.180 (client address),
source address is 192.168.21.181(server address)

##### Run in machine B
```
	#cd dmm/release/bin/
	#./vc_common -p 20000 -d 192.168.21.181 -a 10000 -s 192.168.21.180 -l 1000 -t 500000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 50000 -e 10 -x 1
```
Note:
  Means the current machine would be client, and it's
destination address is 192.168.21.181 (server address),
source address is 192.168.21.180(client address)

# 3. Document description

(dmm/stacks/vpp/)

## configure folder
##### module_config.json
- module_config.json is for configuring dmm protocol stack module

##### rd_config.json
- rd_config.json is to choose which module is better to go through. It will go
	through vpp host protocol stack when RD type is nstack-vpp

## patch folder
- modify the makefile to compile the adapt code.

## adapt folder
##### dmm_vcl_adpt.c && dmm_vcl.h
- vpp host stack adaptation code, including initialization and adaptation functions.

# 4. More Information
- https://wiki.fd.io/view/DMM
- https://wiki.fd.io/view/VPP
- https://wiki.fd.io/view/VPP/HostStack