~james-page/ubuntu/saucy/openvswitch/1.12-snapshot

« back to all changes in this revision

Viewing changes to tests/ofproto-dpif.at

  • Committer: James Page
  • Date: 2013-08-21 10:16:57 UTC
  • mfrom: (1.1.20)
  • Revision ID: james.page@canonical.com-20130821101657-3o0z0qeiv5zkwlzi
New upstream snapshot

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
OVS_VSWITCHD_STOP
21
21
AT_CLEANUP
22
22
 
 
23
AT_SETUP([ofproto-dpif - goto table])
 
24
OVS_VSWITCHD_START
 
25
ADD_OF_PORTS([br0], [1], [10], [11])
 
26
echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
 
27
for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
 
28
echo "table=64 actions=output(11)" >> flows.txt
 
29
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
 
30
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
 
31
AT_CHECK([tail -1 stdout], [0],
 
32
  [Datapath actions: 10,11
 
33
])
 
34
OVS_VSWITCHD_STOP
 
35
AT_CLEANUP
 
36
 
23
37
AT_SETUP([ofproto-dpif - registers])
24
38
OVS_VSWITCHD_START
25
39
ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
45
59
in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
46
60
in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
47
61
in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
 
62
 
48
63
])
49
64
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
 
65
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
51
66
AT_CHECK([tail -1 stdout], [0],
52
67
  [Datapath actions: 20,21,22,33
53
68
])
54
69
OVS_VSWITCHD_STOP
55
70
AT_CLEANUP
56
71
 
 
72
AT_SETUP([ofproto-dpif - push-pop])
 
73
OVS_VSWITCHD_START
 
74
ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
 
75
AT_DATA([flows.txt], [dnl
 
76
in_port=90           actions=load:20->NXM_NX_REG0[[0..7]],load:21->NXM_NX_REG1[[0..7]],load:22->NXM_NX_REG2[[0..7]], load:33->NXM_NX_REG3[[0..7]], push:NXM_NX_REG0[[]], push:NXM_NX_REG1[[0..7]],push:NXM_NX_REG2[[0..15]], push:NXM_NX_REG3[[]], resubmit:2, resubmit:3, resubmit:4, resubmit:5
 
77
in_port=2            actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
 
78
in_port=3            actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
 
79
in_port=4            actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
 
80
in_port=5            actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
 
81
 
 
82
])
 
83
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
84
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
 
85
AT_CHECK([tail -1 stdout], [0],
 
86
  [Datapath actions: 33,22,21,20
 
87
])
 
88
OVS_VSWITCHD_STOP
 
89
AT_CLEANUP
 
90
 
57
91
AT_SETUP([ofproto-dpif - output])
58
92
OVS_VSWITCHD_START
59
93
ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
60
94
AT_DATA([flows.txt], [dnl
61
 
in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
 
95
in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
62
96
in_port=2 actions=output:9
63
97
in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
64
98
in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
65
99
in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
66
100
in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
67
101
in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
 
102
in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
68
103
])
69
104
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
70
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
 
105
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
71
106
AT_CHECK([tail -1 stdout], [0],
72
 
  [Datapath actions: 9,55,10,55,66,11,77,88
 
107
  [Datapath actions: 9,55,10,55,66,11,77,88,9,1
73
108
])
74
109
OVS_VSWITCHD_STOP
75
110
AT_CLEANUP
82
117
table=1 in_port=1 action=dec_ttl,output:3
83
118
])
84
119
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
85
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
 
120
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
86
121
AT_CHECK([tail -3 stdout], [0],
87
122
  [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
88
123
This flow is handled by the userspace slow path because it:
89
124
        - Sends "packet-in" messages to the OpenFlow controller.
90
125
])
91
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=3,frag=no)'], [0], [stdout])
 
126
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=3,frag=no)'], [0], [stdout])
92
127
AT_CHECK([tail -1 stdout], [0],
93
128
  [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),3,4
94
129
])
95
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
 
130
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
96
131
AT_CHECK([tail -1 stdout], [0],
97
132
  [Datapath actions: set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=127,frag=no)),2,set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=126,frag=no)),3,4
98
133
])
99
134
 
100
135
AT_CAPTURE_FILE([ofctl_monitor.log])
101
136
AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
102
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
 
137
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
103
138
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
104
139
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
105
140
NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
131
166
OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
132
167
ADD_OF_PORTS([br0], [9])
133
168
AT_DATA([flows.txt], [dnl
134
 
actions=output:65534,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:65534
 
169
actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
135
170
])
136
171
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
137
172
AT_CHECK([ovs-vsctl -- \
139
174
        --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
140
175
        --id=@q1 create Queue dscp=1 --\
141
176
        --id=@q2 create Queue dscp=2], [0], [ignore])
142
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
 
177
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
143
178
AT_CHECK([tail -1 stdout], [0],
144
179
  [Datapath actions: dnl
145
180
100,dnl
162
197
in_port=local actions=local,flood
163
198
in_port=1 actions=flood
164
199
in_port=2 actions=all
165
 
in_port=3 actions=output:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
166
 
in_port=4 actions=enqueue:65534:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
 
200
in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
 
201
in_port=4 actions=enqueue:LOCAL:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
167
202
])
168
203
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
169
204
AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
170
205
AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
171
206
 
172
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
 
207
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
173
208
AT_CHECK([tail -1 stdout \
174
209
| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
175
210
1
179
214
7
180
215
])
181
216
 
182
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
 
217
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
183
218
AT_CHECK([tail -1 stdout \
184
219
| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
185
220
100
189
224
7
190
225
])
191
226
 
192
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
 
227
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
193
228
AT_CHECK([tail -1 stdout \
194
229
| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
195
230
1
200
235
7
201
236
])
202
237
 
203
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
 
238
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
204
239
AT_CHECK([tail -1 stdout], [0],
205
240
  [Datapath actions: 100,1,2,4,6,7
206
241
])
207
242
 
208
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
 
243
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
209
244
AT_CHECK([tail -1 stdout], [0],
210
245
  [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
211
246
])
216
251
OVS_VSWITCHD_START([dnl
217
252
   add-port br0 p1 -- set Interface p1 type=dummy
218
253
])
 
254
ON_EXIT([kill `cat ovs-ofctl.pid`])
219
255
 
220
256
AT_CAPTURE_FILE([ofctl_monitor.log])
221
257
AT_DATA([flows.txt], [dnl
230
266
cookie=0x7 table=5 in_port=84 actions=load:5->NXM_NX_REG4[[]],load:6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,controller,resubmit(85,6)
231
267
cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
232
268
cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
 
269
cookie=0xa dl_src=40:44:44:44:44:41 actions=push_vlan:0x8100,mod_vlan_vid:99,mod_vlan_pcp:1,controller
 
270
cookie=0xa dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
 
271
cookie=0xa dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
 
272
cookie=0xa dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
 
273
cookie=0xa dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,controller
 
274
cookie=0xa dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),controller
 
275
cookie=0xa dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),controller
 
276
cookie=0xa dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,controller
 
277
cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
 
278
cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
 
279
cookie=0xc dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:1000->OXM_OF_MPLS_LABEL[[]],load:7->OXM_OF_MPLS_TC[[]],controller
233
280
])
234
281
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
235
282
 
239
286
for i in 1 2 3 ; do
240
287
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'
241
288
done
 
289
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
290
ovs-appctl -t ovs-ofctl exit
242
291
 
243
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
244
292
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
245
293
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
246
294
tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9 tcp_csum:0
258
306
for i in 1 2 3 ; do
259
307
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10)'
260
308
done
 
309
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
310
ovs-appctl -t ovs-ofctl exit
261
311
 
262
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
263
312
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
264
313
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
265
314
tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
277
326
for i in 1 2 3 ; do
278
327
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=30:33:33:33:33:33,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10)'
279
328
done
 
329
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
330
ovs-appctl -t ovs-ofctl exit
 
331
 
 
332
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
333
OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
334
tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
 
335
dnl
 
336
OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
337
tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
 
338
dnl
 
339
OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
340
tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
 
341
])
 
342
 
 
343
dnl Modified VLAN controller action.
 
344
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
 
345
 
 
346
for i in 1 2 3; do
 
347
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:41,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
 
348
done
 
349
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
350
ovs-appctl -t ovs-ofctl exit
 
351
 
 
352
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
353
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
354
tcp,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64 tcp_csum:0
 
355
dnl
 
356
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
357
tcp,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64 tcp_csum:0
 
358
dnl
 
359
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
360
tcp,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64 tcp_csum:0
 
361
])
 
362
 
 
363
dnl Modified MPLS controller action.
 
364
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
 
365
 
 
366
for i in 1 2 3; do
 
367
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
 
368
done
 
369
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
370
ovs-appctl -t ovs-ofctl exit
 
