-struct rte_sched_pipe_params {
- /* Pipe token bucket */
- uint32_t tb_rate; /**< Rate (measured in bytes per second) */
- uint32_t tb_size; /**< Size (measured in credits) */
-
- /* Pipe traffic classes */
- uint32_t tc_rate[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
- /**< Traffic class rates (measured in bytes per second) */
- uint32_t tc_period;
- /**< Enforcement period (measured in milliseconds) */
- uint8_t tc_ov_weight; /**< Weight Traffic class 3 oversubscription */
-
- /* Pipe queues */
- uint8_t wrr_weights[RTE_SCHED_BE_QUEUES_PER_PIPE]; /**< WRR weights */
+struct rte_sched_subport_params {
+ /** Token bucket rate (measured in bytes per second) */
+ uint64_t tb_rate;
+
+ /** Token bucket size (measured in credits) */
+ uint64_t tb_size;
+
+ /** Traffic class rates (measured in bytes per second) */
+ uint64_t tc_rate[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+ /** Enforcement period for rates (measured in milliseconds) */
+ uint64_t tc_period;
+
+ /** Number of subport pipes.
+ * The subport can enable/allocate fewer pipes than the maximum
+ * number set through struct port_params::n_max_pipes_per_subport,
+ * as needed, to avoid memory allocation for the queues of the
+ * pipes that are not really needed.
+ */
+ uint32_t n_pipes_per_subport_enabled;
+
+ /** Packet queue size for each traffic class.
+ * All the pipes within the same subport share the similar
+ * configuration for the queues.
+ */
+ uint16_t qsize[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+ /** Pipe profile table.
+ * Every pipe is configured using one of the profiles from this table.
+ */
+ struct rte_sched_pipe_params *pipe_profiles;
+
+ /** Profiles in the pipe profile table */
+ uint32_t n_pipe_profiles;
+
+ /** Max allowed profiles in the pipe profile table */
+ uint32_t n_max_pipe_profiles;
+
+#ifdef RTE_SCHED_RED
+ /** RED parameters */
+ struct rte_red_params red_params[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE][RTE_COLORS];
+#endif
+};
+
+/** Subport statistics */
+struct rte_sched_subport_stats {
+ /** Number of packets successfully written */
+ uint64_t n_pkts_tc[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+ /** Number of packets dropped */
+ uint64_t n_pkts_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+ /** Number of bytes successfully written for each traffic class */
+ uint64_t n_bytes_tc[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+ /** Number of bytes dropped for each traffic class */
+ uint64_t n_bytes_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+#ifdef RTE_SCHED_RED
+ /** Number of packets dropped by red */
+ uint64_t n_pkts_red_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+#endif