~ubuntu-branches/ubuntu/wily/openvswitch/wily

« back to all changes in this revision

Viewing changes to .pc/disable-poll-loop-logging-for-long-output.patch/tests/ofproto-dpif.at

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2015-08-10 11:35:15 UTC
  • mfrom: (1.1.30)
  • Revision ID: package-import@ubuntu.com-20150810113515-575vj06oq29emxsn
Tags: 2.4.0~git20150810.97bab95-0ubuntu1
* New upstream snapshot from 2.4 branch:
  - d/*: Align any relevant packaging changes with upstream.
* d/*: wrap-and-sort.
* d/openvswitch-{common,vswitch}.install: Correct install location for
  bash completion files.
* d/tests/openflow.py: Explicitly use ovs-testcontroller as provided
  by 2.4.0 release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
AT_BANNER([ofproto-dpif])
2
 
 
3
 
# Strips out uninteresting parts of flow output, as well as parts
4
 
# that vary from one run to another (e.g., timing and bond actions).
5
 
m4_define([STRIP_USED], [[sed '
6
 
    s/used:[0-9]*\.[0-9]*/used:0.0/
7
 
' | sort]])
8
 
m4_define([STRIP_XOUT], [[sed '
9
 
    s/used:[0-9]*\.[0-9]*/used:0.0/
10
 
    s/actions:.*/actions: <del>/
11
 
    s/packets:[0-9]*/packets:0/
12
 
    s/bytes:[0-9]*/bytes:0/
13
 
' | sort]])
14
 
m4_define([FILTER_FLOW_INSTALL], [[
15
 
grep ' put' | sed '
16
 
    s/.*put\[create\] //
17
 
' | sort | uniq]])
18
 
m4_define([FILTER_FLOW_DUMP], [[
19
 
grep 'flow_dump ' | sed '
20
 
    s/.*flow_dump //
21
 
    s/used:[0-9]*\.[0-9]*/used:0.0/
22
 
' | sort | uniq]])
23
 
 
24
 
AT_SETUP([ofproto-dpif - dummy interface])
25
 
# Create br0 with interfaces p1 and p7
26
 
#    and br1 with interfaces p2 and p8
27
 
# with p1 and p2 connected via unix domain socket
28
 
OVS_VSWITCHD_START(
29
 
  [add-port br0 p1 -- set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
30
 
   add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
31
 
   add-br br1 -- \
32
 
   set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
33
 
   set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
34
 
                  fail-mode=secure -- \
35
 
   add-port br1 p2 -- set interface p2 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
36
 
   add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
37
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
38
 
 
39
 
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
40
 
AT_CHECK([ovs-ofctl add-flow br1 action=normal])
41
 
ovs-appctl time/stop
42
 
ovs-appctl time/warp 5000
43
 
AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),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)'])
44
 
AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
45
 
ovs-appctl time/warp 100
46
 
sleep 1  # wait for forwarders process packets
47
 
 
48
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
49
 
skb_priority(0),skb_mark(0/0),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.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
50
 
skb_priority(0),skb_mark(0/0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),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), actions: <del>
51
 
skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),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), actions: <del>
52
 
skb_priority(0),skb_mark(0/0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
53
 
])
54
 
OVS_VSWITCHD_STOP
55
 
AT_CLEANUP
56
 
 
57
 
AT_SETUP([ofproto-dpif, active-backup bonding])
58
 
# Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
59
 
#    and br1 with interfaces p3, p4 and p8.
60
 
# toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
61
 
OVS_VSWITCHD_START(
62
 
  [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
63
 
   set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
64
 
   set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
65
 
   add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
66
 
   add-br br1 -- \
67
 
   set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
68
 
   set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
69
 
                  fail-mode=secure -- \
70
 
   add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
71
 
   add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
72
 
   add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
73
 
WAIT_FOR_DUMMY_PORTS([p3], [p4])
74
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
75
 
 
76
 
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
77
 
AT_CHECK([ovs-ofctl add-flow br1 action=normal])
78
 
ovs-appctl netdev-dummy/set-admin-state up
79
 
ovs-appctl time/warp 100
80
 
ovs-appctl netdev-dummy/set-admin-state p2 down
81
 
ovs-appctl time/stop
82
 
ovs-appctl time/warp 100
83
 
AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),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)'])
84
 
AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
85
 
ovs-appctl time/warp 100
86
 
ovs-appctl netdev-dummy/set-admin-state p2 up
87
 
ovs-appctl netdev-dummy/set-admin-state p1 down
88
 
ovs-appctl time/warp 100
89
 
AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
90
 
AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
91
 
ovs-appctl time/warp 100
92
 
ovs-appctl time/warp 100
93
 
sleep 1
94
 
AT_CHECK([cat ovs-vswitchd.log | grep 'in_port([[348]])' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
95
 
skb_priority(0),skb_mark(0/0),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/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), actions: <del>
96
 
skb_priority(0),skb_mark(0/0),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.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
97
 
skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5/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), actions: <del>
98
 
skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6/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), actions: <del>
99
 
skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:09/00:00:00:00:00:00,tha=50:54:00:00:00:09/00:00:00:00:00:00), actions: <del>
100
 
skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:0b/00:00:00:00:00:00,tha=50:54:00:00:00:0b/00:00:00:00:00:00), actions: <del>
101
 
])
102
 
OVS_VSWITCHD_STOP
103
 
AT_CLEANUP
104
 
 
105
 
AT_SETUP([ofproto-dpif, balance-slb bonding])
106
 
# Create br0 with interfaces bond0(p1, p2, p3) and p7,
107
 
#    and br1 with interfaces p4, p5, p6 and p8.
108
 
#    p1 <-> p4, p2 <-> p5, p3 <-> p6
109
 
# Send some traffic, make sure the traffic are spread based on source mac.
110
 
OVS_VSWITCHD_START(
111
 
  [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
112
 
   set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
113
 
   set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
114
 
   set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
115
 
   add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
116
 
   add-br br1 -- \
117
 
   set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
118
 
   set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
119
 
                  fail-mode=secure -- \
120
 
   add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
121
 
   add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
122
 
   add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
123
 
   add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
124
 
WAIT_FOR_DUMMY_PORTS([p4], [p5], [p6])
125
 
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
126
 
AT_CHECK([ovs-ofctl add-flow br1 action=normal])
127
 
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
128
 
])
129
 
ovs-appctl time/stop
130
 
ovs-appctl time/warp 100
131
 
(
132
 
for i in `seq 0 100 |xargs printf '%02x\n'`;
133
 
    do
134
 
    pkt="in_port(7),eth(src=50:54:00:00:00:$i,dst=50:54:00:00:01:00),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)"
135
 
    AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
136
 
    done
137
 
)
138
 
ovs-appctl time/warp 100
139
 
AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
140
 
# Make sure there is resonable distribution to all three ports.
141
 
# We don't want to make this check precise, in case hash function changes.
142
 
AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
143
 
AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
144
 
AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
145
 
OVS_VSWITCHD_STOP
146
 
AT_CLEANUP
147
 
 
148
 
AT_SETUP([ofproto-dpif, balance-tcp bonding])
149
 
# Create br0 with interfaces bond0(p1, p2, p3) and p7,
150
 
#    and br1 with interfaces bond1(p4, p5, p6) and p8.
151
 
#    bond0 <-> bond1
152
 
# Send some traffic, make sure the traffic are spread based on L4 headers.
153
 
OVS_VSWITCHD_START(
154
 
  [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
155
 
        other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
156
 
   set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
157
 
   set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
158
 
   set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
159
 
   add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
160
 
   add-br br1 -- \
161
 
   set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
162
 
   set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
163
 
                  fail-mode=secure -- \
164
 
   add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
165
 
        other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
166
 
   set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
167
 
   set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
168
 
   set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
169
 
   add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
170
 
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
171
 
])
172
 
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
173
 
AT_CHECK([ovs-ofctl add-flow br1 action=normal])
174
 
AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
175
 
], [])
176
 
OVS_WAIT_WHILE([ovs-appctl bond/show | grep "may_enable: false"])
177
 
ovs-appctl time/stop
178
 
ovs-appctl time/warp 100
179
 
ovs-appctl lacp/show > lacp.txt
180
 
ovs-appctl bond/show > bond.txt
181
 
(
182
 
for i in `seq 0 255` ;
183
 
    do
184
 
    pkt="in_port(7),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=$i),tcp_flags(0x010)"
185
 
    AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
186
 
    done
187
 
)
188
 
ovs-appctl time/warp 100
189
 
ovs-appctl time/warp 100
190
 
ovs-appctl time/warp 100
191
 
AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
192
 
AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
193
 
# Make sure there is resonable distribution to all three ports.
194
 
# We don't want to make this check precise, in case hash function changes.
195
 
AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 24])
196
 
AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 24])
197
 
AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 24])
198
 
 
199
 
OVS_VSWITCHD_STOP()
200
 
AT_CLEANUP
201
 
 
202
 
# Makes sure recirculation does not change the way packet is handled.
203
 
AT_SETUP([ofproto-dpif, balance-tcp bonding, different recirc flow ])
204
 
OVS_VSWITCHD_START(
205
 
  [add-bond br0 bond0 p1 p2 bond_mode=balance-tcp lacp=active \
206
 
       other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
207
 
   set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
208
 
   set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
209
 
   add-br br1 -- \
210
 
   set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
211
 
   set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
212
 
       fail-mode=standalone -- \
213
 
   add-bond br1 bond1 p3 p4 bond_mode=balance-tcp lacp=active \
214
 
       other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
215
 
   set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
216
 
   set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
217
 
   add-port br1 br1- -- set interface br1- type=patch options:peer=br1+ ofport_request=100 -- \
218
 
   add-br br-int -- \
219
 
   set bridge br-int other-config:hwaddr=aa:77:aa:77:00:00 -- \
220
 
   set bridge br-int datapath-type=dummy other-config:datapath-id=1235 \
221
 
       fail-mode=secure -- \
222
 
   add-port br-int br1+ -- set interface br1+ type=patch options:peer=br1- ofport_request=101 -- \
223
 
   add-port br-int p5 -- set interface p5 ofport_request=5 type=dummy
224
 
])
225
 
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
226
 
])
227
 
 
228
 
# Waits for all ifaces enabled.
229
 
OVS_WAIT_UNTIL([test `ovs-appctl bond/show | grep -- "may_enable: true" |  wc -l` -ge 4])
230
 
 
231
 
# The dl_vlan flow should not be ever matched,
232
 
# since recirculation should not change the flow handling.
233
 
AT_DATA([flows.txt], [dnl
234
 
table=0 priority=1 in_port=5 actions=mod_vlan_vid:1,output(101)
235
 
table=0 priority=2 in_port=5 dl_vlan=1 actions=drop
236
 
])
237
 
AT_CHECK([ovs-ofctl add-flows br-int flows.txt])
238
 
 
239
 
# Sends a packet to trigger recirculation.
240
 
# Should generate recirc_id(0x12d),dp_hash(0xcf/0xff).
241
 
AT_CHECK([ovs-appctl netdev-dummy/receive p5 "in_port(5),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no)"])
242
 
 
243
 
# Forces revalidators to update all stats.
244
 
AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [dnl
245
 
megaflows disabled
246
 
])
247
 
AT_CHECK([ovs-appctl upcall/enable-megaflows], [0], [dnl
248
 
megaflows enabled
249
 
])
250
 
 
251
 
# Checks the flow stats in br1, should only be one flow with non-zero
252
 
# 'n_packets' from internal table.
253
 
AT_CHECK([ovs-appctl bridge/dump-flows br1 | ofctl_strip | grep -- "n_packets" | grep -- "table_id" | sed -e 's/output:[[0-9]]\+/output/'], [0], [dnl
254
 
table_id=254, n_packets=1, n_bytes=64, priority=20,recirc_id=0x12d,dp_hash=0xcf/0xff,actions=output
255
 
])
256
 
 
257
 
# Checks the flow stats in br-int, should be only one match.
258
 
AT_CHECK([ovs-ofctl dump-flows br-int | ofctl_strip | sort], [0], [dnl
259
 
 n_packets=1, n_bytes=60, priority=1,in_port=5 actions=mod_vlan_vid:1,output:101
260
 
 priority=2,in_port=5,dl_vlan=1 actions=drop
261
 
NXST_FLOW reply:
262
 
])
263
 
 
264
 
OVS_VSWITCHD_STOP()
265
 
AT_CLEANUP
266
 
 
267
 
AT_SETUP([ofproto-dpif - resubmit])
268
 
OVS_VSWITCHD_START
269
 
ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
270
 
                    [16], [17], [18], [19], [20], [21])
271
 
AT_DATA([flows.txt], [dnl
272
 
table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
273
 
table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
274
 
table=0 in_port=3 priority=2000 icmp actions=output(20)
275
 
table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
276
 
table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
277
 
table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
278
 
])
279
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
280
 
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])
281
 
AT_CHECK([tail -1 stdout], [0],
282
 
  [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
283
 
])
284
 
OVS_VSWITCHD_STOP
285
 
AT_CLEANUP
286
 
 
287
 
AT_SETUP([ofproto-dpif - goto table])
288
 
OVS_VSWITCHD_START
289
 
ADD_OF_PORTS([br0], [1], [10], [11])
290
 
echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
291
 
for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
292
 
echo "table=64 actions=output(11)" >> flows.txt
293
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
294
 
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])
295
 
AT_CHECK([tail -1 stdout], [0],
296
 
  [Datapath actions: 10,11
297
 
])
298
 
OVS_VSWITCHD_STOP
299
 
AT_CLEANUP
300
 
 
301
 
AT_SETUP([ofproto-dpif - write actions])
302
 
OVS_VSWITCHD_START
303
 
ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
304
 
AT_DATA([flows.txt], [dnl
305
 
table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
306
 
table=1 ip actions=write_actions(output(13)),goto_table(2)
307
 
table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
308
 
])
309
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
310
 
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])
311
 
AT_CHECK([tail -2 stdout], [0],
312
 
  [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
313
 
Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11,set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),13
314
 
])
315
 
OVS_VSWITCHD_STOP
316
 
AT_CLEANUP
317
 
 
318
 
AT_SETUP([ofproto-dpif - clear actions])
319
 
OVS_VSWITCHD_START
320
 
ADD_OF_PORTS([br0], [1], [10], [11], [12])
321
 
AT_DATA([flows.txt], [dnl
322
 
table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
323
 
table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
324
 
])
325
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
326
 
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=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=9'], [0], [stdout])
327
 
AT_CHECK([tail -2 stdout], [0],
328
 
  [Megaflow: recirc_id=0,skb_priority=0,tcp,in_port=1,nw_frag=no,tp_src=8,tp_dst=9
329
 
Datapath actions: 10,set(tcp(src=91,dst=9)),11
330
 
])
331
 
OVS_VSWITCHD_STOP
332
 
AT_CLEANUP
333
 
 
334
 
AT_SETUP([ofproto-dpif - group chaining not supported])
335
 
OVS_VSWITCHD_START
336
 
ADD_OF_PORTS([br0], [1], [10], [11])
337
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,group:123,bucket=output:11'],
338
 
  [1], [], [stderr])
339
 
AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
340
 
  [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
341
 
])
342
 
OVS_VSWITCHD_STOP
343
 
AT_CLEANUP
344
 
 
345
 
AT_SETUP([ofproto-dpif - all group in action list])
346
 
OVS_VSWITCHD_START
347
 
ADD_OF_PORTS([br0], [1], [10], [11])
348
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
349
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
350
 
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])
351
 
AT_CHECK([tail -2 stdout], [0],
352
 
  [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
353
 
Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
354
 
])
355
 
OVS_VSWITCHD_STOP
356
 
AT_CLEANUP
357
 
 
358
 
AT_SETUP([ofproto-dpif - indirect group in action list])
359
 
OVS_VSWITCHD_START
360
 
ADD_OF_PORTS([br0], [1], [10])
361
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
362
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
363
 
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])
364
 
AT_CHECK([tail -1 stdout], [0],
365
 
  [Datapath actions: 10
366
 
])
367
 
OVS_VSWITCHD_STOP
368
 
AT_CLEANUP
369
 
 
370
 
AT_SETUP([ofproto-dpif - group actions have no effect afterwards])
371
 
OVS_VSWITCHD_START
372
 
ADD_OF_PORTS([br0], [1], [10])
373
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=set_field:192.168.3.90->ip_src,output:10'])
374
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234,output:10'])
375
 
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])
376
 
AT_CHECK([tail -1 stdout], [0],
377
 
  [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10
378
 
])
379
 
OVS_VSWITCHD_STOP
380
 
AT_CLEANUP
381
 
 
382
 
AT_SETUP([ofproto-dpif - all group in action set])
383
 
OVS_VSWITCHD_START
384
 
ADD_OF_PORTS([br0], [1], [10], [11])
385
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
386
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
387
 
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])
388
 
AT_CHECK([tail -2 stdout], [0],
389
 
  [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
390
 
Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
391
 
])
392
 
OVS_VSWITCHD_STOP
393
 
AT_CLEANUP
394
 
 
395
 
AT_SETUP([ofproto-dpif - indirect group in action set])
396
 
OVS_VSWITCHD_START
397
 
ADD_OF_PORTS([br0], [1], [10])
398
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
399
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
400
 
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])
401
 
AT_CHECK([tail -1 stdout], [0],
402
 
  [Datapath actions: 10
403
 
])
404
 
OVS_VSWITCHD_STOP
405
 
AT_CLEANUP
406
 
 
407
 
AT_SETUP([ofproto-dpif - select group])
408
 
OVS_VSWITCHD_START
409
 
ADD_OF_PORTS([br0], [1], [10], [11])
410
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
411
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
412
 
 
413
 
# Try a bunch of different flows and make sure that they get distributed
414
 
# at least somewhat.
415
 
for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
416
 
    AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:0$d,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])
417
 
    tail -1 stdout >> results
418
 
done
419
 
sort results | uniq -c
420
 
AT_CHECK([sort results | uniq], [0],
421
 
  [Datapath actions: 10
422
 
Datapath actions: 11
423
 
])
424
 
OVS_VSWITCHD_STOP
425
 
AT_CLEANUP
426
 
 
427
 
AT_SETUP([ofproto-dpif - select group with watch port])
428
 
OVS_VSWITCHD_START
429
 
ADD_OF_PORTS([br0], [1], [10], [11])
430
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
431
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
432
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,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])
433
 
AT_CHECK([tail -1 stdout], [0],
434
 
  [Datapath actions: 11
435
 
])
436
 
OVS_VSWITCHD_STOP
437
 
AT_CLEANUP
438
 
 
439
 
AT_SETUP([ofproto-dpif - select group with weight])
440
 
OVS_VSWITCHD_START
441
 
ADD_OF_PORTS([br0], [1], [10], [11], [12])
442
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11,weight=2000,bucket=output:12,weight=0'])
443
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
444
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,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])
445
 
AT_CHECK([tail -1 stdout], [0],
446
 
  [Datapath actions: 11
447
 
])
448
 
OVS_VSWITCHD_STOP
449
 
AT_CLEANUP
450
 
 
451
 
AT_SETUP([ofproto-dpif - fast failover group])
452
 
OVS_VSWITCHD_START
453
 
ADD_OF_PORTS([br0], [1], [10], [11])
454
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=ff,bucket=watch_port:10,output:10,bucket=watch_port:11,output:11'])
455
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
456
 
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])
457
 
AT_CHECK([tail -1 stdout], [0],
458
 
  [Datapath actions: drop
459
 
])
460
 
OVS_VSWITCHD_STOP
461
 
AT_CLEANUP
462
 
 
463
 
AT_SETUP([ofproto-dpif - registers])
464
 
OVS_VSWITCHD_START
465
 
ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
466
 
