+ /* Check for usable protocol interdependencies between match fields. */
+ if (fm->match.flow.dl_type == htons(ETH_TYPE_IPV6)) {
+ const struct flow_wildcards *wc = &fm->match.wc;
+ /* Only NXM and OXM support matching L3 and L4 fields within IPv6.
+ *
+ * (IPv6 specific fields as well as arp_sha, arp_tha, nw_frag, and
+ * nw_ttl are covered elsewhere so they don't need to be included in
+ * this test too.)
+ */
+ if (wc->masks.nw_proto || wc->masks.nw_tos
+ || wc->masks.tp_src || wc->masks.tp_dst) {
+ *usable_protocols &= OFPUTIL_P_NXM_OXM_ANY;
+ }
+ }