| 3165 | } |
| 3166 | |
| 3167 | static uint32_t |
| 3168 | parse_table_action_meter(char **tokens, |
| 3169 | uint32_t n_tokens, |
| 3170 | struct table_rule_action *a) |
| 3171 | { |
| 3172 | if ((n_tokens == 0) || strcmp(tokens[0], "meter")) |
| 3173 | return 0; |
| 3174 | |
| 3175 | tokens++; |
| 3176 | n_tokens--; |
| 3177 | |
| 3178 | if ((n_tokens < 10) || |
| 3179 | strcmp(tokens[0], "tc0") || |
| 3180 | (parse_table_action_meter_tc(tokens + 1, |
| 3181 | n_tokens - 1, |
| 3182 | &a->mtr.mtr[0]) == 0)) |
| 3183 | return 0; |
| 3184 | |
| 3185 | tokens += 10; |
| 3186 | n_tokens -= 10; |
| 3187 | |
| 3188 | if ((n_tokens == 0) || strcmp(tokens[0], "tc1")) { |
| 3189 | a->mtr.tc_mask = 1; |
| 3190 | a->action_mask |= 1 << RTE_TABLE_ACTION_MTR; |
| 3191 | return 1 + 10; |
| 3192 | } |
| 3193 | |
| 3194 | if ((n_tokens < 30) || |
| 3195 | (parse_table_action_meter_tc(tokens + 1, |
| 3196 | n_tokens - 1, &a->mtr.mtr[1]) == 0) || |
| 3197 | strcmp(tokens[10], "tc2") || |
| 3198 | (parse_table_action_meter_tc(tokens + 11, |
| 3199 | n_tokens - 11, &a->mtr.mtr[2]) == 0) || |
| 3200 | strcmp(tokens[20], "tc3") || |
| 3201 | (parse_table_action_meter_tc(tokens + 21, |
| 3202 | n_tokens - 21, &a->mtr.mtr[3]) == 0)) |
| 3203 | return 0; |
| 3204 | |
| 3205 | a->mtr.tc_mask = 0xF; |
| 3206 | a->action_mask |= 1 << RTE_TABLE_ACTION_MTR; |
| 3207 | return 1 + 10 + 3 * 10; |
| 3208 | } |
| 3209 | |
| 3210 | static uint32_t |
| 3211 | parse_table_action_tm(char **tokens, |
no test coverage detected