AT_DATA([flows.txt], [dnl
467
 
in_port=90                 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
468
 
in_port=91                 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
469
 
in_port=92                 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
470
 
in_port=93                 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
471
 
 
472
 
in_port=2                  actions=load:0x000db000->NXM_NX_REG0[[]]
473
 
in_port=3                  actions=load:0xdea->NXM_NX_REG0[[20..31]]
474
 
in_port=4                  actions=load:0xeef->NXM_NX_REG0[[0..11]]
475
 
in_port=5                  actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
476
 
in_port=6                  actions=load:0x22222222->NXM_NX_REG2[[]]
477
 
in_port=7                  actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
478
 
in_port=8                  actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
479
 
in_port=9,reg0=0xdeadbeef  actions=output:20
480
 
in_port=10,reg1=0xdeadbeef actions=output:21
481
 
in_port=11,reg2=0xeef22dea actions=output:22
482
 
 
483
 
dnl Sanilty check all registers
484
 
in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
485
 
in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
486
 
in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
487
 
in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
488
 
 
489
 
])
490
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
491
 
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])
492
 
AT_CHECK([tail -1 stdout], [0],
493
 
  [Datapath actions: 20,21,22,33
494
 
])
495
 
OVS_VSWITCHD_STOP
496
 
AT_CLEANUP
497
 
 
498
 
AT_SETUP([ofproto-dpif - push-pop])
499
 
OVS_VSWITCHD_START
500
 
ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
501
 
AT_DATA([flows.txt], [dnl
502
 
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
503
 
in_port=2            actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
504
 
in_port=3            actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
505
 
in_port=4            actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
506
 
in_port=5            actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
507
 
 
508
 
])
509
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
510
 
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])
511
 
AT_CHECK([tail -1 stdout], [0],
512
 
  [Datapath actions: 33,22,21,20
513
 
])
514
 
OVS_VSWITCHD_STOP
515
 
AT_CLEANUP
516
 
 
517
 
AT_SETUP([ofproto-dpif - output])
518
 
OVS_VSWITCHD_START
519
 
ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
520
 
AT_DATA([flows.txt], [dnl
521
 
in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
522
 
in_port=2 actions=output:9
523
 
in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
524
 
in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
525
 
in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
526
 
in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
527
 
in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
528
 
in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
529
 
])
530
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
531
 
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])
532
 
AT_CHECK([tail -1 stdout], [0],
533
 
  [Datapath actions: 9,55,10,55,66,11,77,88,9,1
534
 
])
535
 
OVS_VSWITCHD_STOP
536
 
AT_CLEANUP
537
 
 
538
 
AT_SETUP([ofproto-dpif - dec_ttl])
539
 
OVS_VSWITCHD_START
540
 
ADD_OF_PORTS([br0], [1], [2], [3], [4])
541
 
AT_DATA([flows.txt], [dnl
542
 
table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
543
 
table=1 in_port=1 action=dec_ttl,output:3
544
 
])
545
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
546
 
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=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
547
 
AT_CHECK([tail -4 stdout], [0],
548
 
  [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=2
549
 
Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
550
 
This flow is handled by the userspace slow path because it:
551
 
        - Sends "packet-in" messages to the OpenFlow controller.
552
 
])
553
 
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=111,tos=0,ttl=3,frag=no)'], [0], [stdout])
554
 
AT_CHECK([tail -2 stdout], [0],
555
 
  [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=3
556
 
Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),3,4
557
 
])
558
 
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])
559
 
AT_CHECK([tail -2 stdout], [0],
560
 
  [Megaflow: recirc_id=0,skb_priority=0,ipv6,in_port=1,ipv6_src=::1,ipv6_dst=::2,ipv6_label=0x00000,nw_proto=10,nw_tos=112,nw_ecn=0,nw_ttl=128
561
 
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
562
 
])
563
 
 
564
 
AT_CAPTURE_FILE([ofctl_monitor.log])
565
 
AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
566
 
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=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
567
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
568
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
569
 
NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
570
 
ip,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_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=1
571
 
])
572
 
OVS_VSWITCHD_STOP
573
 
AT_CLEANUP
574
 
 
575
 
dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
576
 
dnl buffer to be resized just before pushing the id of the dec_ttl action.
577
 
dnl Thus the implementation must account for this by using the
578
 
dnl reallocated buffer rather than the original buffer.
579
 
dnl
580
 
dnl A number of similar rules are added to try and exercise
581
 
dnl xrealloc sufficiently that it returns a different base pointer
582
 
AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
583
 
OVS_VSWITCHD_START
584
 
ADD_OF_PORTS([br0], [1])
585
 
(for i in `seq 0 255`; do
586
 
  printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
587
 
 done) > flows.txt
588
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
589
 
OVS_VSWITCHD_STOP
590
 
AT_CLEANUP
591
 
 
592
 
dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
593
 
dnl buffer to be resized just before pushing the id of the dec_ttl action.
594
 
dnl Thus the implementation must account for this by using the
595
 
dnl reallocated buffer rather than the original buffer.
596
 
dnl
597
 
dnl A number of similar rules are added to try and exercise
598
 
dnl xrealloc sufficiently that it returns a different base pointer
599
 
AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
600
 
OVS_VSWITCHD_START
601
 
ADD_OF_PORTS([br0], [1])
602
 
(for i in `seq 0 255`; do
603
 
  printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
604
 
 done) > flows.txt
605
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
606
 
OVS_VSWITCHD_STOP
607
 
AT_CLEANUP
608
 
 
609
 
dnl A note action at offset 24 in ofpacts will cause the ofpacts
610
 
dnl buffer to be resized just before pushing the id of the dec_ttl action.
611
 
dnl Thus the implementation must account for this by using the
612
 
dnl reallocated buffer rather than the original buffer.
613
 
dnl
614
 
dnl A number of similar rules are added to try and exercise
615
 
dnl xrealloc sufficiently that it returns a different base pointer
616
 
AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
617
 
OVS_VSWITCHD_START
618
 
ADD_OF_PORTS([br0], [1])
619
 
(for i in `seq 0 255`; do
620
 
  printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
621
 
 done) > flows.txt
622
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
623
 
OVS_VSWITCHD_STOP
624
 
AT_CLEANUP
625
 
 
626
 
AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
627
 
OVS_VSWITCHD_START
628
 
ADD_OF_PORTS([br0], [1], [2])
629
 
 
630
 
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
631
 
 
632
 
# "in_port" defaults to OFPP_NONE if it's not specified.
633
 
flow="icmp,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,icmp_type=8,icmp_code=0"
634
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
635
 
AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
636
 
1
637
 
2
638
 
100
639
 
])
640
 
 
641
 
OVS_VSWITCHD_STOP
642
 
AT_CLEANUP
643
 
 
644
 
AT_SETUP([ofproto-dpif - DSCP])
645
 
OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
646
 
ADD_OF_PORTS([br0], [9])
647
 
AT_DATA([flows.txt], [dnl
648
 
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
649
 
])
650
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
651
 
AT_CHECK([ovs-vsctl -- \
652
 
        set Port p1 qos=@newqos --\
653
 
        --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
654
 
        --id=@q1 create Queue dscp=1 --\
655
 
        --id=@q2 create Queue dscp=2], [0], [ignore])
656
 
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])
657
 
AT_CHECK([tail -2 stdout], [0],
658
 
  [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=9,nw_src=1.1.1.1,nw_dst=2.2.2.2,nw_tos=252,nw_ecn=3,nw_ttl=128
659
 
Datapath actions: dnl
660
 
100,dnl
661
 
set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
662
 
set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(skb_priority(0x2)),1,dnl
663
 
1,dnl
664
 
set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
665
 
set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(skb_priority(0)),1,dnl
666
 
set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
667
 
100
668
 
])
669
 
OVS_VSWITCHD_STOP
670
 
AT_CLEANUP
671
 
 
672
 
AT_SETUP([ofproto-dpif - output/flood flags])
673
 
OVS_VSWITCHD_START
674
 
ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
675
 
 
676
 
AT_DATA([flows.txt], [dnl
677
 
in_port=local actions=local,flood
678
 
in_port=1 actions=flood
679
 
in_port=2 actions=all
680
 
in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
681
 
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
682
 
])
683
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
684
 
AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
685
 
AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
686
 
 
687
 
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])
688
 
AT_CHECK([tail -1 stdout \
689
 
| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
690
 
1
691
 
2
692
 
3
693
 
4
694
 
7
695
 
])
696
 
 
697
 
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])
698
 
AT_CHECK([tail -1 stdout \
699
 
| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
700
 
100
701
 
2
702
 
3
703
 
4
704
 
7
705
 
])
706
 
 
707
 
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])
708
 
AT_CHECK([tail -1 stdout \
709
 
| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
710
 
1
711
 
100
712
 
3
713
 
4
714
 
6
715
 
7
716
 
])
717
 
 
718
 
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])
719
 
AT_CHECK([tail -1 stdout], [0],
720
 
  [Datapath actions: 100,1,2,4,6,7
721
 
])
722
 
 
723
 
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])
724
 
AT_CHECK([tail -1 stdout], [0],
725
 
  [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
726
 
])
727
 
OVS_VSWITCHD_STOP
728
 
AT_CLEANUP
729
 
 
730
 
AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
731
 
OVS_VSWITCHD_START([dnl
732
 
   add-port br0 p1 -- set Interface p1 type=dummy
733
 
])
734
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
735
 
 
736
 
AT_CAPTURE_FILE([ofctl_monitor.log])
737
 
 
738
 
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
739
 
 
740
 
for i in 1 2 3 ; do
741
 
    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),tcp_flags(0x010)'
742
 
done
743
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
744
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
745
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
746
 
NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
747
 
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_flags=0x010 tcp_csum:0
748
 
dnl
749
 
NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
750
 
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_flags=0x010 tcp_csum:0
751
 
dnl
752
 
NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
753
 
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_flags=0x010 tcp_csum:0
754
 
])
755
 
 
756
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
757
 
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
758
 
NXST_FLOW reply:
759
 
])
760
 
 
761
 
OVS_VSWITCHD_STOP
762
 
AT_CLEANUP
763
 
 
764
 
AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
765
 
OVS_VSWITCHD_START([dnl
766
 
   add-port br0 p1 -- set Interface p1 type=dummy
767
 
])
768
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
769
 
 
770
 
AT_CAPTURE_FILE([ofctl_monitor.log])
771
 
AT_CHECK([ovs-ofctl del-flows br0])
772
 
 
773
 
AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
774
 
 
775
 
dnl Test that missed packets are droped
776
 
for i in 1 2 3 ; do
777
 
    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),tcp_flags(0x010)'
778
 
done
779
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
780
 
 
781
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
782
 
])
783
 
 
784
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
785
 
AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
786
 
OFPST_FLOW reply (OF1.3):
787
 
])
788
 
 
789
 
OVS_VSWITCHD_STOP
790
 
AT_CLEANUP
791
 
 
792
 
AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
793
 
OVS_VSWITCHD_START([dnl
794
 
   add-port br0 p1 -- set Interface p1 type=dummy
795
 
])
796
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
797
 
 
798
 
AT_CAPTURE_FILE([ofctl_monitor.log])
799
 
AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
800
 
 
801
 
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
802
 
 
803
 
for i in 1 2 3 ; do
804
 
    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),tcp_flags(0x010)'
805
 
done
806
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
807
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
808
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
809
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
810
 
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_flags=0x010 tcp_csum:0
811
 
dnl
812
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
813
 
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_flags=0x010 tcp_csum:0
814
 
dnl
815
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
816
 
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_flags=0x010 tcp_csum:0
817
 
])
818
 
 
819
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
820
 
sleep 1  # wait for revalidator to update stats
821
 
AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
822
 
 n_packets=3, n_bytes=180, actions=goto_table:1
823
 
OFPST_FLOW reply (OF1.2):
824
 
])
825
 
 
826
 
OVS_VSWITCHD_STOP
827
 
AT_CLEANUP
828
 
 
829
 
AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
830
 
OVS_VSWITCHD_START([dnl
831
 
   add-port br0 p1 -- set Interface p1 type=dummy
832
 
])
833
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
834
 
 
835
 
AT_CAPTURE_FILE([ofctl_monitor.log])
836
 
AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
837
 
 
838
 
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
839
 
 
840
 
for i in 1 2 3 ; do
841
 
    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),tcp_flags(0x010)'
842
 
done
843
 
 
844
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
845
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
846
 
])
847
 
 
848
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
849
 
sleep 1  # wait for revalidator to update stats
850
 
AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
851
 
 n_packets=3, n_bytes=180, actions=resubmit(1,1)
852
 
OFPST_FLOW reply (OF1.2):
853
 
])
854
 
 
855
 
OVS_VSWITCHD_STOP
856
 
AT_CLEANUP
857
 
 
858
 
AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
859
 
OVS_VSWITCHD_START([dnl
860
 
   add-port br0 p1 -- set Interface p1 type=dummy
861
 
])
862
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
863
 
 
864
 
AT_CAPTURE_FILE([ofctl_monitor.log])
865
 
AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
866
 
AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
867
 
 
868
 
dnl Miss table 0, Hit table 1
869
 
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
870
 
 
871
 
for i in 1 2 3 ; do
872
 
    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=9),tcp_flags(0x010)'
873
 
done
874
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
875
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
876
 
 
877
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
878
 
NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
879
 
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=9,tcp_flags=0x010 tcp_csum:0
880
 
dnl
881
 
NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
882
 
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=9,tcp_flags=0x010 tcp_csum:0
883
 
dnl
884
 
NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
885
 
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=9,tcp_flags=0x010 tcp_csum:0
886
 
])
887
 
 
888
 
dnl Hit table 0, Miss all other tables, sent to controller
889
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
890
 
 
891
 
for i in 1 2 3 ; do
892
 
    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),tcp_flags(0x010)'
893
 
done
894
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
895
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
896
 
 
897
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
898
 
NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
899
 
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_flags=0x010 tcp_csum:0
900
 
dnl
901
 
NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
902
 
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_flags=0x010 tcp_csum:0
903
 
dnl
904
 
NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
905
 
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_flags=0x010 tcp_csum:0
906
 
])
907
 
 
908
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
909
 
sleep 1  # wait for revalidator to update stats
910
 
AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
911
 
 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
912
 
OFPST_FLOW reply (OF1.2):
913
 
])
914
 
 
915
 
OVS_VSWITCHD_STOP
916
 
AT_CLEANUP
917
 
 
918
 
AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
919
 
OVS_VSWITCHD_START([dnl
920
 
   add-port br0 p1 -- set Interface p1 type=dummy
921
 
])
922
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
923
 
 
924
 
AT_CAPTURE_FILE([ofctl_monitor.log])
925
 
AT_DATA([flows.txt], [dnl
926
 
table=0 actions=goto_table(1)
927
 
table=2 dl_src=10:11:11:11:11:11 actions=controller
928
 
])
929
 
AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
930
 
AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
931
 
 
932
 
dnl Hit table 0, Miss table 1, Hit table 2
933
 
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
934
 
 
935
 
for i in 1 2 3 ; do
936
 
    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=9),tcp_flags(0x010)'
937
 
done
938
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
939
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
940
 
 
941
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
942
 
NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
943
 
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=9,tcp_flags=0x010 tcp_csum:0
944
 
dnl
945
 
NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
946
 
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=9,tcp_flags=0x010 tcp_csum:0
947
 
dnl
948
 
NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
949
 
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=9,tcp_flags=0x010 tcp_csum:0
950
 
])
951
 
 
952
 
dnl Hit table 1, Miss all other tables, sent to controller
953
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
954
 
 
955
 
for i in 1 2 3 ; do
956
 
    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),tcp_flags(0x010)'
957
 
done
958
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
959
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
960
 
 
961
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
962
 
NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
963
 
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_flags=0x010 tcp_csum:0
964
 
dnl
965
 
NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
966
 
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_flags=0x010 tcp_csum:0
967
 
dnl
968
 
NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
969
 
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_flags=0x010 tcp_csum:0
970
 
])
971
 
 
972
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
973
 
sleep 1  # wait for revalidator to update stats
974
 
AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
975
 
 n_packets=6, n_bytes=360, actions=goto_table:1
976
 
 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
977
 
OFPST_FLOW reply (OF1.2):
978
 
])
979
 
 
980
 
OVS_VSWITCHD_STOP
981
 
AT_CLEANUP
982
 
 
983
 
AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
984
 
OVS_VSWITCHD_START([dnl
985
 
   add-port br0 p1 -- set Interface p1 type=dummy
986
 
])
987
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
988
 
 
989
 
AT_CAPTURE_FILE([ofctl_monitor.log])
990
 
AT_DATA([flows.txt], [dnl
991
 
table=0 actions=resubmit(1,1)
992
 
table=2 dl_src=10:11:11:11:11:11 actions=controller
993
 
])
994
 
AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
995
 
AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
996
 
 
997
 
dnl Hit table 0, Miss table 1, Dropped
998
 
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
999
 
 
1000
 
for i in 1 2 3 ; do
1001
 
    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=9),tcp_flags(0x010)'
1002
 
done
1003
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1004
 
 
1005
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1006
 
])
1007
 
 
1008
 
dnl Hit table 1, Dropped
1009
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1010
 
 
1011
 
for i in 1 2 3 ; do
1012
 
    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),tcp_flags(0x010)'
1013
 
done
1014
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1015
 
 
1016
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1017
 
])
1018
 
 
1019
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1020
 
sleep 1  # wait for revalidator to update stats
1021
 
AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1022
 
 n_packets=6, n_bytes=360, actions=resubmit(1,1)
1023
 
 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1024
 
OFPST_FLOW reply (OF1.2):
1025
 
])
1026
 
 
1027
 
OVS_VSWITCHD_STOP
1028
 
AT_CLEANUP
1029
 
 
1030
 
AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
1031
 
OVS_VSWITCHD_START([dnl
1032
 
   add-port br0 p1 -- set Interface p1 type=dummy
1033
 
])
1034
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
1035
 
 
1036
 
AT_CAPTURE_FILE([ofctl_monitor.log])
1037
 
AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1038
 
 
1039
 
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1040
 
 
1041
 
dnl Test that missed packets are droped
1042
 
for i in 1 2 3 ; do
1043
 
    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),tcp_flags(0x010)'
1044
 
done
1045
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1046
 
 
1047
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1048
 
])
1049
 
 
1050
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1051
 
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1052
 
NXST_FLOW reply:
1053
 
])
1054
 
 
1055
 
OVS_VSWITCHD_STOP
1056
 
AT_CLEANUP
1057
 
 
1058
 
AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
1059
 
OVS_VSWITCHD_START([dnl
1060
 
   add-port br0 p1 -- set Interface p1 type=dummy
1061
 
])
1062
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
1063
 
 
1064
 
AT_CAPTURE_FILE([ofctl_monitor.log])
1065
 
AT_CHECK([ovs-ofctl del-flows br0])
1066
 
AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
1067
 
AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1068
 
 
1069
 
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1070
 
 
1071
 
dnl Test that missed packets are droped
1072
 
for i in 1 2 3 ; do
1073
 
    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),tcp_flags(0x010)'
1074
 
done
1075
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1076
 
 
1077
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1078
 
])
1079
 
 
1080
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1081
 
sleep 1  # wait for revalidator to update stats
1082
 
AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1083
 
 n_packets=3, n_bytes=180, actions=goto_table:1
1084
 
OFPST_FLOW reply (OF1.2):
1085
 
])
1086
 
 
1087
 
OVS_VSWITCHD_STOP
1088
 
AT_CLEANUP
1089
 
 
1090
 
AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1091
 
OVS_VSWITCHD_START([dnl
1092
 
   add-port br0 p1 -- set Interface p1 type=dummy
1093
 
])
1094
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
1095
 
 
1096
 
AT_CAPTURE_FILE([ofctl_monitor.log])
1097
 
AT_CHECK([ovs-ofctl del-flows br0])
1098
 
AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1099
 
AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1100
 
 
1101
 
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1102
 
 
1103
 
dnl Test that missed packets are droped
1104
 
for i in 1 2 3 ; do
1105
 
    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),tcp_flags(0x010)'
1106
 
done
1107
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1108
 
 
1109
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1110
 
])
1111
 
 
1112
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1113
 
sleep 1  # wait for revalidator to update stats
1114
 
AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1115
 
 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1116
 
OFPST_FLOW reply (OF1.2):
1117
 
])
1118
 
 
1119
 
OVS_VSWITCHD_STOP
1120
 
AT_CLEANUP
1121
 
 
1122
 
