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.
Showing the changes to include/uapi (1 of 2 files). Show all
Unified · Split
| @@ -1211,4 +1211,57 @@ enum { · 1210 unmodified lines | ||
| 1211 | 1211 | |
| 1212 | 1212 | #define TCA_ETS_MAX (__TCA_ETS_MAX - 1) |
| 1213 | 1213 | |
| 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 | + | |
| 1214 | 1267 | #endif |