static size_t
compose_dsts(const struct bridge *br, const struct flow *flow, uint16_t vlan,
const struct port *in_port, const struct port *out_port,
- struct ft_dst dsts[])
+ struct ft_dst dsts[], tag_type *tags)
{
if (out_port == FLOOD_PORT) {
/* Flood. */
if (port != in_port && (!port->vlan || vlan == port->vlan)) {
/* Put destinations for original VLAN at the front, so that we
* don't have to add actions to set the VLAN tag for those. */
- set_dst(dst, flow, in_port, port);
+ *tags |= set_dst(dst, flow, in_port, port);
if (dst->vlan == ntohs(flow->dl_vlan)) {
swap_dst(dst, vlan_dsts++);
}
return dst - dsts;
} else if (out_port) {
/* Unicast. */
- set_dst(dsts, flow, in_port, out_port);
+ *tags |= set_dst(dsts, flow, in_port, out_port);
return 1;
} else {
/* Drop. */
size_t actions_len; /* Estimated length of actions, in bytes. */
size_t n_dsts;
- n_dsts = compose_dsts(br, flow, vlan, in_port, out_port, dsts);
+ n_dsts = compose_dsts(br, flow, vlan, in_port, out_port, dsts, &tags);
actions_len = (sizeof(struct ofp_action_header) + 2) * n_dsts;
if (setup_flow) {