AT_SETUP([ofproto-dpif - controller])
1123
 
OVS_VSWITCHD_START([dnl
1124
 
   add-port br0 p1 -- set Interface p1 type=dummy
1125
 
])
1126
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
1127
 
 
1128
 
AT_CAPTURE_FILE([ofctl_monitor.log])
1129
 
AT_DATA([flows.txt], [dnl
1130
 
cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1131
 
cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1132
 
cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1133
 
 
1134
 
cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1135
 
cookie=0x4 table=2 in_port=81 actions=load:2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,controller,resubmit(82,3)
1136
 
cookie=0x5 table=3 in_port=82 actions=load:3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,controller,resubmit(83,4)
1137
 
cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1138
 
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)
1139
 
cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1140
 
cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1141
 
cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1142
 
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
1143
 
cookie=0xa dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,controller
1144
 
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
1145
 
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
1146
 
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
1147
 
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
1148
 
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
1149
 
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
1150
 
cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1151
 
cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1152
 
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
1153
 
cookie=0xd dl_src=80:88:88:88:88:88 arp actions=load:2->OXM_OF_ARP_OP[[]],controller,load:0xc0a88001->OXM_OF_ARP_SPA[[]],controller,load:0x404444444441->OXM_OF_ARP_THA[[]],load:0x01010101->OXM_OF_ARP_SPA[[]],load:0x02020202->OXM_OF_ARP_TPA[[]],controller
1154
 
])
1155
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1156
 
 
1157
 
dnl Flow miss.
1158
 
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1159
 
 
1160
 
for i in 1 2 3 ; do
1161
 
    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),tcp_flags(0x010)'
1162
 
done
1163
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1164
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1165
 
 
1166
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1167
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1168
 
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_flags=0x010 tcp_csum:0
1169
 
dnl
1170
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1171
 
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_flags=0x010 tcp_csum:0
1172
 
dnl
1173
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1174
 
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_flags=0x010 tcp_csum:0
1175
 
])
1176
 
 
1177
 
dnl Singleton controller action.
1178
 
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1179
 
 
1180
 
for i in 1 2 3 ; do
1181
 
    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),tcp_flags(0x002)'
1182
 
done
1183
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1184
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1185
 
 
1186
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1187
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1188
 
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_flags=0x002 tcp_csum:0
1189
 
dnl
1190
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1191
 
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_flags=0x002 tcp_csum:0
1192
 
dnl
1193
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1194
 
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_flags=0x002 tcp_csum:0
1195
 
])
1196
 
 
1197
 
dnl Modified controller action.
1198
 
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1199
 
 
1200
 
for i in 1 2 3 ; do
1201
 
    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),tcp_flags(0x001)'
1202
 
done
1203
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1204
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1205
 
 
1206
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1207
 
OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1208
 
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_flags=0x001 tcp_csum:0
1209
 
dnl
1210
 
OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1211
 
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_flags=0x001 tcp_csum:0
1212
 
dnl
1213
 
OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1214
 
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_flags=0x001 tcp_csum:0
1215
 
])
1216
 
 
1217
 
dnl Modified VLAN controller action.
1218
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1219
 
 
1220
 
for i in 1 2 3; do
1221
 
    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=16,tos=0,ttl=64,frag=no)'
1222
 
done
1223
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1224
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1225
 
 
1226
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1227
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1228
 
ip,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_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1229
 
dnl
1230
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1231
 
ip,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_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1232
 
dnl
1233
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1234
 
ip,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_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1235
 
])
1236
 
 
1237
 
dnl Modified MPLS controller action.
1238
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1239
 
 
1240
 
for i in 1 2 3; do
1241
 
    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=16,tos=0,ttl=64,frag=no)'
1242
 
done
1243
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1244
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1245
 
 
1246
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1247
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1248
 
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
1249
 
dnl
1250
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1251
 
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
1252
 
dnl
1253
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1254
 
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
1255
 
])
1256
 
 
1257
 
dnl Modified MPLS controller action.
1258
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1259
 
 
1260
 
for i in 1 2 3; do
1261
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=41: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=16,tos=0,ttl=64,frag=no)'
1262
 
done
1263
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1264
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1265
 
 
1266
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1267
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1268
 
ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1269
 
dnl
1270
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1271
 
ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1272
 
dnl
1273
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1274
 
ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1275
 
])
1276
 
 
1277
 
dnl Modified MPLS controller action.
1278
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1279
 
 
1280
 
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)
1281
 
 
1282
 
for i in 1 2 3; do
1283
 
    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)'
1284
 
done
1285
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1286
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1287
 
 
1288
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1289
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1290
 
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,mpls_lse1=46912
1291
 
dnl
1292
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1293
 
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,mpls_lse1=46912
1294
 
dnl
1295
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1296
 
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,mpls_lse1=46912
1297
 
])
1298
 
 
1299
 
dnl Modified MPLS controller action.
1300
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1301
 
 
1302
 
for i in 1 2 3; do
1303
 
    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=16,tos=0,ttl=64,frag=no))'
1304
 
done
1305
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1306
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1307
 
 
1308
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1309
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1310
 
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
1311
 
dnl
1312
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1313
 
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
1314
 
dnl
1315
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1316
 
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
1317
 
])
1318
 
 
1319
 
dnl Modified MPLS controller action.
1320
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1321
 
 
1322
 
for i in 1 2 3; do
1323
 
    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=16,tos=0,ttl=64,frag=no)'
1324
 
done
1325
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1326
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1327
 
 
1328
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1329
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1330
 
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
1331
 
dnl
1332
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1333
 
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
1334
 
dnl
1335
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1336
 
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
1337
 
])
1338
 
 
1339
 
dnl Modified MPLS controller action.
1340
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1341
 
 
1342
 
for i in 1 2 3; do
1343
 
    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=16,tos=0,ttl=64,frag=no)'
1344
 
done
1345
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1346
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1347
 
 
1348
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1349
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1350
 
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
1351
 
dnl
1352
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1353
 
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
1354
 
dnl
1355
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1356
 
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
1357
 
])
1358
 
 
1359
 
dnl Modified MPLS controller action.
1360
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1361
 
 
1362
 
for i in 1 2 3; do
1363
 
    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=16,tos=0,ttl=64,frag=no)'
1364
 
done
1365
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1366
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1367
 
 
1368
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1369
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1370
 
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
1371
 
dnl
1372
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1373
 
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
1374
 
dnl
1375
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1376
 
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
1377
 
])
1378
 
 
1379
 
dnl Modified MPLS controller action.
1380
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1381
 
 
1382
 
for i in 1 2 3; do
1383
 
    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=16,tos=0,ttl=64,frag=no)'
1384
 
done
1385
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1386
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1387
 
 
1388
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1389
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1390
 
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
1391
 
dnl
1392
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1393
 
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
1394
 
dnl
1395
 
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1396
 
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
1397
 
])
1398
 
 
1399
 
dnl Modified MPLS actions.
1400
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1401
 
 
1402
 
for i in 1 2 3; do
1403
 
    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)'
1404
 
done
1405
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1406
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1407
 
 
1408
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1409
 
NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1410
 
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
1411
 
dnl
1412
 
NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1413
 
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
1414
 
dnl
1415
 
NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1416
 
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
1417
 
])
1418
 
 
1419
 
dnl Modified MPLS ipv6 controller action.
1420
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1421
 
 
1422
 
for i in 1 2 3; do
1423
 
    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)'
1424
 
done
1425
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1426
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1427
 
 
1428
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1429
 
NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1430
 
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=128,mpls_bos=1
1431
 
dnl
1432
 
NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1433
 
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=128,mpls_bos=1
1434
 
dnl
1435
 
NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1436
 
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=128,mpls_bos=1
1437
 
])
1438
 
 
1439
 
 
1440
 
dnl Modified MPLS pop action.
1441
 
dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1442
 
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)
1443
 
dnl             (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1444
 
 
1445
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1446
 
 
1447
 
for i in 1 2 3; do
1448
 
    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'
1449
 
done
1450
 
#for i in 2 3; do
1451
 
#    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)'
1452
 
#done
1453
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1454
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1455
 
 
1456
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1457
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1458
 
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_flags=0x000 tcp_csum:7744
1459
 
dnl
1460
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1461
 
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_flags=0x000 tcp_csum:7744
1462
 
dnl
1463
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1464
 
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_flags=0x000 tcp_csum:7744
1465
 
])
1466
 
 
1467
 
dnl Checksum TCP.
1468
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1469
 
 
1470
 
for i in 1 ; do
1471
 
    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),tcp_flags(0x001)'
1472
 
done
1473
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1474
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1475
 
 
1476
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1477
 
NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1478
 
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_flags=0x001 tcp_csum:0
1479
 
dnl
1480
 
NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1481
 
tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,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_flags=0x001 tcp_csum:0
1482
 
dnl
1483
 
NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered)
1484
 
tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,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_flags=0x001 tcp_csum:0
1485
 
dnl
1486
 
NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered)
1487
 
tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,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_flags=0x001 tcp_csum:0
1488
 
dnl
1489
 
NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered)
1490
 
tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:1a03
1491
 
dnl
1492
 
NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1493
 
tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:3205
1494
 
dnl
1495
 
NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1496
 
tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=11,tcp_flags=0x001 tcp_csum:31b8
1497
 
dnl
1498
 
NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1499
 
tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=0x001 tcp_csum:316d
1500
 
dnl
1501
 
NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1502
 
tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=0x001 tcp_csum:316d
1503
 
])
1504
 
 
1505
 
dnl Checksum UDP.
1506
 
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1507
 
 
1508
 
for i in 1 ; do
1509
 
    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'
1510
 
done
1511
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1512
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1513
 
 
1514
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1515
 
NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1516
 
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
1517
 
dnl
1518
 
NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1519
 
udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,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
1520
 
dnl
1521
 
NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered)
1522
 
udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,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
1523
 
dnl
1524
 
NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered)
1525
 
udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,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
1526
 
dnl
1527
 
NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered)
1528
 
udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:2c37
1529
 
dnl
1530
 
NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1531
 
udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:4439
1532
 
dnl
1533
 
NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1534
 
udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=11 udp_csum:43ec
1535
 
dnl
1536
 
NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1537
 
udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1538
 
dnl
1539
 
NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1540
 
udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1541
 
])
1542
 
 
1543
 
dnl Modified ARP controller action.
1544
 
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1545
 
 
1546
 
for i in 1 2 3; do
1547
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,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:05,tha=00:00:00:00:00:00)'
1548
 
done
1549
 
 
1550
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1551
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1552
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1553
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1554
 
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1555
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1556
 
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1557
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1558
 
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1559
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1560
 
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1561
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1562
 
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1563
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1564
 
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1565
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1566
 
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1567
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1568
 
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1569
 
NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1570
 
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1571
 
])
1572
 
 
1573
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1574
 
 
1575
 
dnl Checksum SCTP.
1576
 
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1577
 
 
1578
 
for i in 1 ; do
1579
 
    ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 24 00 00 00 00 00 84 00 00 C0 A8 00 01 C0 A8 00 02 04 58 08 af 00 00 00 00 d9 d7 91 57 01 00 00 34 cf 28 ec 4e 00 01 40 00 00 0a ff ff b7 53 24 19 00 05 00 08 7f 00 00 01 00 05 00 08 c0 a8 02 07 00 0c 00 06 00 05 00 00 80 00 00 04 c0 00 00 04'
1580
 
done
1581
 
 
1582
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1583
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1584
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1585
 
NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1586
 
sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1587
 
dnl
1588
 
NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1589
 
sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,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=1112,tp_dst=2223 sctp_csum:d9d79157
1590
 
dnl
1591
 
NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=102 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=102 (unbuffered)
1592
 
sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,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=1112,tp_dst=2223 sctp_csum:d9d79157
1593
 
dnl
1594
 
NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=102 (unbuffered)
1595
 
sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1596
 
dnl
1597
 
NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=102 (unbuffered)
1598
 
sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1599
 
dnl
1600
 
NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1601
 
sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1602
 
dnl
1603
 
NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1604
 
sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=2223 sctp_csum:7f12662e
1605
 
dnl
1606
 
NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1607
 
sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
1608
 
dnl
1609
 
NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1610
 
sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
1611
 
])
1612
 
 
1613
 
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1614
 
 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1615
 
 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1616
 
 cookie=0x3, table=1, n_packets=3, n_bytes=218, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
1617
 
 cookie=0x4, table=2, n_packets=3, n_bytes=218, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
1618
 
 cookie=0x5, table=3, n_packets=3, n_bytes=218, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
1619
 
 cookie=0x6, table=4, n_packets=3, n_bytes=218, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
1620
 
 cookie=0x7, table=5, n_packets=3, n_bytes=218, 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)
1621
 
 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1622
 
 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1623
 
 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
1624
 
 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
1625
 
 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
1626
 
 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
1627
 
 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
1628
 
 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
1629
 
 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
1630
 
 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
1631
 
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,CONTROLLER:65535
1632
 
 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
1633
 
 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
1634
 
 cookie=0xd, n_packets=3, n_bytes=180, arp,dl_src=80:88:88:88:88:88 actions=load:0x2->NXM_OF_ARP_OP[[]],CONTROLLER:65535,load:0xc0a88001->NXM_OF_ARP_SPA[[]],CONTROLLER:65535,load:0x404444444441->NXM_NX_ARP_THA[[]],load:0x1010101->NXM_OF_ARP_SPA[[]],load:0x2020202->NXM_OF_ARP_TPA[[]],CONTROLLER:65535
1635
 
 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1636
 
 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1637
 
NXST_FLOW reply:
1638
 
])
1639
 
 
1640
 
OVS_VSWITCHD_STOP
1641
 
AT_CLEANUP
1642
 
 
1643
 
 
1644
 
AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1645
 
OVS_VSWITCHD_START([dnl
1646
 
   add-port br0 p1 -- set Interface p1 type=dummy
1647
 
])
1648
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
1649
 
 
1650
 
AT_CAPTURE_FILE([ofctl_monitor.log])
1651
 
# A table-miss flow has priority 0 and no match
1652
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1653
 
 
1654
 
dnl Singleton controller action.
1655
 
AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1656
 
 
1657
 
for i in 1 2 3 ; do
1658
 
    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),tcp_flags(0x002)'
1659
 
done
1660
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1661
 
ovs-appctl -t ovs-ofctl exit
1662
 
 
1663
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1664
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1665
 
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_flags=0x002 tcp_csum:0
1666
 
dnl
1667
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1668
 
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_flags=0x002 tcp_csum:0
1669
 
dnl
1670
 
OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1671
 
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_flags=0x002 tcp_csum:0
1672
 
])
1673
 
 
1674
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1675
 
 
1676
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1677
 
 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1678
 
NXST_FLOW reply:
1679
 
])
1680
 
 
1681
 
OVS_VSWITCHD_STOP
1682
 
AT_CLEANUP
1683
 
 
1684
 
 
1685
 
AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1686
 
OVS_VSWITCHD_START([dnl
1687
 
   add-port br0 p1 -- set Interface p1 type=dummy
1688
 
])
1689
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
1690
 
 
1691
 
AT_CAPTURE_FILE([ofctl_monitor.log])
1692
 
# A table-miss flow has priority 0 and no match
1693
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1694
 
 
1695
 
dnl Singleton controller action.
1696
 
AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1697
 
 
1698
 
for i in 1 2 3 ; do
1699
 
    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),tcp_flags(0x002)'
1700
 
done
1701
 
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1702
 
ovs-appctl -t ovs-ofctl exit
1703
 
 
1704
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1705
 
 
1706
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1707
 
OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1708
 
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_flags=0x002 tcp_csum:0
1709
 
dnl
1710
 
OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1711
 
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_flags=0x002 tcp_csum:0
1712
 
dnl
1713
 
OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1714
 
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_flags=0x002 tcp_csum:0
1715
 
])
1716
 
 
1717
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1718
 
 
1719
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1720
 
 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1721
 
OFPST_FLOW reply (OF1.3):
1722
 
])
1723
 
 
1724
 
OVS_VSWITCHD_STOP
1725
 
AT_CLEANUP
1726
 
 
1727
 
AT_SETUP([ofproto-dpif - ARP modification slow-path])
1728
 
OVS_VSWITCHD_START
1729
 
ADD_OF_PORTS([br0], [1], [2])
1730
 
 
1731
 
ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1732
 
ovs-ofctl add-flow br0 'in_port=1,arp actions=load:2->OXM_OF_ARP_OP[[]],2,load:0xc0a88001->OXM_OF_ARP_SPA[[]],2,load:0x404444444441->OXM_OF_ARP_THA[[]],2'
1733
 
 
1734
 
# Input some packets that should follow the arp modification slow-path.
1735
 
for i in 1 2 3; do
1736
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,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:05,tha=00:00:00:00:00:00)'
1737
 
done
1738
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1739
 
 
1740
 
# Check the packets that were output.
1741
 
AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1742
 
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1743
 
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1744
 
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1745
 
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1746
 
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1747
 
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1748
 
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1749
 
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1750
 
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1751
 
])
1752
 
 
1753
 
OVS_VSWITCHD_STOP
1754
 
AT_CLEANUP
1755
 
 
1756
 
AT_SETUP([ofproto-dpif - VLAN handling])
1757
 
OVS_VSWITCHD_START(
1758
 
  [set Bridge br0 fail-mode=standalone -- \
1759
 
   add-port br0 p1                                  trunks=10,12 -- \
1760
 
   add-port br0 p2                           tag=10              -- \
1761
 
   add-port br0 p3                           tag=12              \
1762
 
                   other-config:priority-tags=true               -- \
1763
 
   add-port br0 p4                           tag=12              -- \
1764
 
   add-port br0 p5 vlan_mode=native-tagged   tag=10              -- \
1765
 
   add-port br0 p6 vlan_mode=native-tagged   tag=10 trunks=10,12 -- \
1766
 
   add-port br0 p7 vlan_mode=native-untagged tag=12              -- \
1767
 
   add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1768
 
                   other-config:priority-tags=true               -- \
1769
 
   set Interface p1 type=dummy -- \
1770
 
   set Interface p2 type=dummy -- \
1771
 
   set Interface p3 type=dummy -- \
1772
 
   set Interface p4 type=dummy -- \
1773
 
   set Interface p5 type=dummy -- \
1774
 
   set Interface p6 type=dummy -- \
1775
 
   set Interface p7 type=dummy -- \
1776
 
   set Interface p8 type=dummy --])
1777
 
 
1778
 
dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1779
 
dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1780
 
dnl actions.
1781
 
for tuple in \
1782
 
        "100 none 0 drop" \
1783
 
        "100 0    0 drop" \
1784
 
        "100 0    1 drop" \
1785
 
        "100 10   0 1,5,6,7,8,pop_vlan,2" \
1786
 
        "100 10   1 1,5,6,7,8,pop_vlan,2" \
1787
 
        "100 11   0 5,7" \
1788
 
        "100 11   1 5,7" \
1789
 
        "100 12   0 1,5,6,pop_vlan,3,4,7,8" \
1790
 
        "100 12   1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1791
 
        "1  none 0 drop" \
1792
 
        "1  0    0 drop" \
1793
 
        "1  0    1 drop" \
1794
 
        "1  10   0 5,6,7,8,100,pop_vlan,2" \
1795
 
        "1  10   1 5,6,7,8,100,pop_vlan,2" \
1796
 
        "1  11   0 drop" \
1797
 
        "1  11   1 drop" \
1798
 
        "1  12   0 5,6,100,pop_vlan,3,4,7,8" \
1799
 
        "1  12   1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1800
 
        "2  none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1801
 
        "2  0    0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1802
 
        "2  0    1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1803
 
        "2  10   0 drop" \
1804
 
        "2  10   1 drop" \
1805
 
        "2  11   0 drop" \
1806
 
        "2  11   1 drop" \
1807
 
        "2  12   0 drop" \
1808
 
        "2  12   1 drop" \
1809
 
        "3  none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1810
 
        "3  0    0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1811
 
        "3  0    1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1812
 
        "3  10   0 drop" \
1813
 
        "3  10   1 drop" \
1814
 
        "3  11   0 drop" \
1815
 
        "3  11   1 drop" \