371
 
 
372
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
373
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
374
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
 
375
dnl
 
376
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
377
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
 
378
dnl
 
379
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
380
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
 
381
])
 
382
 
 
383
dnl Modified MPLS controller action.
 
384
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
 
385
 
 
386
dnl in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8847),mpls(label=100,tc=3,ttl=64,bos=1)
 
387
 
 
388
for i in 1 2 3; do
 
389
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:43,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'
 
390
done
280
391
 
281
392
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
282
393
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
283
 
OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
284
 
tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
285
 
dnl
286
 
OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
287
 
tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
288
 
dnl
289
 
OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
290
 
tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
 
394
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
395
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
 
396
dnl
 
397
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
398
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
 
399
dnl
 
400
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
401
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
 
402
])
 
403
 
 
404
dnl Modified MPLS controller action.
 
405
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
 
406
 
 
407
for i in 1 2 3; do
 
408
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:44,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=99,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
 
409
done
 
410
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
411
ovs-appctl -t ovs-ofctl exit
 
412
 
 
413
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
414
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
415
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
 
416
dnl
 
417
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
418
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
 
419
dnl
 
420
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
421
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
 
422
])
 
423
 
 
424
dnl Modified MPLS controller action.
 
425
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
 
426
 
 
427
for i in 1 2 3; do
 
428
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:45,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
 
429
done
 
430
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
431
ovs-appctl -t ovs-ofctl exit
 
432
 
 
433
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
434
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
435
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
 
436
dnl
 
437
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
438
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
 
439
dnl
 
440
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
441
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
 
442
])
 
443
 
 
444
dnl Modified MPLS controller action.
 
445
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
 
446
 
 
447
for i in 1 2 3; do
 
448
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:46,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
 
449
done
 
450
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
451
ovs-appctl -t ovs-ofctl exit
 
452
 
 
453
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
454
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
455
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
 
456
dnl
 
457
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
458
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
 
459
dnl
 
460
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
461
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
 
462
])
 
463
 
 
464
dnl Modified MPLS controller action.
 
465
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
 
466
 
 
467
for i in 1 2 3; do
 
468
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:47,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
 
469
done
 
470
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
471
ovs-appctl -t ovs-ofctl exit
 
472
 
 
473
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
474
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
475
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
 
476
dnl
 
477
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
478
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
 
479
dnl
 
480
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
481
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
 
482
])
 
483
 
 
484
dnl Modified MPLS controller action.
 
485
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
 
486
 
 
487
for i in 1 2 3; do
 
488
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:48,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
 
489
done
 
490
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
491
ovs-appctl -t ovs-ofctl exit
 
492
 
 
493
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
494
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
495
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
 
496
dnl
 
497
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
498
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
 
499
dnl
 
500
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
501
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
 
502
])
 
503
 
 
504
dnl Modified MPLS actions.
 
505
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
 
506
 
 
507
for i in 1 2 3; do
 
508
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:55:55:55:55:55,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=100,tc=7,ttl=64,bos=1)'
 
509
done
 
510
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
511
ovs-appctl -t ovs-ofctl exit
 
512
 
 
513
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
514
NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
 
515
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
 
516
dnl
 
517
NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
 
518
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
 
519
dnl
 
520
NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
 
521
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
 
522
])
 
523
 
 
524
dnl Modified MPLS ipv6 controller action.
 
525
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
 
526
 
 
527
for i in 1 2 3; do
 
528
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=70:77:77:77:77:77,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
 
529
done
 
530
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
531
ovs-appctl -t ovs-ofctl exit
 
532
 
 
533
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
534
NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
535
mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
 
536
dnl
 
537
NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
538
mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
 
539
dnl
 
540
NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
 
541
mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
 
542
])
 
543
 
 
544
 
 
545
dnl Modified MPLS pop action.
 
546
dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
 
547
dnl 60:66:66:66:66:66 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
 
548
dnl             (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
 
549
 
 
550
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
 
551
 
 
552
for i in 1 2 3; do
 
553
    ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 66 66 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
 
554
done
 
555
#for i in 2 3; do
 
556
#    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=60:66:66:66:66:66,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=3,ttl=100,bos=1)'
 
557
#done
 
558
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
 
559
ovs-appctl -t ovs-ofctl exit
 
560
 
 
561
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
 
562
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
 
563
tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0 tcp_csum:7744
 
564
dnl
 
565
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
 
566
tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0 tcp_csum:7744
 
567
dnl
 
568
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
 
569
tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0 tcp_csum:7744
291
570
])
292
571
 
293
572
dnl Checksum TCP.
296
575
for i in 1 ; do
297
576
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=20:22:22:22:22:22,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=11)'
298
577
done
 
578
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
 
579
ovs-appctl -t ovs-ofctl exit
299
580
 
300
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
301
581
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
302
582
NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
303
583
tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:0
333
613
for i in 1 ; do
334
614
    ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 1C 00 00 00 00 00 11 00 00 C0 A8 00 01 C0 A8 00 02 00 08 00 0B 00 00 12 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
335
615
done
 
616
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
 
617
ovs-appctl -t ovs-ofctl exit
336
618
 
337
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
338
619
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
339
620
NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
340
621
udp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
375
656
 cookie=0x7, table=5, n_packets=2, n_bytes=120, in_port=84 actions=load:0x5->NXM_NX_REG4[[]],load:0x6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,CONTROLLER:65535,resubmit(85,6)
376
657
 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
377
658
 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
 
659
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,CONTROLLER:65535
 
660
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
 
661
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
 
662
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
 
663
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,CONTROLLER:65535
 
664
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),CONTROLLER:65535
 
665
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),CONTROLLER:65535
 
666
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,CONTROLLER:65535
 
667
 cookie=0xb, n_packets=3, n_bytes=180, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
 
668
 cookie=0xc, n_packets=3, n_bytes=180, dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:0x3e8->OXM_OF_MPLS_LABEL[[]],load:0x7->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
 
669
 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
378
670
 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
379
671
NXST_FLOW reply:
380
672
])
505
797
  echo "----------------------------------------------------------------------"
506
798
  echo "in_port=$in_port vlan=$vlan pcp=$pcp"
507
799
 
508
 
  AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
800
  AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
509
801
  actual=`tail -1 stdout | sed 's/Datapath actions: //'`
510
802
 
511
803
  AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
550
842
  for type in no first later; do
551
843
    eval flow=\$${type}_flow exp_output=\$$type
552
844
    printf "\n%s\n" "----$mode $type-----"
553
 
    AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
845
    AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
554
846
    : > expout
555
847
    if test $mode = drop && test $type != no; then
556
848
        echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
571
863
in_port=3 actions=output:13,resubmit:2,output:14
572
864
])
573
865
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
574
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
 
866
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
575
867
AT_CHECK([tail -1 stdout], [0],
576
868
  [Datapath actions: 10
577
869
])
578
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
 
870
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
579
871
AT_CHECK([tail -1 stdout], [0],
580
872
  [Datapath actions: 12,10
581
873
])
582
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(3),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
 
874
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
583
875
AT_CHECK([tail -1 stdout], [0],
584
876
  [Datapath actions: 13,12,10
585
877
])
602
894
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
603
895
 
604
896
flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
605
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
897
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
606
898
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
607
899
  [Datapath actions: 2,3
608
900
])
609
901
 
610
902
flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
611
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
903
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
612
904
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
613
905
  [Datapath actions: 1,3
614
906
])
632
924
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
633
925
 
634
926
flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
635
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
927
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
636
928
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
637
929
  [Datapath actions: 2,3
638
930
])
639
931
 
640
932
flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
641
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
933
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
642
934
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
643
935
  [Datapath actions: 1
644
936
])
681
973
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
682
974
 
683
975
flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
684
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
976
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
685
977
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
686
978
  [Datapath actions: 2,3
687
979
])
688
980
 
689
981
flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
690
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
982
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
691
983
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
692
984
  [Datapath actions: 1
693
985
])
710
1002
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
711
1003
 
712
1004
flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
713
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
1005
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
714
1006
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
715
1007
  [Datapath actions: 2
716
1008
])
717
1009
 
718
1010
flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=10,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
719
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
1011
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
720
1012
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
721
1013
  [Datapath actions: 2
722
1014
])
723
1015
 
724
1016
flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=11,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
725
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
1017
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
726
1018
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
727
1019
  [Datapath actions: 2,3
728
1020
])
746
1038
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
747
1039
 
748
1040
flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
749
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
1041
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
750
1042
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
751
1043
  [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
752
1044
])
753
1045
 
754
1046
flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
755
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
1047
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
756
1048
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
757
1049
  [Datapath actions: 1,3
758
1050
])
774
1066
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
775
1067
 
