Skip to content

Commit 8920d92

Browse files
kliteynSaeed Mahameed
authored andcommitted
net/mlx5: DR, Add support for flow metering ASO
Add support for ASO action of type flow metering on device that supports STEv1. Signed-off-by: Yevgeny Kliteynik <[email protected]> Reviewed-by: Hamdan Igbaria <[email protected]> Reviewed-by: Roi Dayan <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent ec082d3 commit 8920d92

File tree

6 files changed

+227
-0
lines changed

6 files changed

+227
-0
lines changed

drivers/net/ethernet/mellanox/mlx5/core/steering/dr_action.c

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ enum dr_action_valid_state {
2222
DR_ACTION_STATE_PUSH_VLAN,
2323
DR_ACTION_STATE_NON_TERM,
2424
DR_ACTION_STATE_TERM,
25+
DR_ACTION_STATE_ASO,
2526
DR_ACTION_STATE_MAX,
2627
};
2728

@@ -42,6 +43,7 @@ static const char * const action_type_to_str[] = {
4243
[DR_ACTION_TYP_SAMPLER] = "DR_ACTION_TYP_SAMPLER",
4344
[DR_ACTION_TYP_INSERT_HDR] = "DR_ACTION_TYP_INSERT_HDR",
4445
[DR_ACTION_TYP_REMOVE_HDR] = "DR_ACTION_TYP_REMOVE_HDR",
46+
[DR_ACTION_TYP_ASO_FLOW_METER] = "DR_ACTION_TYP_ASO_FLOW_METER",
4547
[DR_ACTION_TYP_MAX] = "DR_ACTION_UNKNOWN",
4648
};
4749

