Parse tokens for indirect action commands. */
| 7779 | |
| 7780 | /** Parse tokens for indirect action commands. */ |
| 7781 | static int |
| 7782 | parse_ia(struct context *ctx, const struct token *token, |
| 7783 | const char *str, unsigned int len, |
| 7784 | void *buf, unsigned int size) |
| 7785 | { |
| 7786 | struct buffer *out = buf; |
| 7787 | |
| 7788 | /* Token name must match. */ |
| 7789 | if (parse_default(ctx, token, str, len, NULL, 0) < 0) |
| 7790 | return -1; |
| 7791 | /* Nothing else to do if there is no buffer. */ |
| 7792 | if (!out) |
| 7793 | return len; |
| 7794 | if (!out->command) { |
| 7795 | if (ctx->curr != INDIRECT_ACTION) |
| 7796 | return -1; |
| 7797 | if (sizeof(*out) > size) |
| 7798 | return -1; |
| 7799 | out->command = ctx->curr; |
| 7800 | ctx->objdata = 0; |
| 7801 | ctx->object = out; |
| 7802 | ctx->objmask = NULL; |
| 7803 | out->args.vc.data = (uint8_t *)out + size; |
| 7804 | return len; |
| 7805 | } |
| 7806 | switch (ctx->curr) { |
| 7807 | case INDIRECT_ACTION_CREATE: |
| 7808 | case INDIRECT_ACTION_UPDATE: |
| 7809 | case INDIRECT_ACTION_QUERY_UPDATE: |
| 7810 | out->args.vc.actions = |
| 7811 | (void *)RTE_ALIGN_CEIL((uintptr_t)(out + 1), |
| 7812 | sizeof(double)); |
| 7813 | out->args.vc.attr.group = UINT32_MAX; |
| 7814 | /* fallthrough */ |
| 7815 | case INDIRECT_ACTION_QUERY: |
| 7816 | out->command = ctx->curr; |
| 7817 | ctx->objdata = 0; |
| 7818 | ctx->object = out; |
| 7819 | ctx->objmask = NULL; |
| 7820 | return len; |
| 7821 | case INDIRECT_ACTION_EGRESS: |
| 7822 | out->args.vc.attr.egress = 1; |
| 7823 | return len; |
| 7824 | case INDIRECT_ACTION_INGRESS: |
| 7825 | out->args.vc.attr.ingress = 1; |
| 7826 | return len; |
| 7827 | case INDIRECT_ACTION_TRANSFER: |
| 7828 | out->args.vc.attr.transfer = 1; |
| 7829 | return len; |
| 7830 | case INDIRECT_ACTION_QU_MODE: |
| 7831 | return len; |
| 7832 | case INDIRECT_ACTION_LIST: |
| 7833 | out->command = INDIRECT_ACTION_LIST_CREATE; |
| 7834 | return len; |
| 7835 | case INDIRECT_ACTION_FLOW_CONF: |
| 7836 | out->command = INDIRECT_ACTION_FLOW_CONF_CREATE; |
| 7837 | return len; |
| 7838 | default: |
nothing calls this directly
no test coverage detected