Datapath action should not refer to controller
[openvswitch] / ofproto / ofproto-dpif.c
index b99c91fd8347315dc88f872413a5a4703eb9cd4e..8bd6f75298aa38b4e1b0d265ea76ec628a5f6b36 100644 (file)
@@ -1267,6 +1267,7 @@ mirror_set(struct ofproto *ofproto_, void *aux,
         mirror = ofproto->mirrors[idx] = xzalloc(sizeof *mirror);
         mirror->ofproto = ofproto;
         mirror->idx = idx;
+        mirror->aux = aux;
         mirror->out_vlan = -1;
         mirror->name = NULL;
     }
@@ -2046,7 +2047,7 @@ execute_odp_actions(struct ofproto_dpif *ofproto, const struct flow *flow,
                     struct ofpbuf *packet)
 {
     if (actions_len == NLA_ALIGN(NLA_HDRLEN + sizeof(uint64_t))
-        && odp_actions->nla_type == ODP_ACTION_ATTR_CONTROLLER) {
+        && odp_actions->nla_type == ODP_ACTION_ATTR_USERSPACE) {
         /* As an optimization, avoid a round-trip from userspace to kernel to
          * userspace.  This also avoids possibly filling up kernel packet
          * buffers along the way. */
@@ -2784,7 +2785,7 @@ send_packet(struct ofproto_dpif *ofproto, uint32_t odp_port,
 
 static void do_xlate_actions(const union ofp_action *in, size_t n_in,
                              struct action_xlate_ctx *ctx);
-static bool xlate_normal(struct action_xlate_ctx *);
+static void xlate_normal(struct action_xlate_ctx *);
 
 static void
 commit_odp_actions(struct action_xlate_ctx *ctx)
@@ -2955,7 +2956,7 @@ xlate_output_action__(struct action_xlate_ctx *ctx,
         break;
     case OFPP_CONTROLLER:
         commit_odp_actions(ctx);
-        nl_msg_put_u64(ctx->odp_actions, ODP_ACTION_ATTR_CONTROLLER, max_len);
+        nl_msg_put_u64(ctx->odp_actions, ODP_ACTION_ATTR_USERSPACE, max_len);
         break;
     case OFPP_LOCAL:
         add_output_action(ctx, OFPP_LOCAL);
@@ -3773,10 +3774,7 @@ is_admissible(struct ofproto_dpif *ofproto, const struct flow *flow,
     return true;
 }
 
-/* If the composed actions may be applied to any packet in the given 'flow',
- * returns true.  Otherwise, the actions should only be applied to 'packet', or
- * not at all, if 'packet' was NULL. */
-static bool
+static void
 xlate_normal(struct action_xlate_ctx *ctx)
 {
     struct ofbundle *in_bundle;
@@ -3807,7 +3805,8 @@ xlate_normal(struct action_xlate_ctx *ctx)
          * of time where we could learn from a packet reflected on a bond and
          * blackhole packets before the learning table is updated to reflect
          * the correct port. */
-        return false;
+        ctx->may_set_up_flow = false;
+        return;
     } else {
         out_bundle = OFBUNDLE_FLOOD;
     }
@@ -3821,8 +3820,6 @@ done:
     if (in_bundle) {
         compose_actions(ctx, vlan, in_bundle, out_bundle);
     }
-
-    return true;
 }
 \f
 static bool