@@ -22,6 +22,7 @@ enum dr_action_valid_state {
22
22
DR_ACTION_STATE_PUSH_VLAN ,
23
23
DR_ACTION_STATE_NON_TERM ,
24
24
DR_ACTION_STATE_TERM ,
25
+ DR_ACTION_STATE_ASO ,
25
26
DR_ACTION_STATE_MAX ,
26
27
};
27
28
@@ -42,6 +43,7 @@ static const char * const action_type_to_str[] = {
42
43
[DR_ACTION_TYP_SAMPLER ] = "DR_ACTION_TYP_SAMPLER" ,
43
44
[DR_ACTION_TYP_INSERT_HDR ] = "DR_ACTION_TYP_INSERT_HDR" ,
44
45
[DR_ACTION_TYP_REMOVE_HDR ] = "DR_ACTION_TYP_REMOVE_HDR" ,
46
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = "DR_ACTION_TYP_ASO_FLOW_METER" ,
45
47
[DR_ACTION_TYP_MAX ] = "DR_ACTION_UNKNOWN" ,
46
48
};
47
49
@@ -71,6 +73,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
71
73
[DR_ACTION_TYP_MODIFY_HDR ] = DR_ACTION_STATE_MODIFY_HDR ,
72
74
[DR_ACTION_TYP_POP_VLAN ] = DR_ACTION_STATE_POP_VLAN ,
73
75
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
76
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
74
77
},
75
78
[DR_ACTION_STATE_DECAP ] = {
76
79
[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]
85
88
[DR_ACTION_TYP_MODIFY_HDR ] = DR_ACTION_STATE_MODIFY_HDR ,
86
89
[DR_ACTION_TYP_POP_VLAN ] = DR_ACTION_STATE_POP_VLAN ,
87
90
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
91
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
88
92
},
89
93
[DR_ACTION_STATE_ENCAP ] = {
90
94
[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]
93
97
[DR_ACTION_TYP_SAMPLER ] = DR_ACTION_STATE_TERM ,
94
98
[DR_ACTION_TYP_TAG ] = DR_ACTION_STATE_ENCAP ,
95
99
[DR_ACTION_TYP_CTR ] = DR_ACTION_STATE_ENCAP ,
100
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
96
101
},
97
102
[DR_ACTION_STATE_MODIFY_HDR ] = {
98
103
[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]
105
110
[DR_ACTION_TYP_L2_TO_TNL_L3 ] = DR_ACTION_STATE_ENCAP ,
106
111
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
107
112
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
113
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
108
114
},
109
115
[DR_ACTION_STATE_POP_VLAN ] = {
110
116
[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]
118
124
[DR_ACTION_TYP_L2_TO_TNL_L2 ] = DR_ACTION_STATE_ENCAP ,
119
125
[DR_ACTION_TYP_L2_TO_TNL_L3 ] = DR_ACTION_STATE_ENCAP ,
120
126
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
127
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
121
128
},
122
129
[DR_ACTION_STATE_PUSH_VLAN ] = {
123
130
[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]
128
135
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
129
136
[DR_ACTION_TYP_L2_TO_TNL_L2 ] = DR_ACTION_STATE_ENCAP ,
130
137
[DR_ACTION_TYP_L2_TO_TNL_L3 ] = DR_ACTION_STATE_ENCAP ,
138
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
131
139
},
132
140
[DR_ACTION_STATE_NON_TERM ] = {
133
141
[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]
145
153
[DR_ACTION_TYP_MODIFY_HDR ] = DR_ACTION_STATE_MODIFY_HDR ,
146
154
[DR_ACTION_TYP_POP_VLAN ] = DR_ACTION_STATE_POP_VLAN ,
147
155
[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 ,
148
163
},
149
164
[DR_ACTION_STATE_TERM ] = {
150
165
[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]
163
178
[DR_ACTION_TYP_MODIFY_HDR ] = DR_ACTION_STATE_MODIFY_HDR ,
164
179
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
165
180
[DR_ACTION_TYP_POP_VLAN ] = DR_ACTION_STATE_POP_VLAN ,
181
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
166
182
},
167
183
[DR_ACTION_STATE_DECAP ] = {
168
184
[DR_ACTION_TYP_DROP ] = DR_ACTION_STATE_TERM ,
169
185
[DR_ACTION_TYP_FT ] = DR_ACTION_STATE_TERM ,
170
186
[DR_ACTION_TYP_SAMPLER ] = DR_ACTION_STATE_TERM ,
171
187
[DR_ACTION_TYP_CTR ] = DR_ACTION_STATE_DECAP ,
188
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
172
189
},
173
190
[DR_ACTION_STATE_ENCAP ] = {
174
191
[DR_ACTION_TYP_DROP ] = DR_ACTION_STATE_TERM ,
175
192
[DR_ACTION_TYP_FT ] = DR_ACTION_STATE_TERM ,
176
193
[DR_ACTION_TYP_SAMPLER ] = DR_ACTION_STATE_TERM ,
177
194
[DR_ACTION_TYP_CTR ] = DR_ACTION_STATE_ENCAP ,
195
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
178
196
},
179
197
[DR_ACTION_STATE_MODIFY_HDR ] = {
180
198
[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]
185
203
[DR_ACTION_TYP_L2_TO_TNL_L3 ] = DR_ACTION_STATE_ENCAP ,
186
204
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
187
205
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
206
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
188
207
},
189
208
[DR_ACTION_STATE_POP_VLAN ] = {
190
209
[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]
196
215
[DR_ACTION_TYP_L2_TO_TNL_L2 ] = DR_ACTION_STATE_ENCAP ,
197
216
[DR_ACTION_TYP_L2_TO_TNL_L3 ] = DR_ACTION_STATE_ENCAP ,
198
217
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
218
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
199
219
},
200
220
[DR_ACTION_STATE_PUSH_VLAN ] = {
201
221
[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]
206
226
[DR_ACTION_TYP_L2_TO_TNL_L2 ] = DR_ACTION_STATE_ENCAP ,
207
227
[DR_ACTION_TYP_L2_TO_TNL_L3 ] = DR_ACTION_STATE_ENCAP ,
208
228
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
229
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
209
230
},
210
231
[DR_ACTION_STATE_NON_TERM ] = {
211
232
[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]
219
240
[DR_ACTION_TYP_MODIFY_HDR ] = DR_ACTION_STATE_MODIFY_HDR ,
220
241
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
221
242
[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 ,
222
253
},
223
254
[DR_ACTION_STATE_TERM ] = {
224
255
[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]
240
271
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
241
272
[DR_ACTION_TYP_POP_VLAN ] = DR_ACTION_STATE_POP_VLAN ,
242
273
[DR_ACTION_TYP_VPORT ] = DR_ACTION_STATE_TERM ,
274
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
243
275
},
244
276
[DR_ACTION_STATE_DECAP ] = {
245
277
[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]
253
285
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
254
286
[DR_ACTION_TYP_POP_VLAN ] = DR_ACTION_STATE_POP_VLAN ,
255
287
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
288
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
256
289
},
257
290
[DR_ACTION_STATE_ENCAP ] = {
258
291
[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]
261
294
[DR_ACTION_TYP_VPORT ] = DR_ACTION_STATE_TERM ,
262
295
[DR_ACTION_TYP_SAMPLER ] = DR_ACTION_STATE_TERM ,
263
296
[DR_ACTION_TYP_CTR ] = DR_ACTION_STATE_ENCAP ,
297
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
264
298
},
265
299
[DR_ACTION_STATE_MODIFY_HDR ] = {
266
300
[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]
272
306
[DR_ACTION_TYP_L2_TO_TNL_L3 ] = DR_ACTION_STATE_ENCAP ,
273
307
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
274
308
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
309
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
275
310
},
276
311
[DR_ACTION_STATE_POP_VLAN ] = {
277
312
[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]
284
319
[DR_ACTION_TYP_L2_TO_TNL_L2 ] = DR_ACTION_STATE_ENCAP ,
285
320
[DR_ACTION_TYP_L2_TO_TNL_L3 ] = DR_ACTION_STATE_ENCAP ,
286
321
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
322
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
287
323
},
288
324
[DR_ACTION_STATE_PUSH_VLAN ] = {
289
325
[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]
296
332
[DR_ACTION_TYP_L2_TO_TNL_L2 ] = DR_ACTION_STATE_ENCAP ,
297
333
[DR_ACTION_TYP_L2_TO_TNL_L3 ] = DR_ACTION_STATE_ENCAP ,
298
334
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
335
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
299
336
},
300
337
[DR_ACTION_STATE_NON_TERM ] = {
301
338
[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]
312
349
[DR_ACTION_TYP_POP_VLAN ] = DR_ACTION_STATE_POP_VLAN ,
313
350
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
314
351
[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 ,
315
359
},
316
360
[DR_ACTION_STATE_TERM ] = {
317
361
[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]
331
375
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
332
376
[DR_ACTION_TYP_POP_VLAN ] = DR_ACTION_STATE_POP_VLAN ,
333
377
[DR_ACTION_TYP_VPORT ] = DR_ACTION_STATE_TERM ,
378
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
334
379
},
335
380
[DR_ACTION_STATE_DECAP ] = {
336
381
[DR_ACTION_TYP_DROP ] = DR_ACTION_STATE_TERM ,
337
382
[DR_ACTION_TYP_FT ] = DR_ACTION_STATE_TERM ,
338
383
[DR_ACTION_TYP_CTR ] = DR_ACTION_STATE_DECAP ,
339
384
[DR_ACTION_TYP_VPORT ] = DR_ACTION_STATE_TERM ,
340
385
[DR_ACTION_TYP_SAMPLER ] = DR_ACTION_STATE_TERM ,
386
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
341
387
},
342
388
[DR_ACTION_STATE_ENCAP ] = {
343
389
[DR_ACTION_TYP_DROP ] = DR_ACTION_STATE_TERM ,
344
390
[DR_ACTION_TYP_FT ] = DR_ACTION_STATE_TERM ,
345
391
[DR_ACTION_TYP_CTR ] = DR_ACTION_STATE_ENCAP ,
346
392
[DR_ACTION_TYP_SAMPLER ] = DR_ACTION_STATE_TERM ,
347
393
[DR_ACTION_TYP_VPORT ] = DR_ACTION_STATE_TERM ,
394
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
348
395
},
349
396
[DR_ACTION_STATE_MODIFY_HDR ] = {
350
397
[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]
356
403
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
357
404
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
358
405
[DR_ACTION_TYP_VPORT ] = DR_ACTION_STATE_TERM ,
406
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
359
407
},
360
408
[DR_ACTION_STATE_POP_VLAN ] = {
361
409
[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]
368
416
[DR_ACTION_TYP_L2_TO_TNL_L3 ] = DR_ACTION_STATE_ENCAP ,
369
417
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
370
418
[DR_ACTION_TYP_VPORT ] = DR_ACTION_STATE_TERM ,
419
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
371
420
},
372
421
[DR_ACTION_STATE_PUSH_VLAN ] = {
373
422
[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]
379
428
[DR_ACTION_TYP_L2_TO_TNL_L3 ] = DR_ACTION_STATE_ENCAP ,
380
429
[DR_ACTION_TYP_INSERT_HDR ] = DR_ACTION_STATE_ENCAP ,
381
430
[DR_ACTION_TYP_VPORT ] = DR_ACTION_STATE_TERM ,
431
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = DR_ACTION_STATE_ASO ,
382
432
},
383
433
[DR_ACTION_STATE_NON_TERM ] = {
384
434
[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]
393
443
[DR_ACTION_TYP_PUSH_VLAN ] = DR_ACTION_STATE_PUSH_VLAN ,
394
444
[DR_ACTION_TYP_POP_VLAN ] = DR_ACTION_STATE_POP_VLAN ,
395
445
[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 ,
396
457
},
397
458
[DR_ACTION_STATE_TERM ] = {
398
459
[DR_ACTION_TYP_CTR ] = DR_ACTION_STATE_TERM ,
@@ -738,6 +799,12 @@ int mlx5dr_actions_build_ste_arr(struct mlx5dr_matcher *matcher,
738
799
attr .reformat .param_0 = action -> reformat -> param_0 ;
739
800
attr .reformat .param_1 = action -> reformat -> param_1 ;
740
801
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 ;
741
808
default :
742
809
mlx5dr_err (dmn , "Unsupported action type %d\n" , action_type );
743
810
return - EINVAL ;
@@ -798,6 +865,7 @@ static unsigned int action_size[DR_ACTION_TYP_MAX] = {
798
865
[DR_ACTION_TYP_INSERT_HDR ] = sizeof (struct mlx5dr_action_reformat ),
799
866
[DR_ACTION_TYP_REMOVE_HDR ] = sizeof (struct mlx5dr_action_reformat ),
800
867
[DR_ACTION_TYP_SAMPLER ] = sizeof (struct mlx5dr_action_sampler ),
868
+ [DR_ACTION_TYP_ASO_FLOW_METER ] = sizeof (struct mlx5dr_action_aso_flow_meter ),
801
869
};
802
870
803
871
static struct mlx5dr_action *
@@ -1830,6 +1898,34 @@ mlx5dr_action_create_dest_vport(struct mlx5dr_domain *dmn,
1830
1898
return action ;
1831
1899
}
1832
1900
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
+
1833
1929
int mlx5dr_action_destroy (struct mlx5dr_action * action )
1834
1930
{
1835
1931
if (WARN_ON_ONCE (refcount_read (& action -> refcount ) > 1 ))
@@ -1881,6 +1977,9 @@ int mlx5dr_action_destroy(struct mlx5dr_action *action)
1881
1977
case DR_ACTION_TYP_SAMPLER :
1882
1978
refcount_dec (& action -> sampler -> dmn -> refcount );
1883
1979
break ;
1980
+ case DR_ACTION_TYP_ASO_FLOW_METER :
1981
+ refcount_dec (& action -> aso -> dmn -> refcount );
1982
+ break ;
1884
1983
default :
1885
1984
break ;
1886
1985
}
0 commit comments