dpdk/lib/pipeline/rte_swx_pipeline_spec.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(c) 2022 Intel Corporation
   3 */
   4#ifndef __INCLUDE_RTE_SWX_PIPELINE_SPEC_H__
   5#define __INCLUDE_RTE_SWX_PIPELINE_SPEC_H__
   6
   7#ifdef __cplusplus
   8extern "C" {
   9#endif
  10
  11#include <stdint.h>
  12#include <stdio.h>
  13
  14#include <rte_common.h>
  15
  16#include <rte_swx_pipeline.h>
  17
  18/*
  19 * extobj.
  20 *
  21 * extobj OBJ_NAME instanceof OBJ_TYPE [ pragma OBJ_CREATE_ARGS ]
  22 */
  23struct extobj_spec {
  24        char *name;
  25        char *extern_type_name;
  26        char *pragma;
  27};
  28
  29/*
  30 * struct.
  31 *
  32 * struct STRUCT_TYPE_NAME {
  33 *      bit<SIZE> | varbit<SIZE> FIELD_NAME
  34 *      ...
  35 * }
  36 */
  37struct struct_spec {
  38        char *name;
  39        struct rte_swx_field_params *fields;
  40        uint32_t n_fields;
  41        int varbit;
  42};
  43
  44/*
  45 * header.
  46 *
  47 * header HEADER_NAME instanceof STRUCT_TYPE_NAME
  48 */
  49struct header_spec {
  50        char *name;
  51        char *struct_type_name;
  52};
  53
  54/*
  55 * metadata.
  56 *
  57 * metadata instanceof STRUCT_TYPE_NAME
  58 */
  59struct metadata_spec {
  60        char *struct_type_name;
  61};
  62
  63/*
  64 * action.
  65 *
  66 * action ACTION_NAME args none | instanceof STRUCT_TYPE_NAME {
  67 *      INSTRUCTION
  68 *      ...
  69 * }
  70 */
  71struct action_spec {
  72        char *name;
  73        char *args_struct_type_name;
  74        const char **instructions;
  75        uint32_t n_instructions;
  76};
  77
  78/*
  79 * table.
  80 *
  81 * table TABLE_NAME {
  82 *      key {
  83 *              MATCH_FIELD_NAME exact | wildcard | lpm
  84 *              ...
  85 *      }
  86 *      actions {
  87 *              ACTION_NAME [ @tableonly | @defaultonly ]
  88 *              ...
  89 *      }
  90 *      default_action ACTION_NAME args none | ARG0_NAME ARG0_VALUE ... [ const ]
  91 *      hash HASH_FUNCTION_NAME
  92 *      instanceof TABLE_TYPE_NAME
  93 *      pragma ARGS
  94 *      size SIZE
  95 * }
  96 */
  97struct table_spec {
  98        char *name;
  99        struct rte_swx_pipeline_table_params params;
 100        char *recommended_table_type_name;
 101        char *args;
 102        uint32_t size;
 103};
 104
 105/*
 106 * selector.
 107 *
 108 * selector SELECTOR_NAME {
 109 *      group_id FIELD_NAME
 110 *      selector {
 111 *              FIELD_NAME
 112 *              ...
 113 *      }
 114 *      member_id FIELD_NAME
 115 *      n_groups N_GROUPS
 116 *      n_members_per_group N_MEMBERS_PER_GROUP
 117 * }
 118 */
 119struct selector_spec {
 120        char *name;
 121        struct rte_swx_pipeline_selector_params params;
 122};
 123
 124/*
 125 * learner.
 126 *
 127 * learner LEARNER_NAME {
 128 *      key {
 129 *              MATCH_FIELD_NAME
 130 *              ...
 131 *      }
 132 *      actions {
 133 *              ACTION_NAME [ @tableonly | @defaultonly]
 134 *              ...
 135 *      }
 136 *      default_action ACTION_NAME args none | ARG0_NAME ARG0_VALUE ... [ const ]
 137 *      hash HASH_FUNCTION_NAME
 138 *      size SIZE
 139 *      timeout {
 140 *              TIMEOUT_IN_SECONDS
 141 *              ...
 142 *      }
 143 * }
 144 */
 145struct learner_spec {
 146        char *name;
 147        struct rte_swx_pipeline_learner_params params;
 148        uint32_t size;
 149        uint32_t *timeout;
 150        uint32_t n_timeouts;
 151};
 152
 153/*
 154 * regarray.
 155 *
 156 * regarray NAME size SIZE initval INITVAL
 157 */
 158struct regarray_spec {
 159        char *name;
 160        uint64_t init_val;
 161        uint32_t size;
 162};
 163
 164/*
 165 * metarray.
 166 *
 167 * metarray NAME size SIZE
 168 */
 169struct metarray_spec {
 170        char *name;
 171        uint32_t size;
 172};
 173
 174/*
 175 * apply.
 176 *
 177 * apply {
 178 *      INSTRUCTION
 179 *      ...
 180 * }
 181 */
 182struct apply_spec {
 183        const char **instructions;
 184        uint32_t n_instructions;
 185};
 186
 187/*
 188 * Pipeline.
 189 */
 190struct pipeline_spec {
 191        struct extobj_spec *extobjs;
 192        struct struct_spec *structs;
 193        struct header_spec *headers;
 194        struct metadata_spec *metadata;
 195        struct action_spec *actions;
 196        struct table_spec *tables;
 197        struct selector_spec *selectors;
 198        struct learner_spec *learners;
 199        struct regarray_spec *regarrays;
 200        struct metarray_spec *metarrays;
 201        struct apply_spec *apply;
 202
 203        uint32_t n_extobjs;
 204        uint32_t n_structs;
 205        uint32_t n_headers;
 206        uint32_t n_metadata;
 207        uint32_t n_actions;
 208        uint32_t n_tables;
 209        uint32_t n_selectors;
 210        uint32_t n_learners;
 211        uint32_t n_regarrays;
 212        uint32_t n_metarrays;
 213        uint32_t n_apply;
 214};
 215
 216/*
 217 * Mirroring:
 218 *      mirroring slots <n_slots> sessions <n_sessions>
 219 *
 220 * Input ports:
 221 *      port in <port_id> ethdev <ethdev_name> rxq <queue_id> bsz <burst_size>
 222 *      port in <port_id> ring <ring_name> bsz <burst_size>
 223 *      port in <port_id> source mempool <mempool_name> file <file_name> loop <n_loops>
 224 *                               packets <n_pkts_max>
 225 *      port in <port_id> fd <file_descriptor> mtu <mtu> mempool <mempool_name> bsz <burst_size>
 226 *
 227 * Output ports:
 228 *      port out <port_id> ethdev <ethdev_name> txq <queue_id> bsz <burst_size>
 229 *      port out <port_id> ring <ring_name> bsz <burst_size>
 230 *      port out <port_id> sink file <file_name> | none
 231 *      port out <port_id> fd <file_descriptor> bsz <burst_size>
 232 */
 233struct pipeline_iospec {
 234        struct rte_swx_pipeline_mirroring_params mirroring_params;
 235
 236        uint32_t *port_in_id;
 237        const char **port_in_type;
 238        void **port_in_params;
 239
 240        uint32_t *port_out_id;
 241        const char **port_out_type;
 242        void **port_out_params;
 243
 244        uint32_t n_ports_in;
 245        uint32_t n_ports_out;
 246};
 247
 248void
 249pipeline_spec_free(struct pipeline_spec *s);
 250
 251void
 252pipeline_spec_codegen(FILE *f,
 253                      struct pipeline_spec *s);
 254
 255struct pipeline_spec *
 256pipeline_spec_parse(FILE *spec,
 257                    uint32_t *err_line,
 258                    const char **err_msg);
 259
 260int
 261pipeline_spec_configure(struct rte_swx_pipeline *p,
 262                        struct pipeline_spec *s,
 263                        const char **err_msg);
 264
 265void
 266pipeline_iospec_free(struct pipeline_iospec *s);
 267
 268struct pipeline_iospec *
 269pipeline_iospec_parse(FILE *spec,
 270                      uint32_t *err_line,
 271                      const char **err_msg);
 272
 273int
 274pipeline_iospec_configure(struct rte_swx_pipeline *p,
 275                          struct pipeline_iospec *s,
 276                          const char **err_msg);
 277
 278#ifdef __cplusplus
 279}
 280#endif
 281
 282#endif
 283