projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Datapath action should not refer to controller
[openvswitch]
/
ofproto
/
ofproto-dpif.c
diff --git
a/ofproto/ofproto-dpif.c
b/ofproto/ofproto-dpif.c
index b99c91fd8347315dc88f872413a5a4703eb9cd4e..8bd6f75298aa38b4e1b0d265ea76ec628a5f6b36 100644
(file)
--- a/
ofproto/ofproto-dpif.c
+++ b/
ofproto/ofproto-dpif.c
@@
-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 = ofproto->mirrors[idx] = xzalloc(sizeof *mirror);
mirror->ofproto = ofproto;
mirror->idx = idx;
+ mirror->aux = aux;
mirror->out_vlan = -1;
mirror->name = NULL;
}
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))
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. */
/* 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 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)
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);
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);
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;
}
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;
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. */
* 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;
}
} else {
out_bundle = OFBUNDLE_FLOOD;
}
@@
-3821,8
+3820,6
@@
done:
if (in_bundle) {
compose_actions(ctx, vlan, in_bundle, out_bundle);
}
if (in_bundle) {
compose_actions(ctx, vlan, in_bundle, out_bundle);
}
-
- return true;
}
\f
static bool
}
\f
static bool