switch (op->type) {
case DPIF_OP_FLOW_PUT:
put = &op->u.flow_put;
+#ifdef _WIN32
+ /* Windows datapath doesn't support DPIF_FP_PROBE yet. */
+ if (put->flags & DPIF_FP_PROBE) {
+ /* Report an error immediately if this is the first operation.
+ * Otherwise the easiest thing to do is to postpone to the next
+ * call (when this will be the first operation). */
+ if (i == 0) {
+ op->error = EINVAL;
+ return 1;
+ }
+ n_ops = i;
+ break;
+ }
+#endif
dpif_netlink_init_flow_put(dpif, put, &flow);
if (put->stats) {
flow.nlmsg_flags |= NLM_F_ECHO;
ofpbuf_use_stack(&key, &keybuf, sizeof keybuf);
odp_flow_key_from_flow(&key, &flow, NULL, 0, true);
-#ifdef _WIN32
- /* XXX Force disable of datapath recirculation from userspace until the
- * dpif_probe_feature is properly implemented in the windows datapath */
- enable_recirc = false;
-#else
enable_recirc = dpif_probe_feature(backer->dpif, "recirculation", &key,
NULL);
-#endif
if (enable_recirc) {
VLOG_INFO("%s: Datapath supports recirculation",
odp_flow_key_from_flow(&key, &flow, NULL, 0, true);
dpif_flow_hash(backer->dpif, key.data, key.size, &ufid);
-#ifdef _WIN32
- /* XXX Force disable of datapath recirculation from userspace until the
- * dpif_probe_feature is properly implemented in the windows datapath */
- enable_ufid = false;
-#else
enable_ufid = dpif_probe_feature(backer->dpif, "UFID", &key, &ufid);
-#endif
if (enable_ufid) {
VLOG_INFO("%s: Datapath supports unique flow ids",
ofpbuf_use_stack(&key, &keybuf, sizeof keybuf);
odp_flow_key_from_flow(&key, &flow, NULL, 0, false);
-#ifdef _WIN32
- /* XXX Force disable of datapath recirculation from userspace until the
- * dpif_probe_feature is properly implemented in the windows datapath */
- break;
-#endif
if (!dpif_probe_feature(backer->dpif, "MPLS", &key, NULL)) {
break;
}