+ if (preferred_flow_format != -1) {
+ enum nx_flow_format min_format;
+
+ min_format = ofputil_min_flow_format(rule, cookie_support, cookie);
+ if (preferred_flow_format >= min_format) {
+ set_flow_format(vconn, preferred_flow_format);
+ return preferred_flow_format;
+ }
+
+ VLOG_WARN("%s: cannot use requested flow format %s for "
+ "specified flow", vconn_get_name(vconn),
+ ofputil_flow_format_to_string(min_format));
+ }
+
+ if (try_set_flow_format(vconn, NXFF_NXM)) {
+ flow_format = NXFF_NXM;
+ } else if (try_set_flow_format(vconn, NXFF_TUN_ID_FROM_COOKIE)) {
+ flow_format = NXFF_TUN_ID_FROM_COOKIE;
+ } else {
+ flow_format = NXFF_OPENFLOW10;
+ }
+
+ VLOG_DBG("%s: negotiated flow format %s", vconn_get_name(vconn),
+ ofputil_flow_format_to_string(flow_format));
+ return flow_format;