blob: 6930dd05da09a4782fb3cc89264a064b3ac2d156 [file] [log] [blame]
Charles Chan78a737f2019-09-12 13:55:22 -07001Troubleshooting Guide
2*********************
3
Charles Chan4ade88d2019-09-16 16:30:31 -07004Overview
5========
6
7The **Trellis Troubleshooting Tools (T3)** is an ONOS application intended to **help you troubleshoot traffic-related problems** in your network by **tracing installed flows and groups**.
8T3 works both on simulated OVS-based topologies but also on real HW, basing it's internal decisions on the driver assigned to the device.
9T3 also currently supports dual links between leaf and spine and properly handles the difference between deferred and immediate rules.
10Dual Homed hosts are also supported in T3.
11
12To activate this tool on your ONOS environment, you need to run:
13
14.. code-block:: console
15
16 onos> app activate t3
17
18T3 supports tracing of following packet types:
19
20- L2 Unicast
21- L2 Broadcast
22- L3 Unicast (both IPv4 and IPv6)
23- L3 Multicast (both IPv4 and IPv6)
24- LLDP and BDDP
25- ARP
26- DHCP
27
28
29t3-troubleshoot
30===============
31As of right now the tools provides a CLI command (troubleshoot).
32As arguments to the CLI command you have to pass arguments describing the packet you want to trace through the network.
33
34t3-troubleshoot Help
35--------------------
36
37.. code-block:: console
38
39 onos> t3-troubleshoot --help
40 DESCRIPTION
41 onos:troubleshoot
42
43 troubleshoots flows and groups between source and destination
44
45 SYNTAX
46 onos:troubleshoot [options]
47
48 OPTIONS
49 -sm, --srcMac
50 Source MAC
51 -j, --json
52 Output JSON
53 --help
54 Display this help message
55 -v, --verbose
56 Outputs complete path
57 -ipp, --ipProto
58 IP Proto
59 -s, --srcIp
60 Source IP
61 -dm, --dstMac
62 Destination MAC
63 -ml, --mplsLabel
64 Mpls label of incoming packet
65 -vv, --veryverbose
66 Outputs flows and groups for every device
67 -udps, --udpSrc
68 UDP Source
69 -mb, --mplsBos
70 MPLS BOS
71 -et, --ethType
72 ETH Type
73 (defaults to ipv4)
74 -sp, --srcPort
75 Source Port
76 -dtp, --dstTcpPort
77 destination TCP Port
78 -udpd, --udpDst
79 UDP Destination
80 -stp, --srcTcpPort
81 Source TCP Port
82 -d, --dstIp
83 Destination IP
84 -vid, --vlanId
85 Vlan of incoming packet
86 (defaults to None)
87
88Default Verbosity Level
89-----------------------
90Let's look at an example.
91
92.. code-block:: console
93
94 onos> t3-troubleshoot -s 10.0.2.1 -sp of:0000000000000204/3 -sm 00:AA:00:00:00:01 -et IPV4 -d 10.0.3.1 -dm 00:00:00:00:02:04 -vid None
95
96with this command we are asking the t3 tool to trace a packet with
97
98- Source IP of ``10.0.2.1/32``
99- Input port ``of:0000000000000204/3``
100- Source MAC ``00:AA:00:00:00:01``
101- ethType ``IPv4``
102- Source TCP Port ``12345``
103- Destination IP ``10.0.3.1/32``
104- Destination MAC ``00:AA:00:00:00:01``
105- Destination TCP Port ``80`` and
106- VLAN ID ``None``
107
108This command has a verbosity level of 0 and will output just the paths that the packet might take inside the network.
109In the example deployment taken from trellis.py [#trellis.py]_, the output will be:
110
111.. code-block:: console
112
113 Tracing packet: [IN_PORT:3, ETH_DST:00:00:00:00:02:04, ETH_SRC:00:AA:00:00:00:01, ETH_TYPE:ipv4, VLAN_VID:None, IPV4_SRC:10.0.2.1/32, IPV4_DST:10.0.3.1/32, TCP_SRC:12345, TCP_DST:80, MPLS_BOS:true]
114 Paths
115 [of:0000000000000204/3, of:0000000000000204/2, of:0000000000000227/1, of:0000000000000227/2, of:0000000000000205/2, of:0000000000000205/3]
116 [of:0000000000000204/3, of:0000000000000204/1, of:0000000000000226/1, of:0000000000000226/2, of:0000000000000205/1, of:0000000000000205/3]
117 Result:
118 Reached required destination Host
119 Reached required destination Host
120
121Middle Verbosity Level
122----------------------
123There are also two other verbosity levels.
124
125.. code-block:: console
126
127 onos> t3-troubleshoot -v -s 10.0.2.1 -sp of:0000000000000204/3 -sm 00:AA:00:00:00:01 -et IPV4 -d 10.0.3.1 -dm 00:00:00:00:02:04 -vid None
128
129prints flows selectors and groupId that are met along the path
130
131.. code-block:: console
132
133 Tracing packet: [IN_PORT:3, ETH_DST:00:00:00:00:02:04, ETH_SRC:00:AA:00:00:00:01, ETH_TYPE:ipv4, VLAN_VID:None, IPV4_SRC:10.0.2.1/32, IPV4_DST:10.0.3.1/32, TCP_SRC:12345, TCP_DST:80, MPLS_BOS:true]
134 Path [of:0000000000000204/3, of:0000000000000204/2, of:0000000000000227/1, of:0000000000000227/2, of:0000000000000205/2, of:0000000000000205/3]
135 Device of:0000000000000204
136 Input from of:0000000000000204/3
137 Flows
138 flowId=a20000bd57cb49, selector=[]
139 flowId=900000d4173ff7, selector=[IN_PORT:3, VLAN_VID:None]
140 flowId=9000004b3d1965, selector=[IN_PORT:3, ETH_DST:00:00:00:00:02:04, ETH_TYPE:ipv4, VLAN_VID:20]
141 flowId=900000499769f5, selector=[ETH_TYPE:ipv4, IPV4_DST:10.0.3.0/24]
142 flowId=a2000038b487e7, selector=[]
143 Groups
144 groupId=GroupId{id=0x70000010}
145 groupId=GroupId{id=0x9200000d}
146 groupId=GroupId{id=0x9000000c}
147 groupId=GroupId{id=0xffe0002}
148 groupId=GroupId{id=0x9200000f}
149 groupId=GroupId{id=0x9000000e}
150 groupId=GroupId{id=0xffe0001}
151 Output through of:0000000000000204/2
152 Device of:0000000000000227
153 Input from of:0000000000000227/1
154 Flows
155 flowId=a200005577bcd6, selector=[]
156 flowId=900000498457b2, selector=[IN_PORT:1, VLAN_VID:None]
157 flowId=900000f87746c9, selector=[IN_PORT:1, ETH_DST:00:00:00:00:02:27, ETH_TYPE:mpls_unicast, VLAN_VID:4094]
158 flowId=a200005bfd6ed7, selector=[]
159 flowId=9000009f3d554f, selector=[ETH_TYPE:mpls_unicast, MPLS_LABEL:205, MPLS_BOS:true]
160 flowId=a20000e601fc35, selector=[]
161 Groups
162 groupId=GroupId{id=0x70000017}
163 groupId=GroupId{id=0x20000016}
164 groupId=GroupId{id=0xffe0002}
165 Output through of:0000000000000227/2
166 Device of:0000000000000205
167 Input from of:0000000000000205/2
168 Flows
169 flowId=a200008d542817, selector=[]
170 flowId=900000be3179a0, selector=[IN_PORT:1, VLAN_VID:None]
171 flowId=900000766be164, selector=[IN_PORT:1, ETH_DST:00:00:00:00:02:05, ETH_TYPE:ipv4, VLAN_VID:4094]
172 flowId=900000ec1d5779, selector=[ETH_TYPE:ipv4, IPV4_DST:10.0.3.1/32]
173 flowId=a2000042d8e6b5, selector=[]
174 Groups
175 groupId=GroupId{id=0x2000002a}
176 groupId=GroupId{id=0x1e0003}
177 groupId=GroupId{id=0x2000002a}
178 groupId=GroupId{id=0x1e0003}
179 Output through of:0000000000000205/3
180 Path [of:0000000000000204/3, of:0000000000000204/1, of:0000000000000226/1, of:0000000000000226/2, of:0000000000000205/1, of:0000000000000205/3]
181 Device of:0000000000000204
182 Input from of:0000000000000204/3
183 Flows
184 flowId=a20000bd57cb49, selector=[]
185 flowId=900000d4173ff7, selector=[IN_PORT:3, VLAN_VID:None]
186 flowId=9000004b3d1965, selector=[IN_PORT:3, ETH_DST:00:00:00:00:02:04, ETH_TYPE:ipv4, VLAN_VID:20]
187 flowId=900000499769f5, selector=[ETH_TYPE:ipv4, IPV4_DST:10.0.3.0/24]
188 flowId=a2000038b487e7, selector=[]
189 Groups
190 groupId=GroupId{id=0x70000010}
191 groupId=GroupId{id=0x9200000d}
192 groupId=GroupId{id=0x9000000c}
193 groupId=GroupId{id=0xffe0002}
194 groupId=GroupId{id=0x9200000f}
195 groupId=GroupId{id=0x9000000e}
196 groupId=GroupId{id=0xffe0001}
197 Output through of:0000000000000204/1
198 Device of:0000000000000226
199 Input from of:0000000000000226/1
200 Flows
201 flowId=a20000e9b27d24, selector=[]
202 flowId=9000004bd76105, selector=[IN_PORT:1, VLAN_VID:None]
203 flowId=90000069f274d1, selector=[IN_PORT:1, ETH_DST:00:00:00:00:02:26, ETH_TYPE:mpls_unicast, VLAN_VID:4094]
204 flowId=a200000ec7529e, selector=[]
205 flowId=90000050f9a350, selector=[ETH_TYPE:mpls_unicast, MPLS_LABEL:205, MPLS_BOS:true]
206 flowId=a20000b15cada6, selector=[]
207 Groups
208 groupId=GroupId{id=0x7000000b}
209 groupId=GroupId{id=0x20000009}
210 groupId=GroupId{id=0xffe0002}
211 Output through of:0000000000000226/2
212 Device of:0000000000000205
213 Input from of:0000000000000205/1
214 Flows
215 flowId=a200008d542817, selector=[]
216 flowId=900000be3179a0, selector=[IN_PORT:1, VLAN_VID:None]
217 flowId=900000766be164, selector=[IN_PORT:1, ETH_DST:00:00:00:00:02:05, ETH_TYPE:ipv4, VLAN_VID:4094]
218 flowId=900000ec1d5779, selector=[ETH_TYPE:ipv4, IPV4_DST:10.0.3.1/32]
219 flowId=a2000042d8e6b5, selector=[]
220 Groups
221 groupId=GroupId{id=0x2000002a}
222 groupId=GroupId{id=0x1e0003}
223 groupId=GroupId{id=0x2000002a}
224 groupId=GroupId{id=0x1e0003}
225 Output through of:0000000000000205/3
226 Result:
227 Reached required destination Host
228 Reached required destination Host
229
230High Verbosity Level
231--------------------
232The most verbose output you can get is
233
234.. code-block:: console
235
236 onos> t3-troubleshoot -vv -s 10.0.2.1 -sp of:0000000000000204/3 -sm 00:AA:00:00:00:01 -et IPV4 -d 10.0.3.1 -dm 00:00:00:00:02:04 -vid None
237
238This verbosity level prints all the flows and groups that are met along the path
239
240.. code-block:: console
241
242 Tracing packet: [IN_PORT:3, ETH_DST:00:00:00:00:02:04, ETH_SRC:00:AA:00:00:00:01, ETH_TYPE:ipv4, VLAN_VID:None, IPV4_SRC:10.0.2.1/32, IPV4_DST:10.0.3.1/32, TCP_SRC:12345, TCP_DST:80, MPLS_BOS:true]
243 Path [of:0000000000000204/3, of:0000000000000204/2, of:0000000000000227/1, of:0000000000000227/2, of:0000000000000205/2, of:0000000000000205/3]
244 Device of:0000000000000204
245 Input from of:0000000000000204/3
246 Flows
247 ADDED, bytes=733506, packets=8691, table=0, priority=0, selector=[], treatment=[transition=TABLE:10]
248 ADDED, bytes=11110, packets=61, table=10, priority=32768, selector=[IN_PORT:3, VLAN_VID:None], treatment=[immediate=[VLAN_PUSH:vlan, VLAN_ID:20], transition=TABLE:20]
249 ADDED, bytes=8698, packets=29, table=20, priority=32768, selector=[IN_PORT:3, ETH_DST:00:00:00:00:02:04, ETH_TYPE:ipv4, VLAN_VID:20], treatment=[transition=TABLE:30]
250 ADDED, bytes=16612, packets=50, table=30, priority=48010, selector=[ETH_TYPE:ipv4, IPV4_DST:10.0.3.0/24], treatment=[deferred=[GROUP:0x70000010], transition=TABLE:60]
251 ADDED, bytes=34400, packets=112, table=60, priority=0, selector=[], treatment=[immediate=[NOACTION]]
252 Groups
253 id=0x70000010, state=ADDED, type=SELECT, bytes=16906, packets=53, appId=org.onosproject.segmentrouting, referenceCount=3
254 id=0x70000010, bucket=1, bytes=490, packets=5, actions=[GROUP:0x9200000d]
255 id=0x70000010, bucket=2, bytes=16416, packets=48, actions=[GROUP:0x9200000f]
256 id=0x9200000d, state=ADDED, type=INDIRECT, bytes=490, packets=5, appId=org.onosproject.segmentrouting, referenceCount=0
257 id=0x9200000d, bucket=1, bytes=490, packets=5, actions=[VLAN_POP, MPLS_PUSH:mpls_unicast, MPLS_LABEL:205, GROUP:0x9000000c, VLAN_PUSH:vlan, VLAN_ID:4095]
258 id=0x9000000c, state=ADDED, type=INDIRECT, bytes=490, packets=5, appId=org.onosproject.segmentrouting, referenceCount=0
259 id=0x9000000c, bucket=1, bytes=490, packets=5, actions=[ETH_DST:00:00:00:00:02:27, ETH_SRC:00:00:00:00:02:04, VLAN_ID:4094, GROUP:0xffe0002]
260 id=0xffe0002, state=ADDED, type=INDIRECT, bytes=726, packets=7, appId=org.onosproject.segmentrouting, referenceCount=0
261 id=0xffe0002, bucket=1, bytes=726, packets=7, actions=[VLAN_POP, OUTPUT:2]
262 id=0x9200000f, state=ADDED, type=INDIRECT, bytes=16416, packets=48, appId=org.onosproject.segmentrouting, referenceCount=0
263 id=0x9200000f, bucket=1, bytes=16416, packets=48, actions=[VLAN_POP, MPLS_PUSH:mpls_unicast, MPLS_LABEL:205, GROUP:0x9000000e, VLAN_PUSH:vlan, VLAN_ID:4095]
264 id=0x9000000e, state=ADDED, type=INDIRECT, bytes=16416, packets=48, appId=org.onosproject.segmentrouting, referenceCount=0
265 id=0x9000000e, bucket=1, bytes=16416, packets=48, actions=[ETH_DST:00:00:00:00:02:26, ETH_SRC:00:00:00:00:02:04, VLAN_ID:4094, GROUP:0xffe0001]
266 id=0xffe0001, state=ADDED, type=INDIRECT, bytes=16416, packets=48, appId=org.onosproject.segmentrouting, referenceCount=0
267 id=0xffe0001, bucket=1, bytes=16416, packets=48, actions=[VLAN_POP, OUTPUT:1]
268 Output through of:0000000000000204/2
269 Device of:0000000000000227
270 Input from of:0000000000000227/1
271 Flows
272 ADDED, bytes=702318, packets=8511, table=0, priority=0, selector=[], treatment=[transition=TABLE:10]
273 ADDED, bytes=343130, packets=4234, table=10, priority=32768, selector=[IN_PORT:1, VLAN_VID:None], treatment=[immediate=[VLAN_PUSH:vlan, VLAN_ID:4094], transition=TABLE:20]
274 ADDED, bytes=754, packets=7, table=20, priority=32768, selector=[IN_PORT:1, ETH_DST:00:00:00:00:02:27, ETH_TYPE:mpls_unicast, VLAN_VID:4094], treatment=[transition=TABLE:23]
275 ADDED, bytes=17566, packets=57, table=23, priority=0, selector=[], treatment=[transition=TABLE:24]
276 ADDED, bytes=510, packets=5, table=24, priority=100, selector=[ETH_TYPE:mpls_unicast, MPLS_LABEL:205, MPLS_BOS:true], treatment=[deferred=[MPLS_POP:ipv4, DEC_TTL, GROUP:0x70000017], transition=TABLE:60]
277 ADDED, bytes=17566, packets=57, table=60, priority=0, selector=[], treatment=[immediate=[NOACTION]]
278 Groups
279 id=0x70000017, state=ADDED, type=SELECT, bytes=754, packets=7, appId=org.onosproject.segmentrouting, referenceCount=2
280 id=0x70000017, bucket=1, bytes=754, packets=7, actions=[GROUP:0x20000016]
281 id=0x20000016, state=ADDED, type=INDIRECT, bytes=754, packets=7, appId=org.onosproject.segmentrouting, referenceCount=0
282 id=0x20000016, bucket=1, bytes=754, packets=7, actions=[ETH_DST:00:00:00:00:02:05, ETH_SRC:00:00:00:00:02:27, VLAN_ID:4094, GROUP:0xffe0002]
283 id=0xffe0002, state=ADDED, type=INDIRECT, bytes=754, packets=7, appId=org.onosproject.segmentrouting, referenceCount=0
284 id=0xffe0002, bucket=1, bytes=754, packets=7, actions=[VLAN_POP, OUTPUT:2]
285 Output through of:0000000000000227/2
286 Device of:0000000000000205
287 Input from of:0000000000000205/2
288 Flows
289 ADDED, bytes=2105886, packets=24084, table=0, priority=0, selector=[], treatment=[transition=TABLE:10]
290 ADDED, bytes=358792, packets=4275, table=10, priority=32768, selector=[IN_PORT:1, VLAN_VID:None], treatment=[immediate=[VLAN_PUSH:vlan, VLAN_ID:4094], transition=TABLE:20]
291 ADDED, bytes=16416, packets=48, table=20, priority=32768, selector=[IN_PORT:1, ETH_DST:00:00:00:00:02:05, ETH_TYPE:ipv4, VLAN_VID:4094], treatment=[transition=TABLE:30]
292 ADDED, bytes=196, packets=2, table=30, priority=64010, selector=[ETH_TYPE:ipv4, IPV4_DST:10.0.3.1/32], treatment=[deferred=[GROUP:0x2000002a], transition=TABLE:60]
293 ADDED, bytes=1370884, packets=15163, table=60, priority=0, selector=[], treatment=[immediate=[NOACTION]]
294 Groups
295 id=0x2000002a, state=ADDED, type=INDIRECT, bytes=196, packets=2, appId=org.onosproject.segmentrouting, referenceCount=1
296 id=0x2000002a, bucket=1, bytes=196, packets=2, actions=[ETH_DST:00:AA:00:00:00:03, ETH_SRC:00:00:00:00:02:05, VLAN_ID:30, GROUP:0x1e0003]
297 id=0x1e0003, state=ADDED, type=INDIRECT, bytes=12960, packets=126, appId=org.onosproject.segmentrouting, referenceCount=1
298 id=0x1e0003, bucket=1, bytes=12960, packets=126, actions=[VLAN_POP, OUTPUT:3]
299 id=0x2000002a, state=ADDED, type=INDIRECT, bytes=196, packets=2, appId=org.onosproject.segmentrouting, referenceCount=1
300 id=0x2000002a, bucket=1, bytes=196, packets=2, actions=[ETH_DST:00:AA:00:00:00:03, ETH_SRC:00:00:00:00:02:05, VLAN_ID:30, GROUP:0x1e0003]
301 id=0x1e0003, state=ADDED, type=INDIRECT, bytes=12960, packets=126, appId=org.onosproject.segmentrouting, referenceCount=1
302 id=0x1e0003, bucket=1, bytes=12960, packets=126, actions=[VLAN_POP, OUTPUT:3]
303 Output through of:0000000000000205/3
304 Path [of:0000000000000204/3, of:0000000000000204/1, of:0000000000000226/1, of:0000000000000226/2, of:0000000000000205/1, of:0000000000000205/3]
305 Device of:0000000000000204
306 Input from of:0000000000000204/3
307 Flows
308 ADDED, bytes=733506, packets=8691, table=0, priority=0, selector=[], treatment=[transition=TABLE:10]
309 ADDED, bytes=11110, packets=61, table=10, priority=32768, selector=[IN_PORT:3, VLAN_VID:None], treatment=[immediate=[VLAN_PUSH:vlan, VLAN_ID:20], transition=TABLE:20]
310 ADDED, bytes=8698, packets=29, table=20, priority=32768, selector=[IN_PORT:3, ETH_DST:00:00:00:00:02:04, ETH_TYPE:ipv4, VLAN_VID:20], treatment=[transition=TABLE:30]
311 ADDED, bytes=16612, packets=50, table=30, priority=48010, selector=[ETH_TYPE:ipv4, IPV4_DST:10.0.3.0/24], treatment=[deferred=[GROUP:0x70000010], transition=TABLE:60]
312 ADDED, bytes=34400, packets=112, table=60, priority=0, selector=[], treatment=[immediate=[NOACTION]]
313 Groups
314 id=0x70000010, state=ADDED, type=SELECT, bytes=16906, packets=53, appId=org.onosproject.segmentrouting, referenceCount=3
315 id=0x70000010, bucket=1, bytes=490, packets=5, actions=[GROUP:0x9200000d]
316 id=0x70000010, bucket=2, bytes=16416, packets=48, actions=[GROUP:0x9200000f]
317 id=0x9200000d, state=ADDED, type=INDIRECT, bytes=490, packets=5, appId=org.onosproject.segmentrouting, referenceCount=0
318 id=0x9200000d, bucket=1, bytes=490, packets=5, actions=[VLAN_POP, MPLS_PUSH:mpls_unicast, MPLS_LABEL:205, GROUP:0x9000000c, VLAN_PUSH:vlan, VLAN_ID:4095]
319 id=0x9000000c, state=ADDED, type=INDIRECT, bytes=490, packets=5, appId=org.onosproject.segmentrouting, referenceCount=0
320 id=0x9000000c, bucket=1, bytes=490, packets=5, actions=[ETH_DST:00:00:00:00:02:27, ETH_SRC:00:00:00:00:02:04, VLAN_ID:4094, GROUP:0xffe0002]
321 id=0xffe0002, state=ADDED, type=INDIRECT, bytes=726, packets=7, appId=org.onosproject.segmentrouting, referenceCount=0
322 id=0xffe0002, bucket=1, bytes=726, packets=7, actions=[VLAN_POP, OUTPUT:2]
323 id=0x9200000f, state=ADDED, type=INDIRECT, bytes=16416, packets=48, appId=org.onosproject.segmentrouting, referenceCount=0
324 id=0x9200000f, bucket=1, bytes=16416, packets=48, actions=[VLAN_POP, MPLS_PUSH:mpls_unicast, MPLS_LABEL:205, GROUP:0x9000000e, VLAN_PUSH:vlan, VLAN_ID:4095]
325 id=0x9000000e, state=ADDED, type=INDIRECT, bytes=16416, packets=48, appId=org.onosproject.segmentrouting, referenceCount=0
326 id=0x9000000e, bucket=1, bytes=16416, packets=48, actions=[ETH_DST:00:00:00:00:02:26, ETH_SRC:00:00:00:00:02:04, VLAN_ID:4094, GROUP:0xffe0001]
327 id=0xffe0001, state=ADDED, type=INDIRECT, bytes=16416, packets=48, appId=org.onosproject.segmentrouting, referenceCount=0
328 id=0xffe0001, bucket=1, bytes=16416, packets=48, actions=[VLAN_POP, OUTPUT:1]
329 Output through of:0000000000000204/1
330 Device of:0000000000000226
331 Input from of:0000000000000226/1
332 Flows
333 ADDED, bytes=701910, packets=8507, table=0, priority=0, selector=[], treatment=[transition=TABLE:10]
334 ADDED, bytes=358984, packets=4275, table=10, priority=32768, selector=[IN_PORT:1, VLAN_VID:None], treatment=[immediate=[VLAN_PUSH:vlan, VLAN_ID:4094], transition=TABLE:20]
335 ADDED, bytes=16608, packets=48, table=20, priority=32768, selector=[IN_PORT:1, ETH_DST:00:00:00:00:02:26, ETH_TYPE:mpls_unicast, VLAN_VID:4094], treatment=[transition=TABLE:23]
336 ADDED, bytes=17158, packets=53, table=23, priority=0, selector=[], treatment=[transition=TABLE:24]
337 ADDED, bytes=16608, packets=48, table=24, priority=100, selector=[ETH_TYPE:mpls_unicast, MPLS_LABEL:205, MPLS_BOS:true], treatment=[deferred=[MPLS_POP:ipv4, DEC_TTL, GROUP:0x7000000b], transition=TABLE:60]
338 ADDED, bytes=17158, packets=53, table=60, priority=0, selector=[], treatment=[immediate=[NOACTION]]
339 Groups
340 id=0x7000000b, state=ADDED, type=SELECT, bytes=16608, packets=48, appId=org.onosproject.segmentrouting, referenceCount=2
341 id=0x7000000b, bucket=1, bytes=16608, packets=48, actions=[GROUP:0x20000009]
342 id=0x20000009, state=ADDED, type=INDIRECT, bytes=16608, packets=48, appId=org.onosproject.segmentrouting, referenceCount=0
343 id=0x20000009, bucket=1, bytes=16608, packets=48, actions=[ETH_DST:00:00:00:00:02:05, ETH_SRC:00:00:00:00:02:26, VLAN_ID:4094, GROUP:0xffe0002]
344 id=0xffe0002, state=ADDED, type=INDIRECT, bytes=16608, packets=48, appId=org.onosproject.segmentrouting, referenceCount=0
345 id=0xffe0002, bucket=1, bytes=16608, packets=48, actions=[VLAN_POP, OUTPUT:2]
346 Output through of:0000000000000226/2
347 Device of:0000000000000205
348 Input from of:0000000000000205/1
349 Flows
350 ADDED, bytes=2105886, packets=24084, table=0, priority=0, selector=[], treatment=[transition=TABLE:10]
351 ADDED, bytes=358792, packets=4275, table=10, priority=32768, selector=[IN_PORT:1, VLAN_VID:None], treatment=[immediate=[VLAN_PUSH:vlan, VLAN_ID:4094], transition=TABLE:20]
352 ADDED, bytes=16416, packets=48, table=20, priority=32768, selector=[IN_PORT:1, ETH_DST:00:00:00:00:02:05, ETH_TYPE:ipv4, VLAN_VID:4094], treatment=[transition=TABLE:30]
353 ADDED, bytes=196, packets=2, table=30, priority=64010, selector=[ETH_TYPE:ipv4, IPV4_DST:10.0.3.1/32], treatment=[deferred=[GROUP:0x2000002a], transition=TABLE:60]
354 ADDED, bytes=1370884, packets=15163, table=60, priority=0, selector=[], treatment=[immediate=[NOACTION]]
355 Groups
356 id=0x2000002a, state=ADDED, type=INDIRECT, bytes=196, packets=2, appId=org.onosproject.segmentrouting, referenceCount=1
357 id=0x2000002a, bucket=1, bytes=196, packets=2, actions=[ETH_DST:00:AA:00:00:00:03, ETH_SRC:00:00:00:00:02:05, VLAN_ID:30, GROUP:0x1e0003]
358 id=0x1e0003, state=ADDED, type=INDIRECT, bytes=12960, packets=126, appId=org.onosproject.segmentrouting, referenceCount=1
359 id=0x1e0003, bucket=1, bytes=12960, packets=126, actions=[VLAN_POP, OUTPUT:3]
360 id=0x2000002a, state=ADDED, type=INDIRECT, bytes=196, packets=2, appId=org.onosproject.segmentrouting, referenceCount=1
361 id=0x2000002a, bucket=1, bytes=196, packets=2, actions=[ETH_DST:00:AA:00:00:00:03, ETH_SRC:00:00:00:00:02:05, VLAN_ID:30, GROUP:0x1e0003]
362 id=0x1e0003, state=ADDED, type=INDIRECT, bytes=12960, packets=126, appId=org.onosproject.segmentrouting, referenceCount=1
363 id=0x1e0003, bucket=1, bytes=12960, packets=126, actions=[VLAN_POP, OUTPUT:3]
364 Output through of:0000000000000205/3
365 Result:
366 Reached required destination Host
367 Reached required destination Host
368
369Successful Example
370------------------
371In this example we trace a packet that should be bridged between two hosts in the same subnet
372
373.. code-block:: console
374
375 onos> t3-troubleshoot -s 10.0.2.1 -sp of:0000000000000204/3 -sm 00:AA:00:00:00:01 -et IPV4 -d 10.0.3.1 -dm 00:AA:00:00:00:02 -vid None
376 Tracing packet: [IN_PORT:3, ETH_DST:00:AA:00:00:00:02, ETH_SRC:00:AA:00:00:00:01, ETH_TYPE:ipv4, VLAN_VID:None, IPV4_SRC:10.0.2.1/32, IPV4_DST:10.0.2.2/32, TCP_SRC:12345, TCP_DST:80, MPLS_BOS:true]
377 Paths
378 [of:0000000000000204/3, of:0000000000000204/4]
379 Result:
380 Reached required destination Host
381
382Failed Example
383--------------
384Obviously failures can happen along one of the paths that the packet can take.
385In our sample we removed a flow in ``of:0000000000000226`` thus disabling that possible path for our initial packet.
386The output of our trace would then look something like
387
388.. code-block:: console
389
390 onos> t3-troubleshoot -s 10.0.2.1 -sp of:0000000000000204/3 -sm 00:AA:00:00:00:01 -et IPV4 -d 10.0.3.1 -dm 00:00:00:00:02:04 -vid None
391 Tracing packet: [IN_PORT:3, ETH_DST:00:00:00:00:02:04, ETH_SRC:00:AA:00:00:00:01, ETH_TYPE:ipv4, VLAN_VID:None, IPV4_SRC:10.0.2.1/32, IPV4_DST:10.0.3.1/32, TCP_SRC:12345, TCP_DST:80, MPLS_BOS:true]
392 Paths
393 [of:0000000000000204/3, of:0000000000000204/2, of:0000000000000227/1, of:0000000000000227/2, of:0000000000000205/2, of:0000000000000205/3]
394 [of:0000000000000204/3, of:0000000000000204/1, of:0000000000000226/1]
395 Result:
396 Reached required destination Host
397 No output out of device of:0000000000000226 Packet is dropped
398
399Notice that on the second path that was previously going through ``of:0000000000000226`` now the packet is dropped due to the rule we removed.
400
401Example of Various Packet Types
402-------------------------------
403These sample commands refer to the Mininet environment found in trellis.py [#trellis.py]_
404
405- L2 Unicast IPv4
406
407 .. code-block:: console
408
409 t3-troubleshoot -s 10.0.2.1 -sp of:0000000000000204/3 -sm 00:AA:00:00:00:01 -d 10.0.2.2 -dm 00:AA:00:00:00:02
410
411- L2 Unicast IPv6
412
413 .. code-block:: console
414
415 t3-troubleshoot -vv -s 2000::301 -sp of:0000000000000205/5 -sm 00:BB:00:00:00:03 -d 2000::302 -dm 00:BB:00:00:00:04 -et ipv6
416
417- L3 Unicast IPv4
418
419 .. code-block:: console
420
421 t3-troubleshoot -s 10.0.2.1 -sp of:0000000000000204/3 -sm 00:AA:00:00:00:01 -d 10.0.3.1 -dm 00:00:00:00:02:04
422
423- L3 Unicast IPv6
424
425 .. code-block:: console
426
427 t3-troubleshoot -vv -s 2000::301 -sp of:0000000000000205/5 -sm 00:BB:00:00:00:03 -d 2000::202 -dm 00:00:00:00:02:05 -et ipv6
428
429- ARP
430
431 .. code-block:: console
432
433 t3-troubleshoot -sp of:0000000000000204/3 -et ARP
434
435- DHCP
436
437 .. code-block:: console
438
439 t3-troubleshoot -vv -s 10.0.2.1 -sp of:0000000000000204/3 -sm 00:AA:00:00:00:01 -d 10.0.3.253 -dm 00:00:00:00:02:04 -ipp 17 -udps 67 -udpd 67
440
441- LLDP
442
443 .. code-block:: console
444
445 t3-troubleshoot -sp of:0000000000000204/3 -et lldp
446
447- BDDP
448
449 .. code-block:: console
450
451 t3-troubleshoot -sp of:0000000000000204/3 -et bddp
452
453- LLDP from CONTROLLER
454
455 T3 is also capable of tracing packets coming in from the CONTROLLER.
456 We use the same input port with the possibility to give CONTROLLER as logical port number.
457 This is a mere convenience to carry the information inside T3 and do the proper flooding to all the ports of the given device.
458 This case is not treated like all the rest and the input port here is a logical entity that has no match on any physical element on the device.
459
460 .. code-block:: console
461
462 t3-troubleshoot -sp of:0000000000000204/CONTROLLER -et lldp
463
464- Multicast
465
466 T3 is also capable of tracing multicast packets.
467
468 .. code-block:: console
469
470 t3-troubleshoot -vv -sp of:0000000000000205/9 -et ipv4 -d 224.0.0.1 -dm 01:00:5e:00:00:01
471
472
473t3-troubleshoot-simple
474======================
475T3 also offers a simplified version of the command to be able to ping between two given hosts without having to specify all the information.
476This commands bases itself on top of some configuration present in ONOS through netcfg, namely the VLAN interface configuration and the segment routing leaf router MAC for L3 Unicast. If that is not present the user needs to input this information manually recurring to the the previously shown command. Same verbosity levels and output as the troubleshoot command are possible.
477
478t3-troubleshoot-simple Help
479---------------------------
480.. code-block:: console
481
482 onos> t3-troubleshoot-simple --help
483 DESCRIPTION
484 onos:troubleshoot-simple
485
486 Given two hosts troubleshoots flows and groups between them, in case of segment routing
487
488 SYNTAX
489 onos:troubleshoot-simple [options] one two
490
491 ARGUMENTS
492 one
493 One host ID
494 two
495 Another host ID
496
497 OPTIONS
498 -vv, --veryverbose
499 Outputs flows and groups for every device
500 -j, --json
501 Output JSON
502 --help
503 Display this help message
504 -et, --ethType
505 ETH Type
506 (defaults to ipv4)
507 -v, --verbose
508 Outputs complete path
509
510t3-troubleshoot-simple Example
511------------------------------
512Examples are given for the same trellis.py [#trellis.py]_ script.
513
514- L2 Unicast
515
516 Hosts are under the same leaf, only interface configuration is needed.
517
518 .. code-block:: console
519
520 t3-troubleshoot-simple -v -et IPV4 00:AA:00:00:00:01/None 00:AA:00:00:00:02/None
521
522- L3 Multicast
523
524 Hosts are under different leafs, also segment routing configuration config is needed for the leaf's routerMac.
525
526 .. code-block:: console
527
528 t3-troubleshoot-simple -et IPV4 00:AA:00:00:00:01/None 00:AA:00:00:00:03/None
529
530
531t3-troubleshoot-pingall
532=======================
533T3 also offers a ping-all command to be able to test ping between any given hosts of an EthType.
534This commands bases itself on top of the simplified Host to Host command. It has two verbosity levels,
535one just with Host and Destination with the result message of the Trace and one that shows also the packet and the paths.
536
537t3-troubleshoot-pingall Help
538----------------------------
539.. code-block:: console
540
541 onos> t3-troubleshoot-pingall --help
542 DESCRIPTION
543 onos:t3-troubleshoot-pingall
544
545 Traces a ping between all hosts in the system of a given ETH type
546
547 SYNTAX
548 onos:t3-troubleshoot-pingall [options]
549
550 OPTIONS
551 -j, --json
552 Output JSON
553 --help
554 Display this help message
555 -et, --ethType
556 ETH Type
557 (defaults to ipv4)
558 -v, --verbose
559 Outputs trace for each host to host combination
560
561t3-troubleshoot-pingall Examples
562--------------------------------
563- IPv4 hosts
564
565 .. code-block:: console
566
567 t3-troubleshoot-pingall
568
569- IPv6 hosts
570
571 .. code-block:: console
572
573 t3-troubleshoot-pingall -et IPV6
574
575
576t3-troubleshoot-mcast
577=====================
578T3 also offers a mcast command queries the system for all the multicast routes given a certain vlanId.
579It prints all the traces given a certain group, source and source connect point. It has two "standard" verbosity levels.
580
581t3-troubleshoot-mcast Help
582--------------------------
583.. code-block:: console
584
585 onos> t3-troubleshoot-mcast --help
586 DESCRIPTION
587 onos:t3-troubleshoot-mcast
588
589 Traces all the mcast routes present in the system
590
591 SYNTAX
592 onos:t3-troubleshoot-mcast [options]
593
594 OPTIONS
595 -j, --json
596 Output JSON
597 --help
598 Display this help message
599 -vv, --veryverbose
600 Outputs details of every trace
601 -vid, --vlanId
602 Vlan of incoming packet
603 (defaults to None)
604 -v, --verbose
605 Outputs trace for each host to host combination
606
607REST API
608========
609T3 now also offers a way to execute the troubleshoot through REST API endpoints.
610You can find the description and test the API at the ONOS docs endpoint here:
611
612.. code-block:: text
613
614 <ONOS_IP>:8181/onos/v1/docs/#/t3
615
616The rest API offered are a non verbose and a verbose version of the troubleshoot simple command.
617It bases itself on top of some configuration present in ONOS through netcfg, namely the VLAN interface configuration and the segment routing leaf router MAC for L3 Unicast.
618The use need to specify just the Source Host, the destination host and the ETH type.
619
620.. code-block:: console
621
622 curl -X GET --header 'Accept: application/json' 'http://localhost:8181/onos/v1/t3/t3/simple/<host_src>/<host_dst>/<eht_type>'
623
624.. code-block:: console
625
626 curl -X GET --header 'Accept: application/json' 'http://localhost:8181/onos/v1/t3/t3/simple/<host_src>/<host_dst>/<eht_type>/verbose
627
628
629Last Resort
630===========
631
632In the case where you can't figure out what is going wrong even with help of T3, you can seek help on Trellis developer mailing list ``trellis-dev@opennetworking.org``.
633There are a few things we would like you to attach:
634
635- **Issue description**
636- **Environment description**, such as ONOS version, switch model and OF-DPA version
637- **Steps of reproduction**, as detail as possible
638- **Diagnostics**.
639 We have built a tool ``onos-diagnostics`` (see `ONOS Remote Admin Tools <https://wiki.onosproject.org/display/ONOS/ONOS+Remote+Admin+Tools>`_) to help you easily collect and package ONOS diagnostics
640
641
642Reference
643=========
644
645.. [#trellis.py] `<https://github.com/opennetworkinglab/routing/blob/master/trellis/trellis.py>`_