@@ -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);
@@ -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;
}
@@ -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 *);
@@ -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
@@ -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
@@ -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);
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(-)