DPDK  22.07.0
rte_eth_softnic_internals.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Intel Corporation
3  */
4 
5 #ifndef __INCLUDE_RTE_ETH_SOFTNIC_INTERNALS_H__
6 #define __INCLUDE_RTE_ETH_SOFTNIC_INTERNALS_H__
7 
8 #include <stddef.h>
9 #include <stdint.h>
10 #include <sys/queue.h>
11 
12 #include <rte_mempool.h>
13 #include <rte_mbuf.h>
14 #include <rte_ring.h>
15 #include <rte_ethdev.h>
16 #include <rte_sched.h>
17 #include <rte_port_in_action.h>
18 #include <rte_table_action.h>
19 #include <rte_pipeline.h>
20 
21 #include <rte_ethdev_core.h>
22 #include <ethdev_driver.h>
23 #include <rte_tm_driver.h>
24 #include <rte_flow_driver.h>
25 #include <rte_mtr_driver.h>
26 
27 #include "rte_eth_softnic.h"
28 #include "conn.h"
29 
30 #define NAME_SIZE 64
31 #define SOFTNIC_PATH_MAX 4096
32 
37 struct pmd_params {
38  char name[NAME_SIZE];
39  char firmware[SOFTNIC_PATH_MAX];
40  uint16_t conn_port;
41  uint32_t cpu_id;
42  int sc;
45  struct {
46  uint32_t n_queues;
47  uint16_t qsize[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
48  } tm;
49 };
50 
54 struct rte_flow;
55 
56 TAILQ_HEAD(flow_list, rte_flow);
57 
58 struct flow_attr_map {
59  char pipeline_name[NAME_SIZE];
60  uint32_t table_id;
61  int valid;
62 };
63 
64 #ifndef SOFTNIC_FLOW_MAX_GROUPS
65 #define SOFTNIC_FLOW_MAX_GROUPS 64
66 #endif
67 
68 struct flow_internals {
69  struct flow_attr_map ingress_map[SOFTNIC_FLOW_MAX_GROUPS];
70  struct flow_attr_map egress_map[SOFTNIC_FLOW_MAX_GROUPS];
71 };
72 
77 /* MTR meter profile */
79  TAILQ_ENTRY(softnic_mtr_meter_profile) node;
80  uint32_t meter_profile_id;
81  struct rte_mtr_meter_profile params;
82  uint32_t n_users;
83 };
84 
85 TAILQ_HEAD(softnic_mtr_meter_profile_list, softnic_mtr_meter_profile);
86 
87 /* MTR meter policy */
88 struct softnic_mtr_meter_policy {
89  TAILQ_ENTRY(softnic_mtr_meter_policy) node;
90  uint32_t meter_policy_id;
92  uint32_t n_users;
93 };
94 
95 TAILQ_HEAD(softnic_mtr_meter_policy_list, softnic_mtr_meter_policy);
96 
97 /* MTR meter object */
98 struct softnic_mtr {
99  TAILQ_ENTRY(softnic_mtr) node;
100  uint32_t mtr_id;
101  struct rte_mtr_params params;
102  struct rte_flow *flow;
103 };
104 
105 TAILQ_HEAD(softnic_mtr_list, softnic_mtr);
106 
107 struct mtr_internals {
108  struct softnic_mtr_meter_profile_list meter_profiles;
109  struct softnic_mtr_meter_policy_list meter_policies;
110  struct softnic_mtr_list mtrs;
111 };
112 
117  uint32_t buffer_size;
118  uint32_t pool_size;
119  uint32_t cache_size;
120 };
121 
122 struct softnic_mempool {
123  TAILQ_ENTRY(softnic_mempool) node;
124  char name[NAME_SIZE];
125  struct rte_mempool *m;
126  uint32_t buffer_size;
127 };
128 
129 TAILQ_HEAD(softnic_mempool_list, softnic_mempool);
130 
135  uint32_t size;
136 };
137 
138 struct softnic_swq {
139  TAILQ_ENTRY(softnic_swq) node;
140  char name[NAME_SIZE];
141  struct rte_ring *r;
142 };
143 
144 TAILQ_HEAD(softnic_swq_list, softnic_swq);
145 
150  const char *dev_name;
151  uint16_t port_id;
152 };
153 
154 struct softnic_link {
155  TAILQ_ENTRY(softnic_link) node;
156  char name[NAME_SIZE];
157  uint16_t port_id;
158  uint32_t n_rxq;
159  uint32_t n_txq;
160 };
161 
162 TAILQ_HEAD(softnic_link_list, softnic_link);
163 
168 #ifndef TM_MAX_SUBPORTS
169 #define TM_MAX_SUBPORTS 8
170 #endif
171 
172 #ifndef TM_MAX_PIPES_PER_SUBPORT
173 #define TM_MAX_PIPES_PER_SUBPORT 4096
174 #endif
175 
176 #ifndef TM_MAX_PIPE_PROFILE
177 #define TM_MAX_PIPE_PROFILE 256
178 #endif
179 
180 #ifndef TM_MAX_SUBPORT_PROFILE
181 #define TM_MAX_SUBPORT_PROFILE 256
182 #endif
183 
184 struct tm_params {
185  struct rte_sched_port_params port_params;
186  struct rte_sched_subport_params subport_params[TM_MAX_SUBPORTS];
187  struct rte_sched_subport_profile_params
188  subport_profile[TM_MAX_SUBPORT_PROFILE];
189  uint32_t n_subport_profiles;
190  uint32_t subport_to_profile[TM_MAX_SUBPORT_PROFILE];
191  struct rte_sched_pipe_params pipe_profiles[TM_MAX_PIPE_PROFILE];
192  uint32_t n_pipe_profiles;
193  uint32_t pipe_to_profile[TM_MAX_SUBPORTS * TM_MAX_PIPES_PER_SUBPORT];
194 };
195 
196 /* TM Levels */
197 enum tm_node_level {
198  TM_NODE_LEVEL_PORT = 0,
199  TM_NODE_LEVEL_SUBPORT,
200  TM_NODE_LEVEL_PIPE,
201  TM_NODE_LEVEL_TC,
202  TM_NODE_LEVEL_QUEUE,
203  TM_NODE_LEVEL_MAX,
204 };
205 
206 /* TM Shaper Profile */
207 struct tm_shaper_profile {
208  TAILQ_ENTRY(tm_shaper_profile) node;
209  uint32_t shaper_profile_id;
210  uint32_t n_users;
211  struct rte_tm_shaper_params params;
212 };
213 
214 TAILQ_HEAD(tm_shaper_profile_list, tm_shaper_profile);
215 
216 /* TM Shared Shaper */
217 struct tm_shared_shaper {
218  TAILQ_ENTRY(tm_shared_shaper) node;
219  uint32_t shared_shaper_id;
220  uint32_t n_users;
221  uint32_t shaper_profile_id;
222 };
223 
224 TAILQ_HEAD(tm_shared_shaper_list, tm_shared_shaper);
225 
226 /* TM WRED Profile */
227 struct tm_wred_profile {
228  TAILQ_ENTRY(tm_wred_profile) node;
229  uint32_t wred_profile_id;
230  uint32_t n_users;
231  struct rte_tm_wred_params params;
232 };
233 
234 TAILQ_HEAD(tm_wred_profile_list, tm_wred_profile);
235 
236 /* TM Node */
237 struct tm_node {
238  TAILQ_ENTRY(tm_node) node;
239  uint32_t node_id;
240  uint32_t parent_node_id;
241  uint32_t priority;
242  uint32_t weight;
243  uint32_t level;
244  struct tm_node *parent_node;
245  struct tm_shaper_profile *shaper_profile;
246  struct tm_wred_profile *wred_profile;
247  struct rte_tm_node_params params;
248  struct rte_tm_node_stats stats;
249  uint32_t n_children;
250 };
251 
252 TAILQ_HEAD(tm_node_list, tm_node);
253 
254 /* TM Hierarchy Specification */
255 struct tm_hierarchy {
256  struct tm_shaper_profile_list shaper_profiles;
257  struct tm_shared_shaper_list shared_shapers;
258  struct tm_wred_profile_list wred_profiles;
259  struct tm_node_list nodes;
260 
261  uint32_t n_shaper_profiles;
262  uint32_t n_shared_shapers;
263  uint32_t n_wred_profiles;
264  uint32_t n_nodes;
265 
266  uint32_t n_tm_nodes[TM_NODE_LEVEL_MAX];
267 };
268 
269 struct tm_internals {
277  struct tm_hierarchy h;
278  int hierarchy_frozen;
279 
281  struct tm_params params;
282 };
283 
284 struct softnic_tmgr_port {
285  TAILQ_ENTRY(softnic_tmgr_port) node;
286  char name[NAME_SIZE];
287  struct rte_sched_port *s;
288 };
289 
290 TAILQ_HEAD(softnic_tmgr_port_list, softnic_tmgr_port);
291 
295 struct softnic_tap {
296  TAILQ_ENTRY(softnic_tap) node;
297  char name[NAME_SIZE];
298  int fd;
299 };
300 
301 TAILQ_HEAD(softnic_tap_list, softnic_tap);
302 
307  const char *dev_name;
308  uint32_t dev_id;
309  uint32_t n_queues;
310  uint32_t queue_size;
311  uint32_t session_pool_size;
312 };
313 
314 struct softnic_cryptodev {
315  TAILQ_ENTRY(softnic_cryptodev) node;
316  char name[NAME_SIZE];
317  uint16_t dev_id;
318  uint32_t n_queues;
319  struct rte_mempool *mp_create;
320  struct rte_mempool *mp_init;
321 };
322 
323 TAILQ_HEAD(softnic_cryptodev_list, softnic_cryptodev);
324 
329  uint64_t action_mask;
330  struct rte_port_in_action_fltr_config fltr;
332 };
333 
334 struct softnic_port_in_action_profile {
335  TAILQ_ENTRY(softnic_port_in_action_profile) node;
336  char name[NAME_SIZE];
338  struct rte_port_in_action_profile *ap;
339 };
340 
341 TAILQ_HEAD(softnic_port_in_action_profile_list, softnic_port_in_action_profile);
342 
347  uint64_t action_mask;
348  struct rte_table_action_common_config common;
349  struct rte_table_action_lb_config lb;
350  struct rte_table_action_mtr_config mtr;
351  struct rte_table_action_tm_config tm;
352  struct rte_table_action_encap_config encap;
353  struct rte_table_action_nat_config nat;
354  struct rte_table_action_ttl_config ttl;
355  struct rte_table_action_stats_config stats;
356  struct rte_table_action_sym_crypto_config sym_crypto;
357 };
358 
359 struct softnic_table_action_profile {
360  TAILQ_ENTRY(softnic_table_action_profile) node;
361  char name[NAME_SIZE];
363  struct rte_table_action_profile *ap;
364 };
365 
366 TAILQ_HEAD(softnic_table_action_profile_list, softnic_table_action_profile);
367 
368 struct softnic_table_meter_profile {
369  TAILQ_ENTRY(softnic_table_meter_profile) node;
370  uint32_t meter_profile_id;
371  struct rte_table_action_meter_profile profile;
372 };
373 
374 TAILQ_HEAD(softnic_table_meter_profile_list,
375  softnic_table_meter_profile);
376 
381  uint32_t timer_period_ms;
382  uint32_t offset_port_id;
383 };
384 
385 enum softnic_port_in_type {
386  PORT_IN_RXQ,
387  PORT_IN_SWQ,
388  PORT_IN_TMGR,
389  PORT_IN_TAP,
390  PORT_IN_SOURCE,
391  PORT_IN_CRYPTODEV,
392 };
393 
394 struct softnic_port_in_params {
395  /* Read */
396  enum softnic_port_in_type type;
397  char dev_name[NAME_SIZE];
398  union {
399  struct {
400  uint16_t queue_id;
401  } rxq;
402 
403  struct {
404  const char *mempool_name;
405  uint32_t mtu;
406  } tap;
407 
408  struct {
409  const char *mempool_name;
410  const char *file_name;
411  uint32_t n_bytes_per_pkt;
412  } source;
413 
414  struct {
415  uint16_t queue_id;
416  void *f_callback;
417  void *arg_callback;
418  } cryptodev;
419  };
420  uint32_t burst_size;
421 
422  /* Action */
423  char action_profile_name[NAME_SIZE];
424 };
425 
426 enum softnic_port_out_type {
427  PORT_OUT_TXQ,
428  PORT_OUT_SWQ,
429  PORT_OUT_TMGR,
430  PORT_OUT_TAP,
431  PORT_OUT_SINK,
432  PORT_OUT_CRYPTODEV,
433 };
434 
435 struct softnic_port_out_params {
436  enum softnic_port_out_type type;
437  char dev_name[NAME_SIZE];
438  union {
439  struct {
440  uint16_t queue_id;
441  } txq;
442 
443  struct {
444  const char *file_name;
445  uint32_t max_n_pkts;
446  } sink;
447 
448  struct {
449  uint16_t queue_id;
450  uint32_t op_offset;
451  } cryptodev;
452  };
453  uint32_t burst_size;
454  int retry;
455  uint32_t n_retries;
456 };
457 
458 enum softnic_table_type {
459  TABLE_ACL,
460  TABLE_ARRAY,
461  TABLE_HASH,
462  TABLE_LPM,
463  TABLE_STUB,
464 };
465 
466 struct softnic_table_acl_params {
467  uint32_t n_rules;
468  uint32_t ip_header_offset;
469  int ip_version;
470 };
471 
472 struct softnic_table_array_params {
473  uint32_t n_keys;
474  uint32_t key_offset;
475 };
476 
477 #ifndef TABLE_RULE_MATCH_SIZE_MAX
478 #define TABLE_RULE_MATCH_SIZE_MAX 256
479 #endif
480 
481 struct softnic_table_hash_params {
482  uint32_t n_keys;
483  uint32_t key_offset;
484  uint32_t key_size;
485  uint8_t key_mask[TABLE_RULE_MATCH_SIZE_MAX];
486  uint32_t n_buckets;
487  int extendable_bucket;
488 };
489 
490 struct softnic_table_lpm_params {
491  uint32_t n_rules;
492  uint32_t key_offset;
493  uint32_t key_size;
494 };
495 
496 struct softnic_table_params {
497  /* Match */
498  enum softnic_table_type match_type;
499  union {
500  struct softnic_table_acl_params acl;
501  struct softnic_table_array_params array;
502  struct softnic_table_hash_params hash;
503  struct softnic_table_lpm_params lpm;
504  } match;
505 
506  /* Action */
507  char action_profile_name[NAME_SIZE];
508 };
509 
510 struct softnic_port_in {
511  struct softnic_port_in_params params;
512  struct softnic_port_in_action_profile *ap;
513  struct rte_port_in_action *a;
514 };
515 
516 struct softnic_port_out {
517  struct softnic_port_out_params params;
518 };
519 
520 struct softnic_table {
521  struct softnic_table_params params;
522  struct softnic_table_action_profile *ap;
523  struct rte_table_action *a;
524  struct flow_list flows;
525  struct rte_table_action_dscp_table dscp_table;
526  struct softnic_table_meter_profile_list meter_profiles;
527 };
528 
529 struct pipeline {
530  TAILQ_ENTRY(pipeline) node;
531  char name[NAME_SIZE];
532 
533  struct rte_pipeline *p;
534  struct pipeline_params params;
535  struct softnic_port_in port_in[RTE_PIPELINE_PORT_IN_MAX];
536  struct softnic_port_out port_out[RTE_PIPELINE_PORT_OUT_MAX];
537  struct softnic_table table[RTE_PIPELINE_TABLE_MAX];
538  uint32_t n_ports_in;
539  uint32_t n_ports_out;
540  uint32_t n_tables;
541 
542  struct rte_ring *msgq_req;
543  struct rte_ring *msgq_rsp;
544  uint32_t timer_period_ms;
545 
546  int enabled;
547  uint32_t thread_id;
548  uint32_t cpu_id;
549 };
550 
551 TAILQ_HEAD(pipeline_list, pipeline);
552 
556 #ifndef THREAD_PIPELINES_MAX
557 #define THREAD_PIPELINES_MAX 256
558 #endif
559 
560 #ifndef THREAD_MSGQ_SIZE
561 #define THREAD_MSGQ_SIZE 64
562 #endif
563 
564 #ifndef THREAD_TIMER_PERIOD_MS
565 #define THREAD_TIMER_PERIOD_MS 100
566 #endif
567 
572  struct rte_ring *msgq_req;
573  struct rte_ring *msgq_rsp;
574 
575  uint32_t service_id;
576 };
577 
581 #ifndef TABLE_RULE_ACTION_SIZE_MAX
582 #define TABLE_RULE_ACTION_SIZE_MAX 2048
583 #endif
584 
585 struct softnic_table_data {
586  struct rte_table_action *a;
587 };
588 
589 struct pipeline_data {
590  struct rte_pipeline *p;
591  struct softnic_table_data table_data[RTE_PIPELINE_TABLE_MAX];
592  uint32_t n_tables;
593 
594  struct rte_ring *msgq_req;
595  struct rte_ring *msgq_rsp;
596  uint64_t timer_period; /* Measured in CPU cycles. */
597  uint64_t time_next;
598 
599  uint8_t buffer[TABLE_RULE_ACTION_SIZE_MAX];
600 };
601 
602 struct softnic_thread_data {
603  struct rte_pipeline *p[THREAD_PIPELINES_MAX];
604  uint32_t n_pipelines;
605 
606  struct pipeline_data pipeline_data[THREAD_PIPELINES_MAX];
607  struct rte_ring *msgq_req;
608  struct rte_ring *msgq_rsp;
609  uint64_t timer_period; /* Measured in CPU cycles. */
610  uint64_t time_next;
611  uint64_t time_next_min;
612  uint64_t iter;
614 
620  struct pmd_params params;
621 
622  struct {
623  struct tm_internals tm;
624  } soft;
625 
626  struct flow_internals flow;
627  struct mtr_internals mtr;
628 
629  struct softnic_conn *conn;
630  struct softnic_mempool_list mempool_list;
631  struct softnic_swq_list swq_list;
632  struct softnic_link_list link_list;
633  struct softnic_tmgr_port_list tmgr_port_list;
634  struct softnic_tap_list tap_list;
635  struct softnic_cryptodev_list cryptodev_list;
636  struct softnic_port_in_action_profile_list port_in_action_profile_list;
637  struct softnic_table_action_profile_list table_action_profile_list;
638  struct pipeline_list pipeline_list;
639  struct softnic_thread thread[RTE_MAX_LCORE];
640  struct softnic_thread_data thread_data[RTE_MAX_LCORE];
641 };
642 
643 static inline struct rte_eth_dev *
644 ETHDEV(struct pmd_internals *softnic)
645 {
646  uint16_t port_id;
647  int status;
648 
649  if (softnic == NULL)
650  return NULL;
651 
652  status = rte_eth_dev_get_port_by_name(softnic->params.name, &port_id);
653  if (status)
654  return NULL;
655 
656  return &rte_eth_devices[port_id];
657 }
658 
662 int
663 flow_attr_map_set(struct pmd_internals *softnic,
664  uint32_t group_id,
665  int ingress,
666  const char *pipeline_name,
667  uint32_t table_id);
668 
669 struct flow_attr_map *
670 flow_attr_map_get(struct pmd_internals *softnic,
671  uint32_t group_id,
672  int ingress);
673 
674 extern const struct rte_flow_ops pmd_flow_ops;
675 
679 int
680 softnic_mtr_init(struct pmd_internals *p);
681 
682 void
683 softnic_mtr_free(struct pmd_internals *p);
684 
685 struct softnic_mtr *
686 softnic_mtr_find(struct pmd_internals *p,
687  uint32_t mtr_id);
688 
690 softnic_mtr_meter_profile_find(struct pmd_internals *p,
691  uint32_t meter_profile_id);
692 
693 struct softnic_mtr_meter_policy *
694 softnic_mtr_meter_policy_find(struct pmd_internals *p,
695  uint32_t meter_policy_id);
696 
697 extern const struct rte_mtr_ops pmd_mtr_ops;
698 
702 int
703 softnic_mempool_init(struct pmd_internals *p);
704 
705 void
706 softnic_mempool_free(struct pmd_internals *p);
707 
708 struct softnic_mempool *
709 softnic_mempool_find(struct pmd_internals *p,
710  const char *name);
711 
712 struct softnic_mempool *
713 softnic_mempool_create(struct pmd_internals *p,
714  const char *name,
715  struct softnic_mempool_params *params);
716 
720 int
721 softnic_swq_init(struct pmd_internals *p);
722 
723 void
724 softnic_swq_free(struct pmd_internals *p);
725 
726 void
727 softnic_softnic_swq_free_keep_rxq_txq(struct pmd_internals *p);
728 
729 struct softnic_swq *
730 softnic_swq_find(struct pmd_internals *p,
731  const char *name);
732 
733 struct softnic_swq *
734 softnic_swq_create(struct pmd_internals *p,
735  const char *name,
736  struct softnic_swq_params *params);
737 
741 int
742 softnic_link_init(struct pmd_internals *p);
743 
744 void
745 softnic_link_free(struct pmd_internals *p);
746 
747 struct softnic_link *
748 softnic_link_find(struct pmd_internals *p,
749  const char *name);
750 
751 struct softnic_link *
752 softnic_link_create(struct pmd_internals *p,
753  const char *name,
754  struct softnic_link_params *params);
755 
759 int
760 softnic_tmgr_init(struct pmd_internals *p);
761 
762 void
763 softnic_tmgr_free(struct pmd_internals *p);
764 
765 struct softnic_tmgr_port *
766 softnic_tmgr_port_find(struct pmd_internals *p,
767  const char *name);
768 
769 struct softnic_tmgr_port *
770 softnic_tmgr_port_create(struct pmd_internals *p,
771  const char *name);
772 
773 void
774 tm_hierarchy_init(struct pmd_internals *p);
775 
776 void
777 tm_hierarchy_free(struct pmd_internals *p);
778 
779 static inline int
780 tm_used(struct rte_eth_dev *dev)
781 {
782  struct pmd_internals *p = dev->data->dev_private;
783 
784  return p->soft.tm.h.n_tm_nodes[TM_NODE_LEVEL_PORT];
785 }
786 
787 extern const struct rte_tm_ops pmd_tm_ops;
788 
792 int
793 softnic_tap_init(struct pmd_internals *p);
794 
795 void
796 softnic_tap_free(struct pmd_internals *p);
797 
798 struct softnic_tap *
799 softnic_tap_find(struct pmd_internals *p,
800  const char *name);
801 
802 struct softnic_tap *
803 softnic_tap_create(struct pmd_internals *p,
804  const char *name);
805 
809 int
810 softnic_cryptodev_init(struct pmd_internals *p);
811 
812 void
813 softnic_cryptodev_free(struct pmd_internals *p);
814 
815 struct softnic_cryptodev *
816 softnic_cryptodev_find(struct pmd_internals *p,
817  const char *name);
818 
819 struct softnic_cryptodev *
820 softnic_cryptodev_create(struct pmd_internals *p,
821  const char *name,
822  struct softnic_cryptodev_params *params);
823 
827 int
828 softnic_port_in_action_profile_init(struct pmd_internals *p);
829 
830 void
831 softnic_port_in_action_profile_free(struct pmd_internals *p);
832 
833 struct softnic_port_in_action_profile *
834 softnic_port_in_action_profile_find(struct pmd_internals *p,
835  const char *name);
836 
837 struct softnic_port_in_action_profile *
838 softnic_port_in_action_profile_create(struct pmd_internals *p,
839  const char *name,
841 
845 int
846 softnic_table_action_profile_init(struct pmd_internals *p);
847 
848 void
849 softnic_table_action_profile_free(struct pmd_internals *p);
850 
851 struct softnic_table_action_profile *
852 softnic_table_action_profile_find(struct pmd_internals *p,
853  const char *name);
854 
855 struct softnic_table_action_profile *
856 softnic_table_action_profile_create(struct pmd_internals *p,
857  const char *name,
858  struct softnic_table_action_profile_params *params);
859 
863 int
864 softnic_pipeline_init(struct pmd_internals *p);
865 
866 void
867 softnic_pipeline_free(struct pmd_internals *p);
868 
869 void
870 softnic_pipeline_disable_all(struct pmd_internals *p);
871 
872 uint32_t
873 softnic_pipeline_thread_count(struct pmd_internals *p, uint32_t thread_id);
874 
875 struct pipeline *
876 softnic_pipeline_find(struct pmd_internals *p, const char *name);
877 
878 struct pipeline *
879 softnic_pipeline_create(struct pmd_internals *p,
880  const char *name,
881  struct pipeline_params *params);
882 
883 int
884 softnic_pipeline_port_in_create(struct pmd_internals *p,
885  const char *pipeline_name,
886  struct softnic_port_in_params *params,
887  int enabled);
888 
889 int
890 softnic_pipeline_port_in_connect_to_table(struct pmd_internals *p,
891  const char *pipeline_name,
892  uint32_t port_id,
893  uint32_t table_id);
894 
895 int
896 softnic_pipeline_port_out_create(struct pmd_internals *p,
897  const char *pipeline_name,
898  struct softnic_port_out_params *params);
899 
900 int
901 softnic_pipeline_port_out_find(struct pmd_internals *softnic,
902  const char *pipeline_name,
903  const char *name,
904  uint32_t *port_id);
905 
906 int
907 softnic_pipeline_table_create(struct pmd_internals *p,
908  const char *pipeline_name,
909  struct softnic_table_params *params);
910 
911 struct softnic_table_meter_profile *
912 softnic_pipeline_table_meter_profile_find(struct softnic_table *table,
913  uint32_t meter_profile_id);
914 
915 struct softnic_table_rule_match_acl {
916  int ip_version;
917 
919  union {
920  struct {
921  uint32_t sa;
922  uint32_t da;
923  } ipv4;
924 
925  struct {
926  uint8_t sa[16];
927  uint8_t da[16];
928  } ipv6;
929  };
930 
931  uint32_t sa_depth;
932  uint32_t da_depth;
933  uint16_t sp0;
934  uint16_t sp1;
935  uint16_t dp0;
936  uint16_t dp1;
937  uint8_t proto;
938  uint8_t proto_mask;
939  uint32_t priority;
940 };
941 
942 struct softnic_table_rule_match_array {
943  uint32_t pos;
944 };
945 
946 struct softnic_table_rule_match_hash {
947  uint8_t key[TABLE_RULE_MATCH_SIZE_MAX];
948 };
949 
950 struct softnic_table_rule_match_lpm {
951  int ip_version;
952 
954  union {
955  uint32_t ipv4;
956  uint8_t ipv6[16];
957  };
958 
959  uint8_t depth;
960 };
961 
962 struct softnic_table_rule_match {
963  enum softnic_table_type match_type;
964 
965  union {
966  struct softnic_table_rule_match_acl acl;
967  struct softnic_table_rule_match_array array;
968  struct softnic_table_rule_match_hash hash;
969  struct softnic_table_rule_match_lpm lpm;
970  } match;
971 };
972 
973 #ifndef SYM_CRYPTO_MAX_KEY_SIZE
974 #define SYM_CRYPTO_MAX_KEY_SIZE (256)
975 #endif
976 struct softnic_table_rule_action {
977  uint64_t action_mask;
978  struct rte_table_action_fwd_params fwd;
979  struct rte_table_action_lb_params lb;
982  struct rte_table_action_encap_params encap;
983  struct rte_table_action_nat_params nat;
984  struct rte_table_action_ttl_params ttl;
985  struct rte_table_action_stats_params stats;
988  struct rte_table_action_decap_params decap;
989  struct rte_table_action_sym_crypto_params sym_crypto;
990  uint8_t sym_crypto_key[SYM_CRYPTO_MAX_KEY_SIZE];
991 };
992 
993 struct rte_flow {
994  TAILQ_ENTRY(rte_flow) node;
995  struct softnic_table_rule_match match;
996  struct softnic_table_rule_action action;
997  void *data;
998  struct pipeline *pipeline;
999  uint32_t table_id;
1000 };
1001 
1002 int
1003 softnic_pipeline_port_in_stats_read(struct pmd_internals *p,
1004  const char *pipeline_name,
1005  uint32_t port_id,
1006  struct rte_pipeline_port_in_stats *stats,
1007  int clear);
1008 
1009 int
1010 softnic_pipeline_port_in_enable(struct pmd_internals *p,
1011  const char *pipeline_name,
1012  uint32_t port_id);
1013 
1014 int
1015 softnic_pipeline_port_in_disable(struct pmd_internals *p,
1016  const char *pipeline_name,
1017  uint32_t port_id);
1018 
1019 int
1020 softnic_pipeline_port_out_stats_read(struct pmd_internals *p,
1021  const char *pipeline_name,
1022  uint32_t port_id,
1023  struct rte_pipeline_port_out_stats *stats,
1024  int clear);
1025 
1026 int
1027 softnic_pipeline_table_stats_read(struct pmd_internals *p,
1028  const char *pipeline_name,
1029  uint32_t table_id,
1030  struct rte_pipeline_table_stats *stats,
1031  int clear);
1032 
1033 int
1034 softnic_pipeline_table_rule_add(struct pmd_internals *p,
1035  const char *pipeline_name,
1036  uint32_t table_id,
1037  struct softnic_table_rule_match *match,
1038  struct softnic_table_rule_action *action,
1039  void **data);
1040 
1041 int
1042 softnic_pipeline_table_rule_add_bulk(struct pmd_internals *p,
1043  const char *pipeline_name,
1044  uint32_t table_id,
1045  struct softnic_table_rule_match *match,
1046  struct softnic_table_rule_action *action,
1047  void **data,
1048  uint32_t *n_rules);
1049 
1050 int
1051 softnic_pipeline_table_rule_add_default(struct pmd_internals *p,
1052  const char *pipeline_name,
1053  uint32_t table_id,
1054  struct softnic_table_rule_action *action,
1055  void **data);
1056 
1057 int
1058 softnic_pipeline_table_rule_delete(struct pmd_internals *p,
1059  const char *pipeline_name,
1060  uint32_t table_id,
1061  struct softnic_table_rule_match *match);
1062 
1063 int
1064 softnic_pipeline_table_rule_delete_default(struct pmd_internals *p,
1065  const char *pipeline_name,
1066  uint32_t table_id);
1067 
1068 int
1069 softnic_pipeline_table_rule_stats_read(struct pmd_internals *p,
1070  const char *pipeline_name,
1071  uint32_t table_id,
1072  void *data,
1073  struct rte_table_action_stats_counters *stats,
1074  int clear);
1075 
1076 int
1077 softnic_pipeline_table_mtr_profile_add(struct pmd_internals *p,
1078  const char *pipeline_name,
1079  uint32_t table_id,
1080  uint32_t meter_profile_id,
1081  struct rte_table_action_meter_profile *profile);
1082 
1083 int
1084 softnic_pipeline_table_mtr_profile_delete(struct pmd_internals *p,
1085  const char *pipeline_name,
1086  uint32_t table_id,
1087  uint32_t meter_profile_id);
1088 
1089 int
1090 softnic_pipeline_table_rule_mtr_read(struct pmd_internals *p,
1091  const char *pipeline_name,
1092  uint32_t table_id,
1093  void *data,
1094  uint32_t tc_mask,
1095  struct rte_table_action_mtr_counters *stats,
1096  int clear);
1097 
1098 int
1099 softnic_pipeline_table_dscp_table_update(struct pmd_internals *p,
1100  const char *pipeline_name,
1101  uint32_t table_id,
1102  uint64_t dscp_mask,
1103  struct rte_table_action_dscp_table *dscp_table);
1104 
1105 int
1106 softnic_pipeline_table_rule_ttl_read(struct pmd_internals *p,
1107  const char *pipeline_name,
1108  uint32_t table_id,
1109  void *data,
1110  struct rte_table_action_ttl_counters *stats,
1111  int clear);
1112 
1116 int
1117 softnic_thread_init(struct pmd_internals *p);
1118 
1119 void
1120 softnic_thread_free(struct pmd_internals *p);
1121 
1122 int
1123 softnic_thread_pipeline_enable(struct pmd_internals *p,
1124  uint32_t thread_id,
1125  const char *pipeline_name);
1126 
1127 int
1128 softnic_thread_pipeline_disable(struct pmd_internals *p,
1129  uint32_t thread_id,
1130  const char *pipeline_name);
1131 
1135 void
1136 softnic_cli_process(char *in,
1137  char *out,
1138  size_t out_size,
1139  void *arg);
1140 
1141 int
1142 softnic_cli_script_process(struct pmd_internals *softnic,
1143  const char *file_name,
1144  size_t msg_in_len_max,
1145  size_t msg_out_len_max);
1146 
1147 #endif /* __INCLUDE_RTE_ETH_SOFTNIC_INTERNALS_H__ */
struct tm_internals tm
struct pmd_params params
rte_table_action_policer
struct pmd_params::@15 tm
int rte_eth_dev_get_port_by_name(const char *name, uint16_t *port_id)
#define __rte_cache_aligned
Definition: rte_common.h:445
#define RTE_STD_C11
Definition: rte_common.h:42
struct rte_table_action_mtr_tc_params mtr[RTE_TABLE_ACTION_TC_MAX]
#define RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE
Definition: rte_sched.h:87