776
1068
flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
777
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
1069
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
778
1070
actual=`tail -1 stdout | sed 's/Datapath actions: //'`
779
1071
 
780
1072
expected="2,push_vlan(vid=12,pcp=0),1,2,100"
783
1075
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
784
1076
 
785
1077
flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
786
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
 
1078
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
787
1079
actual=`tail -1 stdout | sed 's/Datapath actions: //'`
788
1080
 
789
1081
expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
794
1086
OVS_VSWITCHD_STOP
795
1087
AT_CLEANUP
796
1088
 
 
1089
# Two testcases below are for the ofproto/trace command
 
1090
# The first one tests all correct syntax:
 
1091
# ofproto/trace [dp_name] odp_flow [-generate|packet]
 
1092
# ofproto/trace br_name br_flow [-generate|packet]
 
1093
AT_SETUP([ofproto-dpif - ofproto/trace command 1])
 
1094
OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
 
1095
ADD_OF_PORTS([br0], 1, 2, 3)
 
1096
 
 
1097
AT_DATA([flows.txt], [dnl
 
1098
in_port=1 actions=output:2
 
1099
in_port=2 actions=output:1
 
1100
])
 
1101
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
1102
 
 
1103
odp_flow="in_port(1)"
 
1104
br_flow="in_port=1"
 
1105
# Test command: ofproto/trace odp_flow
 
1106
AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
 
1107
AT_CHECK([tail -1 stdout], [0], [dnl
 
1108
Datapath actions: 2
 
1109
])
 
1110
 
 
1111
# Test command: ofproto/trace dp_name odp_flow
 
1112
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
 
1113
AT_CHECK([tail -1 stdout], [0], [dnl
 
1114
Datapath actions: 2
 
1115
])
 
1116
# Test commmand: ofproto/trace br_name br_flow
 
1117
AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
 
1118
AT_CHECK([tail -1 stdout], [0], [dnl
 
1119
Datapath actions: 2
 
1120
])
 
1121
 
 
1122
# Delete the inserted flows
 
1123
AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
 
1124
AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
 
1125
 
 
1126
# This section beflow tests the [-generate] option
 
1127
odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
 
1128
br_flow="arp,metadata=0,in_port=3,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=ff:ff:ff:ff:ff:ff"
 
1129
 
 
1130
# Test command: ofproto/trace odp_flow
 
1131
AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
 
1132
# Check for no MAC learning entry
 
1133
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
 
1134
 port  VLAN  MAC                Age
 
1135
])
 
1136
 
 
1137
# Test command: ofproto/trace br_name br_flow
 
1138
AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
 
1139
# Check for no MAC learning entry
 
1140
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
 
1141
 port  VLAN  MAC                Age
 
1142
])
 
1143
 
 
1144
# Test command: ofproto/trace odp_flow -generate
 
1145
AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
 
1146
# Check for the MAC learning entry
 
1147
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
 
1148
 port  VLAN  MAC                Age
 
1149
    3     0  50:54:00:00:00:05    ?
 
1150
])
 
1151
 
 
1152
# Test command: ofproto/trace dp_name odp_flow -generate
 
1153
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
 
1154
  "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
 
1155
  -generate], [0], [stdout])
 
1156
# Check for both MAC learning entries
 
1157
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
 
1158
 port  VLAN  MAC                Age
 
1159
    3     0  50:54:00:00:00:05    ?
 
1160
    1     0  50:54:00:00:00:06    ?
 
1161
])
 
1162
 
 
1163
# Test command: ofproto/trace br_name br_flow -generate
 
1164
AT_CHECK([ovs-appctl ofproto/trace br0 \
 
1165
  "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
 
1166
  -generate], [0], [stdout])
 
1167
# Check for both MAC learning entries.
 
1168
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
 
1169
 port  VLAN  MAC                Age
 
1170
    3     0  50:54:00:00:00:05    ?
 
1171
    1     0  50:54:00:00:00:06    ?
 
1172
    2     0  50:54:00:00:00:07    ?
 
1173
])
 
1174
 
 
1175
# This section beflow tests the [packet] option
 
1176
# The ovs-tcpundump of packets between port1 and port2
 
1177
pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
 
1178
pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
 
1179
 
 
1180
# Construct the MAC learning table
 
1181
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
 
1182
  "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
 
1183
  -generate], [0], [stdout])
 
1184
 
 
1185
# Construct the MAC learning table
 
1186
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
 
1187
  "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
 
1188
  -generate], [0], [stdout])
 
1189
 
 
1190
# Test command: ofproto/trace odp_flow packet
 
1191
AT_CHECK([ovs-appctl ofproto/trace \
 
1192
  "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
 
1193
AT_CHECK([tail -1 stdout], [0], [dnl
 
1194
Datapath actions: 2
 
1195
])
 
1196
AT_CHECK([head -n 3 stdout], [0], [dnl
 
1197
Bridge: br0
 
1198
Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
 
1199
Flow: skb_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
 
1200
])
 
1201
 
 
1202
# Test command: ofproto/trace dp_name odp_flow packet
 
1203
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
 
1204
  "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
 
1205
AT_CHECK([tail -1 stdout], [0], [dnl
 
1206
Datapath actions: 2
 
1207
])
 
1208
AT_CHECK([head -n 3 stdout], [0], [dnl
 
1209
Bridge: br0
 
1210
Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
 
1211
Flow: skb_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
 
1212
])
 
1213
 
 
1214
# Test command: ofproto/trace br_name br_flow packet
 
1215
AT_CHECK([ovs-appctl ofproto/trace br0 \
 
1216
  "in_port=2,skb_priority=2,skb_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
 
1217
AT_CHECK([tail -1 stdout], [0], [dnl
 
1218
Datapath actions: set(skb_mark(0)),1
 
1219
])
 
1220
AT_CHECK([head -n 2 stdout], [0], [dnl
 
1221
Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
 
1222
Flow: skb_mark=0x1,skb_priority=0x2,arp,metadata=0,in_port=2,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
 
1223
])
 
1224
 
 
1225
OVS_VSWITCHD_STOP
 
1226
AT_CLEANUP
 
1227
 
 
1228
# The second test tests the corner cases
 
1229
AT_SETUP([ofproto-dpif - ofproto/trace command 2])
 
1230
OVS_VSWITCHD_START
 
1231
ADD_OF_PORTS([br0], 1, 2)
 
1232
 
 
1233
# Define flows
 
1234
odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
 
1235
br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
 
1236
# Define options
 
1237
generate="-generate"
 
1238
pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
 
1239
 
 
1240
# Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
 
1241
m4_foreach(
 
1242
[option],
 
1243
[[],
 
1244
["$generate"],
 
1245
["$pkt"]],
 
1246
[AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
 
1247
  [2], [], [stderr])
 
1248
AT_CHECK([tail -2 stderr], [0], [dnl
 
1249
Cannot find datapath of this name
 
1250
ovs-appctl: ovs-vswitchd: server returned an error
 
1251
])])
 
1252
 
 
1253
# Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
 
1254
m4_foreach(
 
1255
[option],
 
1256
[[],
 
1257
["$generate"],
 
1258
["$pkt"]],
 
1259
[AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
 
1260
  [2], [], [stderr])
 
1261
AT_CHECK([tail -2 stderr], [0], [dnl
 
1262
Cannot find datapath of this name
 
1263
ovs-appctl: ovs-vswitchd: server returned an error
 
1264
])])
 
1265
 
 
1266
# Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
 
1267
m4_foreach(
 
1268
[option],
 
1269
[[],
 
1270
["$generate"],
 
1271
["$pkt"]],
 
1272
[AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
 
1273
  [2], [], [stderr])
 
1274
AT_CHECK([tail -2 stderr], [0], [dnl
 
1275
Cannot find datapath of this name
 
1276
ovs-appctl: ovs-vswitchd: server returned an error
 
1277
])])
 
1278
 
 
1279
# Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
 
1280
m4_foreach(
 
1281
[option],
 
1282
[[],
 
1283
["$generate"],
 
1284
["$pkt"]],
 
1285
[AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
 
1286
  [2], [], [stderr])
 
1287
AT_CHECK([tail -2 stderr], [0], [dnl
 
1288
Cannot find datapath of this name
 
1289
ovs-appctl: ovs-vswitchd: server returned an error
 
1290
])])
 
1291
 
 
1292
# Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
 
1293
m4_foreach(
 
1294
[option],
 
1295
[[],
 
1296
["$generate"],
 
1297
["$pkt"]],
 
1298
[AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
 
1299
  [2], [], [stderr])
 
1300
AT_CHECK([tail -2 stderr], [0], [dnl
 
1301
Unknown bridge name
 
1302
ovs-appctl: ovs-vswitchd: server returned an error
 
1303
])])
 
