projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vlog: Fix typo in VLOG_IS_ERR_ENABLED macro definition.
[openvswitch]
/
ofproto
/
ofproto-dpif.c
diff --git
a/ofproto/ofproto-dpif.c
b/ofproto/ofproto-dpif.c
index e50d72b6ae57caf6682f80a542e4f693bc571fe8..a700d5ed9c8f159c3414ce931d751abe9d155346 100644
(file)
--- a/
ofproto/ofproto-dpif.c
+++ b/
ofproto/ofproto-dpif.c
@@
-714,6
+714,7
@@
port_construct(struct ofport *port_)
port->bundle = NULL;
port->cfm = NULL;
port->tag = tag_create_random();
port->bundle = NULL;
port->cfm = NULL;
port->tag = tag_create_random();
+ port->may_enable = true;
if (ofproto->sflow) {
dpif_sflow_add_port(ofproto->sflow, port->odp_port,
if (ofproto->sflow) {
dpif_sflow_add_port(ofproto->sflow, port->odp_port,
@@
-2783,7
+2784,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)
@@
-2807,6
+2808,11
@@
commit_odp_actions(struct action_xlate_ctx *ctx)
base->nw_dst = flow->nw_dst;
}
base->nw_dst = flow->nw_dst;
}
+ if (base->nw_tos != flow->nw_tos) {
+ nl_msg_put_u8(odp_actions, ODP_ACTION_ATTR_SET_NW_TOS, flow->nw_tos);
+ base->nw_tos = flow->nw_tos;
+ }
+
if (base->vlan_tci != flow->vlan_tci) {
if (!(flow->vlan_tci & htons(VLAN_CFI))) {
nl_msg_put_flag(odp_actions, ODP_ACTION_ATTR_STRIP_VLAN);
if (base->vlan_tci != flow->vlan_tci) {
if (!(flow->vlan_tci & htons(VLAN_CFI))) {
nl_msg_put_flag(odp_actions, ODP_ACTION_ATTR_STRIP_VLAN);
@@
-3151,7
+3157,7
@@
do_xlate_actions(const union ofp_action *in, size_t n_in,
break;
case OFPUTIL_OFPAT_SET_NW_TOS:
break;
case OFPUTIL_OFPAT_SET_NW_TOS:
- ctx->flow.nw_tos = ia->nw_tos.nw_tos;
+ ctx->flow.nw_tos = ia->nw_tos.nw_tos
& IP_DSCP_MASK
;
break;
case OFPUTIL_OFPAT_SET_TP_SRC:
break;
case OFPUTIL_OFPAT_SET_TP_SRC:
@@
-3222,6
+3228,13
@@
do_xlate_actions(const union ofp_action *in, size_t n_in,
slave_enabled_cb,
ctx->ofproto), 0);
break;
slave_enabled_cb,
ctx->ofproto), 0);
break;
+
+ case OFPUTIL_NXAST_BUNDLE_LOAD:
+ ctx->ofproto->has_bundle_action = true;
+ nab = (const struct nx_action_bundle *) ia;
+ bundle_execute_load(nab, &ctx->flow, slave_enabled_cb,
+ ctx->ofproto);
+ break;
}
}
}
}
}
}
@@
-3363,7
+3376,8
@@
dst_is_duplicate(const struct dst_set *set, const struct dst *test)
static bool
ofbundle_trunks_vlan(const struct ofbundle *bundle, uint16_t vlan)
{
static bool
ofbundle_trunks_vlan(const struct ofbundle *bundle, uint16_t vlan)
{
- return bundle->vlan < 0 && vlan_bitmap_contains(bundle->trunks, vlan);
+ return (bundle->vlan < 0
+ && (!bundle->trunks || bitmap_is_set(bundle->trunks, vlan)));
}
static bool
}
static bool
@@
-3409,7
+3423,7
@@
compose_dsts(struct action_xlate_ctx *ctx, uint16_t vlan,
static bool
vlan_is_mirrored(const struct ofmirror *m, int vlan)
{
static bool
vlan_is_mirrored(const struct ofmirror *m, int vlan)
{
- return
vlan_bitmap_contains
(m->vlans, vlan);
+ return
!m->vlans || bitmap_is_set
(m->vlans, vlan);
}
/* Returns true if a packet with Ethernet destination MAC 'dst' may be mirrored
}
/* Returns true if a packet with Ethernet destination MAC 'dst' may be mirrored
@@
-3759,10
+3773,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;
@@
-3793,7
+3804,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;
}
@@
-3807,8
+3819,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