@@ -71,6 +73,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
7173
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
7274
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
7375
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
76+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
7477
},
7578
[DR_ACTION_STATE_DECAP] = {
7679
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -85,6 +88,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
8588
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
8689
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
8790
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
91+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
8892
},
8993
[DR_ACTION_STATE_ENCAP] = {
9094
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -93,6 +97,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
9397
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
9498
[DR_ACTION_TYP_TAG] = DR_ACTION_STATE_ENCAP,
9599
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ENCAP,
100+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
96101
},
97102
[DR_ACTION_STATE_MODIFY_HDR] = {
98103
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -105,6 +110,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
105110
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
106111
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
107112
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
113+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
108114
},
109115
[DR_ACTION_STATE_POP_VLAN] = {
110116
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -118,6 +124,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
118124
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
119125
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
120126
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
127+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
121128
},
122129
[DR_ACTION_STATE_PUSH_VLAN] = {
123130
[DR_ACTION_TYP_QP] = DR_ACTION_STATE_TERM,
@@ -128,6 +135,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
128135
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
129136
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
130137
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
138+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
131139
},
132140
[DR_ACTION_STATE_NON_TERM] = {
133141
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -145,6 +153,13 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
145153
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
146154
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
147155
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
156+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
157+
},
158+
[DR_ACTION_STATE_ASO] = {
159+
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
160+
[DR_ACTION_TYP_QP] = DR_ACTION_STATE_TERM,
161+
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
162+
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ASO,
148163
},
149164
[DR_ACTION_STATE_TERM] = {
150165
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_TERM,
@@ -163,18 +178,21 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
163178
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
164179
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
165180
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
181+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
166182
},
167183
[DR_ACTION_STATE_DECAP] = {
168184
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
169185
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
170186
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
171187
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_DECAP,
188+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
172189
},
173190
[DR_ACTION_STATE_ENCAP] = {
174191
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
175192
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
176193
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
177194
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ENCAP,
195+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
178196
},
179197
[DR_ACTION_STATE_MODIFY_HDR] = {
180198
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -185,6 +203,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
185203
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
186204
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
187205
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
206+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
188207
},
189208
[DR_ACTION_STATE_POP_VLAN] = {
190209
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
@@ -196,6 +215,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
196215
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
197216
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
198217
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
218+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
199219
},
200220
[DR_ACTION_STATE_PUSH_VLAN] = {
201221
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -206,6 +226,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
206226
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
207227
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
208228
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
229+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
209230
},
210231
[DR_ACTION_STATE_NON_TERM] = {
211232
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -219,6 +240,16 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
219240
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
220241
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
221242
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
243+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
244+
},
245+
[DR_ACTION_STATE_ASO] = {
246+
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
247+
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
248+
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
249+
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
250+
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ASO,
251+
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
252+
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
222253
},
223254
[DR_ACTION_STATE_TERM] = {
224255
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_TERM,
@@ -240,6 +271,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
240271
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
241272
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
242273
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
274+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
243275
},
244276
[DR_ACTION_STATE_DECAP] = {
245277
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -253,6 +285,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
253285
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
254286
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
255287
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
288+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
256289
},
257290
[DR_ACTION_STATE_ENCAP] = {
258291
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -261,6 +294,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
261294
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
262295
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
263296
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ENCAP,
297+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
264298
},
265299
[DR_ACTION_STATE_MODIFY_HDR] = {
266300
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -272,6 +306,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
272306
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
273307
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
274308
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
309+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
275310
},
276311
[DR_ACTION_STATE_POP_VLAN] = {
277312
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -284,6 +319,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
284319
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
285320
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
286321
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
322+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
287323
},
288324
[DR_ACTION_STATE_PUSH_VLAN] = {
289325
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -296,6 +332,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
296332
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
297333
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
298334
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
335+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
299336
},
300337
[DR_ACTION_STATE_NON_TERM] = {
301338
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -312,6 +349,13 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
312349
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
313350
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
314351
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
352+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
353+
},
354+
[DR_ACTION_STATE_ASO] = {
355+
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
356+
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
357+
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
358+
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ASO,
315359
},
316360
[DR_ACTION_STATE_TERM] = {
317361
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_TERM,
@@ -331,20 +375,23 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
331375
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
332376
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
333377
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
378+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
334379
},
335380
[DR_ACTION_STATE_DECAP] = {
336381
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
337382
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
338383
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_DECAP,
339384
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
340385
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
386+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
341387
},
342388
[DR_ACTION_STATE_ENCAP] = {
343389
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
344390
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
345391
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ENCAP,
346392
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
347393
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
394+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
348395
},
349396
[DR_ACTION_STATE_MODIFY_HDR] = {
350397
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -356,6 +403,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
356403
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
357404
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
358405
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
406+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
359407
},
360408
[DR_ACTION_STATE_POP_VLAN] = {
361409
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
@@ -368,6 +416,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
368416
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
369417
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
370418
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
419+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
371420
},
372421
[DR_ACTION_STATE_PUSH_VLAN] = {
373422
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -379,6 +428,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
379428
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
380429
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
381430
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
431+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
382432
},
383433
[DR_ACTION_STATE_NON_TERM] = {
384434
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
@@ -393,6 +443,17 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
393443
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
394444
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
395445
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
446+
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
447+
},
448+
[DR_ACTION_STATE_ASO] = {
449+
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
450+
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
451+
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
452+
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
453+
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
454+
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
455+
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
456+
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ASO,
396457
},
397458
[DR_ACTION_STATE_TERM] = {
398459
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_TERM,
@@ -738,6 +799,12 @@ int mlx5dr_actions_build_ste_arr(struct mlx5dr_matcher *matcher,
738799
attr.reformat.param_0 = action->reformat->param_0;
739800
attr.reformat.param_1 = action->reformat->param_1;
740801
break;
802+
case DR_ACTION_TYP_ASO_FLOW_METER:
803+
attr.aso_flow_meter.obj_id = action->aso->obj_id;
804+
attr.aso_flow_meter.offset = action->aso->offset;
805+
attr.aso_flow_meter.dest_reg_id = action->aso->dest_reg_id;
806+
attr.aso_flow_meter.init_color = action->aso->init_color;
807+
break;
741808
default:
742809
mlx5dr_err(dmn, "Unsupported action type %d\n", action_type);
743810
return -EINVAL;
@@ -798,6 +865,7 @@ static unsigned int action_size[DR_ACTION_TYP_MAX] = {
798865
[DR_ACTION_TYP_INSERT_HDR] = sizeof(struct mlx5dr_action_reformat),
799866
[DR_ACTION_TYP_REMOVE_HDR] = sizeof(struct mlx5dr_action_reformat),
800867
[DR_ACTION_TYP_SAMPLER] = sizeof(struct mlx5dr_action_sampler),
868+
[DR_ACTION_TYP_ASO_FLOW_METER] = sizeof(struct mlx5dr_action_aso_flow_meter),
801869
};
802870

803871
static struct mlx5dr_action *
@@ -1830,6 +1898,34 @@ mlx5dr_action_create_dest_vport(struct mlx5dr_domain *dmn,
18301898
return action;
18311899
}
18321900

1901+
struct mlx5dr_action *
1902+
mlx5dr_action_create_aso(struct mlx5dr_domain *dmn, u32 obj_id,
1903+
u8 dest_reg_id, u8 aso_type,
1904+
u8 init_color, u8 meter_id)
1905+
{
1906+
struct mlx5dr_action *action;
1907+
1908+
if (aso_type != MLX5_EXE_ASO_FLOW_METER)
1909+
return NULL;
1910+
1911+
if (init_color > MLX5_FLOW_METER_COLOR_UNDEFINED)
1912+
return NULL;
1913+
1914+
action = dr_action_create_generic(DR_ACTION_TYP_ASO_FLOW_METER);
1915+
if (!action)
1916+
return NULL;
1917+
1918+
action->aso->obj_id = obj_id;
1919+
action->aso->offset = meter_id;
1920+
action->aso->dest_reg_id = dest_reg_id;
1921+
action->aso->init_color = init_color;
1922+
action->aso->dmn = dmn;
1923+
1924+
refcount_inc(&dmn->refcount);
1925+
1926+
return action;
1927+
}
1928+
18331929
int mlx5dr_action_destroy(struct mlx5dr_action *action)
18341930
{
18351931
if (WARN_ON_ONCE(refcount_read(&action->refcount) > 1))
@@ -1881,6 +1977,9 @@ int mlx5dr_action_destroy(struct mlx5dr_action *action)
18811977
case DR_ACTION_TYP_SAMPLER:
18821978
refcount_dec(&action->sampler->dmn->refcount);
18831979
break;
1980+
case DR_ACTION_TYP_ASO_FLOW_METER:
1981+
refcount_dec(&action->aso->dmn->refcount);
1982+
break;
18841983
default:
18851984
break;
18861985
}

0 commit comments

Comments
 (0)