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 | #define TCA_ETS_MAX (__TCA_ETS_MAX - 1) | 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 | #endif | 1267 | #endif |