odp_actions_add(struct odp_actions *actions, uint16_t type)
{
union odp_action *a;
- if (actions->n_actions < MAX_ODP_ACTIONS) {
- a = &actions->actions[actions->n_actions++];
- } else {
- COVERAGE_INC(odp_overflow);
- actions->n_actions = MAX_ODP_ACTIONS + 1;
- a = &actions->actions[MAX_ODP_ACTIONS - 1];
- }
+ size_t idx;
+
+ idx = actions->n_actions++ & (MAX_ODP_ACTIONS - 1);
+ a = &actions->actions[idx];
memset(a, 0, sizeof *a);
a->type = type;
return a;
case ODPAT_OUTPUT:
ds_put_format(ds, "%"PRIu16, a->output.port);
break;
- case ODPAT_OUTPUT_GROUP:
- ds_put_format(ds, "g%"PRIu16, a->output_group.group);
- break;
case ODPAT_CONTROLLER:
ds_put_format(ds, "ctl(%"PRIu32")", a->controller.arg);
break;
case ODPAT_SET_TP_DST:
ds_put_format(ds, "set_tp_dst(%"PRIu16")", ntohs(a->tp_port.tp_port));
break;
+ case ODPAT_SET_PRIORITY:
+ ds_put_format(ds, "set_priority(0x%"PRIx32")", a->priority.priority);
+ break;
+ case ODPAT_POP_PRIORITY:
+ ds_put_cstr(ds, "pop_priority");
+ break;
+ case ODPAT_DROP_SPOOFED_ARP:
+ ds_put_cstr(ds, "drop_spoofed_arp");
+ break;
default:
ds_put_format(ds, "***bad action 0x%"PRIx16"***", a->type);
break;