1816
 
        "3  12   0 drop" \
1817
 
        "3  12   1 drop" \
1818
 
        "4  none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1819
 
        "4  0    0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1820
 
        "4  0    1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1821
 
        "4  10   0 drop" \
1822
 
        "4  10   1 drop" \
1823
 
        "4  11   0 drop" \
1824
 
        "4  11   1 drop" \
1825
 
        "4  12   0 drop" \
1826
 
        "4  12   1 drop" \
1827
 
        "5  none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1828
 
        "5  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1829
 
        "5  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1830
 
        "5  10   0 1,6,7,8,100,pop_vlan,2" \
1831
 
        "5  10   1 1,6,7,8,100,pop_vlan,2" \
1832
 
        "5  11   0 7,100" \
1833
 
        "5  11   1 7,100" \
1834
 
        "5  12   0 1,6,100,pop_vlan,3,4,7,8" \
1835
 
        "5  12   1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1836
 
        "6  none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1837
 
        "6  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1838
 
        "6  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1839
 
        "6  10   0 1,5,7,8,100,pop_vlan,2" \
1840
 
        "6  10   1 1,5,7,8,100,pop_vlan,2" \
1841
 
        "6  11   0 drop" \
1842
 
        "6  11   1 drop" \
1843
 
        "6  12   0 1,5,100,pop_vlan,3,4,7,8" \
1844
 
        "6  12   1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1845
 
        "7  none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1846
 
        "7  0    0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1847
 
        "7  0    1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1848
 
        "7  10   0 1,5,6,8,100,pop_vlan,2" \
1849
 
        "7  10   1 1,5,6,8,100,pop_vlan,2" \
1850
 
        "7  11   0 5,100" \
1851
 
        "7  11   1 5,100" \
1852
 
        "7  12   0 1,5,6,100,pop_vlan,3,4,8" \
1853
 
        "7  12   1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1854
 
        "8  none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1855
 
        "8  0    0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1856
 
        "8  0    1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1857
 
        "8  10   0 1,5,6,7,100,pop_vlan,2" \
1858
 
        "8  10   1 1,5,6,7,100,pop_vlan,2" \
1859
 
        "8  11   0 drop" \
1860
 
        "8  11   1 drop" \
1861
 
        "8  12   0 1,5,6,100,pop_vlan,3,4,7" \
1862
 
        "8  12   1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1863
 
do
1864
 
  set $tuple
1865
 
  in_port=$1
1866
 
  vlan=$2
1867
 
  pcp=$3
1868
 
  expected=$4
1869
 
 
1870
 
  if test $vlan = none; then
1871
 
    flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1872
 
  else
1873
 
    flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8100),vlan(vid=$vlan,pcp=$pcp),encap(eth_type(0xabcd))"
1874
 
  fi
1875
 
 
1876
 
  echo "----------------------------------------------------------------------"
1877
 
  echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1878
 
 
1879
 
  AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1880
 
  actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1881
 
 
1882
 
  AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1883
 
  mv stdout expout
1884
 
  AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1885
 
done
1886
 
 
1887
 
OVS_VSWITCHD_STOP
1888
 
AT_CLEANUP
1889
 
 
1890
 
AT_SETUP([ofproto-dpif - MPLS handling])
1891
 
OVS_VSWITCHD_START([dnl
1892
 
   add-port br0 p1 -- set Interface p1 type=dummy
1893
 
])
1894
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
1895
 
 
1896
 
AT_CAPTURE_FILE([ofctl_monitor.log])
1897
 
AT_DATA([flows.txt], [dnl
1898
 
dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1899
 
dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1900
 
dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1901
 
])
1902
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1903
 
 
1904
 
dnl In this test, we push an MPLS tag to an ethernet packet.
1905
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1906
 
 
1907
 
for i in 1 2 3; do
1908
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:00,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)'
1909
 
done
1910
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1911
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1912
 
 
1913
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1914
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1915
 
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1916
 
00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1917
 
00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1918
 
00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1919
 
00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1920
 
dnl
1921
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1922
 
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1923
 
00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1924
 
00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1925
 
00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1926
 
00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1927
 
dnl
1928
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1929
 
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1930
 
00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1931
 
00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1932
 
00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1933
 
00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1934
 
])
1935
 
 
1936
 
dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1937
 
dnl copied exactly, except for the BOS bit.
1938
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1939
 
 
1940
 
for i in 1 2 3; do
1941
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:01,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
1942
 
done
1943
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1944
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1945
 
 
1946
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1947
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1948
 
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1949
 
00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1950
 
00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1951
 
00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1952
 
00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1953
 
dnl
1954
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1955
 
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1956
 
00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1957
 
00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1958
 
00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1959
 
00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1960
 
dnl
1961
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1962
 
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1963
 
00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1964
 
00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1965
 
00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1966
 
00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1967
 
])
1968
 
 
1969
 
dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1970
 
dnl copied exactly, except for the BOS bit. The ethertype should be updated
1971
 
dnl to the MPLS ethertype of the MPLS push action which differs to that
1972
 
dnl of the input packet.
1973
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1974
 
 
1975
 
for i in 1 2 3; do
1976
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:02,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
1977
 
done
1978
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1979
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1980
 
 
1981
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1982
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1983
 
mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1984
 
00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1985
 
00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1986
 
00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1987
 
00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1988
 
dnl
1989
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1990
 
mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1991
 
00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1992
 
00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1993
 
00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1994
 
00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1995
 
dnl
1996
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1997
 
mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1998
 
00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1999
 
00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
2000
 
00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
2001
 
00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
2002
 
])
2003
 
 
2004
 
OVS_VSWITCHD_STOP
2005
 
AT_CLEANUP
2006
 
 
2007
 
AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
2008
 
OVS_VSWITCHD_START([dnl
2009
 
   add-port br0 p1 -- set Interface p1 type=dummy
2010
 
])
2011
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
2012
 
 
2013
 
AT_CAPTURE_FILE([ofctl_monitor.log])
2014
 
AT_DATA([flows.txt], [dnl
2015
 
cookie=0xa dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,controller
2016
 
cookie=0xa dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,controller
2017
 
cookie=0xa dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,controller
2018
 
cookie=0xa dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,controller
2019
 
cookie=0xa dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
2020
 
cookie=0xa dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
2021
 
cookie=0xa dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
2022
 
cookie=0xa dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
2023
 
cookie=0xa dl_src=40:44:44:44:54:58,vlan_tci=0x1000/0x1000 actions=load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
2024
 
cookie=0xa dl_src=40:44:44:44:54:59,vlan_tci=0x1000/0x1000 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],set_vlan_pcp:1,load:99->OXM_OF_VLAN_VID[[]],controller
2025
 
])
2026
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
2027
 
 
2028
 
dnl Modified MPLS controller action.
2029
 
dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2030
 
dnl both of these in the final flow
2031
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2032
 
 
2033
 
for i in 1 2 3; do
2034
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:50,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)'
2035
 
done
2036
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2037
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2038
 
 
2039
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2040
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2041
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2042
 
00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2043
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2044
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2045
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2046
 
00000040  00 00 00 00
2047
 
dnl
2048
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2049
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2050
 
00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2051
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2052
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2053
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2054
 
00000040  00 00 00 00
2055
 
dnl
2056
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2057
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2058
 
00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2059
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2060
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2061
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2062
 
00000040  00 00 00 00
2063
 
])
2064
 
 
2065
 
dnl Modified MPLS controller action.
2066
 
dnl In this test, the input packet in vlan-tagged, which should be stripped
2067
 
dnl before we push the MPLS and VLAN tags.
2068
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2069
 
 
2070
 
for i in 1 2 3; do
2071
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:51,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2072
 
done
2073
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2074
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2075
 
 
2076
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2077
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2078
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2079
 
00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2080
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2081
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2082
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2083
 
dnl
2084
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2085
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2086
 
00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2087
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2088
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2089
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2090
 
dnl
2091
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2092
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2093
 
00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2094
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2095
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2096
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2097
 
])
2098
 
 
2099
 
dnl Modified MPLS controller action.
2100
 
dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2101
 
dnl both of these in the final flow
2102
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2103
 
 
2104
 
for i in 1 2 3; do
2105
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:52,dst=52: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)'
2106
 
done
2107
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2108
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2109
 
 
2110
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2111
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2112
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2113
 
00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2114
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2115
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2116
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2117
 
00000040  00 00 00 00
2118
 
dnl
2119
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2120
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2121
 
00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2122
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2123
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2124
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2125
 
00000040  00 00 00 00
2126
 
dnl
2127
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2128
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2129
 
00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2130
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2131
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2132
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2133
 
00000040  00 00 00 00
2134
 
])
2135
 
 
2136
 
dnl Modified MPLS controller action.
2137
 
dnl In this test, the input packet in vlan-tagged, which should be stripped
2138
 
dnl before we push the MPLS and VLAN tags.
2139
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2140
 
 
2141
 
for i in 1 2 3; do
2142
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:53,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2143
 
done
2144
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2145
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2146
 
 
2147
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2148
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2149
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2150
 
00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2151
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2152
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2153
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2154
 
dnl
2155
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2156
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2157
 
00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2158
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2159
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2160
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2161
 
dnl
2162
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2163
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2164
 
00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2165
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2166
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2167
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2168
 
])
2169
 
 
2170
 
dnl Modified MPLS controller action.
2171
 
dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2172
 
dnl actions are reordered, so we see both of these in the final flow.
2173
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2174
 
 
2175
 
for i in 1 2 3; do
2176
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:54,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)'
2177
 
done
2178
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2179
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2180
 
 
2181
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2182
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2183
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2184
 
00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2185
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2186
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2187
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2188
 
00000040  00 00 00 00
2189
 
dnl
2190
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2191
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2192
 
00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2193
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2194
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2195
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2196
 
00000040  00 00 00 00
2197
 
dnl
2198
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2199
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2200
 
00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2201
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2202
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2203
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2204
 
00000040  00 00 00 00
2205
 
])
2206
 
 
2207
 
dnl Modified MPLS controller action.
2208
 
dnl In this test, the input packet in vlan-tagged, which should be stripped
2209
 
dnl before we push the MPLS and VLAN tags.
2210
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2211
 
 
2212
 
for i in 1 2 3; do
2213
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:55,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2214
 
done
2215
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2216
 
OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2217
 
 
2218
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2219
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2220
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2221
 
00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2222
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2223
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2224
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2225
 
dnl
2226
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2227
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2228
 
00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2229
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2230
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2231
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2232
 
dnl
2233
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2234
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2235
 
00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2236
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2237
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2238
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2239
 
])
2240
 
 
2241
 
dnl Modified MPLS controller action.
2242
 
dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2243
 
dnl actions are reordered, so we see both of these in the final flow.
2244
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2245
 
 
2246
 
for i in 1 2 3; do
2247
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:56,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)'
2248
 
done
2249
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2250
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2251
 
 
2252
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2253
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2254
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2255
 
00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2256
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2257
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2258
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2259
 
00000040  00 00 00 00
2260
 
dnl
2261
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2262
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2263
 
00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2264
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2265
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2266
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2267
 
00000040  00 00 00 00
2268
 
dnl
2269
 
OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2270
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2271
 
00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2272
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2273
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2274
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2275
 
00000040  00 00 00 00
2276
 
])
2277
 
 
2278
 
dnl Modified MPLS controller action.
2279
 
dnl In this test, the input packet in vlan-tagged, which should be stripped
2280
 
dnl before we push the MPLS and VLAN tags.
2281
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2282
 
 
2283
 
for i in 1 2 3; do
2284
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:57,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2285
 
done
2286
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2287
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2288
 
 
2289
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2290
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2291
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2292
 
00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2293
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2294
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2295
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2296
 
dnl
2297
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2298
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2299
 
00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2300
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2301
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2302
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2303
 
dnl
2304
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2305
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2306
 
00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2307
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2308
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2309
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2310
 
])
2311
 
 
2312
 
dnl Modified MPLS controller action.
2313
 
dnl In this test, the input packet in vlan-tagged, which should be stripped
2314
 
dnl before we push the MPLS and VLAN tags.
2315
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2316
 
 
2317
 
for i in 1 2 3; do
2318
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:58,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2319
 
done
2320
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2321
 
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2322
 
 
2323
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2324
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2325
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2326
 
00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2327
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2328
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2329
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2330
 
dnl
2331
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2332
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2333
 
00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2334
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2335
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2336
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2337
 
dnl
2338
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2339
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2340
 
00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2341
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2342
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2343
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2344
 
])
2345
 
 
2346
 
dnl Modified MPLS controller action.
2347
 
dnl In this test, the input packet in vlan-tagged, which should be modified
2348
 
dnl before we push MPLS and VLAN tags.
2349
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2350
 
 
2351
 
for i in 1 2 3; do
2352
 
    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:59,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2353
 
done
2354
 
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2355
 
ovs-appctl -t ovs-ofctl exit
2356
 
 
2357
 
AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2358
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2359
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2360
 
00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2361
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2362
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2363
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2364
 
dnl
2365
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2366
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2367
 
00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2368
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2369
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2370
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2371
 
dnl
2372
 
OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2373
 
mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2374
 
00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2375
 
00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2376
 
00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2377
 
00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2378
 
])
2379
 
 
2380
 
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2381
 
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2382
 
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
2383
 
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
2384
 
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
2385
 
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
2386
 
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2387
 
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2388
 
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2389
 
 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2390
 
 cookie=0xa, n_packets=3, n_bytes=180, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:58 actions=load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2391
 
 cookie=0xa, n_packets=3, n_bytes=180, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:59 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],set_field:1->vlan_pcp,load:0x63->OXM_OF_VLAN_VID[[]],CONTROLLER:65535
2392
 
OFPST_FLOW reply (OF1.2):
2393
 
])
2394
 
 
2395
 
OVS_VSWITCHD_STOP
2396
 
AT_CLEANUP
2397
 
 
2398
 
AT_SETUP([ofproto-dpif - fragment handling])
2399
 
OVS_VSWITCHD_START
2400
 
ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2401
 
AT_DATA([flows.txt], [dnl
2402
 
priority=75 tcp ip_frag=no    tp_dst=80 actions=output:1
2403
 
priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2404
 
priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2405
 
priority=50 tcp ip_frag=no              actions=output:4
2406
 
priority=50 tcp ip_frag=first           actions=output:5
2407
 
priority=50 tcp ip_frag=later           actions=output:6
2408
 
])
2409
 
AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2410
 
 
2411
 
base_flow="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=6,tos=0,ttl=128"
2412
 
no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2413
 
first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2414
 
later_flow="$base_flow,frag=later)"
2415
 
 
2416
 
    # mode    no  first  later
2417
 
for tuple in \
2418
 
    'normal    1     5      6' \
2419
 
    'drop      1  drop   drop' \
2420
 
    'nx-match  1     2      6'
2421
 
do
2422
 
  set $tuple
2423
 
  mode=$1
2424
 
  no=$2
2425
 
  first=$3
2426
 
  later=$4
2427
 
 
2428
 
  AT_CHECK([ovs-ofctl set-frags br0 $mode])
2429
 
  for type in no first later; do
2430
 
    eval flow=\$${type}_flow exp_output=\$$type
2431
 
    printf "\n%s\n" "----$mode $type-----"
2432
 
    AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2433
 
    : > expout
2434
 
    if test $mode = drop && test $type != no; then
2435
 
        echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2436
 
    fi
2437
 
    echo "Datapath actions: $exp_output" >> expout
2438
 
    AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2439
 
  done
2440
 
done
2441
 
OVS_VSWITCHD_STOP
2442
 
AT_CLEANUP
2443
 
 
2444
 
AT_SETUP([ofproto-dpif - exit])
2445
 
OVS_VSWITCHD_START
2446
 
ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2447
 
AT_DATA([flows.txt], [dnl
2448
 
in_port=1 actions=output:10,exit,output:11
2449
 
in_port=2 actions=output:12,resubmit:1,output:12
2450
 
in_port=3 actions=output:13,resubmit:2,output:14
2451
 
])
2452
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2453
 
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])
2454
 
AT_CHECK([tail -1 stdout], [0],
2455
 
  [Datapath actions: 10
2456
 
])
2457
 
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])
2458
 
AT_CHECK([tail -1 stdout], [0],
2459
 
  [Datapath actions: 12,10
2460
 
])
2461
 
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])
2462
 
AT_CHECK([tail -1 stdout], [0],
2463
 
  [Datapath actions: 13,12,10
2464
 
])
2465
 
OVS_VSWITCHD_STOP
2466
 
AT_CLEANUP
2467
 
 
2468
 
 
2469
 
AT_SETUP([ofproto-dpif - mirroring, select_all])
2470
 
OVS_VSWITCHD_START
2471
 
ADD_OF_PORTS([br0], 1, 2, 3)
2472
 
ovs-vsctl \
2473
 
        set Bridge br0 mirrors=@m --\
2474
 
        --id=@p3 get Port p3 --\
2475
 
        --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2476
 
 
2477
 
AT_DATA([flows.txt], [dnl
2478
 
in_port=1 actions=output:2
2479
 
in_port=2 actions=output:1
2480
 
])
2481
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2482
 
 
2483
 
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)"
2484
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2485
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2486
 
  [Datapath actions: 2,3
2487
 
])
2488
 
 
2489
 
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)"
2490
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2491
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2492
 
  [Datapath actions: 1,3
2493
 
])
2494
 
 
2495
 
OVS_VSWITCHD_STOP
2496
 
AT_CLEANUP
2497
 
 
2498
 
 
2499
 
AT_SETUP([ofproto-dpif - mirroring, select_src])
2500
 
OVS_VSWITCHD_START
2501
 
ADD_OF_PORTS([br0], 1, 2, 3)
2502
 
ovs-vsctl \
2503
 
        set Bridge br0 mirrors=@m --\
2504
 
        --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2505
 
        --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2506
 
 
2507
 
AT_DATA([flows.txt], [dnl
2508
 
in_port=1 actions=output:2
2509
 
in_port=2 actions=output:1
2510
 
])
2511
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2512
 
 
2513
 
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)"
2514
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2515
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2516
 
  [Datapath actions: 2,3
2517
 
])
2518
 
 
2519
 
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)"
2520
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2521
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2522
 
  [Datapath actions: 1
2523
 
])
2524
 
OVS_VSWITCHD_STOP
2525
 
AT_CLEANUP
2526
 
 
2527
 
AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2528
 
OVS_VSWITCHD_START
2529
 
ADD_OF_PORTS([br0], 1, 2)
2530
 
ovs-vsctl \
2531
 
        set Bridge br0 mirrors=@m --\
2532
 
        --id=@p2 get Port p2 --\
2533
 
        --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2534
 
 
2535
 
AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2536
 
 
2537
 
# "in_port" defaults to OFPP_NONE if it's not specified.
2538
 
flow="icmp,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_ttl=128,icmp_type=8,icmp_code=0"
2539
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2540
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2541
 
  [Datapath actions: 1,2
2542
 
])
2543
 
 
2544
 
OVS_VSWITCHD_STOP
2545
 
AT_CLEANUP
2546
 
 
2547
 
 
2548
 
AT_SETUP([ofproto-dpif - mirroring, select_dst])
2549
 
OVS_VSWITCHD_START
2550
 
ADD_OF_PORTS([br0], 1, 2, 3)
2551
 
ovs-vsctl \
2552
 
        set Bridge br0 mirrors=@m --\
2553
 
        --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2554
 
        --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2555
 
 
2556
 
AT_DATA([flows.txt], [dnl
2557
 
in_port=1 actions=output:2
2558
 
in_port=2 actions=output:1
2559
 
])
2560
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2561
 
 
2562
 
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)"
2563
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2564
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2565
 
  [Datapath actions: 2,3
2566
 
])
2567
 
 
2568
 
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)"
2569
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2570
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2571
 
  [Datapath actions: 1
2572
 
])
2573
 
 
2574
 
OVS_VSWITCHD_STOP
2575
 
AT_CLEANUP
2576
 
 
2577
 
 
2578
 
AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2579
 
OVS_VSWITCHD_START
2580
 
ADD_OF_PORTS([br0], 1, 2, 3)
2581
 
