#endif
/*
- * Subport configuration parameters. The period and credits_per_period
+ * Pipe configuration parameters. The period and credits_per_period
* parameters are measured in bytes, with one byte meaning the time
* duration associated with the transmission of one byte on the
* physical medium of the output port, with pipe or pipe traffic class
* credits_per_period divided by period. One credit represents one
* byte.
*/
-struct rte_sched_subport_params {
+struct rte_sched_pipe_params {
/** Token bucket rate (measured in bytes per second) */
uint32_t tb_rate;
/** Traffic class rates (measured in bytes per second) */
uint32_t tc_rate[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
- /** Enforcement period for rates (measured in milliseconds) */
+ /** Enforcement period (measured in milliseconds) */
uint32_t tc_period;
-};
-
-/** Subport statistics */
-struct rte_sched_subport_stats {
- /** Number of packets successfully written */
- uint32_t n_pkts_tc[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
-
- /** Number of packets dropped */
- uint32_t n_pkts_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
- /** Number of bytes successfully written for each traffic class */
- uint32_t n_bytes_tc[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
-
- /** Number of bytes dropped for each traffic class */
- uint32_t n_bytes_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+ /** Best-effort traffic class oversubscription weight */
+ uint8_t tc_ov_weight;
-#ifdef RTE_SCHED_RED
- /** Number of packets dropped by red */
- uint32_t n_pkts_red_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
-#endif
+ /** WRR weights of best-effort traffic class queues */
+ uint8_t wrr_weights[RTE_SCHED_BE_QUEUES_PER_PIPE];
};
/*
- * Pipe configuration parameters. The period and credits_per_period
+ * Subport configuration parameters. The period and credits_per_period
* parameters are measured in bytes, with one byte meaning the time
* duration associated with the transmission of one byte on the
* physical medium of the output port, with pipe or pipe traffic class
* credits_per_period divided by period. One credit represents one
* byte.
*/
-struct rte_sched_pipe_params {
+struct rte_sched_subport_params {
/** Token bucket rate (measured in bytes per second) */
uint32_t tb_rate;
/** Traffic class rates (measured in bytes per second) */
uint32_t tc_rate[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
- /** Enforcement period (measured in milliseconds) */
+ /** Enforcement period for rates (measured in milliseconds) */
uint32_t tc_period;
- /** Best-effort traffic class oversubscription weight */
- uint8_t tc_ov_weight;
+ /** 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;
- /** WRR weights of best-effort traffic class queues */
- uint8_t wrr_weights[RTE_SCHED_BE_QUEUES_PER_PIPE];
+ /** 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 */
+ uint32_t n_pkts_tc[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+ /** Number of packets dropped */
+ uint32_t n_pkts_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+ /** Number of bytes successfully written for each traffic class */
+ uint32_t n_bytes_tc[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+ /** Number of bytes dropped for each traffic class */
+ uint32_t n_bytes_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+#ifdef RTE_SCHED_RED
+ /** Number of packets dropped by red */
+ uint32_t n_pkts_red_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+#endif
};
/** Queue statistics */
/** Number of subports */
uint32_t n_subports_per_port;
- /** Number of subport_pipes */
+ /** Maximum number of subport pipes.
+ * This parameter is used to reserve a fixed number of bits
+ * in struct rte_mbuf::sched.queue_id for the pipe_id for all
+ * the subports of the same port.
+ */
uint32_t n_pipes_per_subport;
/** Packet queue size for each traffic class.