diff --git a/lib/librte_sched/Makefile b/lib/librte_sched/Makefile
index 3d7f410e1..6e4a72d89 100644
--- a/lib/librte_sched/Makefile
+++ b/lib/librte_sched/Makefile
@@ -18,7 +18,7 @@ LDLIBS += -lrte_timer
 
 EXPORT_MAP := rte_sched_version.map
 
-LIBABIVER := 3
+LIBABIVER := 4
 
 #
 # all source are stored in SRCS-y
diff --git a/lib/librte_sched/meson.build b/lib/librte_sched/meson.build
index 59d43c6d8..9f40a2368 100644
--- a/lib/librte_sched/meson.build
+++ b/lib/librte_sched/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
-version = 3
+version = 4
 sources = files('rte_sched.c', 'rte_red.c', 'rte_approx.c')
 headers = files('rte_sched.h', 'rte_sched_common.h',
 		'rte_red.h', 'rte_approx.h')
diff --git a/lib/librte_sched/rte_sched.h b/lib/librte_sched/rte_sched.h
index eac6db274..48be702bc 100644
--- a/lib/librte_sched/rte_sched.h
+++ b/lib/librte_sched/rte_sched.h
@@ -111,7 +111,7 @@ extern "C" {
 #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
@@ -119,7 +119,7 @@ extern "C" {
  * 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;
 
@@ -129,32 +129,18 @@ struct rte_sched_subport_params {
 	/** 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
@@ -162,7 +148,7 @@ struct rte_sched_subport_stats {
  * 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;
 
@@ -172,14 +158,50 @@ struct rte_sched_pipe_params {
 	/** 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 */
+	uint32_t n_pipes_per_subport;
 
-	/** 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;
+
+#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 */
@@ -227,6 +249,9 @@ struct rte_sched_port_params {
 	/** Number of subport_pipes */
 	uint32_t n_pipes_per_subport;
 
+	/** Maximum number of subport_pipes */
+	uint32_t n_max_pipes_per_subport;
+
 	/** Packet queue size for each traffic class.
 	 * All the pipes within the same subport share the similar
 	 * configuration for the queues.
