Merge commit 'origin/master'
[sliver-openvswitch.git] / switch / table-linear.c
index 1894577..d1a0403 100644 (file)
@@ -106,6 +106,23 @@ static int table_linear_insert(struct sw_table *swt, struct sw_flow *flow)
     return 1;
 }
 
+static int table_linear_modify(struct sw_table *swt,
+                const struct sw_flow_key *key,
+                const struct ofp_action *actions, int n_actions)
+{
+    struct sw_table_linear *tl = (struct sw_table_linear *) swt;
+    struct sw_flow *flow;
+    unsigned int count = 0;
+
+    LIST_FOR_EACH (flow, struct sw_flow, node, &tl->flows) {
+        if (flow_matches_1wild(&flow->key, key)) {
+            flow_replace_acts(flow, actions, n_actions);
+            count++;
+        }
+    }
+    return count;
+}
+
 static void
 do_delete(struct sw_flow *flow) 
 {
@@ -208,6 +225,7 @@ struct sw_table *table_linear_create(unsigned int max_flows)
     swt = &tl->swt;
     swt->lookup = table_linear_lookup;
     swt->insert = table_linear_insert;
+    swt->modify = table_linear_modify;
     swt->delete = table_linear_delete;
     swt->timeout = table_linear_timeout;
     swt->destroy = table_linear_destroy;