1304
 
 
1305
# Test incorrect command: ofproto/trace br_flow [-generate|packet]
 
1306
m4_foreach(
 
1307
[option],
 
1308
[[],
 
1309
["$generate"],
 
1310
["$pkt"]],
 
1311
[AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
 
1312
  [2], [], [stderr])
 
1313
AT_CHECK([tail -2 stderr], [0], [dnl
 
1314
Must specify bridge name
 
1315
ovs-appctl: ovs-vswitchd: server returned an error
 
1316
])])
 
1317
 
 
1318
# Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
 
1319
AT_CHECK([ovs-appctl ofproto/trace \
 
1320
  ovs-dummy "$odp_flow" garbage_option],
 
1321
  [2], [stdout],[stderr])
 
1322
AT_CHECK([tail -2 stderr], [0], [dnl
 
1323
Trailing garbage in packet data
 
1324
ovs-appctl: ovs-vswitchd: server returned an error
 
1325
])
 
1326
 
 
1327
# Test incorrect command: ofproto/trace with 4 arguments
 
1328
AT_CHECK([ovs-appctl ofproto/trace \
 
1329
  arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
 
1330
AT_CHECK([tail -2 stderr], [0], [dnl
 
1331
"ofproto/trace" command takes at most 3 arguments
 
1332
ovs-appctl: ovs-vswitchd: server returned an error
 
1333
])
 
1334
 
 
1335
# Test incorrect command: ofproto/trace with 0 argument
 
1336
AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
 
1337
AT_CHECK([tail -2 stderr], [0], [dnl
 
1338
"ofproto/trace" command requires at least 1 arguments
 
1339
ovs-appctl: ovs-vswitchd: server returned an error
 
1340
])
 
1341
 
 
1342
OVS_VSWITCHD_STOP
 
1343
AT_CLEANUP
 
1344
 
797
1345
m4_define([OFPROTO_TRACE],
798
1346
  [flow="$2"
799
1347
   AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
813
1361
 
814
1362
# Trace an ARP packet arriving on p3, to create a MAC learning entry.
815
1363
OFPROTO_TRACE(
816
 
  [br0],
 
1364
  [ovs-dummy],
817
1365
  [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
818
1366
  [-generate],
819
1367
  [1,2,100])
827
1375
# Trace a packet arrival destined for the learned MAC.
828
1376
# (This will also learn a MAC.)
829
1377
OFPROTO_TRACE(
830
 
  [br0],
 
1378
  [ovs-dummy],
831
1379
  [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
832
1380
  [-generate],
833
1381
  [3])
841
1389
 
842
1390
# Trace a packet arrival that updates the first learned MAC entry.
843
1391
OFPROTO_TRACE(
844
 
  [br0],
 
1392
  [ovs-dummy],
845
1393
  [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
846
1394
  [-generate],
847
1395
  [1,3,100])
857
1405
AT_CHECK(
858
1406
  [ovs-vsctl \
859
1407
     -- add-br br1 \
860
 
     -- set bridge br1 datapath-type=dummy \
861
 
     -- add-port br1 p4 -- set interface p4 type=dummy \
862
 
     -- add-port br1 p5 -- set interface p5 type=dummy])
 
1408
     -- set bridge br1 datapath-type=dummy])
 
1409
ADD_OF_PORTS([br1], 4, 5)
863
1410
 
864
1411
# Trace some packet arrivals in br1 to create MAC learning entries there too.
865
1412
OFPROTO_TRACE(
866
 
  [br1],
 
1413
  [ovs-dummy],
867
1414
  [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
868
1415
  [-generate],
869
1416
  [5,101])
870
1417
OFPROTO_TRACE(
871
 
  [br1],
 
1418
  [ovs-dummy],
872
1419
  [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
873
1420
  [-generate],
874
1421
  [4,101])
897
1444
 
898
1445
AT_SETUP([ofproto-dpif - MAC table overflow])
899
1446
OVS_VSWITCHD_START(
900
 
  [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
901
 
   add-port br0 p1 -- set Interface p1 type=dummy -- \
902
 
   add-port br0 p2 -- set Interface p2 type=dummy -- \
903
 
   add-port br0 p3 -- set Interface p3 type=dummy])
 
1447
  [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
 
1448
ADD_OF_PORTS([br0], 1, 2, 3)
904
1449
 
905
1450
arp='eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
906
1451
 
909
1454
# Trace 10 ARP packets arriving on p3, to create MAC learning entries.
910
1455
for i in 0 1 2 3 4 5 6 7 8 9; do
911
1456
    OFPROTO_TRACE(
912
 
      [br0],
 
1457
      [ovs-dummy],
913
1458
      [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
914
1459
      [-generate],
915
1460
      [1,2,100])
934
1479
 
935
1480
# Trace another ARP packet on another MAC.
936
1481
OFPROTO_TRACE(
937
 
  [br0],
 
1482
  [ovs-dummy],
938
1483
  [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
939
1484
  [-generate],
940
1485
  [1,2,100])
957
1502
OVS_VSWITCHD_STOP
958
1503
AT_CLEANUP
959
1504
 
 
1505
dnl Test that sFlow samples packets correctly.
 
1506
AT_SETUP([ofproto-dpif - sFlow packet sampling])
 
1507
OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
 
1508
 
 
1509
ON_EXIT([kill `cat test-sflow.pid`])
 
1510
AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
 
1511
AT_CAPTURE_FILE([sflow.log])
 
1512
SFLOW_PORT=`parse_listening_port < test-sflow.log`
 
1513
 
 
1514
ovs-appctl time/stop
 
1515
 
 
1516
ADD_OF_PORTS([br0], 1, 2)
 
1517
ovs-vsctl \
 
1518
   set Interface br0 options:ifindex=1002 -- \
 
1519
   set Interface p1 options:ifindex=1004 -- \
 
1520
   set Interface p2 options:ifindex=1003 -- \
 
1521
   set Bridge br0 sflow=@sf -- \
 
1522
   --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
 
1523
     header=128 sampling=1 polling=1
 
1524
 
 
1525
dnl open with ARP packets to seed the bridge-learning.  The output
 
1526
dnl ifIndex numbers should be reported predictably after that.
 
1527
dnl Since we set sampling=1 we should see all of these packets
 
1528
dnl reported. Sorting the output by data-source and seqNo makes
 
1529
dnl it deterministic. Ensuring that we send at least two packets
 
1530
dnl into each port means we get to check the seq nos are
 
1531
dnl incrementing correctly.
 
1532
 
 
1533
ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.2,tip=192.168.0.1,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
 
1534
ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:07,tha=00:00:00:00:00:00)'
 
1535
ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
 
1536
ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'
 
1537
ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x86dd),ipv6(src=fe80::1,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
 
1538
 
 
1539
dnl sleep long enough to get more than one counter sample
 
1540
dnl from each datasource so we can check sequence numbers
 
1541
for i in `seq 1 30`; do
 
1542
    ovs-appctl time/warp 100
 
1543
done
 
1544
OVS_VSWITCHD_STOP
 
1545
ovs-appctl -t test-sflow exit
 
1546
 
 
1547
AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
 
1548
        /g']], [0], [dnl
 
1549
HEADER
 
1550
        dgramSeqNo=1
 
1551
        ds=127.0.0.1>2:1000
 
1552
        fsSeqNo=1
 
1553
        in_vlan=0
 
1554
        in_priority=0
 
1555
        out_vlan=0
 
1556
        out_priority=0
 
1557
        meanSkip=1
 
1558
        samplePool=1
 
1559
        dropEvents=0
 
1560
        in_ifindex=1004
 
1561
        in_format=0
 
1562
        out_ifindex=2
 
1563
        out_format=2
 
1564
        hdr_prot=1
 
1565
        pkt_len=64
 
1566
        stripped=4
 
1567
        hdr_len=60
 
1568
        hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-05-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-05-C0-A8-00-02-00-00-00-00-00-00-C0-A8-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
 
1569
HEADER
 
1570
        dgramSeqNo=1
 
1571
        ds=127.0.0.1>2:1000
 
1572
        fsSeqNo=2
 
1573
        in_vlan=0
 
1574
        in_priority=0
 
1575
        out_vlan=0
 
1576
        out_priority=0
 
1577
        meanSkip=1
 
1578
        samplePool=2
 
1579
        dropEvents=0
 
1580
        in_ifindex=1003
 
1581
        in_format=0
 
1582
        out_ifindex=2
 
1583
        out_format=2
 
1584
        hdr_prot=1
 
1585
        pkt_len=64
 
1586
        stripped=4
 
1587
        hdr_len=60
 
1588
        hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-07-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-07-C0-A8-00-01-00-00-00-00-00-00-C0-A8-00-02-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
 
1589
HEADER
 
1590
        dgramSeqNo=1
 
1591
        ds=127.0.0.1>2:1000
 
1592
        fsSeqNo=3
 
1593
        in_vlan=0
 
1594
        in_priority=0
 
1595
        out_vlan=0
 
1596
        out_priority=0
 
1597
        meanSkip=1
 
1598
        samplePool=3
 
1599
        dropEvents=0
 
1600
        in_ifindex=1004
 
1601
        in_format=0
 
1602
        out_ifindex=1003
 
1603
        out_format=0
 
1604
        hdr_prot=1
 
1605
        pkt_len=64
 
1606
        stripped=4
 
1607
        hdr_len=60
 
1608
        hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-01-C0-A8-00-02-08-00-F7-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
 
1609
HEADER
 
1610
        dgramSeqNo=1
 
1611
        ds=127.0.0.1>2:1000
 
1612
        fsSeqNo=4
 
1613
        in_vlan=0
 
1614
        in_priority=0
 
1615
        out_vlan=0
 
1616
        out_priority=0
 
1617
        meanSkip=1
 
1618
        samplePool=4
 
1619
        dropEvents=0
 
1620
        in_ifindex=1003
 
1621
        in_format=0
 
1622
        out_ifindex=1004
 
1623
        out_format=0
 
1624
        hdr_prot=1
 
1625
        pkt_len=64
 
1626
        stripped=4
 
1627
        hdr_len=60
 
1628
        hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-02-C0-A8-00-01-00-00-FF-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
 
1629
HEADER
 
1630
        dgramSeqNo=1
 
1631
        ds=127.0.0.1>2:1000
 
1632
        fsSeqNo=5
 
1633
        in_vlan=0
 
1634
        in_priority=0
 
1635
        out_vlan=0
 
1636
        out_priority=0
 
1637
        meanSkip=1
 
1638
        samplePool=5
 
1639
        dropEvents=0
 
1640
        in_ifindex=1003
 
1641
        in_format=0
 
1642
        out_ifindex=1004
 
1643
        out_format=0
 
1644
        hdr_prot=1
 
1645
        pkt_len=64
 
1646
        stripped=4
 
1647
        hdr_len=60
 
1648
        hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
 
1649
])
 
1650
 
 
1651
AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
 
1652
        /g']], [0], [dnl
 
1653
IFCOUNTERS
 
1654
        dgramSeqNo=2
 
1655
        ds=127.0.0.1>0:1002
 
1656
        csSeqNo=1
 
1657
        ifindex=1002
 
1658
        type=6
 
1659
        ifspeed=100000000
 
1660
        direction=0
 
1661
        status=3
 
1662
        in_octets=0
 
1663
        in_unicasts=0
 
1664
        in_multicasts=0
 
1665
        in_broadcasts=4294967295
 
1666
        in_discards=0
 
1667
        in_errors=0
 
1668
        in_unknownprotos=4294967295
 
1669
        out_octets=120
 
1670
        out_unicasts=2
 
1671
        out_multicasts=4294967295
 
1672
        out_broadcasts=4294967295
 
1673
        out_discards=0
 
1674
        out_errors=0
 
1675
        promiscuous=0
 
1676
IFCOUNTERS
 
1677
        dgramSeqNo=2
 
1678
        ds=127.0.0.1>0:1003
 
1679
        csSeqNo=1
 
1680
        ifindex=1003
 
1681
        type=6
 
1682
        ifspeed=100000000
 
1683
        direction=0
 
1684
        status=0
 
1685
        in_octets=98
 
1686
        in_unicasts=3
 
1687
        in_multicasts=0
 
1688
        in_broadcasts=4294967295
 
1689
        in_discards=0
 
1690
        in_errors=0
 
1691
        in_unknownprotos=4294967295
 
1692
        out_octets=120
 
1693
        out_unicasts=2
 
1694
        out_multicasts=4294967295
 
1695
        out_broadcasts=4294967295
 
1696
        out_discards=0
 
1697
        out_errors=0
 
1698
        promiscuous=0
 
1699
IFCOUNTERS
 
1700
        dgramSeqNo=2
 
1701
        ds=127.0.0.1>0:1004
 
1702
        csSeqNo=1
 
1703
        ifindex=1004
 
1704
        type=6
 
1705
        ifspeed=100000000
 
1706
        direction=0
 
1707
        status=0
 
1708
        in_octets=84
 
1709
        in_unicasts=2
 
1710
        in_multicasts=0
 
1711
        in_broadcasts=4294967295
 
1712
        in_discards=0
 
1713
        in_errors=0
 
1714
        in_unknownprotos=4294967295
 
1715
        out_octets=180
 
1716
        out_unicasts=3
 
1717
        out_multicasts=4294967295
 
1718
        out_broadcasts=4294967295
 
1719
        out_discards=0
 
1720
        out_errors=0
 
1721
        promiscuous=0
 
1722
IFCOUNTERS
 
1723
        dgramSeqNo=3
 
1724
        ds=127.0.0.1>0:1002
 
1725
        csSeqNo=2
 
1726
        ifindex=1002
 
1727
        type=6
 
1728
        ifspeed=100000000
 
1729
        direction=0
 
1730
        status=3
 
1731
        in_octets=0
 
1732
        in_unicasts=0
 
1733
        in_multicasts=0
 
1734
        in_broadcasts=4294967295
 
1735
        in_discards=0
 
1736
        in_errors=0
 
1737
        in_unknownprotos=4294967295
 
1738
        out_octets=120
 
1739
        out_unicasts=2
 
1740
        out_multicasts=4294967295
 
1741
        out_broadcasts=4294967295
 
1742
        out_discards=0
 
1743
        out_errors=0
 
1744
        promiscuous=0
 
1745
IFCOUNTERS
 
1746
        dgramSeqNo=3
 
1747
        ds=127.0.0.1>0:1003
 
1748
        csSeqNo=2
 
1749
        ifindex=1003
 
1750
        type=6
 
1751
        ifspeed=100000000
 
1752
        direction=0
 
1753
        status=0
 
1754
        in_octets=98
 
1755
        in_unicasts=3
 
1756
        in_multicasts=0
 
1757
        in_broadcasts=4294967295
 
1758
        in_discards=0
 
1759
        in_errors=0
 
1760
        in_unknownprotos=4294967295
 
1761
        out_octets=120
 
1762
        out_unicasts=2
 
1763
        out_multicasts=4294967295
 
1764
        out_broadcasts=4294967295
 
1765
        out_discards=0
 
1766
        out_errors=0
 
1767
        promiscuous=0
 
1768
IFCOUNTERS
 
1769
        dgramSeqNo=3
 
1770
        ds=127.0.0.1>0:1004
 
1771
        csSeqNo=2
 
1772
        ifindex=1004
 
1773
        type=6
 
1774
        ifspeed=100000000
 
1775
        direction=0
 
1776
        status=0
 
1777
        in_octets=84
 
1778
        in_unicasts=2
 
1779
        in_multicasts=0
 
1780
        in_broadcasts=4294967295
 
1781
        in_discards=0
 
1782
        in_errors=0
 
1783
        in_unknownprotos=4294967295
 
1784
        out_octets=180
 
1785
        out_unicasts=3
 
1786
        out_multicasts=4294967295
 
1787
        out_broadcasts=4294967295
 
1788
        out_discards=0
 
1789
        out_errors=0
 
1790
        promiscuous=0
 
1791
])
 
1792
AT_CLEANUP
 
1793
 
 
1794
 
 
1795
 
960
1796
dnl Test that basic NetFlow reports flow statistics correctly:
961
1797
dnl - The initial packet of a flow are correctly accounted.
962
1798
dnl - Later packets within a flow are correctly accounted.
964
1800
dnl   cause a record to be sent.
965
1801
AT_SETUP([ofproto-dpif - NetFlow flow expiration])
966
1802
 
967
 
AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
968
 
NETFLOW_PORT=`cat stdout`
969
 
 
970
1803
OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
971
1804
ADD_OF_PORTS([br0], 1, 2)
 
1805
 
 
1806
ON_EXIT([kill `cat test-netflow.pid`])
 
1807
AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
 
1808
AT_CAPTURE_FILE([netflow.log])
 
1809
NETFLOW_PORT=`parse_listening_port < test-netflow.log`
 
1810
 
972
1811
ovs-vsctl \
973
1812
   set Bridge br0 netflow=@nf -- \
974
1813
   --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
975
1814
     engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
976
1815
 
977
 
ON_EXIT([kill `cat test-netflow.pid`])
978
 
AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])
979
 
AT_CAPTURE_FILE([netflow.log])
980
 
 
981
1816
for delay in 1000 30000; do
982
1817
    ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
983
1818
    ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'
1006
1841
dnl Test that basic NetFlow reports active expirations correctly.
1007
1842
AT_SETUP([ofproto-dpif - NetFlow active expiration])
1008
1843
 
1009
 
AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1010
 
NETFLOW_PORT=`cat stdout`
1011
 
 
1012
1844
OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1013
1845
ADD_OF_PORTS([br0], 1, 2)
 
1846
 
 
1847
ON_EXIT([kill `cat test-netflow.pid`])
 
1848
AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
 
1849
AT_CAPTURE_FILE([netflow.log])
 
1850
NETFLOW_PORT=`parse_listening_port < test-netflow.log`
 
1851
 
1014
1852
ovs-vsctl \
1015
1853
   set Bridge br0 netflow=@nf -- \
1016
1854
   --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1017
1855
     engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1018
1856
 
1019
 
ON_EXIT([kill `test-netflow.pid`])
1020
 
AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
1021
 
 
1022
1857
AT_CHECK([ovs-appctl time/stop])
1023
1858
n=1
1024
1859
while test $n -le 60; do
1190
2025
# flow stats updates are mainly what implements the fin_timeout
1191
2026
# feature, we warp forward a couple of times to ensure that flow stats
1192
2027
# run before re-checking the flow table.)
1193
 
AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1194
 
])
 
2028
AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
1195
2029
AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1196
2030
warped
1197
2031
])
1200
2034
 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1201
