diff mbox series

[ovs-dev,v5,1/2] lib: limit table_id space for meters

Message ID 824e0228a37658370ccb3bc556d6aaa2e4b7f0aa.1645778172.git.lorenzo.bianconi@redhat.com
State Superseded
Headers show
Series reconfigure ovs meters for ovn meters updates | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes success github build: passed

Commit Message

Lorenzo Bianconi Feb. 25, 2022, 8:44 a.m. UTC
This is a preliminary patch to move metering management in IP engine.

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
---
 controller/ovn-controller.c |  4 ++--
 lib/extend-table.c          |  6 ++++--
 lib/extend-table.h          |  3 ++-
 tests/ovn-controller.at     |  6 +++---
 tests/ovn.at                | 10 +++++-----
 tests/test-ovn.c            |  4 ++--
 6 files changed, 18 insertions(+), 15 deletions(-)
diff mbox series

Patch

diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c
index c09018243..b3f5af9cb 100644
--- a/controller/ovn-controller.c
+++ b/controller/ovn-controller.c
@@ -2366,8 +2366,8 @@  en_lflow_output_init(struct engine_node *node OVS_UNUSED,
 {
     struct ed_type_lflow_output *data = xzalloc(sizeof *data);
     ovn_desired_flow_table_init(&data->flow_table);
-    ovn_extend_table_init(&data->group_table);
-    ovn_extend_table_init(&data->meter_table);
+    ovn_extend_table_init(&data->group_table, 0);
+    ovn_extend_table_init(&data->meter_table, MAX_EXT_TABLE_ID / 2 + 1);
     lflow_resource_init(&data->lflow_resource_ref);
     lflow_conj_ids_init(&data->conj_ids);
     hmap_init(&data->lflows_processed);
diff --git a/lib/extend-table.c b/lib/extend-table.c
index c708e24b9..2b2c5e3bd 100644
--- a/lib/extend-table.c
+++ b/lib/extend-table.c
@@ -30,9 +30,10 @@  ovn_extend_table_delete_desired(struct ovn_extend_table *table,
                                 struct ovn_extend_table_lflow_to_desired *l);
 
 void
-ovn_extend_table_init(struct ovn_extend_table *table)
+ovn_extend_table_init(struct ovn_extend_table *table, size_t offset)
 {
     table->table_ids = bitmap_allocate(MAX_EXT_TABLE_ID);
+    table->table_ids_offset = offset;
     bitmap_set1(table->table_ids, 0); /* table id 0 is invalid. */
     hmap_init(&table->desired);
     hmap_init(&table->lflow_to_desired);
@@ -316,7 +317,8 @@  ovn_extend_table_assign_id(struct ovn_extend_table *table, const char *name,
     bool new_table_id = false;
     if (!table_id) {
         /* Reserve a new group_id. */
-        table_id = bitmap_scan(table->table_ids, 0, 1, MAX_EXT_TABLE_ID + 1);
+        table_id = bitmap_scan(table->table_ids, 0, table->table_ids_offset,
+                               MAX_EXT_TABLE_ID + 1);
         new_table_id = true;
     }
 
diff --git a/lib/extend-table.h b/lib/extend-table.h
index 4d80cfd80..fb3e2ebea 100644
--- a/lib/extend-table.h
+++ b/lib/extend-table.h
@@ -30,6 +30,7 @@  struct ovn_extend_table {
     unsigned long *table_ids;  /* Used as a bitmap with value set
                                 * for allocated group ids in either
                                 * desired or existing. */
+    size_t table_ids_offset;   /* table first id offset */
     struct hmap desired;
     struct hmap lflow_to_desired; /* Index for looking up desired table
                                    * items from given lflow uuid, with
@@ -72,7 +73,7 @@  struct ovn_extend_table_lflow_ref {
     struct ovn_extend_table_info *desired;
 };
 
-void ovn_extend_table_init(struct ovn_extend_table *);
+void ovn_extend_table_init(struct ovn_extend_table *, size_t);
 
 void ovn_extend_table_destroy(struct ovn_extend_table *);
 
diff --git a/tests/ovn-controller.at b/tests/ovn-controller.at
index 6e4c24f0f..f5e5448a4 100644
--- a/tests/ovn-controller.at
+++ b/tests/ovn-controller.at
@@ -725,7 +725,7 @@  check ovn-nbctl meter-add event-elb drop 100 pktps 10
 check ovn-nbctl --wait=hv copp-add copp0 event-elb event-elb
 check ovn-nbctl --wait=hv ls-copp-add copp0 ls1
 
-AT_CHECK([as hv1 ovs-ofctl dump-flows br-int | grep controller | grep userdata=00.00.00.0f | grep -q meter_id=1])
+AT_CHECK([as hv1 ovs-ofctl dump-flows br-int | grep controller | grep userdata=00.00.00.0f | grep -q meter_id=32768])
 
 check ovn-nbctl copp-del copp0
 AT_CHECK([ovn-nbctl copp-list copp0], [0], [dnl
@@ -738,13 +738,13 @@  check ovn-nbctl --wait=hv copp-add copp1 reject acl-meter
 check ovn-nbctl ls-copp-add copp1 ls1
 check ovn-nbctl --wait=hv acl-add ls1 from-lport 1002 'inport == "lsp1" && ip && udp' reject
 
-AT_CHECK([as hv1 ovs-ofctl dump-flows br-int | grep controller | grep userdata=00.00.00.16 | grep -q meter_id=1])
+AT_CHECK([as hv1 ovs-ofctl dump-flows br-int | grep controller | grep userdata=00.00.00.16 | grep -q meter_id=32768])
 
 # arp metering
 check ovn-nbctl meter-add arp-meter drop 200 pktps 0
 check ovn-nbctl --wait=hv copp-add copp2 arp-resolve arp-meter
 check ovn-nbctl --wait=hv lr-copp-add copp2 lr1
-AT_CHECK([as hv1 ovs-ofctl dump-flows br-int | grep controller | grep userdata=00.00.00.00 | grep -q meter_id=2])
+AT_CHECK([as hv1 ovs-ofctl dump-flows br-int | grep controller | grep userdata=00.00.00.00 | grep -q meter_id=32769])
 
 OVN_CLEANUP([hv1])
 AT_CLEANUP
diff --git a/tests/ovn.at b/tests/ovn.at
index fa0e0a4a2..7adf6003d 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -1584,13 +1584,13 @@  reg1[0] = dns_lookup("foo");
 set_meter(0);
     Rate 0 for set_meter is not in valid.
 set_meter(1);
-    encodes as meter:1
+    encodes as meter:32768
 set_meter(100, 1000);
-    encodes as meter:2
+    encodes as meter:32769
 set_meter(100, 1000, );
     Syntax error at `,' expecting `)'.
 set_meter(4294967295, 4294967295);
-    encodes as meter:3
+    encodes as meter:32770
 
 # log
 log(verdict=allow, severity=warning);
@@ -9159,8 +9159,8 @@  AT_SKIP_IF([test $d_secs -gt 9])
 
 # Print some information that may help debugging.
 AT_CHECK([as hv ovs-appctl -t ovn-controller meter-table-list], [0], [dnl
-http-rl1: 1
-http-rl2: 2
+http-rl1: 32768
+http-rl2: 32769
 ])
 as hv ovs-ofctl -O OpenFlow13 meter-stats br-int
 
diff --git a/tests/test-ovn.c b/tests/test-ovn.c
index d79c6a5bc..b3be863d8 100644
--- a/tests/test-ovn.c
+++ b/tests/test-ovn.c
@@ -1290,11 +1290,11 @@  test_parse_actions(struct ovs_cmdl_context *ctx OVS_UNUSED)
 
     /* Initialize group ids. */
     struct ovn_extend_table group_table;
-    ovn_extend_table_init(&group_table);
+    ovn_extend_table_init(&group_table, 0);
 
     /* Initialize meter ids for QoS. */
     struct ovn_extend_table meter_table;
-    ovn_extend_table_init(&meter_table);
+    ovn_extend_table_init(&meter_table, MAX_EXT_TABLE_ID / 2 + 1);
 
     simap_init(&ports);
     simap_put(&ports, "eth0", 5);