Skip to content

Commit 320d031

Browse files
minuscatkuba-moo
authored andcommitted
sched: Struct definition and parsing of dualpi2 qdisc
DualPI2 is the reference implementation of IETF RFC9332 DualQ Coupled AQM (https://datatracker.ietf.org/doc/html/rfc9332) providing two queues called low latency (L-queue) and classic (C-queue). By default, it enqueues non-ECN and ECT(0) packets into the C-queue and ECT(1) and CE packets into the low latency queue (L-queue), as per IETF RFC9332 spec. This patch defines the dualpi2 Qdisc structure and parsing, and the following two patches include dumping and enqueue/dequeue for the DualPI2. Signed-off-by: Chia-Yu Chang <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 1cdf3f2 commit 320d031

File tree

2 files changed

+644
-0
lines changed

2 files changed

+644
-0
lines changed

include/uapi/linux/pkt_sched.h

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,4 +1211,57 @@ enum {
12111211

12121212
#define TCA_ETS_MAX (__TCA_ETS_MAX - 1)
12131213

1214+
/* DUALPI2 */
1215+
enum tc_dualpi2_drop_overload {
1216+
TC_DUALPI2_DROP_OVERLOAD_OVERFLOW = 0,
1217+
TC_DUALPI2_DROP_OVERLOAD_DROP = 1,
1218+
__TCA_DUALPI2_DROP_OVERLOAD_MAX,
1219+
};
1220+
#define TCA_DUALPI2_DROP_OVERLOAD_MAX (__TCA_DUALPI2_DROP_OVERLOAD_MAX - 1)
1221+
1222+
enum tc_dualpi2_drop_early {
1223+
TC_DUALPI2_DROP_EARLY_DROP_DEQUEUE = 0,
1224+
TC_DUALPI2_DROP_EARLY_DROP_ENQUEUE = 1,
1225+
__TCA_DUALPI2_DROP_EARLY_MAX,
1226+
};
1227+
#define TCA_DUALPI2_DROP_EARLY_MAX (__TCA_DUALPI2_DROP_EARLY_MAX - 1)
1228+
1229+
enum tc_dualpi2_ecn_mask {
1230+
TC_DUALPI2_ECN_MASK_L4S_ECT = 1,
1231+
TC_DUALPI2_ECN_MASK_CLA_ECT = 2,
1232+
TC_DUALPI2_ECN_MASK_ANY_ECT = 3,
1233+
__TCA_DUALPI2_ECN_MASK_MAX,
1234+
};
1235+
#define TCA_DUALPI2_ECN_MASK_MAX (__TCA_DUALPI2_ECN_MASK_MAX - 1)
1236+
1237+
enum tc_dualpi2_split_gso {
1238+
TC_DUALPI2_SPLIT_GSO_NO_SPLIT_GSO = 0,
1239+
TC_DUALPI2_SPLIT_GSO_SPLIT_GSO = 1,
1240+
__TCA_DUALPI2_SPLIT_GSO_MAX,
1241+
};
1242+
#define TCA_DUALPI2_SPLIT_GSO_MAX (__TCA_DUALPI2_SPLIT_GSO_MAX - 1)
1243+
1244+
enum {
1245+
TCA_DUALPI2_UNSPEC,
1246+
TCA_DUALPI2_LIMIT, /* Packets */
1247+
TCA_DUALPI2_MEMORY_LIMIT, /* Bytes */
1248+
TCA_DUALPI2_TARGET, /* us */
1249+
TCA_DUALPI2_TUPDATE, /* us */
1250+
TCA_DUALPI2_ALPHA, /* Hz scaled up by 256 */
1251+
TCA_DUALPI2_BETA, /* Hz scaled up by 256 */
1252+
TCA_DUALPI2_STEP_THRESH_PKTS, /* Step threshold in packets */
1253+
TCA_DUALPI2_STEP_THRESH_US, /* Step threshold in microseconds */
1254+
TCA_DUALPI2_MIN_QLEN_STEP, /* Minimum qlen to apply STEP_THRESH */
1255+
TCA_DUALPI2_COUPLING, /* Coupling factor between queues */
1256+
TCA_DUALPI2_DROP_OVERLOAD, /* Whether to drop on overload */
1257+
TCA_DUALPI2_DROP_EARLY, /* Whether to drop on enqueue */
1258+
TCA_DUALPI2_C_PROTECTION, /* Percentage */
1259+
TCA_DUALPI2_ECN_MASK, /* L4S queue classification mask */
1260+
TCA_DUALPI2_SPLIT_GSO, /* Split GSO packets at enqueue */
1261+
TCA_DUALPI2_PAD,
1262+
__TCA_DUALPI2_MAX
1263+
};
1264+
1265+
#define TCA_DUALPI2_MAX (__TCA_DUALPI2_MAX - 1)
1266+
12141267
#endif

0 commit comments

Comments
 (0)