2035
])
1202
2036
# Check that a TCP FIN packet does change the timeout.
1203
 
AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1204
 
])
 
2037
AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
1205
2038
AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1206
2039
warped
1207
2040
])
1230
2063
ADD_OF_PORTS([br1], [3])
1231
2064
 
1232
2065
AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1233
 
br0 (dummy@ovs-dummy):
1234
 
        lookups: hit:0 missed:0
1235
 
        flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1236
 
                overall avg: add rate: 0.000/min, del rate: 0.000/min
1237
 
        br0 65534/100: (dummy)
1238
 
        p1 1/1: (dummy)
1239
 
        p2 2/2: (dummy)
1240
 
br1 (dummy@ovs-dummy):
1241
 
        lookups: hit:0 missed:0
1242
 
        flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1243
 
                overall avg: add rate: 0.000/min, del rate: 0.000/min
1244
 
        br1 65534/101: (dummy)
1245
 
        p3 3/3: (dummy)
1246
 
])
1247
 
 
1248
 
AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
1249
 
br0 (dummy@ovs-dummy):
1250
 
        lookups: hit:0 missed:0
1251
 
        flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1252
 
                overall avg: add rate: 0.000/min, del rate: 0.000/min
1253
 
        br0 65534/100: (dummy)
1254
 
        p1 1/1: (dummy)
