aboutsummaryrefslogtreecommitdiffstats
path: root/src/examples/handoffdemo/README.md
blob: e38c7b3cca00d4dbbd7b29bfd2a45bf4a580e44e (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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# Handoff queue demo plugin {#handoff_queue_demo_plugin}

This plugin provides a simplified example of how to hand off
packets between threads. I used it to debug packet-tracer handoff
tracing support.

# Packet generator input script

```
 packet-generator new {
    name x
    limit 5
    size 128-128
    interface local0
    node handoffdemo-1
    data {
        incrementing 30
    }
 }
```
# Start vpp with 2 worker threads

The demo plugin hands packets from worker 1 to worker 2.

# Enable tracing, and start the packet generator

```
  trace add pg-input 100
  packet-generator enable
```

# Sample Run

```
  DBGvpp# ex /tmp/pg_input_script
  DBGvpp# pa en
  DBGvpp# sh err
   Count                    Node                  Reason
         5              handoffdemo-1             packets handed off processed
         5              handoffdemo-2             completed packets
  DBGvpp# show run
  Thread 1 vpp_wk_0 (lcore 0)
  Time 133.9, average vectors/node 5.00, last 128 main loops 0.00 per node 0.00
    vector rates in 3.7331e-2, out 0.0000e0, drop 0.0000e0, punt 0.0000e0
               Name                 State         Calls          Vectors        Suspends         Clocks       Vectors/Call
  handoffdemo-1                    active                  1               5               0          4.76e3            5.00
  pg-input                        disabled                 2               5               0          5.58e4            2.50
  unix-epoll-input                 polling             22760               0               0          2.14e7            0.00
  ---------------
  Thread 2 vpp_wk_1 (lcore 2)
  Time 133.9, average vectors/node 5.00, last 128 main loops 0.00 per node 0.00
    vector rates in 0.0000e0, out 0.0000e0, drop 3.7331e-2, punt 0.0000e0
               Name                 State         Calls          Vectors        Suspends         Clocks       Vectors/Call
  drop                             active                  1               5               0          1.35e4            5.00
  error-drop                       active                  1               5               0          2.52e4            5.00
  handoffdemo-2                    active                  1               5               0          2.56e4            5.00
  unix-epoll-input                 polling             22406               0               0          2.18e7            0.00
```

Enable the packet tracer and run it again...

```
  DBGvpp# trace add pg-input 100
  DBGvpp# pa en
  DBGvpp# sh trace
  sh trace
  ------------------- Start of thread 0 vpp_main -------------------
  No packets in trace buffer
  ------------------- Start of thread 1 vpp_wk_0 -------------------
  Packet 1

  00:06:50:520688: pg-input
    stream x, 128 bytes, 0 sw_if_index
    current data 0, length 128, buffer-pool 0, ref-count 1, trace handle 0x1000000
    00000000: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d0000
    00000020: 0000000000000000000000000000000000000000000000000000000000000000
    00000040: 0000000000000000000000000000000000000000000000000000000000000000
    00000060: 0000000000000000000000000000000000000000000000000000000000000000
  00:06:50:520762: handoffdemo-1
    HANDOFFDEMO: current thread 1

  Packet 2

  00:06:50:520688: pg-input
    stream x, 128 bytes, 0 sw_if_index
    current data 0, length 128, buffer-pool 0, ref-count 1, trace handle 0x1000001
    00000000: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d0000
    00000020: 0000000000000000000000000000000000000000000000000000000000000000
    00000040: 0000000000000000000000000000000000000000000000000000000000000000
    00000060: 0000000000000000000000000000000000000000000000000000000000000000
  00:06:50:520762: handoffdemo-1
    HANDOFFDEMO: current thread 1

  Packet 3

  00:06:50:520688: pg-input
    stream x, 128 bytes, 0 sw_if_index
    current data 0, length 128, buffer-pool 0, ref-count 1, trace handle 0x1000002
    00000000: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d0000
    00000020: 0000000000000000000000000000000000000000000000000000000000000000
    00000040: 0000000000000000000000000000000000000000000000000000000000000000
    00000060: 0000000000000000000000000000000000000000000000000000000000000000
  00:06:50:520762: handoffdemo-1
    HANDOFFDEMO: current thread 1

  Packet 4

  00:06:50:520688: pg-input
    stream x, 128 bytes, 0 sw_if_index
    current data 0, length 128, buffer-pool 0, ref-count 1, trace handle 0x1000003
    00000000: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d0000
    00000020: 0000000000000000000000000000000000000000000000000000000000000000
    00000040: 0000000000000000000000000000000000000000000000000000000000000000
    00000060: 0000000000000000000000000000000000000000000000000000000000000000
  00:06:50:520762: handoffdemo-1
    HANDOFFDEMO: current thread 1

  Packet 5

  00:06:50:520688: pg-input
    stream x, 128 bytes, 0 sw_if_index
    current data 0, length 128, buffer-pool 0, ref-count 1, trace handle 0x1000004
    00000000: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d0000
    00000020: 0000000000000000000000000000000000000000000000000000000000000000
    00000040: 0000000000000000000000000000000000000000000000000000000000000000
    00000060: 0000000000000000000000000000000000000000000000000000000000000000
  00:06:50:520762: handoffdemo-1
    HANDOFFDEMO: current thread 1

  ------------------- Start of thread 2 vpp_wk_1 -------------------
  Packet 1

  00:06:50:520796: handoff_trace
    HANDED-OFF: from thread 1 trace index 0
  00:06:50:520796: handoffdemo-2
    HANDOFFDEMO: current thread 2
  00:06:50:520867: error-drop
    rx:local0
  00:06:50:520914: drop
    handoffdemo-2: completed packets

  Packet 2

  00:06:50:520796: handoff_trace
    HANDED-OFF: from thread 1 trace index 1
  00:06:50:520796: handoffdemo-2
    HANDOFFDEMO: current thread 2
  00:06:50:520867: error-drop
    rx:local0
  00:06:50:520914: drop
    handoffdemo-2: completed packets

  Packet 3

  00:06:50:520796: handoff_trace
    HANDED-OFF: from thread 1 trace index 2
  00:06:50:520796: handoffdemo-2
    HANDOFFDEMO: current thread 2
  00:06:50:520867: error-drop
    rx:local0
  00:06:50:520914: drop
    handoffdemo-2: completed packets

  Packet 4

  00:06:50:520796: handoff_trace
    HANDED-OFF: from thread 1 trace index 3
  00:06:50:520796: handoffdemo-2
    HANDOFFDEMO: current thread 2
  00:06:50:520867: error-drop
    rx:local0
  00:06:50:520914: drop
    handoffdemo-2: completed packets

  Packet 5

  00:06:50:520796: handoff_trace
    HANDED-OFF: from thread 1 trace index 4
  00:06:50:520796: handoffdemo-2
    HANDOFFDEMO: current thread 2
  00:06:50:520867: error-drop
    rx:local0
  00:06:50:520914: drop
    handoffdemo-2: completed packets
 DBGvpp#
```