ovs-vsctl \
2582
 
        set Bridge br0 mirrors=@m --\
2583
 
        --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2584
 
        --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2585
 
 
2586
 
AT_DATA([flows.txt], [dnl
2587
 
in_port=1, actions=output:2
2588
 
])
2589
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2590
 
 
2591
 
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)"
2592
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2593
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2594
 
  [Datapath actions: 2
2595
 
])
2596
 
 
2597
 
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))"
2598
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2599
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2600
 
  [Datapath actions: 2
2601
 
])
2602
 
 
2603
 
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))"
2604
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2605
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2606
 
  [Datapath actions: 2,3
2607
 
])
2608
 
 
2609
 
OVS_VSWITCHD_STOP
2610
 
AT_CLEANUP
2611
 
 
2612
 
 
2613
 
AT_SETUP([ofproto-dpif - mirroring, output_port])
2614
 
OVS_VSWITCHD_START
2615
 
ADD_OF_PORTS([br0], 1, 2, 3)
2616
 
ovs-vsctl \
2617
 
        set Bridge br0 mirrors=@m --\
2618
 
        --id=@p3 get Port p3 --\
2619
 
        --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2620
 
 
2621
 
AT_DATA([flows.txt], [dnl
2622
 
in_port=1 actions=mod_vlan_vid:17,output:2
2623
 
in_port=2 actions=output:1
2624
 
])
2625
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2626
 
 
2627
 
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)"
2628
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2629
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2630
 
  [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2631
 
])
2632
 
 
2633
 
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)"
2634
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2635
 
AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2636
 
  [Datapath actions: 1,3
2637
 
])
2638
 
 
2639
 
OVS_VSWITCHD_STOP
2640
 
AT_CLEANUP
2641
 
 
2642
 
AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2643
 
OVS_VSWITCHD_START
2644
 
ADD_OF_PORTS([br0], 1, 2)
2645
 
ovs-vsctl \
2646
 
        set Bridge br0 mirrors=@m --\
2647
 
        --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2648
 
 
2649
 
AT_DATA([flows.txt], [dnl
2650
 
in_port=1 actions=output:2
2651
 
in_port=2 actions=mod_vlan_vid:17,output:1
2652
 
])
2653
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2654
 
 
2655
 
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)"
2656
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2657
 
actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2658
 
 
2659
 
expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2660
 
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2661
 
mv stdout expout
2662
 
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2663
 
 
2664
 
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)"
2665
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2666
 
actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2667
 
 
2668
 
expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2669
 
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2670
 
mv stdout expout
2671
 
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2672
 
 
2673
 
OVS_VSWITCHD_STOP
2674
 
AT_CLEANUP
2675
 
 
2676
 
# Two testcases below are for the ofproto/trace command
2677
 
# The first one tests all correct syntax:
2678
 
# ofproto/trace [dp_name] odp_flow [-generate|packet]
2679
 
# ofproto/trace br_name br_flow [-generate|packet]
2680
 
AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2681
 
OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2682
 
ADD_OF_PORTS([br0], 1, 2, 3)
2683
 
 
2684
 
AT_DATA([flows.txt], [dnl
2685
 
in_port=1 actions=output:2
2686
 
in_port=2 actions=output:1
2687
 
])
2688
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2689
 
 
2690
 
odp_flow="in_port(p1)"
2691
 
br_flow="in_port=1"
2692
 
# Test command: ofproto/trace odp_flow with in_port as a name.
2693
 
AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2694
 
AT_CHECK([tail -1 stdout], [0], [dnl
2695
 
Datapath actions: 2
2696
 
])
2697
 
 
2698
 
odp_flow="in_port(1)"
2699
 
# Test command: ofproto/trace odp_flow
2700
 
AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2701
 
AT_CHECK([tail -1 stdout], [0], [dnl
2702
 
Datapath actions: 2
2703
 
])
2704
 
 
2705
 
# Test command: ofproto/trace dp_name odp_flow
2706
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2707
 
AT_CHECK([tail -1 stdout], [0], [dnl
2708
 
Datapath actions: 2
2709
 
])
2710
 
# Test commmand: ofproto/trace br_name br_flow
2711
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2712
 
AT_CHECK([tail -1 stdout], [0], [dnl
2713
 
Datapath actions: 2
2714
 
])
2715
 
 
2716
 
# Delete the inserted flows
2717
 
AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2718
 
AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2719
 
 
2720
 
# This section beflow tests the [-generate] option
2721
 
odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2722
 
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"
2723
 
 
2724
 
# Test command: ofproto/trace odp_flow
2725
 
AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2726
 
# Check for no MAC learning entry
2727
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2728
 
 port  VLAN  MAC                Age
2729
 
])
2730
 
 
2731
 
# Test command: ofproto/trace br_name br_flow
2732
 
AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2733
 
# Check for no MAC learning entry
2734
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2735
 
 port  VLAN  MAC                Age
2736
 
])
2737
 
 
2738
 
# Test command: ofproto/trace odp_flow -generate
2739
 
AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2740
 
# Check for the MAC learning entry
2741
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2742
 
 port  VLAN  MAC                Age
2743
 
    3     0  50:54:00:00:00:05    ?
2744
 
])
2745
 
 
2746
 
# Test command: ofproto/trace dp_name odp_flow -generate
2747
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2748
 
  "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2749
 
  -generate], [0], [stdout])
2750
 
# Check for both MAC learning entries
2751
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2752
 
 port  VLAN  MAC                Age
2753
 
    3     0  50:54:00:00:00:05    ?
2754
 
    1     0  50:54:00:00:00:06    ?
2755
 
])
2756
 
 
2757
 
# Test command: ofproto/trace br_name br_flow -generate
2758
 
AT_CHECK([ovs-appctl ofproto/trace br0 \
2759
 
  "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2760
 
  -generate], [0], [stdout])
2761
 
# Check for both MAC learning entries.
2762
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2763
 
 port  VLAN  MAC                Age
2764
 
    3     0  50:54:00:00:00:05    ?
2765
 
    1     0  50:54:00:00:00:06    ?
2766
 
    2     0  50:54:00:00:00:07    ?
2767
 
])
2768
 
 
2769
 
# This section beflow tests the [packet] option
2770
 
# The ovs-tcpundump of packets between port1 and port2
2771
 
pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2772
 
pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2773
 
 
2774
 
# Construct the MAC learning table
2775
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2776
 
  "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2777
 
  -generate], [0], [stdout])
2778
 
 
2779
 
# Construct the MAC learning table
2780
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2781
 
  "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2782
 
  -generate], [0], [stdout])
2783
 
 
2784
 
# Test command: ofproto/trace odp_flow packet
2785
 
AT_CHECK([ovs-appctl ofproto/trace \
2786
 
  "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2787
 
AT_CHECK([tail -1 stdout], [0], [dnl
2788
 
Datapath actions: 2
2789
 
])
2790
 
AT_CHECK([head -n 2 stdout], [0], [dnl
2791
 
Bridge: br0
2792
 
Flow: pkt_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
2793
 
])
2794
 
 
2795
 
# Test command: ofproto/trace dp_name odp_flow packet
2796
 
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2797
 
  "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2798
 
AT_CHECK([tail -1 stdout], [0], [dnl
2799
 
Datapath actions: 2
2800
 
])
2801
 
AT_CHECK([head -n 2 stdout], [0], [dnl
2802
 
Bridge: br0
2803
 
Flow: pkt_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
2804
 
])
2805
 
 
2806
 
# Test command: ofproto/trace br_name br_flow packet
2807
 
AT_CHECK([ovs-appctl ofproto/trace br0 \
2808
 
  "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2809
 
AT_CHECK([tail -1 stdout], [0], [dnl
2810
 
Datapath actions: 1
2811
 
])
2812
 
AT_CHECK([head -n 2 stdout], [0], [dnl
2813
 
Bridge: br0
2814
 
Flow: pkt_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
2815
 
])
2816
 
 
2817
 
OVS_VSWITCHD_STOP
2818
 
AT_CLEANUP
2819
 
 
2820
 
# The second test tests the corner cases
2821
 
AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2822
 
OVS_VSWITCHD_START
2823
 
ADD_OF_PORTS([br0], 1, 2)
2824
 
 
2825
 
# Define flows
2826
 
odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2827
 
br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2828
 
# Define options
2829
 
generate="-generate"
2830
 
pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2831
 
 
2832
 
# Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2833
 
m4_foreach(
2834
 
[option],
2835
 
[[],
2836
 
["$generate"],
2837
 
["$pkt"]],
2838
 
[AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2839
 
  [2], [], [stderr])
2840
 
AT_CHECK([tail -2 stderr], [0], [dnl
2841
 
Cannot find the datapath
2842
 
ovs-appctl: ovs-vswitchd: server returned an error
2843
 
])])
2844
 
 
2845
 
# Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2846
 
m4_foreach(
2847
 
[option],
2848
 
[[],
2849
 
["$generate"],
2850
 
["$pkt"]],
2851
 
[AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2852
 
  [2], [], [stderr])
2853
 
AT_CHECK([tail -2 stderr], [0], [dnl
2854
 
Cannot find the datapath
2855
 
ovs-appctl: ovs-vswitchd: server returned an error
2856
 
])])
2857
 
 
2858
 
# Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2859
 
m4_foreach(
2860
 
[option],
2861
 
[[],
2862
 
["$generate"],
2863
 
["$pkt"]],
2864
 
[AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2865
 
  [2], [], [stderr])
2866
 
AT_CHECK([tail -2 stderr], [0], [dnl
2867
 
Cannot find the datapath
2868
 
ovs-appctl: ovs-vswitchd: server returned an error
2869
 
])])
2870
 
 
2871
 
# Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2872
 
m4_foreach(
2873
 
[option],
2874
 
[[],
2875
 
["$generate"],
2876
 
["$pkt"]],
2877
 
[AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2878
 
  [2], [], [stderr])
2879
 
AT_CHECK([tail -2 stderr], [0], [dnl
2880
 
Cannot find the datapath
2881
 
ovs-appctl: ovs-vswitchd: server returned an error
2882
 
])])
2883
 
 
2884
 
# Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2885
 
m4_foreach(
2886
 
[option],
2887
 
[[],
2888
 
["$generate"],
2889
 
["$pkt"]],
2890
 
[AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2891
 
  [2], [], [stderr])
2892
 
AT_CHECK([tail -2 stderr], [0], [dnl
2893
 
Unknown bridge name
2894
 
ovs-appctl: ovs-vswitchd: server returned an error
2895
 
])])
2896
 
 
2897
 
# Test incorrect command: ofproto/trace br_flow [-generate|packet]
2898
 
m4_foreach(
2899
 
[option],
2900
 
[[],
2901
 
["$generate"],
2902
 
["$pkt"]],
2903
 
[AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2904
 
  [2], [], [stderr])
2905
 
AT_CHECK([tail -2 stderr], [0], [dnl
2906
 
Must specify bridge name
2907
 
ovs-appctl: ovs-vswitchd: server returned an error
2908
 
])])
2909
 
 
2910
 
# Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2911
 
AT_CHECK([ovs-appctl ofproto/trace \
2912
 
  ovs-dummy "$odp_flow" garbage_option],
2913
 
  [2], [stdout],[stderr])
2914
 
AT_CHECK([tail -2 stderr], [0], [dnl
2915
 
Trailing garbage in packet data
2916
 
ovs-appctl: ovs-vswitchd: server returned an error
2917
 
])
2918
 
 
2919
 
# Test incorrect command: ofproto/trace with 4 arguments
2920
 
AT_CHECK([ovs-appctl ofproto/trace \
2921
 
  arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2922
 
AT_CHECK([tail -2 stderr], [0], [dnl
2923
 
"ofproto/trace" command takes at most 3 arguments
2924
 
ovs-appctl: ovs-vswitchd: server returned an error
2925
 
])
2926
 
 
2927
 
# Test incorrect command: ofproto/trace with 0 argument
2928
 
AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2929
 
AT_CHECK([tail -2 stderr], [0], [dnl
2930
 
"ofproto/trace" command requires at least 1 arguments
2931
 
ovs-appctl: ovs-vswitchd: server returned an error
2932
 
])
2933
 
 
2934
 
OVS_VSWITCHD_STOP
2935
 
AT_CLEANUP
2936
 
 
2937
 
AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2938
 
OVS_VSWITCHD_START
2939
 
ADD_OF_PORTS([br0], 1, 2, 3)
2940
 
 
2941
 
AT_DATA([flows.txt], [dnl
2942
 
in_port=1 actions=output:2
2943
 
in_port=2 actions=output:1
2944
 
])
2945
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2946
 
 
2947
 
AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2948
 
AT_CHECK([tail -1 stdout], [0], [dnl
2949
 
Datapath actions: push_vlan(vid=123,pcp=0),2
2950
 
])
2951
 
 
2952
 
OVS_VSWITCHD_STOP
2953
 
AT_CLEANUP
2954
 
 
2955
 
 
2956
 
m4_define([OFPROTO_TRACE],
2957
 
  [flow="$2"
2958
 
   AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2959
 
   actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2960
 
   expected="$4"
2961
 
   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2962
 
     [0], [stdout])
2963
 
   mv stdout expout
2964
 
   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2965
 
     [0], [expout])])
2966
 
 
2967
 
AT_SETUP([ofproto-dpif - MAC learning])
2968
 
OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2969
 
ADD_OF_PORTS([br0], 1, 2, 3)
2970
 
 
2971
 
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)'
2972
 
 
2973
 
# Trace an ARP packet arriving on p3, to create a MAC learning entry.
2974
 
OFPROTO_TRACE(
2975
 
  [ovs-dummy],
2976
 
  [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2977
 
  [-generate],
2978
 
  [1,2,100])
2979
 
 
2980
 
# Check for the MAC learning entry.
2981
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2982
 
 port  VLAN  MAC                Age
2983
 
    3     0  50:54:00:00:00:05    ?
2984
 
])
2985
 
 
2986
 
# Trace a packet arrival destined for the learned MAC.
2987
 
# (This will also learn a MAC.)
2988
 
OFPROTO_TRACE(
2989
 
  [ovs-dummy],
2990
 
  [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2991
 
  [-generate],
2992
 
  [3])
2993
 
 
2994
 
# Check for both MAC learning entries.
2995
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2996
 
 port  VLAN  MAC                Age
2997
 
    3     0  50:54:00:00:00:05    ?
2998
 
    1     0  50:54:00:00:00:06    ?
2999
 
])
3000
 
 
3001
 
# Trace a packet arrival that updates the first learned MAC entry.
3002
 
OFPROTO_TRACE(
3003
 
  [ovs-dummy],
3004
 
  [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
3005
 
  [-generate],
3006
 
  [1,3,100])
3007
 
 
3008
 
# Check that the MAC learning entry was updated.
3009
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3010
 
 port  VLAN  MAC                Age
3011
 
    1     0  50:54:00:00:00:06    ?
3012
 
    2     0  50:54:00:00:00:05    ?
3013
 
])
3014
 
 
3015
 
# Add another bridge.
3016
 
AT_CHECK(
3017
 
  [ovs-vsctl \
3018
 
     -- add-br br1 \
3019
 
     -- set bridge br1 datapath-type=dummy])
3020
 
ADD_OF_PORTS([br1], 4, 5)
3021
 
 
3022
 
# Trace some packet arrivals in br1 to create MAC learning entries there too.
3023
 
OFPROTO_TRACE(
3024
 
  [ovs-dummy],
3025
 
  [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
3026
 
  [-generate],
3027
 
  [5,101])
3028
 
OFPROTO_TRACE(
3029
 
  [ovs-dummy],
3030
 
  [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
3031
 
  [-generate],
3032
 
  [4,101])
3033
 
 
3034
 
# Check that the MAC learning entries were added.
3035
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3036
 
 port  VLAN  MAC                Age
3037
 
    4     0  50:54:00:00:00:06    ?
3038
 
    5     0  50:54:00:00:00:07    ?
3039
 
])
3040
 
 
3041
 
# Delete port p1 and see that its MAC learning entry disappeared, and
3042
 
# that the MAC learning entry for the same MAC was also deleted from br1.
3043
 
AT_CHECK([ovs-vsctl del-port p1])
3044
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3045
 
 port  VLAN  MAC                Age
3046
 
    2     0  50:54:00:00:00:05    ?
3047
 
])
3048
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3049
 
 port  VLAN  MAC                Age
3050
 
    5     0  50:54:00:00:00:07    ?
3051
 
])
3052
 
 
3053
 
OVS_VSWITCHD_STOP
3054
 
AT_CLEANUP
3055
 
 
3056
 
AT_SETUP([ofproto-dpif - MAC table overflow])
3057
 
OVS_VSWITCHD_START(
3058
 
  [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
3059
 
ADD_OF_PORTS([br0], 1, 2, 3)
3060
 
 
3061
 
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)'
3062
 
 
3063
 
AT_CHECK([ovs-appctl time/stop])
3064
 
 
3065
 
# Trace 10 ARP packets arriving on p3, to create MAC learning entries.
3066
 
for i in 0 1 2 3 4 5 6 7 8 9; do
3067
 
    OFPROTO_TRACE(
3068
 
      [ovs-dummy],
3069
 
      [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
3070
 
      [-generate],
3071
 
      [1,2,100])
3072
 
    ovs-appctl time/warp 1000
3073
 
done
3074
 
 
3075
 
# Check for the MAC learning entries.
3076
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3077
 
  [0], [dnl
3078
 
    3     0  50:54:00:00:00:00
3079
 
    3     0  50:54:00:00:00:01
3080
 
    3     0  50:54:00:00:00:02
3081
 
    3     0  50:54:00:00:00:03
3082
 
    3     0  50:54:00:00:00:04
3083
 
    3     0  50:54:00:00:00:05
3084
 
    3     0  50:54:00:00:00:06
3085
 
    3     0  50:54:00:00:00:07
3086
 
    3     0  50:54:00:00:00:08
3087
 
    3     0  50:54:00:00:00:09
3088
 
 port  VLAN  MAC                Age
3089
 
])
3090
 
 
3091
 
# Trace another ARP packet on another MAC.
3092
 
OFPROTO_TRACE(
3093
 
  [ovs-dummy],
3094
 
  [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
3095
 
  [-generate],
3096
 
  [1,2,100])
3097
 
 
3098
 
# Check that the new one chased the oldest one out of the table.
3099
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
3100
 
  [0], [dnl
3101
 
    3     0  50:54:00:00:00:01    ?
3102
 
    3     0  50:54:00:00:00:02    ?
3103
 
    3     0  50:54:00:00:00:03    ?
3104
 
    3     0  50:54:00:00:00:04    ?
3105
 
    3     0  50:54:00:00:00:05    ?
3106
 
    3     0  50:54:00:00:00:06    ?
3107
 
    3     0  50:54:00:00:00:07    ?
3108
 
    3     0  50:54:00:00:00:08    ?
3109
 
    3     0  50:54:00:00:00:09    ?
3110
 
    3     0  50:54:00:00:00:10    ?
3111
 
 port  VLAN  MAC                Age
3112
 
])
3113
 
OVS_VSWITCHD_STOP
3114
 
AT_CLEANUP
3115
 
 
3116
 
AT_SETUP([ofproto-dpif - MAC table overflow fairness])
3117
 
OVS_VSWITCHD_START(
3118
 
  [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
3119
 
ADD_OF_PORTS([br0], 1, 2, 3, 4, 5, 6)
3120
 
 
3121
 
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)'
3122
 
 
3123
 
AT_CHECK([ovs-appctl time/stop])
3124
 
 
3125
 
# Trace packets with 2 different source MACs arriving on each of the 5
3126
 
# ports, filling up the 10-entry learning table.
3127
 
for i in 0 1 2 3 4 5 6 7 8 9; do
3128
 
    p=`expr $i / 2 + 1`
3129
 
    ovs-appctl ofproto/trace ovs-dummy "in_port($p),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp" -generate
3130
 
    ovs-appctl time/warp 1000
3131
 
done
3132
 
 
3133
 
# Check for the MAC learning entries.
3134
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3135
 
  [0], [dnl
3136
 
    1     0  50:54:00:00:00:00
3137
 
    1     0  50:54:00:00:00:01
3138
 
    2     0  50:54:00:00:00:02
3139
 
    2     0  50:54:00:00:00:03
3140
 
    3     0  50:54:00:00:00:04
3141
 
    3     0  50:54:00:00:00:05
3142
 
    4     0  50:54:00:00:00:06
3143
 
    4     0  50:54:00:00:00:07
3144
 
    5     0  50:54:00:00:00:08
3145
 
    5     0  50:54:00:00:00:09
3146
 
 port  VLAN  MAC                Age
3147
 
])
3148
 
 
3149
 
# Now trace 16 new MACs on another port.
3150
 
for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
3151
 
    ovs-appctl ofproto/trace ovs-dummy "in_port(6),eth(src=50:54:00:00:0$i:ff,dst=ff:ff:ff:ff:ff:ff),$arp" -generate
3152
 
    ovs-appctl time/warp 1000
3153
 
done
3154
 
 
3155
 
# Check the results.
3156
 
#
3157
 
# Our eviction algorithm on overflow is that an arbitrary (but deterministic)
3158
 
# one of the ports with the most learned MACs loses the least recently used
3159
 
# one.  Thus, the new port will end up with 3 MACs, 3 of the old ports with 1
3160
 
# MAC each, and the other 2 of the old ports with 2 MACs each.
3161
 
#
3162
 
# (If someone changes lib/heap.c to do something different with equal-priority
3163
 
# nodes, then the output below could change, but it would still follow the
3164
 
# rules explained above.)
3165
 
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3166
 
  [0], [dnl
3167
 
    1     0  50:54:00:00:00:01
3168
 
    2     0  50:54:00:00:00:03
3169
 
    3     0  50:54:00:00:00:04
3170
 
    3     0  50:54:00:00:00:05
3171
 
    4     0  50:54:00:00:00:07
3172
 
    5     0  50:54:00:00:00:08
3173
 
    5     0  50:54:00:00:00:09
3174
 
    6     0  50:54:00:00:0d:ff
3175
 
    6     0  50:54:00:00:0e:ff
3176
 
    6     0  50:54:00:00:0f:ff
3177
 
 port  VLAN  MAC                Age
3178
 
])
3179
 