1255
 
        p2 2/2: (dummy)
 
2066
dummy@ovs-dummy: hit:0 missed:0
 
2067
        flows: cur: 0, avg: 0, max: 0, life span: 0ms
 
2068
        overall avg: add rate: 0.000/min, del rate: 0.000/min
 
2069
        br0: hit:0 missed:0
 
2070
                br0 65534/100: (dummy)
 
2071
                p1 1/1: (dummy)
 
2072
                p2 2/2: (dummy)
 
2073
        br1: hit:0 missed:0
 
2074
                br1 65534/101: (dummy)
 
2075
                p3 3/3: (dummy)
1256
2076
])
1257
2077
OVS_VSWITCHD_STOP
1258
2078
AT_CLEANUP
1263
2083
ADD_OF_PORTS([br0], [1], [2])
1264
2084
ADD_OF_PORTS([br1], [3])
1265
2085
 
1266
 
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1267
 
])
1268
 
AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'], [0], [success
1269
 
])
1270
 
AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1271
 
])
 
2086
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2087
AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'])
 
2088
AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
1272
2089
 
1273
2090
AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1274
 
in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1275
 
in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
 
2091
in_port(1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
 
2092
in_port(2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1276
2093
])
1277
2094
 
1278
2095
AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1279
 
in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
 
2096
in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1280
2097
])
1281
2098
 
1282
2099
OVS_VSWITCHD_STOP
1288
2105
ADD_OF_PORTS([br0], [1], [2])
1289
2106
ADD_OF_PORTS([br1], [3])
1290
2107
 
1291
 
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1292
 
])
1293
 
AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'], [0], [success
1294
 
])
1295
 
AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1296
 
])
 
2108
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2109
AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'])
 
2110
AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
1297
2111
 
1298
2112
AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1299
 
in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1300
 
in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
 
2113
in_port(1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
 
2114
in_port(2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1301
2115
])
1302
2116
 
1303
2117
AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1304
 
in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
 
2118
in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1305
2119
])
1306
2120
 
1307
2121
AT_CHECK([ovs-appctl dpif/del-flows br0])
1309
2123
])
1310
2124
 
1311
2125
AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1312
 
in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
 
2126
in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1313
2127
])
1314
2128
 
1315
2129
OVS_VSWITCHD_STOP
1324
2138
ADD_OF_PORTS([br0], [2])
1325
2139
ADD_OF_PORTS([br1], [3])
1326
2140
 
 
2141
AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
 
2142
 
1327
2143
AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1328
2144
AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
1329
2145
 
1340
2156
])
1341
2157
 
1342
2158
AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1343
 
br0 (dummy@ovs-dummy):
1344
 
        lookups: hit:9 missed:1
1345
 
        flows: cur: 1, avg: 1.000, max: 1, life span: 0(ms)
1346
 
                overall avg: add rate: 0.000/min, del rate: 0.000/min
1347
 
        br0 65534/100: (dummy)
1348
 
        p2 2/2: (dummy)
1349
 
        pbr0 1/none: (patch: peer=pbr1)
1350
 
br1 (dummy@ovs-dummy):
1351
 
        lookups: hit:4 missed:1
1352
 
        flows: cur: 1, avg: 1.000, max: 1, life span: 0(ms)
1353
 
                overall avg: add rate: 0.000/min, del rate: 0.000/min
1354
 
        br1 65534/101: (dummy)
1355
 
        p3 3/3: (dummy)
1356
 
        pbr1 1/none: (patch: peer=pbr0)
 
2159
dummy@ovs-dummy: hit:13 missed:2
 
2160
        flows: cur: 2, avg: 1, max: 2, life span: 1250ms
 
2161
        overall avg: add rate: 0.000/min, del rate: 0.000/min
 
2162
        br0: hit:9 missed:1
 
2163
                br0 65534/100: (dummy)
 
2164
                p2 2/2: (dummy)
 
2165
                pbr0 1/none: (patch: peer=pbr1)
 
2166
        br1: hit:4 missed:1
 
2167
                br1 65534/101: (dummy)
 
2168
                p3 3/3: (dummy)
 
2169
                pbr1 1/none: (patch: peer=pbr0)
1357
2170
])
1358
2171
 
1359
2172
AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1360
 
in_port(100),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:9, bytes:540, used:0.0s, actions:101,3,2
 
2173
in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:9, bytes:540, used:0.0s, actions:101,3,2
1361
2174
]),
1362
2175
AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
1363
 
in_port(101),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:4, bytes:240, used:0.0s, actions:100,2,3
 
2176
in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:4, bytes:240, used:0.0s, actions:100,2,3
1364
2177
])
1365
2178
 
1366
2179
AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
1382
2195
OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
1383
2196
ADD_OF_PORTS([br0], 1, 2)
1384
2197
 
 
2198
AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
1385
2199
AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1386
2200
 
1387
2201
for i in $(seq 1 61); do
1394
2208
])
1395
2209
 
1396
2210
AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
1397
 
br0 (dummy@ovs-dummy):
1398
 
        lookups: hit:0 missed:61
1399
 
        flows: cur: 0, avg: 1.000, max: 1, life span: 10000(ms)
1400
 
                hourly avg: add rate: 0.641/min, del rate: 0.641/min
1401
 
                overall avg: add rate: 1.000/min, del rate: 1.000/min
1402
 
        br0 65534/100: (dummy)
1403
 
        p1 1/1: (dummy)
1404
 
        p2 2/2: (dummy)
1405
 
])
1406
 
 
 
2211
dummy@ovs-dummy: hit:0 missed:61
 
2212
        flows: cur: 0, avg: 0, max: 1, life span: 1666ms
 
2213
        hourly avg: add rate: 0.641/min, del rate: 0.641/min
 
2214
        overall avg: add rate: 1.000/min, del rate: 1.000/min
 
2215
        br0: hit:0 missed:61
 
2216
                br0 65534/100: (dummy)
 
2217
                p1 1/1: (dummy)
 
2218
                p2 2/2: (dummy)
 
2219
])
 
2220
 
 
2221
OVS_VSWITCHD_STOP
 
2222
AT_CLEANUP
 
