599
609
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC(4231)
600
610
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC_W(5050/F0F0)
601
611
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC_W(5050/ffff)
602
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC_W(5050/0000)
603
612
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(07) NXM_OF_TCP_SRC(4231)
605
614
# TCP destination port
606
615
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST(4231)
607
616
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST_W(FDE0/FFF0)
608
617
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST_W(FDE0/ffff)
609
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST_W(FDE0/0000)
610
618
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(07) NXM_OF_TCP_DST(4231)
613
621
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_NX_TCP_FLAGS(0131)
614
622
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_NX_TCP_FLAGS_W(00F0/0FF0)
615
623
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_NX_TCP_FLAGS_W(01E2/ffff)
616
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_NX_TCP_FLAGS_W(00E1/0000)
617
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(07) NXM_NX_TCP_FLAGS(4321)
624
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(07) NXM_NX_TCP_FLAGS(0fff)
619
626
# UDP source port
620
627
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC(8732)
621
628
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/01FF)
622
629
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/ffff)
623
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/0000)
624
630
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_UDP_SRC(7823)
626
632
# UDP destination port
627
633
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST(1782)
628
634
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST_W(5005/F00F)
629
635
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST_W(5005/FFFF)
630
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST_W(5005/0000)
631
636
NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(02) NXM_OF_UDP_DST(1293)
893
900
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(4231)
894
901
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC_W(5050/f0f0)
895
902
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(5050)
896
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06)
897
903
nx_pull_match() returned error OFPBMC_BAD_PREREQ
899
905
# TCP destination port
900
906
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST(4231)
901
907
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST_W(fde0/fff0)
902
908
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST(fde0)
903
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06)
904
909
nx_pull_match() returned error OFPBMC_BAD_PREREQ
907
912
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_NX_TCP_FLAGS(0131)
908
913
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_NX_TCP_FLAGS_W(00f0/0ff0)
909
914
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_NX_TCP_FLAGS(01e2)
910
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06)
911
915
nx_pull_match() returned error OFPBMC_BAD_PREREQ
913
917
# UDP source port
914
918
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC(8732)
915
919
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC_W(0132/01ff)
916
920
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC(0132)
917
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11)
918
921
nx_pull_match() returned error OFPBMC_BAD_PREREQ
920
923
# UDP destination port
921
924
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST(1782)
922
925
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST_W(5005/f00f)
923
926
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST(5005)
924
NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11)
925
927
nx_pull_match() returned error OFPBMC_BAD_PREREQ
1761
1773
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC(4231)
1762
1774
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/F0F0)
1763
1775
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/FFFF)
1764
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/0000)
1776
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(0000/0000)
1765
1777
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(07) OXM_OF_TCP_SRC(4231)
1767
1779
# TCP destination port
1768
1780
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST(4231)
1769
1781
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/FFF0)
1770
1782
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/FFFF)
1771
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/0000)
1783
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(0000/0000)
1772
1784
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(07) OXM_OF_TCP_DST(4231)
1774
1786
# UDP source port
1775
1787
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC(8732)
1776
1788
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/01FF)
1777
1789
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/FFFF)
1778
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/0000)
1790
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0000/0000)
1779
1791
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_UDP_SRC(7823)
1781
1793
# UDP destination port
1782
1794
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST(1782)
1783
1795
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/F00F)
1784
1796
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/FFFF)
1785
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/0000)
1797
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(0000/0000)
1786
1798
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(02) OXM_OF_UDP_DST(1293)
1788
1800
# SCTP source port
1789
1801
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC(8732)
1790
1802
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC_W(0132/01FF)
1791
1803
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC_W(0132/FFFF)
1792
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC_W(0132/0000)
1804
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC_W(0000/0000)
1793
1805
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_SCTP_SRC(7823)
1795
1807
# SCTP destination port
1796
1808
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST(1782)
1797
1809
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST_W(5005/F00F)
1798
1810
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST_W(5005/FFFF)
1799
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST_W(5005/0000)
1811
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST_W(0000/0000)
1800
1812
OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(02) OXM_OF_SCTP_DST(1293)
2103
2140
nx_pull_match() returned error OFPBMC_BAD_PREREQ
2104
2141
nx_pull_match() returned error OFPBMC_BAD_PREREQ
2143
# Registers 0, 1, and 2.
2144
NXM_NX_REG0(acebdf56)
2145
NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
2146
NXM_NX_REG0(a0e0d050)
2147
NXM_NX_REG1(acebdf56)
2148
NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1_W(a0e0d050/f0f0f0f0)
2149
NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1(a0e0d050)
2150
NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2_W(a0e0d050/f0f0f0f0)
2151
NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2(a0e0d050)
2153
# Extended registers 0, 1, and 2.
2154
# (For OpenFlow 1.2, OVS transforms these into its extension registers.)
2155
NXM_NX_REG0(acebdf56)
2156
NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
2157
NXM_NX_REG0(a0e0d050)
2158
NXM_NX_REG1(acebdf56)
2159
NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1_W(a0e0d050/f0f0f0f0)
2160
NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1(a0e0d050)
2161
NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2_W(a0e0d050/f0f0f0f0)
2162
NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2(a0e0d050)
2106
2164
# Invalid field number.
2107
2165
nx_pull_match() returned error OFPBMC_BAD_FIELD
2167
# Invalid field numbers (experimenter OXM).
2168
nx_pull_match() returned error OFPBMC_BAD_FIELD
2169
nx_pull_match() returned error OFPBMC_BAD_FIELD
2110
2172
# Check that at least the first warning made it. (It's rate-limited
2111
2173
# so a variable number could show up, especially under valgrind etc.)
2112
AT_CHECK([grep 'has 1-bits in value' stderr | sed 1q], [0], [dnl
2113
nx_match|WARN|NXM/OXM entry OXM_OF_METADATA_W(1234567890abcdef/ffff0000ffff0000) has 1-bits in value for bits wildcarded by the mask. (Future versions of OVS may report this as an OpenFlow error.)
2174
AT_CHECK([grep '1-bits in value' stderr | sed 1q], [0], [dnl
2175
nx_match|WARN|Rejecting NXM/OXM entry 0:32768:2:1:16 with 1-bits in value for bits wildcarded by the mask.
2116
2178
# Check that there wasn't any other stderr output.
2117
AT_CHECK([grep -v 'has 1-bits in value' stderr], [1])
2179
AT_CHECK([grep -v '1-bits in value' stderr], [1])
2182
AT_SETUP([ovs-ofctl parse-oxm (OpenFlow 1.3)])
2184
AT_DATA([oxm.txt], [dnl
2186
ONFOXM_ET_ACTSET_OUTPUT(00000000)
2187
ONFOXM_ET_ACTSET_OUTPUT(fffffffe)
2188
ONFOXM_ET_ACTSET_OUTPUT(fffffff7)
2189
OXM_OF_ACTSET_OUTPUT(00000000)
2190
OXM_OF_ACTSET_OUTPUT(fffffffe)
2191
OXM_OF_ACTSET_OUTPUT(fffffff7)
2193
AT_CHECK([ovs-ofctl '-vPATTERN:console:%c|%p|%m' --strict parse-oxm OpenFlow13 < oxm.txt],
2196
ONFOXM_ET_ACTSET_OUTPUT(00000000)
2197
ONFOXM_ET_ACTSET_OUTPUT(fffffffe)
2198
ONFOXM_ET_ACTSET_OUTPUT(fffffff7)
2199
ONFOXM_ET_ACTSET_OUTPUT(00000000)
2200
ONFOXM_ET_ACTSET_OUTPUT(fffffffe)
2201
ONFOXM_ET_ACTSET_OUTPUT(fffffff7)
2205
AT_SETUP([ovs-ofctl parse-oxm (OpenFlow 1.5)])
2207
AT_DATA([oxm.txt], [dnl
2208
# Extended registers 0 and 1.
2209
OXM_OF_PKT_REG0_W(acebdf5600000000/ffffffff00000000)
2210
OXM_OF_PKT_REG0_W(a0e0d05000000000/f0f0f0f000000000)
2211
OXM_OF_PKT_REG0_W(a0e0d05000000000/ffffffff00000000)
2212
OXM_OF_PKT_REG0_W(00000000acebdf56/00000000ffffffff)
2213
OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0f0f0f0f0)
2214
OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0ffffffff)
2215
OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/f0f0f0f000000000)
2216
OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/ffffffff00000000)
2218
# Registers 0, 1, and 2.
2219
# (OpenFlow 1.5 transforms these into the standard "xregs".)
2220
NXM_NX_REG0(acebdf56)
2221
NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
2222
NXM_NX_REG0(a0e0d050)
2223
NXM_NX_REG1(acebdf56)
2224
NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1_W(a0e0d050/f0f0f0f0)
2225
NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1(a0e0d050)
2226
NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2_W(a0e0d050/f0f0f0f0)
2227
NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2(a0e0d050)
2230
ONFOXM_ET_ACTSET_OUTPUT(00000000)
2231
ONFOXM_ET_ACTSET_OUTPUT(fffffffe)
2232
ONFOXM_ET_ACTSET_OUTPUT(fffffff7)
2233
OXM_OF_ACTSET_OUTPUT(00000000)
2234
OXM_OF_ACTSET_OUTPUT(fffffffe)
2235
OXM_OF_ACTSET_OUTPUT(fffffff7)
2237
AT_CHECK([ovs-ofctl '-vPATTERN:console:%c|%p|%m' --strict parse-oxm OpenFlow15 < oxm.txt],
2239
# Extended registers 0 and 1.
2240
OXM_OF_PKT_REG0_W(acebdf5600000000/ffffffff00000000)
2241
OXM_OF_PKT_REG0_W(a0e0d05000000000/f0f0f0f000000000)
2242
OXM_OF_PKT_REG0_W(a0e0d05000000000/ffffffff00000000)
2243
OXM_OF_PKT_REG0_W(00000000acebdf56/00000000ffffffff)
2244
OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0f0f0f0f0)
2245
OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0ffffffff)
2246
OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/f0f0f0f000000000)
2247
OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/ffffffff00000000)
2249
# Registers 0, 1, and 2.
2250
# (OpenFlow 1.5 transforms these into the standard "xregs".)
2251
OXM_OF_PKT_REG0_W(acebdf5600000000/ffffffff00000000)
2252
OXM_OF_PKT_REG0_W(a0e0d05000000000/f0f0f0f000000000)
2253
OXM_OF_PKT_REG0_W(a0e0d05000000000/ffffffff00000000)
2254
OXM_OF_PKT_REG0_W(00000000acebdf56/00000000ffffffff)
2255
OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0f0f0f0f0)
2256
OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0ffffffff)
2257
OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/f0f0f0f000000000)
2258
OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/ffffffff00000000)
2261
OXM_OF_ACTSET_OUTPUT(00000000)
2262
OXM_OF_ACTSET_OUTPUT(fffffffe)
2263
OXM_OF_ACTSET_OUTPUT(fffffff7)
2264
OXM_OF_ACTSET_OUTPUT(00000000)
2265
OXM_OF_ACTSET_OUTPUT(fffffffe)
2266
OXM_OF_ACTSET_OUTPUT(fffffff7)
2120
2270
AT_SETUP([ovs-ofctl parse-oxm loose])
2121
2271
AT_KEYWORDS([oxm])
2122
2272
AT_DATA([oxm.txt], [dnl
2123
OXM_OF_IN_PORT(00000001), 01020304(1111/2222), OXM_OF_ETH_TYPE(0800)
2273
OXM_OF_IN_PORT(00000001), 01020304(1111/3333), OXM_OF_ETH_TYPE(0800)
2274
OXM_OF_IN_PORT(00000001), ffff020800002320(11112222), OXM_OF_ETH_TYPE(0800)
2275
OXM_OF_IN_PORT(00000001), ffff030800002320(1111/3333), OXM_OF_ETH_TYPE(0800)
2126
2278
AT_CHECK([ovs-ofctl --strict parse-oxm OpenFlow12 < oxm.txt], [0], [dnl
2127
2279
nx_pull_match() returned error OFPBMC_BAD_FIELD
2280
nx_pull_match() returned error OFPBMC_BAD_FIELD
2281
nx_pull_match() returned error OFPBMC_BAD_FIELD
2130
2284
AT_CHECK([ovs-ofctl parse-oxm OpenFlow12 < oxm.txt], [0], [dnl
2131
2285
OXM_OF_IN_PORT(00000001), OXM_OF_ETH_TYPE(0800)
2286
OXM_OF_IN_PORT(00000001), OXM_OF_ETH_TYPE(0800)
2287
OXM_OF_IN_PORT(00000001), OXM_OF_ETH_TYPE(0800)
2291
AT_SETUP([experimenter OXM encoding])
2292
AT_DATA([oxm.txt], [dnl
2293
NXM_NX_DP_HASH(01234567)
2294
NXOXM_ET_DP_HASH(01234567)
2296
NXM_NX_DP_HASH_W(01234567/0fffffff)
2297
NXOXM_ET_DP_HASH_W(01234567/0fffffff)
2300
# To allow for testing experimenter OXM, which doesn't really have many
2301
# examples in the wild, we've defined a variant of NXM_NX_DP_HASH that uses
2302
# the experimenter OXM mechanism, called NXOXM_ET_DP_HASH. We've defined
2303
# it as if it were introduced with OpenFlow 1.5, which gives us the
2304
# opportunity to see that both forms are accepted in all OpenFlow versions
2305
# but the experimenter form is used for encoding in OF1.5+.
2307
# First verify that both forms are accepted and NXOXM_ET_DP_HASH is encoded
2309
AT_CHECK([ovs-ofctl -m --strict parse-oxm OpenFlow15 < oxm.txt], [0], [dnl
2310
NXOXM_ET_DP_HASH(01234567)
2311
00000000 00 01 00 10 ff ff 00 08-00 00 23 20 01 23 45 67 @&t@
2312
NXOXM_ET_DP_HASH(01234567)
2313
00000000 00 01 00 10 ff ff 00 08-00 00 23 20 01 23 45 67 @&t@
2315
NXOXM_ET_DP_HASH_W(01234567/0fffffff)
2316
00000000 00 01 00 14 ff ff 01 0c-00 00 23 20 01 23 45 67 @&t@
2317
00000010 0f ff ff ff 00 00 00 00-
2318
NXOXM_ET_DP_HASH_W(01234567/0fffffff)
2319
00000000 00 01 00 14 ff ff 01 0c-00 00 23 20 01 23 45 67 @&t@
2320
00000010 0f ff ff ff 00 00 00 00-
2323
# Then verify that both forms are accepted and NXM_NX_DP_HASH is encoded
2325
AT_CHECK([ovs-ofctl -m --strict parse-oxm OpenFlow12 < oxm.txt], [0], [dnl
2326
NXM_NX_DP_HASH(01234567)
2327
00000000 00 01 00 0c 00 01 46 04-01 23 45 67 00 00 00 00 @&t@
2328
NXM_NX_DP_HASH(01234567)
2329
00000000 00 01 00 0c 00 01 46 04-01 23 45 67 00 00 00 00 @&t@
2331
NXM_NX_DP_HASH_W(01234567/0fffffff)
2332
00000000 00 01 00 10 00 01 47 08-01 23 45 67 0f ff ff ff @&t@
2333
NXM_NX_DP_HASH_W(01234567/0fffffff)
2334
00000000 00 01 00 10 00 01 47 08-01 23 45 67 0f ff ff ff @&t@
2141
2344
[NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_NX_TCP_FLAGS(0fff)
2144
# Check that marshaling in OXM for OF1.2 through OF1.4 gives OXM
2145
# headers except for TCP flags, which didn't have an OXM definition until
2147
for version in OpenFlow12 OpenFlow13 OpenFlow14; do
2148
AT_CHECK([echo "$tcp_flags" | ovs-ofctl parse-oxm $version], [0],
2149
[OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), NXM_NX_TCP_FLAGS(0fff)
2347
# Check that marshaling in OXM for OF1.2 gives OXM headers except for
2348
# TCP flags, which didn't have an OXM definition.
2349
AT_CHECK([echo "$tcp_flags" | ovs-ofctl parse-oxm OpenFlow12], [0],
2350
[OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), NXM_NX_TCP_FLAGS(0fff)
2353
# Check that marshaling in OXM for OF1.3 and OF1.4 gives OXM headers,
2354
# including the ONF extension for TCP flags introduced in OF1.3.
2355
AT_CHECK([echo "$tcp_flags" | ovs-ofctl parse-oxm OpenFlow13], [0],
2356
[OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), ONFOXM_ET_TCP_FLAGS(0fff)
2358
AT_CHECK([echo "$tcp_flags" | ovs-ofctl parse-oxm OpenFlow14], [0],
2359
[OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), ONFOXM_ET_TCP_FLAGS(0fff)
2153
2362
# OpenFlow 1.5 added an OXM header for TCP flags:
2154
2363
AT_CHECK([echo "$tcp_flags" | ovs-ofctl parse-oxm OpenFlow15], [0],
2553
2762
OVS_VSWITCHD_STOP
2765
dnl Check importance parameter added in OF1.4.
2766
dnl It validates whether importance set via add-flow via OpenFlow1.4+ gets
2767
dnl set or not by validating it againt the dump-flows output via OpenFlow1.4+
2768
dnl If add-flow or dump-flows is used with later version of OpenFlow prior to 1.4+
2769
dnl then the importance will be considered zero whether provided as an argument.
2771
AT_SETUP([ovs-ofctl rule with importance])
2773
dnl Flow with importance parameter added via OF1.4+ and later version
2774
AT_CHECK([ovs-ofctl -O OpenFlow14 add-flow br0 priority=21,importance=21,actions=normal])
2775
AT_CHECK([ovs-ofctl add-flow br0 priority=22,importance=22,actions=normal])
2777
dnl Importance parameter will only be visible of flows that are added via OF1.4+ if dumped via OF1.4+
2778
AT_CHECK([ovs-ofctl -O OpenFlow14 dump-flows br0 | ofctl_strip | sed '/ST_FLOW reply/d' | sort], [0], [dnl
2779
importance=21, priority=21 actions=NORMAL
2780
priority=22 actions=NORMAL
2783
dnl Importance parameter will not be visible if flow is dumped with previous version prior to OF1.4+ whether added via OF1.4+
2784
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sed '/ST_FLOW reply/d' | sort], [0], [dnl
2785
priority=21 actions=NORMAL
2786
priority=22 actions=NORMAL
2793
dnl Importance parameter added in OF1.4.
2794
dnl This validates whether flows with importance
2795
dnl parameter are getting replaced with "replace-flows" or
2796
dnl not by validating dump-flows output after replace with the expected output.
2798
AT_SETUP([ovs-ofctl replace-flows with importance])
2801
dnl Add flows to br0 with importance via OF1.4+. For more details refer "ovs-ofctl rule with importance" test case.
2802
for i in 1 2 3 4 5 6 7 8; do echo "dl_vlan=$i,importance=$i,actions=drop"; done > add-flows.txt
2803
AT_CHECK([ovs-ofctl -O OpenFlow14 add-flows br0 add-flows.txt])
2805
dnl Replace some flows in the bridge.
2806
for i in 1 3 5 7; do echo "dl_vlan=$i,importance=`expr $i + 10`,actions=drop"; done > replace-flows.txt
2807
AT_CHECK([ovs-ofctl -O OpenFlow14 replace-flows br0 replace-flows.txt])
2809
dnl Dump them and compare the dump flows output against the expected output.
2810
for i in 1 2 3 4 5 6 7 8; do if [[ `expr $i % 2` -eq 1 ]]; then importance=`expr $i + 10`; else importance=$i; fi; echo " importance=$importance, dl_vlan=$i actions=drop"; done | sort > expout
2811
AT_CHECK([ovs-ofctl -O OpenFlow14 dump-flows br0 | ofctl_strip | sed '/OFPST_FLOW/d' | sort],
2817
AT_SETUP([ovs-ofctl replace-flows with --bundle])
2820
AT_CHECK([ovs-appctl vlog/set vconn:dbg])
2822
dnl Add flows to br0 with importance via OF1.4+, using an OF1.4+ bundle. For more details refer "ovs-ofctl rule with importance" test case.
2823
for i in 1 2 3 4 5 6 7 8; do echo "dl_vlan=$i,importance=$i,actions=drop"; done > add-flows.txt
2824
AT_CHECK([ovs-ofctl --bundle add-flows br0 add-flows.txt])
2826
dnl Replace some flows in the bridge.
2827
for i in 1 3 5 7; do echo "dl_vlan=$i,importance=`expr $i + 10`,actions=drop"; done > replace-flows.txt
2828
AT_CHECK([ovs-ofctl --bundle replace-flows br0 replace-flows.txt])
2830
dnl Dump them and compare the dump flows output against the expected output.
2831
for i in 1 2 3 4 5 6 7 8; do if [[ `expr $i % 2` -eq 1 ]]; then importance=`expr $i + 10`; else importance=$i; fi; echo " importance=$importance, dl_vlan=$i actions=drop"; done | sort > expout
2832
AT_CHECK([ovs-ofctl -O OpenFlow14 dump-flows br0 | ofctl_strip | sed '/OFPST_FLOW/d' | sort],
2835
dnl Check logs for OpenFlow trace
2837
OVS_WAIT_UNTIL([cat ovs-vswitchd.log | vconn_windows_sub | test `grep -- "|vconn|DBG|unix: sent (Success): OFPST_FLOW reply" | wc -l` -ge 2])
2838
# AT_CHECK([sed -n "s/^.*\(|vconn|DBG|.*xid=.*:\).*$/\1/p" ovs-vswitchd.log], [0], [dnl
2839
AT_CHECK([print_vconn_debug | vconn_windows_sub | ofctl_strip], [0], [dnl
2840
vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
2841
version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
2842
vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
2843
version bitmap: 0x01, 0x05
2844
vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports versions 0x01, 0x05)
2845
vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
2846
bundle_id=0 type=OPEN_REQUEST flags=atomic ordered
2847
vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
2848
bundle_id=0 type=OPEN_REPLY flags=0
2849
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2850
bundle_id=0 flags=atomic ordered
2851
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=1 importance:1 actions=drop
2852
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2853
bundle_id=0 flags=atomic ordered
2854
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=2 importance:2 actions=drop
2855
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2856
bundle_id=0 flags=atomic ordered
2857
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=3 importance:3 actions=drop
2858
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2859
bundle_id=0 flags=atomic ordered
2860
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=4 importance:4 actions=drop
2861
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2862
bundle_id=0 flags=atomic ordered
2863
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=5 importance:5 actions=drop
2864
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2865
bundle_id=0 flags=atomic ordered
2866
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=6 importance:6 actions=drop
2867
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2868
bundle_id=0 flags=atomic ordered
2869
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=7 importance:7 actions=drop
2870
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2871
bundle_id=0 flags=atomic ordered
2872
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=8 importance:8 actions=drop
2873
vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
2874
bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
2875
vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
2876
bundle_id=0 type=COMMIT_REPLY flags=0
2877
vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
2878
version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
2879
vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
2880
version bitmap: 0x01, 0x05
2881
vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports versions 0x01, 0x05)
2882
vconn|DBG|unix: received: OFPST_FLOW request (OF1.4):
2883
vconn|DBG|unix: sent (Success): OFPST_FLOW reply (OF1.4):
2884
vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
2885
bundle_id=0 type=OPEN_REQUEST flags=atomic ordered
2886
vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
2887
bundle_id=0 type=OPEN_REPLY flags=0
2888
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2889
bundle_id=0 flags=atomic ordered
2890
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=1 importance:11 actions=drop
2891
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2892
bundle_id=0 flags=atomic ordered
2893
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=3 importance:13 actions=drop
2894
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2895
bundle_id=0 flags=atomic ordered
2896
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=5 importance:15 actions=drop
2897
vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2898
bundle_id=0 flags=atomic ordered
2899
OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=7 importance:17 actions=drop
2900
vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
2901
bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
2902
vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
2903
bundle_id=0 type=COMMIT_REPLY flags=0
2904
vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
2905
version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
2906
vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
2907
version bitmap: 0x05
2908
vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports version 0x05)
2909
vconn|DBG|unix: received: OFPST_FLOW request (OF1.4):
2910
vconn|DBG|unix: sent (Success): OFPST_FLOW reply (OF1.4):
2911
importance=2, dl_vlan=2 actions=drop
2912
importance=4, dl_vlan=4 actions=drop
2913
importance=6, dl_vlan=6 actions=drop
2914
importance=8, dl_vlan=8 actions=drop
2915
importance=11, dl_vlan=1 actions=drop
2916
importance=13, dl_vlan=3 actions=drop
2917
importance=15, dl_vlan=5 actions=drop
2918
importance=17, dl_vlan=7 actions=drop