OVS_VSWITCHD_STOP
3180
 
AT_CLEANUP
3181
 
 
3182
 
# CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3183
 
#
3184
 
# Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3185
 
#
3186
 
# IP_VERSION_TYPE is used in AT_SETUP
3187
 
m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3188
 
  [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3189
 
  OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3190
 
 
3191
 
  ON_EXIT([kill `cat test-sflow.pid`])
3192
 
  AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3193
 
  AT_CAPTURE_FILE([sflow.log])
3194
 
  SFLOW_PORT=`parse_listening_port < test-sflow.log`
3195
 
  ovs-appctl time/stop
3196
 
 
3197
 
  ADD_OF_PORTS([br0], 1, 2)
3198
 
  ovs-vsctl \
3199
 
     set Interface br0 options:ifindex=1002 -- \
3200
 
     set Interface p1 options:ifindex=1004 -- \
3201
 
     set Interface p2 options:ifindex=1003 -- \
3202
 
     set Bridge br0 sflow=@sf -- \
3203
 
     --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3204
 
       header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3205
 
 
3206
 
  dnl open with ARP packets to seed the bridge-learning.  The output
3207
 
  dnl ifIndex numbers should be reported predictably after that.
3208
 
  dnl Since we set sampling=1 we should see all of these packets
3209
 
  dnl reported. Sorting the output by data-source and seqNo makes
3210
 
  dnl it deterministic. Ensuring that we send at least two packets
3211
 
  dnl into each port means we get to check the seq nos are
3212
 
  dnl incrementing correctly.
3213
 
  dnl because packets from different ports can be handled by separate
3214
 
  dnl threads, put some sleeps
3215
 
 
3216
 
  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)'
3217
 
  sleep 1
3218
 
  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)'
3219
 
  sleep 1
3220
 
  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)'
3221
 
  sleep 1
3222
 
  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)'
3223
 
  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)'
3224
 
 
3225
 
  dnl sleep long enough to get more than one counter sample
3226
 
  dnl from each datasource so we can check sequence numbers
3227
 
  for i in `seq 1 30`; do
3228
 
      ovs-appctl time/warp 100
3229
 
  done
3230
 
  OVS_VSWITCHD_STOP
3231
 
  ovs-appctl -t test-sflow exit
3232
 
 
3233
 
  AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3234
 
        /g']], [0], [dnl
3235
 
HEADER
3236
 
        dgramSeqNo=1
3237
 
        ds=127.0.0.1>2:1000
3238
 
        fsSeqNo=1
3239
 
        in_vlan=0
3240
 
        in_priority=0
3241
 
        out_vlan=0
3242
 
        out_priority=0
3243
 
        meanSkip=1
3244
 
        samplePool=1
3245
 
        dropEvents=0
3246
 
        in_ifindex=1004
3247
 
        in_format=0
3248
 
        out_ifindex=2
3249
 
        out_format=2
3250
 
        hdr_prot=1
3251
 
        pkt_len=64
3252
 
        stripped=4
3253
 
        hdr_len=60
3254
 
        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
3255
 
HEADER
3256
 
        dgramSeqNo=1
3257
 
        ds=127.0.0.1>2:1000
3258
 
        fsSeqNo=2
3259
 
        in_vlan=0
3260
 
        in_priority=0
3261
 
        out_vlan=0
3262
 
        out_priority=0
3263
 
        meanSkip=1
3264
 
        samplePool=2
3265
 
        dropEvents=0
3266
 
        in_ifindex=1003
3267
 
        in_format=0
3268
 
        out_ifindex=2
3269
 
        out_format=2
3270
 
        hdr_prot=1
3271
 
        pkt_len=64
3272
 
        stripped=4
3273
 
        hdr_len=60
3274
 
        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
3275
 
HEADER
3276
 
        dgramSeqNo=1
3277
 
        ds=127.0.0.1>2:1000
3278
 
        fsSeqNo=3
3279
 
        in_vlan=0
3280
 
        in_priority=0
3281
 
        out_vlan=0
3282
 
        out_priority=0
3283
 
        meanSkip=1
3284
 
        samplePool=3
3285
 
        dropEvents=0
3286
 
        in_ifindex=1004
3287
 
        in_format=0
3288
 
        out_ifindex=1003
3289
 
        out_format=0
3290
 
        hdr_prot=1
3291
 
        pkt_len=64
3292
 
        stripped=4
3293
 
        hdr_len=60
3294
 
        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
3295
 
HEADER
3296
 
        dgramSeqNo=1
3297
 
        ds=127.0.0.1>2:1000
3298
 
        fsSeqNo=4
3299
 
        in_vlan=0
3300
 
        in_priority=0
3301
 
        out_vlan=0
3302
 
        out_priority=0
3303
 
        meanSkip=1
3304
 
        samplePool=4
3305
 
        dropEvents=0
3306
 
        in_ifindex=1003
3307
 
        in_format=0
3308
 
        out_ifindex=1004
3309
 
        out_format=0
3310
 
        hdr_prot=1
3311
 
        pkt_len=64
3312
 
        stripped=4
3313
 
        hdr_len=60
3314
 
        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
3315
 
HEADER
3316
 
        dgramSeqNo=1
3317
 
        ds=127.0.0.1>2:1000
3318
 
        fsSeqNo=5
3319
 
        in_vlan=0
3320
 
        in_priority=0
3321
 
        out_vlan=0
3322
 
        out_priority=0
3323
 
        meanSkip=1
3324
 
        samplePool=5
3325
 
        dropEvents=0
3326
 
        in_ifindex=1003
3327
 
        in_format=0
3328
 
        out_ifindex=1004
3329
 
        out_format=0
3330
 
        hdr_prot=1
3331
 
        pkt_len=64
3332
 
        stripped=4
3333
 
        hdr_len=60
3334
 
        hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-67-00-00-00-00-00-0A-80-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-01-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-02-00-00-00-00-00-00
3335
 
])
3336
 
 
3337
 
  AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3338
 
        /g']], [0], [dnl
3339
 
IFCOUNTERS
3340
 
        dgramSeqNo=2
3341
 
        ds=127.0.0.1>0:1002
3342
 
        csSeqNo=1
3343
 
        ifindex=1002
3344
 
        type=6
3345
 
        ifspeed=100000000
3346
 
        direction=0
3347
 
        status=0
3348
 
        in_octets=0
3349
 
        in_unicasts=0
3350
 
        in_multicasts=0
3351
 
        in_broadcasts=4294967295
3352
 
        in_discards=0
3353
 
        in_errors=0
3354
 
        in_unknownprotos=4294967295
3355
 
        out_octets=120
3356
 
        out_unicasts=2
3357
 
        out_multicasts=4294967295
3358
 
        out_broadcasts=4294967295
3359
 
        out_discards=0
3360
 
        out_errors=0
3361
 
        promiscuous=0
3362
 
IFCOUNTERS
3363
 
        dgramSeqNo=2
3364
 
        ds=127.0.0.1>0:1003
3365
 
        csSeqNo=1
3366
 
        ifindex=1003
3367
 
        type=6
3368
 
        ifspeed=100000000
3369
 
        direction=0
3370
 
        status=0
3371
 
        in_octets=138
3372
 
        in_unicasts=3
3373
 
        in_multicasts=0
3374
 
        in_broadcasts=4294967295
3375
 
        in_discards=0
3376
 
        in_errors=0
3377
 
        in_unknownprotos=4294967295
3378
 
        out_octets=120
3379
 
        out_unicasts=2
3380
 
        out_multicasts=4294967295
3381
 
        out_broadcasts=4294967295
3382
 
        out_discards=0
3383
 
        out_errors=0
3384
 
        promiscuous=0
3385
 
IFCOUNTERS
3386
 
        dgramSeqNo=2
3387
 
        ds=127.0.0.1>0:1004
3388
 
        csSeqNo=1
3389
 
        ifindex=1004
3390
 
        type=6
3391
 
        ifspeed=100000000
3392
 
        direction=0
3393
 
        status=0
3394
 
        in_octets=84
3395
 
        in_unicasts=2
3396
 
        in_multicasts=0
3397
 
        in_broadcasts=4294967295
3398
 
        in_discards=0
3399
 
        in_errors=0
3400
 
        in_unknownprotos=4294967295
3401
 
        out_octets=180
3402
 
        out_unicasts=3
3403
 
        out_multicasts=4294967295
3404
 
        out_broadcasts=4294967295
3405
 
        out_discards=0
3406
 
        out_errors=0
3407
 
        promiscuous=0
3408
 
IFCOUNTERS
3409
 
        dgramSeqNo=3
3410
 
        ds=127.0.0.1>0:1002
3411
 
        csSeqNo=2
3412
 
        ifindex=1002
3413
 
        type=6
3414
 
        ifspeed=100000000
3415
 
        direction=0
3416
 
        status=0
3417
 
        in_octets=0
3418
 
        in_unicasts=0
3419
 
        in_multicasts=0
3420
 
        in_broadcasts=4294967295
3421
 
        in_discards=0
3422
 
        in_errors=0
3423
 
        in_unknownprotos=4294967295
3424
 
        out_octets=120
3425
 
        out_unicasts=2
3426
 
        out_multicasts=4294967295
3427
 
        out_broadcasts=4294967295
3428
 
        out_discards=0
3429
 
        out_errors=0
3430
 
        promiscuous=0
3431
 
IFCOUNTERS
3432
 
        dgramSeqNo=3
3433
 
        ds=127.0.0.1>0:1003
3434
 
        csSeqNo=2
3435
 
        ifindex=1003
3436
 
        type=6
3437
 
        ifspeed=100000000
3438
 
        direction=0
3439
 
        status=0
3440
 
        in_octets=138
3441
 
        in_unicasts=3
3442
 
        in_multicasts=0
3443
 
        in_broadcasts=4294967295
3444
 
        in_discards=0
3445
 
        in_errors=0
3446
 
        in_unknownprotos=4294967295
3447
 
        out_octets=120
3448
 
        out_unicasts=2
3449
 
        out_multicasts=4294967295
3450
 
        out_broadcasts=4294967295
3451
 
        out_discards=0
3452
 
        out_errors=0
3453
 
        promiscuous=0
3454
 
IFCOUNTERS
3455
 
        dgramSeqNo=3
3456
 
        ds=127.0.0.1>0:1004
3457
 
        csSeqNo=2
3458
 
        ifindex=1004
3459
 
        type=6
3460
 
        ifspeed=100000000
3461
 
        direction=0
3462
 
        status=0
3463
 
        in_octets=84
3464
 
        in_unicasts=2
3465
 
        in_multicasts=0
3466
 
        in_broadcasts=4294967295
3467
 
        in_discards=0
3468
 
        in_errors=0
3469
 
        in_unknownprotos=4294967295
3470
 
        out_octets=180
3471
 
        out_unicasts=3
3472
 
        out_multicasts=4294967295
3473
 
        out_broadcasts=4294967295
3474
 
        out_discards=0
3475
 
        out_errors=0
3476
 
        promiscuous=0
3477
 
])
3478
 
  AT_CLEANUP])
3479
 
 
3480
 
CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3481
 
CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3482
 
 
3483
 
# CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3484
 
#
3485
 
# Test that basic NetFlow reports flow statistics correctly:
3486
 
# The initial packet of a flow are correctly accounted.
3487
 
# Later packets within a flow are correctly accounted.
3488
 
# Flow actions changing (in this case, due to MAC learning)
3489
 
# cause a record to be sent.
3490
 
#
3491
 
# IP_VERSION_TYPE is used in AT_SETUP
3492
 
m4_define([CHECK_NETFLOW_EXPIRATION],
3493
 
  [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3494
 
  OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3495
 
  ADD_OF_PORTS([br0], 1, 2)
3496
 
 
3497
 
  ovs-appctl time/stop
3498
 
  ON_EXIT([kill `cat test-netflow.pid`])
3499
 
  AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3500
 
  AT_CAPTURE_FILE([netflow.log])
3501
 
  NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3502
 
 
3503
 
  ovs-vsctl \
3504
 
     set Bridge br0 netflow=@nf -- \
3505
 
     --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3506
 
       engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3507
 
 
3508
 
  for delay in 1000 30000; do
3509
 
      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)'
3510
 
      sleep 1  # ensure the order in which these two packets are processed
3511
 
      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)'
3512
 
 
3513
 
      ovs-appctl time/warp $delay
3514
 
  done
3515
 
 
3516
 
  ovs-appctl time/warp 6000
3517
 
  sleep 1
3518
 
  OVS_VSWITCHD_STOP
3519
 
  ovs-appctl -t test-netflow exit
3520
 
 
3521
 
  AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
3522
 
 
3523
 
  AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
3524
 
 
3525
 
  combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3526
 
  separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3527
 
  AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3528
 
 
3529
 
  AT_CLEANUP])
3530
 
 
3531
 
CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3532
 
CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3533
 
 
3534
 
# CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3535
 
#
3536
 
# Test that basic NetFlow reports active expirations correctly.
3537
 
#
3538
 
# IP_VERSION_TYPE is used in AT_SETUP
3539
 
m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3540
 
  [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3541
 
 
3542
 
  OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3543
 
  ADD_OF_PORTS([br0], 1, 2)
3544
 
 
3545
 
  ON_EXIT([kill `cat test-netflow.pid`])
3546
 
  AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3547
 
  AT_CAPTURE_FILE([netflow.log])
3548
 
  NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3549
 
 
3550
 
  ovs-vsctl \
3551
 
     set Bridge br0 netflow=@nf -- \
3552
 
     --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3553
 
       engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3554
 
 
3555
 
  AT_CHECK([ovs-appctl time/stop])
3556
 
  n=1
3557
 
  while test $n -le 60; do
3558
 
      n=`expr $n + 1`
3559
 
 
3560
 
      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=6,tos=0,ttl=64,frag=no),tcp(src=1234,dst=80)'
3561
 
      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=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=1234)'
3562
 
 
3563
 
      ovs-appctl time/warp 1000
3564
 
  done
3565
 
 
3566
 
  ovs-appctl time/warp 10000
3567
 
 
3568
 
  sleep 1
3569
 
  OVS_VSWITCHD_STOP
3570
 
  ovs-appctl -t test-netflow exit
3571
 
 
3572
 
  # Count the number of reported packets:
3573
 
  # - From source to destination before MAC learning kicks in (just one).
3574
 
  # - From source to destination after that.
3575
 
  # - From destination to source.
3576
 
  n_learn=0
3577
 
  n_in=0
3578
 
  n_out=0
3579
 
  n_other=0
3580
 
  n_recs=0
3581
 
  none=0
3582
 
  while read line; do
3583
 
      pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3584
 
      case $pkts in
3585
 
           [[0-9]]*) ;;
3586
 
       *) continue ;;
3587
 
      esac
3588
 
 
3589
 
      case $line in
3590
 
          "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3591
 
              counter=n_learn
3592
 
          ;;
3593
 
      "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3594
 
          counter=n_in
3595
 
          ;;
3596
 
      "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3597
 
          counter=n_out
3598
 
          ;;
3599
 
      *)
3600
 
          counter=n_other
3601
 
          ;;
3602
 
      esac