2223
 
 
2224
AT_SETUP([ofproto-dpif - port duration])
 
2225
OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
 
2226
ADD_OF_PORTS([br0], 1, 2)
 
2227
 
 
2228
ovs-appctl time/warp 10000
 
2229
 
 
2230
AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
 
2231
AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
 
2232
[dnl
 
2233
OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
 
2234
  port  1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
 
2235
           tx pkts=0, bytes=0, drop=0, errs=0, coll=0
 
2236
           duration=?s
 
2237
  port  2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
 
2238
           tx pkts=0, bytes=0, drop=0, errs=0, coll=0
 
2239
           duration=?s
 
2240
  port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
 
2241
           tx pkts=0, bytes=0, drop=0, errs=0, coll=0
 
2242
           duration=?s
 
2243
])
 
2244
OVS_VSWITCHD_STOP
 
2245
AT_CLEANUP
 
2246
 
 
2247
dnl ----------------------------------------------------------------------
 
2248
AT_BANNER([ofproto-dpif -- megaflows])
 
2249
 
 
2250
# Strips out uninteresting parts of megaflow output, as well as parts
 
2251
# that vary from one run to another (e.g., timing and bond actions).
 
2252
m4_define([STRIP_USED], [[sed '
 
2253
    s/used:[0-9]*\.[0-9]*/used:0.0/
 
2254
' | sort]])
 
2255
m4_define([STRIP_XOUT], [[sed '
 
2256
    s/used:[0-9]*\.[0-9]*/used:0.0/
 
2257
    s/Datapath actions:.*/Datapath actions: <del>/
 
2258
' | sort]])
 
2259
 
 
2260
AT_SETUP([ofproto-dpif megaflow - port classification])
 
2261
OVS_VSWITCHD_START
 
2262
ADD_OF_PORTS([br0], [1], [2])
 
2263
AT_DATA([flows.txt], [dnl
 
2264
table=0 in_port=1 actions=output(2)
 
2265
])
 
2266
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2267
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2268
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2269
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2270
skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
 
2271
])
 
2272
OVS_VSWITCHD_STOP
 
2273
AT_CLEANUP
 
2274
 
 
2275
AT_SETUP([ofproto-dpif megaflow - L2 classification])
 
2276
OVS_VSWITCHD_START
 
2277
ADD_OF_PORTS([br0], [1], [2])
 
2278
AT_DATA([flows.txt], [dnl
 
2279
table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
 
2280
])
 
2281
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2282
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2283
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2284
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2285
skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2286
skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2287
])
 
2288
OVS_VSWITCHD_STOP
 
2289
AT_CLEANUP
 
2290
 
 
2291
AT_SETUP([ofproto-dpif megaflow - L3 classification])
 
2292
OVS_VSWITCHD_START
 
2293
ADD_OF_PORTS([br0], [1], [2])
 
2294
AT_DATA([flows.txt], [dnl
 
2295
table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
 
2296
])
 
2297
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2298
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2299
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2300
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2301
skb_priority=0,icmp,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2302
skb_priority=0,icmp,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2303
])
 
2304
OVS_VSWITCHD_STOP
 
2305
AT_CLEANUP
 
2306
 
 
2307
AT_SETUP([ofproto-dpif megaflow - L4 classification])
 
2308
OVS_VSWITCHD_START
 
2309
ADD_OF_PORTS([br0], [1], [2])
 
2310
AT_DATA([flows.txt], [dnl
 
2311
table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
 
2312
])
 
2313
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2314
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2315
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2316
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2317
skb_priority=0,icmp,in_port=1,nw_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
 
2318
])
 
2319
OVS_VSWITCHD_STOP
 
2320
AT_CLEANUP
 
2321
 
 
2322
AT_SETUP([ofproto-dpif megaflow - normal])
 
2323
OVS_VSWITCHD_START
 
2324
ADD_OF_PORTS([br0], [1], [2])
 
2325
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
 
2326
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2327
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2328
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2329
skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2330
skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2331
])
 
2332
OVS_VSWITCHD_STOP
 
2333
AT_CLEANUP
 
2334
 
 
2335
AT_SETUP([ofproto-dpif megaflow - mpls])
 
2336
OVS_VSWITCHD_START
 
2337
ADD_OF_PORTS([br0], [1], [2])
 
2338
AT_DATA([flows.txt], [dnl
 
2339
table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
 
2340
table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
 
2341
])
 
2342
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2343
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
 
2344
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
 
2345
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2346
skb_priority=0,mpls,in_port=1,dl_src=50:54:00:00:00:09,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2347
skb_priority=0,mpls,in_port=1,dl_src=50:54:00:00:00:0b,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2348
])
 
2349
OVS_VSWITCHD_STOP
 
2350
AT_CLEANUP
 
2351
 
 
2352
AT_SETUP([ofproto-dpif megaflow - netflow])
 
2353
OVS_VSWITCHD_START
 
2354
ADD_OF_PORTS([br0], [1], [2])
 
2355
 
 
2356
dnl NetFlow configuration disables wildcarding relevant fields
 
2357
ON_EXIT([kill `cat test-netflow.pid`])
 
2358
AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
 
2359
AT_CAPTURE_FILE([netflow.log])
 
2360
NETFLOW_PORT=`parse_listening_port < test-netflow.log`
 
2361
ovs-vsctl \
 
2362
   set Bridge br0 netflow=@nf -- \
 
2363
   --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
 
2364
     engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
 
2365
 
 
2366
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
 
2367
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2368
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2369
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2370
skb_priority=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2371
skb_priority=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2372
])
 
2373
OVS_VSWITCHD_STOP
 
2374
AT_CLEANUP
 
2375
 
 
2376
AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
 
2377
OVS_VSWITCHD_START(
 
2378
  [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
 
2379
   add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
 
2380
   set interface p2 type=dummy ofport_request=2 -- \
 
2381
   set interface p3 type=dummy ofport_request=3])
 
2382
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
 
2383
])
 
2384
 
 
2385
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
 
2386
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2387
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2388
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2389
skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2390
skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2391
])
 
2392
OVS_VSWITCHD_STOP
 
2393
AT_CLEANUP
 
2394
 
 
2395
AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
 
2396
OVS_VSWITCHD_START(
 
2397
  [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
 
2398
   add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
 
2399
   set interface p2 type=dummy ofport_request=2 -- \
 
2400
   set interface p3 type=dummy ofport_request=3])
 
2401
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
 
2402
])
 
2403
 
 
2404
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
 
2405
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2406
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2407
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2408
skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2409
skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2410
])
 
2411
OVS_VSWITCHD_STOP
 
2412
AT_CLEANUP
 
2413
 
 
2414
AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
 
2415
# Create bond0 on br0 with interfaces p0 and p1
 
2416
#    and bond1 on br1 with interfaces p2 and p3
 
2417
# with p0 patched to p2 and p1 patched to p3.
 
2418
OVS_VSWITCHD_START(
 
2419
  [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
 
2420
                            other-config:lacp-time=fast \
 
2421
                            other-config:bond-rebalance-interval=0 -- \
 
2422
   set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
 
2423
   set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
 
2424
   add-br br1 -- \
 
2425
   set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
 
2426
   set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
 
2427
                  fail-mode=secure -- \
 
2428
   add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
 
2429
                            other-config:lacp-time=fast \
 
2430
                            other-config:bond-rebalance-interval=0 -- \
 
2431
   set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
 
2432
   set interface p3 type=patch options:peer=p1 ofport_request=4 --])
 
2433
 
 
2434
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
 
2435
])
 
2436
ADD_OF_PORTS([br0], [7])
 
2437
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
 
2438
AT_CHECK([ovs-ofctl add-flow br1 action=normal])
 
2439
ovs-appctl time/warp 5000
 
2440
AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2441
AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2442
 
 
2443
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2444
skb_priority=0,icmp,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2445
skb_priority=0,icmp,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2446
])
 
2447
OVS_VSWITCHD_STOP
 
2448
AT_CLEANUP
 
2449
 
 
2450
AT_SETUP([ofproto-dpif megaflow - resubmit port action])
 
2451
OVS_VSWITCHD_START
 
2452
ADD_OF_PORTS([br0], [1], [2])
 
2453
AT_DATA([flows.txt], [dnl
 
2454
table=0 in_port=1,ip actions=resubmit(90)
 
2455
table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
 
2456
])
 
2457
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2458
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2459
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2460
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2461
skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2462
skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2463
])
 
2464
OVS_VSWITCHD_STOP
 
2465
AT_CLEANUP
 
2466
 
 
2467
AT_SETUP([ofproto-dpif megaflow - resubmit table action])
 
2468
OVS_VSWITCHD_START
 
2469
ADD_OF_PORTS([br0], [1], [2])
 
