vswitchd: Actually tag flows that go out bonded devices.
authorBen Pfaff <blp@nicira.com>
Sat, 27 Dec 2008 05:26:46 +0000 (21:26 -0800)
committerBen Pfaff <blp@nicira.com>
Sat, 27 Dec 2008 05:26:46 +0000 (21:26 -0800)
The change that introduced rebalancing for bonded devices
set up the infrastructure for revalidating flows that go
out bonded devices, but neglected to actually tag those
flows.  This fixes the problem.

vswitchd/bridge.c

index 2e67bec6ce973a1a112542c4dd41640774373d51..6946a8d8594e031af7d3a02f7da6043f2039671a 100644 (file)
@@ -1026,7 +1026,7 @@ add_vlan_action(struct ofpbuf *buf, uint16_t old_vlan, uint16_t new_vlan)
 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. */
@@ -1041,7 +1041,7 @@ compose_dsts(const struct bridge *br, const struct flow *flow, uint16_t vlan,
             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++);
                 }
@@ -1054,7 +1054,7 @@ compose_dsts(const struct bridge *br, const struct flow *flow, uint16_t vlan,
         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. */
@@ -1092,7 +1092,7 @@ send_packets(struct bridge *br, const struct flow *flow,
     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) {