3603
 
      eval $counter=\`expr \$$counter + \$pkts\`
3604
 
      n_recs=`expr $n_recs + 1`
3605
 
  done < netflow.log
3606
 
 
3607
 
  # There should be exactly 1 MAC learning packet,
3608
 
  # exactly 59 other packets in that direction,
3609
 
  # and exactly 60 packets in the other direction.
3610
 
  AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3611
 
])
3612
 
 
3613
 
  AT_CLEANUP])
3614
 
 
3615
 
CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3616
 
CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3617
 
 
3618
 
AT_SETUP([ofproto-dpif - flow stats])
3619
 
OVS_VSWITCHD_START
3620
 
AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3621
 
AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3622
 
 
3623
 
ovs-appctl time/stop
3624
 
 
3625
 
for i in `seq 1 10`; do
3626
 
    ovs-appctl netdev-dummy/receive br0 'in_port(0),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=6,tos=0,ttl=64,frag=no)'
3627
 
done
3628
 
 
3629
 
ovs-appctl time/warp 1000
3630
 
sleep 1  # wait for revalidator to update stats
3631
 
 
3632
 
AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3633
 
AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3634
 
 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3635
 
 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3636
 
])
3637
 
OVS_VSWITCHD_STOP
3638
 
AT_CLEANUP
3639
 
 
3640
 
AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3641
 
OVS_VSWITCHD_START
3642
 
AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3643
 
AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3644
 
 
3645
 
ovs-appctl time/stop
3646
 
 
3647
 
for i in `seq 1 10`; do
3648
 
    ovs-appctl netdev-dummy/receive br0 'in_port(0),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=6,tos=0,ttl=64,frag=no)'
3649
 
done
3650
 
 
3651
 
ovs-appctl time/warp 100
3652
 
AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3653
 
ovs-appctl time/warp 1000
3654
 
 
3655
 
AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3656
 
AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3657
 
 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3658
 
 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3659
 
])
3660
 
OVS_VSWITCHD_STOP
3661
 
AT_CLEANUP
3662
 
 
3663
 
AT_SETUP([idle_age and hard_age increase over time])
3664
 
OVS_VSWITCHD_START
3665
 
 
3666
 
# get_ages DURATION HARD IDLE
3667
 
#
3668
 
# Fetch the flow duration, hard age, and idle age into the variables
3669
 
# whose names are given as arguments.  Rounds DURATION down to the
3670
 
# nearest integer.  If hard_age doesn't appear in the output, sets
3671
 
# HARD to "none".  If idle_age doesn't appear in the output, sets IDLE
3672
 
# to 0.
3673
 
get_ages () {
3674
 
    AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3675
 
 
3676
 
    duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3677
 
    AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3678
 
    AS_VAR_COPY([$1], [duration])
3679
 
 
3680
 
    hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3681
 
    if test X"$hard" = X; then
3682
 
        hard=none
3683
 
    else
3684
 
        AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3685
 
    fi
3686
 
    AS_VAR_COPY([$2], [hard])
3687
 
 
3688
 
    idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3689
 
    if test X"$idle" = X; then
3690
 
        idle=0
3691
 
    else
3692
 
        AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3693
 
    fi
3694
 
    AS_VAR_COPY([$3], [idle])
3695
 
}
3696
 
 
3697
 
# Add a flow and get its initial hard and idle age.
3698
 
AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3699
 
get_ages duration1 hard1 idle1
3700
 
 
3701
 
ovs-appctl time/stop
3702
 
# Warp time forward by 10 seconds, then modify the flow's actions.
3703
 
ovs-appctl time/warp 10000
3704
 
get_ages duration2 hard2 idle2
3705
 
AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3706
 
 
3707
 
# Warp time forward by 10 seconds.
3708
 
ovs-appctl time/warp 10000
3709
 
get_ages duration3 hard3 idle3
3710
 
 
3711
 
# Warp time forward 10 more seconds, then pass some packets through the flow,
3712
 
# then warp forward a few more times because idle times are only updated
3713
 
# occasionally.
3714
 
ovs-appctl time/warp 10000
3715
 
ovs-appctl netdev-dummy/receive br0 'in_port(0),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=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=1234)'
3716
 
ovs-appctl time/warp 1000
3717
 
ovs-appctl time/warp 1000
3718
 
ovs-appctl time/warp 1000
3719
 
sleep 1
3720
 
get_ages duration4 hard4 idle4
3721
 
 
3722
 
printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3723
 
printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3724
 
printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3725
 
 
3726
 
# Duration should increase steadily over time.
3727
 
AT_CHECK([test $duration1 -lt $duration2])
3728
 
AT_CHECK([test $duration2 -lt $duration3])
3729
 
AT_CHECK([test $duration3 -lt $duration4])
3730
 
 
3731
 
# Hard age should be "none" initially because it's the same as flow_duration,
3732
 
# then it should increase.
3733
 
AT_CHECK([test $hard1 = none])
3734
 
AT_CHECK([test $hard2 = none])
3735
 
AT_CHECK([test $hard3 != none])
3736
 
AT_CHECK([test $hard4 != none])
3737
 
AT_CHECK([test $hard3 -lt $hard4])
3738
 
 
3739
 
# Idle age should increase from 1 to 2 to 3, then decrease.
3740
 
AT_CHECK([test $idle1 -lt $idle2])
3741
 
AT_CHECK([test $idle2 -lt $idle3])
3742
 
AT_CHECK([test $idle3 -gt $idle4])
3743
 
 
3744
 
# Check some invariant relationships.
3745
 
AT_CHECK([test $duration1 = $idle1])
3746
 
AT_CHECK([test $duration2 = $idle2])
3747
 
AT_CHECK([test $duration3 = $idle3])
3748
 
AT_CHECK([test $idle3 -gt $hard3])
3749
 
AT_CHECK([test $idle4 -lt $hard4])
3750
 
AT_CHECK([test $hard4 -lt $duration4])
3751
 
 
3752
 
OVS_VSWITCHD_STOP
3753
 
AT_CLEANUP
3754
 
 
3755
 
AT_SETUP([ofproto-dpif - fin_timeout])
3756
 
OVS_VSWITCHD_START
3757
 
AT_DATA([flows.txt], [dnl
3758
 
in_port=1 actions=output:2
3759
 
in_port=2 actions=mod_vlan_vid:17,output:1
3760
 
])
3761
 
ovs-appctl time/stop
3762
 
AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3763
 
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3764
 
[NXST_FLOW reply:
3765
 
 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3766
 
])
3767
 
 
3768
 
# Check that a TCP SYN packet does not change the timeout.  (Because
3769
 
# flow stats updates are mainly what implements the fin_timeout
3770
 
# feature, we warp forward a couple of times to ensure that flow stats
3771
 
# run before re-checking the flow table.)
3772
 
AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3773
 
AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3774
 
warped
3775
 
])
3776
 
sleep 1
3777
 
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3778
 
[NXST_FLOW reply:
3779
 
 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3780
 
])
3781
 
# Check that a TCP FIN packet does change the timeout.
3782
 
AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3783
 
AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3784
 
warped
3785
 
])
3786
 
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3787
 
[NXST_FLOW reply:
3788
 
 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3789
 
])
3790
 
OVS_VSWITCHD_STOP
3791
 
AT_CLEANUP
3792
 
 
3793
 
AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3794
 
OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3795
 
ADD_OF_PORTS([br0], [1], [2])
3796
 
ADD_OF_PORTS([br1], [3])
3797
 
 
3798
 
AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3799
 
dummy@br0
3800
 
dummy@br1
3801
 
])
3802
 
OVS_VSWITCHD_STOP
3803
 
AT_CLEANUP
3804
 
 
3805
 
AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3806
 
OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3807
 
ADD_OF_PORTS([br0], [1], [2])
3808
 
ADD_OF_PORTS([br1], [3])
3809
 
 
3810
 
AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3811
 
dummy@ovs-dummy: hit:0 missed:0
3812
 
        br0:
3813
 
                br0 65534/100: (dummy)
3814
 
                p1 1/1: (dummy)
3815
 
                p2 2/2: (dummy)
3816
 
        br1:
3817
 
                br1 65534/101: (dummy)
3818
 
                p3 3/3: (dummy)
3819
 
])
3820
 
OVS_VSWITCHD_STOP
3821
 
AT_CLEANUP
3822
 
 
3823
 
AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3824
 
# bump max-idle to avoid the flows being reclaimed behind us
3825
 
OVS_VSWITCHD_START([add-br br1 -- \
3826
 
                    set bridge br1 datapath-type=dummy fail-mode=secure -- \
3827
 
                    set Open_vSwitch . other_config:max-idle=10000])
3828
 
ADD_OF_PORTS([br0], [1], [2])
3829
 
ADD_OF_PORTS([br1], [3])
3830
 
 
3831
 
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)'])
3832
 
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)'])
3833
 
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)'])
3834
 
sleep 1  # wait for upcall handlers
3835
 
AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3836
 
skb_priority(0),recirc_id(0),in_port(1),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), packets:0, bytes:0, used:never, actions:drop
3837
 
skb_priority(0),recirc_id(0),in_port(2),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), packets:0, bytes:0, used:never, actions:drop
3838
 
])
3839
 
 
3840
 
AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3841
 
skb_priority(0),recirc_id(0),in_port(3),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), packets:0, bytes:0, used:never, actions:drop
3842
 
])
3843
 
 
3844
 
AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3845
 
skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p1),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:never, actions:drop
3846
 
skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p2),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:never, actions:drop
3847
 
])
3848
 
 
3849
 
AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3850
 
skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p3),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:never, actions:drop
3851
 
])
3852
 
 
3853
 
OVS_VSWITCHD_STOP
3854
 
AT_CLEANUP
3855
 
 
3856
 
AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
3857
 
OVS_VSWITCHD_START([dnl
3858
 
   add-port br0 p1 -- set Interface p1 type=dummy
3859
 
])
3860
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3861
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
3862
 
 
3863
 
AT_CAPTURE_FILE([ofctl_monitor.log])
3864
 
AT_DATA([flows.txt], [dnl
3865
 
dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3866
 
dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3867
 
])
3868
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3869
 
 
3870
 
dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3871
 
dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3872
 
dnl
3873
 
dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3874
 
dnl 60:66:66:66:66:00 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 74: MPLS (label 20, exp 0, ttl 32)
3875
 
dnl         (label 20, exp 0, [S], ttl 32)
3876
 
dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3877
 
dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3878
 
 
3879
 
for dl_src in 00 01; do
3880
 
    AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007 6066666666$dl_src 8847 00014020 00014120 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"])
3881
 
done
3882
 
sleep 1  # wait for the datapath flow installed
3883
 
for dl_src in 00 01; do
3884
 
    AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3885
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), actions:userspace(pid=0,slow_path(controller))
3886
 
])
3887
 
done
3888
 
 
3889
 
OVS_VSWITCHD_STOP
3890
 
AT_CLEANUP
3891
 
 
3892
 
 
3893
 
AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
3894
 
OVS_VSWITCHD_START([dnl
3895
 
   add-port br0 p1 -- set Interface p1 type=dummy
3896
 
])
3897
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3898
 
ON_EXIT([kill `cat ovs-ofctl.pid`])
3899
 
 
3900
 
AT_CAPTURE_FILE([ofctl_monitor.log])
3901
 
AT_DATA([flows.txt], [dnl
3902
 
dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3903
 
dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3904
 
])
3905
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3906
 
 
3907
 
dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3908
 
dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3909
 
dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3910
 
dnl
3911
 
dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3912
 
dnl 60:66:66:66:66:01 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 74: MPLS (label 20, exp 0, ttl 32)
3913
 
dnl         (label 20, exp 0, ttl 32)
3914
 
dnl         (label 20, exp 0, ttl 32)
3915
 
dnl         (label 20, exp 0, [S], ttl 32)
3916
 
dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3917
 
dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3918
 
 
3919
 
for dl_src in 00 01; do
3920
 
    AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007 6066666666$dl_src 8847 00014020 00014120 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"])
3921
 
done
3922
 
sleep 1  # wait for the datapath flow installed
3923
 
for dl_src in 00 01; do
3924
 
    AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3925
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), actions:userspace(pid=0,slow_path(controller))
3926
 
])
3927
 
done
3928
 
 
3929
 
OVS_VSWITCHD_STOP
3930
 
AT_CLEANUP
3931
 
 
3932
 
AT_SETUP([ofproto-dpif - patch ports])
3933
 
OVS_VSWITCHD_START([add-br br1 \
3934
 
 
3935
 
ADD_OF_PORTS([br0], [2])
3936
 
ADD_OF_PORTS([br1], [3])
3937
 
 
3938
 
AT_CHECK([ovs-appctl time/stop])
3939
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3940
 
 
3941
 
AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3942
 
AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3943
 
 
3944
 
for i in $(seq 1 10); do
3945
 
    ovs-appctl netdev-dummy/receive br0 '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)'
3946
 
    if [[ $i -eq 1 ]]; then
3947
 
        sleep 1
3948
 
    fi
3949
 
done
3950
 
 
3951
 
for i in $(seq 1 5); do
3952
 
    ovs-appctl netdev-dummy/receive br1 '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)'
3953
 
    if [[ $i -eq 1 ]]; then
3954
 
        sleep 1
3955
 
    fi
3956
 
done
3957
 
 
3958
 
AT_CHECK([ovs-appctl time/warp 500], [0],
3959
 
[warped
3960
 
])
3961
 
sleep 1  # wait for log writer
3962
 
 
3963
 
AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3964
 
dummy@ovs-dummy: hit:13 missed:2
3965
 
        br0:
3966
 
                br0 65534/100: (dummy)
3967
 
                p2 2/2: (dummy)
3968
 
                pbr0 1/none: (patch: peer=pbr1)
3969
 
        br1:
3970
 
                br1 65534/101: (dummy)
3971
 
                p3 3/3: (dummy)
3972
 
                pbr1 1/none: (patch: peer=pbr0)
3973
 
])
3974
 
 
3975
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
3976
 
skb_priority(0),skb_mark(0/0),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), actions:101,3,2
3977
 
skb_priority(0),skb_mark(0/0),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), actions:100,2,3
3978
 
])
3979
 
 
3980
 
AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | FILTER_FLOW_DUMP], [0], [dnl
3981
 
skb_priority(0),skb_mark(0/0),recirc_id(0),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
3982
 
])
3983
 
AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | FILTER_FLOW_DUMP], [0], [dnl
3984
 
skb_priority(0),skb_mark(0/0),recirc_id(0),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
3985
 
])
3986
 
 
3987
 
AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3988
 
OFPST_PORT reply (xid=0x4): 1 ports
3989
 
  port  1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3990
 
           tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3991
 
])
3992
 
 
3993
 
AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3994
 
OFPST_PORT reply (xid=0x4): 1 ports
3995
 
  port  1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3996
 
           tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3997
 
])
3998
 
 
3999
 
OVS_VSWITCHD_STOP
4000
 
AT_CLEANUP
4001
 
 
4002
 
AT_SETUP([ofproto-dpif - port duration])
4003
 
OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
4004
 
ADD_OF_PORTS([br0], 1, 2)
4005
 
 
4006
 
ovs-appctl time/stop
4007
 
ovs-appctl time/warp 10000
4008
 
 
4009
 
AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
4010
 
AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
4011
 
[dnl
4012
 
           duration=?s
4013
 
           duration=?s
4014
 
           duration=?s
4015
 
])
4016
 
OVS_VSWITCHD_STOP
4017
 
AT_CLEANUP
4018
 
 
4019
 
dnl ----------------------------------------------------------------------
4020
 
AT_BANNER([ofproto-dpif -- megaflows])
4021
 
 
4022
 
AT_SETUP([ofproto-dpif megaflow - port classification])
4023
 
OVS_VSWITCHD_START
4024
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4025
 
ADD_OF_PORTS([br0], [1], [2])
4026
 
AT_DATA([flows.txt], [dnl
4027
 
table=0 in_port=1 actions=output(2)
4028
 
])
4029
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4030
 
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)'])
4031
 
sleep 1
4032
 
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)'])
4033
 
sleep 1
4034
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4035
 
skb_priority(0),skb_mark(0/0),in_port(1),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), actions: <del>
4036
 
])
4037
 
OVS_VSWITCHD_STOP
4038
 
AT_CLEANUP
4039
 
 
4040
 
AT_SETUP([ofproto-dpif megaflow - L2 classification])
4041
 
OVS_VSWITCHD_START
4042
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4043
 
ADD_OF_PORTS([br0], [1], [2])
4044
 
AT_DATA([flows.txt], [dnl
4045
 
table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
4046
 
])
4047
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4048
 
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)'])
4049
 
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)'])
4050
 
sleep 1
4051
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4052
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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), actions: <del>
4053
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4054
 
])
4055
 
OVS_VSWITCHD_STOP
4056
 
AT_CLEANUP
4057
 
 
4058
 
AT_SETUP([ofproto-dpif megaflow - L3 classification])
4059
 
OVS_VSWITCHD_START
4060
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4061
 
ADD_OF_PORTS([br0], [1], [2])
4062
 
AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
4063
 
AT_DATA([flows.txt], [dnl
4064
 
table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
4065
 
])
4066
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4067
 
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)'])
4068
 
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)'])
4069
 
sleep 1
4070
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4071
 
skb_priority(0),skb_mark(0/0),in_port(1),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/255.255.255.252,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), actions: <del>
4072
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4073
 
])
4074
 
OVS_VSWITCHD_STOP
4075
 
AT_CLEANUP
4076
 
 
4077
 
AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
4078
 
OVS_VSWITCHD_START
4079
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4080
 
ADD_OF_PORTS([br0], [1], [2])
4081
 
AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=ipv6_dst,ipv6_src], [0], [ignore], [])
4082
 
AT_DATA([flows.txt], [dnl
4083
 
table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
4084
 
])
4085
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4086
 
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'])
4087
 
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(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1,dst=2001:db8:3c4d:1:2:3:4:1,label=0,proto=99,tclass=0x70,hlimit=64,frag=no)'])
4088
 
sleep 1
4089
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4090
 
skb_priority(0),skb_mark(0/0),in_port(1),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(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,dst=fe80::2/::,label=0/0,proto=10/0,tclass=0x70/0,hlimit=128/0,frag=no/0xff), actions: <del>
4091
 
skb_priority(0),skb_mark(0/0),in_port(1),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(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,dst=2001:db8:3c4d:1:2:3:4:1/::,label=0/0,proto=99/0,tclass=0x70/0,hlimit=64/0,frag=no/0xff), actions: <del>
4092
 
])
4093
 
OVS_VSWITCHD_STOP
4094
 
AT_CLEANUP
4095
 
 
4096
 
AT_SETUP([ofproto-dpif megaflow - L4 classification])
4097
 
OVS_VSWITCHD_START
4098
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4099
 
ADD_OF_PORTS([br0], [1], [2])
4100
 
AT_DATA([flows.txt], [dnl
4101
 
table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
4102
 
])
4103
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4104
 
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)'])
4105
 
sleep 1
4106
 
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)'])
4107
 
sleep 1
4108
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4109
 
skb_priority(0),skb_mark(0/0),in_port(1),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/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0xff,code=0/0), actions: <del>
4110
 
])
4111
 
OVS_VSWITCHD_STOP
4112
 
AT_CLEANUP
4113
 
 
4114
 
AT_SETUP([ofproto-dpif megaflow - normal])
4115
 
OVS_VSWITCHD_START
4116
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4117
 
ADD_OF_PORTS([br0], [1], [2])
4118
 
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4119
 
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)'])
4120
 
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)'])
4121
 
sleep 1
4122
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4123
 
skb_priority(0),skb_mark(0/0),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/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), actions: <del>
4124
 
skb_priority(0),skb_mark(0/0),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/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4125
 
])
4126
 
OVS_VSWITCHD_STOP
4127
 
AT_CLEANUP
4128
 
 
4129
 
AT_SETUP([ofproto-dpif megaflow - mpls])
4130
 
OVS_VSWITCHD_START
4131
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4132
 
ADD_OF_PORTS([br0], [1], [2])
4133
 
AT_DATA([flows.txt], [dnl
4134
 
table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
4135
 
table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
4136
 
])
4137
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4138
 
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)'])
4139
 
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)'])
4140
 
sleep 1
4141
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4142
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), actions: <del>
4143
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), actions: <del>
4144
 
])
4145
 
OVS_VSWITCHD_STOP
4146
 
AT_CLEANUP
4147
 
 
4148
 
# CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
4149
 
#
4150
 
# IP_VERSION_TYPE is used in AT_SETUP
4151
 
m4_define([CHECK_MEGAFLOW_NETFLOW],
4152
 
  [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
4153
 
  OVS_VSWITCHD_START
4154
 
  AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4155
 
  ADD_OF_PORTS([br0], [1], [2])
4156
 
 
4157
 
  dnl NetFlow configuration disables wildcarding relevant fields
4158
 
  ON_EXIT([kill `cat test-netflow.pid`])
4159
 
  AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4160
 
  AT_CAPTURE_FILE([netflow.log])
4161
 
  NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4162
 
  ovs-vsctl \
4163
 
     set Bridge br0 netflow=@nf -- \
4164
 
     --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4165
 
       engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4166
 
 
4167
 
  AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4168
 
  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)'])
4169
 
  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)'])
4170
 
  sleep 1
4171
 
  AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4172
 
skb_priority(0),skb_mark(0/0),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/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), actions: <del>
4173
 
skb_priority(0),skb_mark(0/0),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/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), actions: <del>
4174
 
])
4175
 
  OVS_VSWITCHD_STOP
4176
 
  AT_CLEANUP])
4177
 
 
4178
 
CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4179
 
CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4180
 
 
4181
 
AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4182
 
OVS_VSWITCHD_START(
4183
 
  [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4184
 
   add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4185
 
   set interface p2 type=dummy ofport_request=2 -- \
4186
 
   set interface p3 type=dummy ofport_request=3])
4187
 
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4188
 
])
4189
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4190
 
 
4191
 
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4192
 
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)'])
4193
 
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)'])
4194
 
sleep 1
4195
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4196
 
skb_priority(0),skb_mark(0/0),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/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), actions: <del>
4197
 
skb_priority(0),skb_mark(0/0),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/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4198
 
])
4199
 
OVS_VSWITCHD_STOP
4200
 
AT_CLEANUP
4201
 
 
4202
 
AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4203
 
OVS_VSWITCHD_START(
4204
 
  [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4205
 
   add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4206
 
   set interface p2 type=dummy ofport_request=2 -- \
4207
 
   set interface p3 type=dummy ofport_request=3])
4208
 
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4209
 
])
4210
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4211
 
 
4212
 
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4213
 
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)'])
4214
 
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)'])
4215
 
sleep 1
4216
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4217
 
skb_priority(0),skb_mark(0/0),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/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), actions: <del>
4218
 
skb_priority(0),skb_mark(0/0),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/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4219
 
])
4220
 
OVS_VSWITCHD_STOP
4221
 
AT_CLEANUP
4222
 
 
4223
 
AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4224
 
# Create bond0 on br0 with interfaces p0 and p1
4225
 
#    and bond1 on br1 with interfaces p2 and p3
4226
 
# with p0 patched to p2 and p1 patched to p3.
4227
 
OVS_VSWITCHD_START(
4228
 
  [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4229
 
                            other-config:lacp-time=fast \
4230
 
                            other-config:bond-rebalance-interval=0 -- \
4231
 
   set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4232
 
   set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4233
 
   add-br br1 -- \
4234
 
   set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4235
 
   set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4236
 
                  fail-mode=secure -- \
4237
 
   add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4238
 
                            other-config:lacp-time=fast \
4239
 
                            other-config:bond-rebalance-interval=0 -- \
4240
 
   set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4241
 
   set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4242
 
 
4243
 
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4244
 
])
4245
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4246
 
ADD_OF_PORTS([br0], [7])
4247
 
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4248
 
AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4249
 
ovs-appctl time/stop
4250
 
ovs-appctl time/warp 5000
4251
 
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)'])
4252
 
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)'])
4253
 
sleep 1
4254
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4255
 
skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),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), actions: <del>
4256
 
skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4257
 
])
4258
 
OVS_VSWITCHD_STOP
4259
 
AT_CLEANUP
4260
 
 
4261
 
AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4262
 
OVS_VSWITCHD_START
4263
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4264
 
ADD_OF_PORTS([br0], [1], [2])
4265
 
AT_DATA([flows.txt], [dnl
4266
 
table=0 in_port=1,ip actions=resubmit(90)
4267
 
table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4268
 
])
4269
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4270
 
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)'])
4271
 
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)'])
4272
 
sleep 1
4273
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4274
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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), actions: <del>
4275
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4276
 
])
4277
 
OVS_VSWITCHD_STOP
4278
 
AT_CLEANUP
4279
 
 
4280
 
AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4281
 
OVS_VSWITCHD_START
4282
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4283
 
ADD_OF_PORTS([br0], [1], [2])
4284
 
AT_DATA([flows.txt], [dnl
4285
 
table=0 in_port=1,ip actions=resubmit(,1)
4286
 
table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4287
 
])
4288
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4289
 
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)'])
4290
 
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=
4291
 
1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4292
 
sleep 1
4293
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4294
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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), actions: <del>
4295
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4296
 
])
4297
 
OVS_VSWITCHD_STOP
4298
 
AT_CLEANUP
4299
 
 
4300
 
AT_SETUP([ofproto-dpif megaflow - goto_table action])
4301
 
OVS_VSWITCHD_START
4302
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4303
 
ADD_OF_PORTS([br0], [1], [2])
4304
 
AT_DATA([flows.txt], [dnl
4305
 
table=0 in_port=1,ip actions=goto_table(1)
4306
 
table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4307
 
])
4308
 
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4309
 
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)'])
4310
 
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)'])
4311
 
sleep 1
4312
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4313
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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), actions: <del>
4314
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4315
 
])
4316
 
OVS_VSWITCHD_STOP
4317
 
AT_CLEANUP
4318
 
 
4319
 
AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4320
 
OVS_VSWITCHD_START
4321
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4322
 
ADD_OF_PORTS([br0], [1], [2], [3])
4323
 
ovs-vsctl \
4324
 
        set Bridge br0 mirrors=@m --\
4325
 
        --id=@p3 get Port p3 --\
4326
 
        --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4327
 
 
4328
 
AT_DATA([flows.txt], [dnl
4329
 
in_port=1 actions=output:2
4330
 
])
4331
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4332
 
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)'])
4333
 
sleep 1
4334
 
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)'])
4335
 
sleep 1
4336
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4337
 
skb_priority(0),skb_mark(0/0),in_port(1),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), actions: <del>
4338
 
])
4339
 
OVS_VSWITCHD_STOP
4340
 
AT_CLEANUP
4341
 
 
4342
 
AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4343
 
OVS_VSWITCHD_START
4344
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4345
 
ADD_OF_PORTS([br0], [1], [2], [3])
4346
 
ovs-vsctl \
4347
 
        set Bridge br0 mirrors=@m --\
4348
 
        --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4349
 
        --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4350
 
 
4351
 
AT_DATA([flows.txt], [dnl
4352
 
in_port=1 actions=output:2
4353
 
])
4354
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4355
 
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))'])
4356
 
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)'])
4357
 
sleep 1
4358
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4359
 
skb_priority(0),skb_mark(0/0),in_port(1),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(0x8100),vlan(vid=11/0xfff,pcp=7/0x0,cfi=1/1),encap(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)), actions: <del>
4360
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4361
 
])
4362
 
OVS_VSWITCHD_STOP
4363
 
AT_CLEANUP
4364
 
 
4365
 
AT_SETUP([ofproto-dpif megaflow - move action])
4366
 
OVS_VSWITCHD_START
4367
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4368
 
ADD_OF_PORTS([br0], [1], [2])
4369
 
AT_DATA([flows.txt], [dnl
4370
 
table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4371
 
table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4372
 
table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4373
 
])
4374
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4375
 
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)'])
4376
 
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)'])
4377
 
sleep 1
4378
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4379
 
skb_priority(0),skb_mark(0/0),in_port(1),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/255.255.255.255,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), actions: <del>
4380
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4381
 
])
4382
 
OVS_VSWITCHD_STOP
4383
 
AT_CLEANUP
4384
 
 
4385
 
AT_SETUP([ofproto-dpif megaflow - push action])
4386
 
OVS_VSWITCHD_START
4387
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4388
 
ADD_OF_PORTS([br0], [1], [2])
4389
 
AT_DATA([flows.txt], [dnl
4390
 
table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4391
 
])
4392
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4393
 
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)'])
4394
 
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)'])
4395
 
sleep 1
4396
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4397
 
skb_priority(0),skb_mark(0/0),in_port(1),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/255.255.255.255,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), actions: <del>
4398
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4399
 
])
4400
 
OVS_VSWITCHD_STOP
4401
 
AT_CLEANUP
4402
 
 
4403
 
AT_SETUP([ofproto-dpif megaflow - learning])
4404
 
OVS_VSWITCHD_START
4405
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4406
 
ADD_OF_PORTS([br0], [1], [2])
4407
 
AT_DATA([flows.txt], [dnl
4408
 
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
4409
 
])
4410
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4411
 
ovs-appctl time/stop
4412
 
# We send each packet twice because the first packet in each flow causes the
4413
 
# flow table to change and thus revalidations, which (depending on timing)
4414
 
# can keep a megaflow from being installed.  The revalidations are done by
4415
 
# the second iteration, allowing the flows to be installed.
4416
 
for i in 1 2; do
4417
 
    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)'])
4418
 
    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)'])
4419
 
    ovs-appctl time/warp 100
4420
 
done
4421
 
sleep 1
4422
 
dnl The original flow is missing due to a revalidation.
4423
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4424
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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), actions: <del>
4425
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4426
 
])
4427
 
OVS_VSWITCHD_STOP
4428
 
AT_CLEANUP
4429
 
 
4430
 
AT_SETUP([ofproto-dpif megaflow - tunnels])
4431
 
OVS_VSWITCHD_START(
4432
 
  [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4433
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4434
 
AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4435
 
     options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4436
 
AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4437
 
          ofport_request=3])
4438
 
AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4439
 
     options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4440
 
     ofport_request=4 options:key=flow])
4441
 
AT_DATA([flows.txt], [dnl
4442
 
in_port=1,actions=output(2)
4443
 
in_port=3,actions=output(4)
4444
 
])
4445
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4446
 
dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4447
 
dnl will cause the packet to be dropped.
4448
 
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)'])
4449
 
sleep 1
4450
 
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)'])
4451
 
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)'])
4452
 
sleep 1
4453
 
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)'])
4454
 
sleep 1
4455
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4456
 
skb_priority(0),skb_mark(0/0),in_port(1),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=0xfd/0x3,ttl=128/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4457
 
skb_priority(0),skb_mark(0/0),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=0xfd/0xff,ttl=128/0xff,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4458
 
skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0x1/0xff,ttl=64/0xff,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4459
 
])
4460
 
OVS_VSWITCHD_STOP
4461
 
AT_CLEANUP
4462
 
 
4463
 
AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4464
 
OVS_VSWITCHD_START
4465
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4466
 
ADD_OF_PORTS([br0], [1], [2])
4467
 
AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
4468
 
AT_DATA([flows.txt], [dnl
4469
 
table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4470
 
])
4471
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4472
 
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)'])
4473
 
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)'])
4474
 
sleep 1
4475
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4476
 
skb_priority(0),skb_mark(0/0),in_port(1),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/255.255.255.252,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), actions: <del>
4477
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),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/0,code=0/0), actions: <del>
4478
 
])
4479
 
OVS_VSWITCHD_STOP
4480
 
AT_CLEANUP
4481
 
 
4482
 
AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4483
 
OVS_VSWITCHD_START
4484
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4485
 
ADD_OF_PORTS([br0], [1], [2])
4486
 
AT_DATA([flows.txt], [dnl
4487
 
table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4488
 
])
4489
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4490
 
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)'])
4491
 
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)'])
4492
 
sleep 1
4493
 
dnl The megaflows do not match the same fields, since the first packet
4494
 
dnl is essentially a no-op.  (The new destination MAC is the same as the
4495
 
dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4496
 
dnl so that a packet that doesn't need its MAC address changed doesn't
4497
 
dnl hide one that does.  Since the first entry doesn't need to change,
4498
 
dnl only the destination MAC address is matched (as decided by
4499
 
dnl ofproto-dpif).  The second entry actually updates the destination
4500
 
dnl MAC, so both the source and destination MAC addresses are
4501
 
dnl un-wildcarded, since the ODP commit functions update both the source
4502
 
dnl and destination MAC addresses.
4503
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4504
 
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/ff:ff:ff:ff:ff:ff),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), actions:2
4505
 
skb_priority(0),skb_mark(0/0),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/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
4506
 
])
4507
 
OVS_VSWITCHD_STOP
4508
 
AT_CLEANUP
4509
 
 
4510
 
AT_SETUP([ofproto-dpif megaflow - disabled])
4511
 
OVS_VSWITCHD_START
4512
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4513
 
ADD_OF_PORTS([br0], [1], [2])
4514
 
AT_DATA([flows.txt], [dnl
4515
 
table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4516
 
table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4517
 
])
4518
 
AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4519
 
], [])
4520
 
AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4521
 
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4522
 
for i in 1 2 3 4; do
4523
 
    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)'])
4524
 
    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)'])
4525
 
    if [[ $i -eq 1 ]]; then
4526
 
        sleep 1
4527
 
    fi
4528
 
done
4529
 
sleep 1
4530
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4531
 
skb_priority(0),skb_mark(0),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), actions:2
4532
 
skb_priority(0),skb_mark(0),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), actions:drop
4533
 
])
4534
 
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_DUMP | grep 'packets:3'], [0], [dnl
4535
 
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),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), packets:3, bytes:180, used:0.0s, actions:2
4536
 
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),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), packets:3, bytes:180, used:0.0s, actions:drop
4537
 
])
4538
 
OVS_VSWITCHD_STOP
4539
 
AT_CLEANUP
4540
 
 
4541
 
AT_SETUP([ofproto-dpif - datapath port number change])
4542
 
OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4543
 
ADD_OF_PORTS([br0], 1)
4544
 
 
4545
 
# Trace a flow that should output to p1.
4546
 
AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4547
 
  [0], [stdout])
4548
 
AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4549
 
])
4550
 
 
4551
 
# Change p1's port number to 5.
4552
 
AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4553
 
 
4554
 
# Trace a flow that should output to p1 in its new location.
4555
 
AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4556
 
  [0], [stdout])
4557
 
AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4558
 
])
4559
 
OVS_VSWITCHD_STOP
4560
 
AT_CLEANUP
4561
 
 
4562
 
# Tests the bundling with various bfd and cfm configurations.
4563
 
AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4564
 
OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4565
 
                    add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4566
 
                    add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4567
 
                    set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4568
 
                    set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4569
 
                    set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4570
 
                    set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4571
 
                    set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4572
 
                    set Interface p0 cfm_mpid=1 -- \
4573
 
                    set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4574
 
 
4575
 
ovs-appctl time/stop
4576
 
# advance the clock to stablize everything.
4577
 
for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4578
 
# cfm/show should show 'recv' fault.
4579
 
AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4580
 
        fault: recv
4581
 
])
4582
 
# bfd/show should show 'up'.
4583
 
AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4584
 
        Local Session State: up
4585
 
        Remote Session State: up
4586
 
        Local Session State: up
4587
 
        Remote Session State: up
4588
 
])
4589
 
# bond/show should show 'may-enable: true' for all slaves.
4590
 
AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4591
 
        may_enable: true
4592
 
        may_enable: true
4593
 
        may_enable: true
4594
 
        may_enable: true
4595
 
])
4596
 
 
4597
 
# now disable the bfd on p1.
4598
 
AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4599
 
# advance the clock to stablize everything.
4600
 
for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4601
 
# cfm/show should show 'recv' fault.
4602
 
AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4603
 
        fault: recv
4604
 
])
4605
 
# bfd/show should show 'down'.
4606
 
AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4607
 
        Local Session State: down
4608
 
        Remote Session State: down
4609
 
])
4610
 
# bond/show should show 'may-enable: false' for p0.
4611
 
AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4612
 
        may_enable: false
4613
 
        may_enable: true
4614
 
])
4615
 
 
4616
 
# now enable the bfd on p1 and disable bfd on p0.
4617
 
AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4618
 
AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4619
 
# advance the clock to stablize everything.
4620
 
for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4621
 
# cfm/show should show 'recv' fault.
4622
 
AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4623
 
        fault: recv
4624
 
])
4625
 
# bfd/show should show 'down'.
4626
 
AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4627
 
        Local Session State: down
4628
 
        Remote Session State: down
4629
 
])
4630
 
# bond/show should show 'may-enable: false' for p0 and p1.
4631
 
AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4632
 
        may_enable: false
4633
 
        may_enable: true
4634
 
        may_enable: false
4635
 
        may_enable: true
4636
 
])
4637
 
 
4638
 
OVS_VSWITCHD_STOP
4639
 
AT_CLEANUP
4640
 
 
4641
 
AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4642
 
OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4643
 
 
4644
 
# enable bfd on p0.
4645
 
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4646
 
# check log.
4647
 
OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4648
 
# disable bfd on p0.
4649
 
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4650
 
# check log.
4651
 
OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4652
 
AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4653
 
 
4654
 
# enable cfm on p0.
4655
 
AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4656
 
# check log.
4657
 
OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4658
 
# disable cfm on p0.
4659
 
AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4660
 
# check log.
4661
 
OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4662
 
AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4663
 
 
4664
 
# enable both bfd and cfm on p0.
4665
 
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4666
 
# check log.
4667
 
OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4668
 
# disable bfd on p0.
4669
 
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4670
 
# check log, there should not be the log of thread terminated.
4671
 
AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4672
 
])
4673
 
# reenable bfd on p0.
4674
 
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4675
 
# check log, should still be on log of thread created.
4676
 
AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4677
 
monitor thread created
4678
 
])
4679
 
# disable bfd and cfm together.
4680
 
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4681
 
# check log.
4682
 
OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4683
 
 
4684
 
OVS_VSWITCHD_STOP
4685
 
AT_CLEANUP
4686
 
 
4687
 
# this test helps avoid the deadlock between the main thread and monitor thread.
4688
 
AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4689
 
OVS_VSWITCHD_START
4690
 
 
4691
 
for i in `seq 1 199`
4692
 
do
4693
 
    AT_CHECK([ovs-vsctl add-port br0 p$i -- set interface p$i type=gre options:remote_ip=1.2.3.4 options:key=$i bfd:enable=true])
4694
 
done
4695
 
 
4696
 
OVS_VSWITCHD_STOP
4697
 
AT_CLEANUP
4698
 
 
4699
 
AT_BANNER([ofproto-dpif - flow translation resource limits])
4700
 
 
4701
 
AT_SETUP([ofproto-dpif - infinite resubmit])
4702
 
OVS_VSWITCHD_START
4703
 
AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4704
 
AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4705
 
  [0], [stdout])
4706
 
AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4707
 
])
4708
 
AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4709
 
  [0], [1
4710
 
])
4711
 
OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4712
 
AT_CLEANUP
4713
 
 
4714
 
AT_SETUP([ofproto-dpif - exponential resubmit chain])
4715
 
OVS_VSWITCHD_START
4716
 
ADD_OF_PORTS([br0], 1)
4717
 
(for i in `seq 1 64`; do
4718
 
     j=`expr $i + 1`
4719
 
     echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4720
 
 done
4721
 
 echo "in_port=65, actions=local") > flows
4722
 
 AT_CHECK([ovs-ofctl add-flows br0 flows])
4723
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4724
 
AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4725
 
])
4726
 
OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4727
 
AT_CLEANUP
4728
 
 
4729
 
AT_SETUP([ofproto-dpif - too many output actions])
4730
 
OVS_VSWITCHD_START
4731
 
ADD_OF_PORTS([br0], 1)
4732
 
(for i in `seq 1 12`; do
4733
 
     j=`expr $i + 1`
4734
 
     echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4735
 
 done
4736
 
 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4737
 
AT_CHECK([ovs-ofctl add-flows br0 flows])
4738
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4739
 
AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4740
 
  [0], [1
4741
 
])
4742
 
AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4743
 
])
4744
 
OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4745
 
AT_CLEANUP
4746
 
 
4747
 
AT_SETUP([ofproto-dpif - stack too deep])
4748
 
OVS_VSWITCHD_START
4749
 
ADD_OF_PORTS([br0], 1)
4750
 
(for i in `seq 1 12`; do
4751
 
     j=`expr $i + 1`
4752
 
     echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4753
 
 done
4754
 
 push="push:NXM_NX_REG0[[]]"
4755
 
 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4756
 
 AT_CHECK([ovs-ofctl add-flows br0 flows])
4757
 
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4758
 
AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4759
 
])
4760
 
OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
4761
 
AT_CLEANUP
4762
 
 
4763
 
AT_SETUP([ofproto-dpif - ICMPv6])
4764
 
OVS_VSWITCHD_START
4765
 
ADD_OF_PORTS([br0], 1)
4766
 
 
4767
 
AT_CAPTURE_FILE([ofctl_monitor.log])
4768
 
 
4769
 
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4770
 
 
4771
 
ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
4772
 
 
4773
 
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4774
 
 
4775
 
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4776
 
NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
4777
 
icmp6,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=00:00:86:05:80:da,dl_dst=00:60:97:07:69:ea,ipv6_src=fe80::200:86ff:fe05:80da,ipv6_dst=fe80::260:97ff:fe07:69ea,ipv6_label=0x00000,nw_tos=0,nw_ecn=0,nw_ttl=255,icmp_type=135,icmp_code=0,nd_target=fe80::260:97ff:fe07:69ea,nd_sll=00:00:86:05:80:da,nd_tll=00:00:00:00:00:00
4778
 
])
4779
 
 
4780
 
OVS_VSWITCHD_STOP
4781
 
AT_CLEANUP
4782
 
 
4783
 
# Tests the exact match of CFI bit in installed datapath flows matching VLAN.
4784
 
AT_SETUP([ofproto-dpif - vlan matching])
4785
 
OVS_VSWITCHD_START(
4786
 
  [add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1])
4787
 
AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
4788
 
 
4789
 
AT_CHECK([ovs-ofctl del-flows br0])
4790
 
AT_CHECK([ovs-ofctl add-flow br0 "vlan_tci=0x000a/0x0fff,action=output:local"])
4791
 
 
4792
 
AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=10,pcp=0),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))'])
4793
 
 
4794
 
AT_CHECK([cat ovs-vswitchd.log | grep 'in_port(1)' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4795
 
skb_priority(0),skb_mark(0/0),in_port(1),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(0x8100),vlan(vid=10/0xfff,pcp=0/0x0,cfi=1/1),encap(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)), actions: <del>
4796
 
])
4797
 
OVS_VSWITCHD_STOP
4798
 
AT_CLEANUP