2470
AT_DATA([flows.txt], [dnl
 
2471
table=0 in_port=1,ip actions=resubmit(,1)
 
2472
table=1 dl_src=50:54:00:00:00:09 actions=output(2)
 
2473
])
 
2474
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2475
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2476
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=
 
2477
1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2478
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2479
skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2480
skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2481
])
 
2482
OVS_VSWITCHD_STOP
 
2483
AT_CLEANUP
 
2484
 
 
2485
AT_SETUP([ofproto-dpif megaflow - goto_table action])
 
2486
OVS_VSWITCHD_START
 
2487
ADD_OF_PORTS([br0], [1], [2])
 
2488
AT_DATA([flows.txt], [dnl
 
2489
table=0 in_port=1,ip actions=goto_table(1)
 
2490
table=1 dl_src=50:54:00:00:00:09 actions=output(2)
 
2491
])
 
2492
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
 
2493
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2494
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2495
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2496
skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2497
skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2498
])
 
2499
OVS_VSWITCHD_STOP
 
2500
AT_CLEANUP
 
2501
 
 
2502
AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
 
2503
OVS_VSWITCHD_START
 
2504
ADD_OF_PORTS([br0], [1], [2], [3])
 
2505
ovs-vsctl \
 
2506
        set Bridge br0 mirrors=@m --\
 
2507
        --id=@p3 get Port p3 --\
 
2508
        --id=@m create Mirror name=mymirror select_all=true output_port=@p3
 
2509
 
 
2510
AT_DATA([flows.txt], [dnl
 
2511
in_port=1 actions=output:2
 
2512
])
 
2513
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2514
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2515
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2516
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2517
skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
 
2518
])
 
2519
OVS_VSWITCHD_STOP
 
2520
AT_CLEANUP
 
2521
 
 
2522
AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
 
2523
OVS_VSWITCHD_START
 
2524
ADD_OF_PORTS([br0], [1], [2], [3])
 
2525
ovs-vsctl \
 
2526
        set Bridge br0 mirrors=@m --\
 
2527
        --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
 
2528
        --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
 
2529
 
 
2530
AT_DATA([flows.txt], [dnl
 
2531
in_port=1 actions=output:2
 
2532
])
 
2533
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2534
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=11,pcp=7),encap(eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0))'])
 
2535
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2536
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2537
skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2538
skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2539
])
 
2540
OVS_VSWITCHD_STOP
 
2541
AT_CLEANUP
 
2542
 
 
2543
AT_SETUP([ofproto-dpif megaflow - move action])
 
2544
OVS_VSWITCHD_START
 
2545
ADD_OF_PORTS([br0], [1], [2])
 
2546
AT_DATA([flows.txt], [dnl
 
2547
table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
 
2548
table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
 
2549
table=0 in_port=91 reg0=0x0a000002,actions=output(2)
 
2550
])
 
2551
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2552
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2553
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2554
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2555
skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2556
skb_priority=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2557
])
 
2558
OVS_VSWITCHD_STOP
 
2559
AT_CLEANUP
 
2560
 
 
2561
AT_SETUP([ofproto-dpif megaflow - push action])
 
2562
OVS_VSWITCHD_START
 
2563
ADD_OF_PORTS([br0], [1], [2])
 
2564
AT_DATA([flows.txt], [dnl
 
2565
table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
 
2566
])
 
2567
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2568
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2569
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2570
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2571
skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2572
skb_priority=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2573
])
 
2574
OVS_VSWITCHD_STOP
 
2575
AT_CLEANUP
 
2576
 
 
2577
AT_SETUP([ofproto-dpif megaflow - learning])
 
2578
OVS_VSWITCHD_START
 
2579
ADD_OF_PORTS([br0], [1], [2])
 
2580
AT_DATA([flows.txt], [dnl
 
2581
table=0 in_port=1 actions=load:2->NXM_NX_REG0[[0..15]],learn(table=1,priority=65535,NXM_OF_ETH_SRC[[]],NXM_OF_VLAN_TCI[[0..11]],output:NXM_NX_REG0[[0..15]]),output:2
 
2582
])
 
2583
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2584
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2585
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2586
dnl The original flow is missing due to a revalidation.
 
2587
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2588
skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2589
skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2590
])
 
2591
OVS_VSWITCHD_STOP
 
2592
AT_CLEANUP
 
2593
 
 
2594
AT_SETUP([ofproto-dpif megaflow - tunnels])
 
2595
OVS_VSWITCHD_START(
 
2596
  [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
 
2597
     ofport_request=1 -- \
 
2598
   add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
 
2599
     ofport_request=2 options:key=flow -- \
 
2600
   add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
 
2601
     ofport_request=3 -- \
 
2602
   add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
 
2603
     options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
 
2604
AT_DATA([flows.txt], [dnl
 
2605
in_port=1,actions=output(2)
 
2606
in_port=3,actions=output(4)
 
2607
])
 
2608
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2609
dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
 
2610
dnl will cause the packet to be dropped.
 
2611
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
 
2612
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2613
AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
 
2614
AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2615
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2616
skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
 
2617
skb_priority=0,ip,in_port=3,nw_tos=0,nw_ecn=1,nw_ttl=64,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2618
skb_priority=0,ip,in_port=3,nw_tos=252,nw_ecn=1,nw_ttl=128,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2619
])
 
2620
OVS_VSWITCHD_STOP
 
2621
AT_CLEANUP
 
2622
 
 
2623
AT_SETUP([ofproto-dpif megaflow - dec_ttl])
 
2624
OVS_VSWITCHD_START
 
2625
ADD_OF_PORTS([br0], [1], [2])
 
2626
AT_DATA([flows.txt], [dnl
 
2627
table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
 
2628
])
 
2629
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2630
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2631
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2632
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
 
2633
skb_priority=0,icmp,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2634
skb_priority=0,icmp,in_port=1,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_ecn=0,nw_ttl=64, n_subfacets:1, used:0.0s, Datapath actions: <del>
 
2635
])
 
2636
OVS_VSWITCHD_STOP
 
2637
AT_CLEANUP
 
2638
 
 
2639
AT_SETUP([ofproto-dpif - datapath port number change])
 
2640
OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
 
2641
ADD_OF_PORTS([br0], 1)
 
2642
 
 
2643
# Trace a flow that should output to p1.
 
2644
AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
 
2645
  [0], [stdout])
 
2646
AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
 
2647
])
 
2648
 
 
2649
# Change p1's port number to 5.
 
2650
AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
 
2651
 
 
2652
# Trace a flow that should output to p1 in its new location.
 
2653
AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
 
2654
  [0], [stdout])
 
2655
AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
 
2656
])
 
2657
OVS_VSWITCHD_STOP
 
2658
AT_CLEANUP
 
2659
 
 
2660
AT_SETUP([ofproto-dpif megaflow - set dl_dst])
 
2661
OVS_VSWITCHD_START
 
2662
ADD_OF_PORTS([br0], [1], [2])
 
2663
AT_DATA([flows.txt], [dnl
 
2664
table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
 
2665
])
 
2666
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
 
2667
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2668
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
 
2669
dnl The megaflows do not match the same fields, since the first packet
 
2670
dnl is essentially a no-op.  (The new destination MAC is the same as the
 
2671
dnl original.) The ofproto-dpif library un-wildcards the destination MAC
 
2672
dnl so that a packet that doesn't need its MAC address changed doesn't
 
2673
dnl hide one that does.  Since the first entry doesn't need to change,
 
2674
dnl only the destination MAC address is matched (as decided by
 
2675
dnl ofproto-dpif).  The second entry actually updates the destination
 
2676
dnl MAC, so both the source and destination MAC addresses are
 
2677
dnl un-wildcarded, since the ODP commit functions update both the source
 
2678
dnl and destination MAC addresses.
 
2679
AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_USED], [0], [dnl
 
2680
skb_priority=0,ip,in_port=1,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: 2
 
2681
skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
 
2682
])
 
2683
OVS_VSWITCHD_STOP
 
2684
AT_CLEANUP
 
2685
 
 
2686
AT_SETUP([ofproto-dpif - datapath port number change])
 
2687
OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
 
2688
ADD_OF_PORTS([br0], 1)
 
2689
 
 
2690
# Trace a flow that should output to p1.
 
2691
AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
 
2692
  [0], [stdout])
 
2693
AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
 
2694
])
 
2695
 
 
2696
# Change p1's port number to 5.
 
2697
AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
 
2698
 
 
2699
# Trace a flow that should output to p1 in its new location.
 
2700
AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
 
2701
  [0], [stdout])
 
2702
AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
 
2703
])
1407
2704
OVS_VSWITCHD_STOP
1408
2705
AT_CLEANUP