This is a preliminary patch to move metering management in IP engine.
Signed-off-by: Lorenzo Bianconi <[email protected]>
---
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 --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);
--
2.35.1
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev