This creates an alternative to lflow_table_add_lflow(). This alternative,
lflow_table_add_lflow_(), takes its arguments in a structure, rather
than as individual function parameters.

This provides the basis for redefining the many ovn_lflow_add() macro
variations. In this commit, we define ovn_lflow_add() as taking seven
mandatory parameters, plus some variadic number of additional
parameters.

We do not touch northd.c in this commit, but this implicitly converts
all pre-existing calls to ovn_lflow_add() to the new version which uses
the struct argument.

Upcoming commits will convert the other ovn_lflow_add()-related macros
to use ovn_lflow_add(), where the __VA_ARGS__ will help to fill in
additional structure elements..

Signed-off-by: Mark Michelson <[email protected]>
---
 northd/lflow-mgr.c | 10 ++++++++++
 northd/lflow-mgr.h | 44 ++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/northd/lflow-mgr.c b/northd/lflow-mgr.c
index 43dd1d947..e4b71237d 100644
--- a/northd/lflow-mgr.c
+++ b/northd/lflow-mgr.c
@@ -773,6 +773,16 @@ lflow_table_add_lflow(struct lflow_table *lflow_table,
     lflow_hash_unlock(hash_lock);
 }
 
+void
+lflow_table_add_lflow__(struct lflow_table_add_args args)
+{
+    lflow_table_add_lflow(args.table, args.od, args.dp_bitmap,
+                          args.dp_bitmap_len, args.stage, args.priority,
+                          args.match, args.actions, args.io_port,
+                          args.ctrl_meter, args.stage_hint, args.where,
+                          args.flow_desc, args.lflow_ref);
+}
+
 struct ovn_dp_group *
 ovn_dp_group_get(struct hmap *dp_groups,
                  const struct dynamic_bitmap *desired_bitmap,
diff --git a/northd/lflow-mgr.h b/northd/lflow-mgr.h
index c1e72d1be..8667e8a5d 100644
--- a/northd/lflow-mgr.h
+++ b/northd/lflow-mgr.h
@@ -76,6 +76,24 @@ bool lflow_ref_sync_lflows(struct lflow_ref *,
                            const struct sbrec_logical_flow_table *,
                            const struct sbrec_logical_dp_group_table *);
 
+struct lflow_table_add_args {
+    struct lflow_table *table;
+    const struct ovn_datapath *od;
+    const unsigned long *dp_bitmap;
+    size_t dp_bitmap_len;
+    enum ovn_stage stage;
+    uint16_t priority;
+    const char *match;
+    const char *actions;
+    const char *io_port;
+    const char *ctrl_meter;
+    const struct ovsdb_idl_row *stage_hint;
+    const char *flow_desc;
+    struct lflow_ref *lflow_ref;
+    const char *where;
+};
+
+void lflow_table_add_lflow__(struct lflow_table_add_args args);
 
 void lflow_table_add_lflow(struct lflow_table *, const struct ovn_datapath *,
                            const unsigned long *dp_bitmap,
@@ -87,6 +105,20 @@ void lflow_table_add_lflow(struct lflow_table *, const 
struct ovn_datapath *,
                            const char *where, const char *flow_desc,
                            struct lflow_ref *);
 
+#define LFLOW_TABLE_ADD_ARGS_START(LFLOW_TABLE, OD, STAGE, PRIORITY, MATCH, \
+                                   ACTIONS, LFLOW_REF) \
+    (struct lflow_table_add_args) { \
+        .table = LFLOW_TABLE, \
+        .od = OD, \
+        .stage = STAGE, \
+        .priority = PRIORITY, \
+        .match = MATCH, \
+        .actions = ACTIONS, \
+        .lflow_ref = LFLOW_REF, \
+        .where = OVS_SOURCE_LOCATOR,
+
+#define LFLOW_TABLE_ADD_ARGS_END }
+
 /* Adds a row with the specified contents to the Logical_Flow table. */
 #define ovn_lflow_add_with_hint__(LFLOW_TABLE, OD, STAGE, PRIORITY, MATCH, \
                                   ACTIONS, IN_OUT_PORT, CTRL_METER, \
@@ -132,10 +164,14 @@ void lflow_table_add_lflow(struct lflow_table *, const 
struct ovn_datapath *,
                           OVS_SOURCE_LOCATOR, NULL, LFLOW_REF)
 
 #define ovn_lflow_add(LFLOW_TABLE, OD, STAGE, PRIORITY, MATCH, ACTIONS, \
-                      LFLOW_REF) \
-    lflow_table_add_lflow(LFLOW_TABLE, OD, NULL, 0, STAGE, PRIORITY, MATCH, \
-                          ACTIONS, NULL, NULL, NULL, OVS_SOURCE_LOCATOR, \
-                          NULL, LFLOW_REF)
+                      LFLOW_REF, ...) \
+    lflow_table_add_lflow__( \
+        LFLOW_TABLE_ADD_ARGS_START(LFLOW_TABLE, OD, STAGE, PRIORITY, MATCH, \
+                                   ACTIONS, LFLOW_REF) \
+        __VA_ARGS__ \
+        LFLOW_TABLE_ADD_ARGS_END \
+    )
+
 
 #define ovn_lflow_add_drop_with_desc(LFLOW_TABLE, OD, STAGE, PRIORITY, MATCH, \
                                      DESCRIPTION, LFLOW_REF) \
-- 
2.51.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to