-----Original Message----- From: Jakub Kicinski kuba@kernel.org Sent: Thursday, July 17, 2025 1:46 AM To: Chia-Yu Chang (Nokia) chia-yu.chang@nokia-bell-labs.com Cc: alok.a.tiwari@oracle.com; pctammela@mojatatu.com; horms@kernel.org; donald.hunter@gmail.com; xandfury@gmail.com; netdev@vger.kernel.org; dave.taht@gmail.com; pabeni@redhat.com; jhs@mojatatu.com; stephen@networkplumber.org; xiyou.wangcong@gmail.com; jiri@resnulli.us; davem@davemloft.net; edumazet@google.com; andrew+netdev@lunn.ch; ast@fiberby.net; liuhangbin@gmail.com; shuah@kernel.org; linux-kselftest@vger.kernel.org; ij@kernel.org; ncardwell@google.com; Koen De Schepper (Nokia) koen.de_schepper@nokia-bell-labs.com; g.white@cablelabs.com; ingemar.s.johansson@ericsson.com; mirja.kuehlewind@ericsson.com; cheshire@apple.com; rs.ietf@gmx.at; Jason_Livingood@comcast.com; vidhi_goel@apple.com Subject: Re: [PATCH v23 net-next 1/6] sched: Struct definition and parsing of dualpi2 qdisc
CAUTION: This is an external email. Please be very careful when clicking links or opening attachments. See the URL nok.it/ext for additional information.
On Sun, 13 Jul 2025 12:52:29 +0200 chia-yu.chang@nokia-bell-labs.com wrote:
+/* DUALPI2 */ +enum tc_dualpi2_drop_overload {
TCA_DUALPI2_DROP_OVERLOAD_OVERFLOW = 0,
TCA_DUALPI2_DROP_OVERLOAD_DROP = 1,
__TCA_DUALPI2_DROP_OVERLOAD_MAX, }; #define
+TCA_DUALPI2_DROP_OVERLOAD_MAX (__TCA_DUALPI2_DROP_OVERLOAD_MAX - 1)
+enum tc_dualpi2_drop_early {
TCA_DUALPI2_DROP_EARLY_DROP_DEQUEUE = 0,
TCA_DUALPI2_DROP_EARLY_DROP_ENQUEUE = 1,
__TCA_DUALPI2_DROP_EARLY_MAX,
+}; +#define TCA_DUALPI2_DROP_EARLY_MAX (__TCA_DUALPI2_DROP_EARLY_MAX - 1)
+enum tc_dualpi2_ecn_mask {
TCA_DUALPI2_ECN_MASK_L4S_ECT = 1,
TCA_DUALPI2_ECN_MASK_CLA_ECT = 2,
TCA_DUALPI2_ECN_MASK_ANY_ECT = 3,
__TCA_DUALPI2_ECN_MASK_MAX,
+}; +#define TCA_DUALPI2_ECN_MASK_MAX (__TCA_DUALPI2_ECN_MASK_MAX - 1)
+enum tc_dualpi2_split_gso {
TCA_DUALPI2_SPLIT_GSO_NO_SPLIT_GSO = 0,
TCA_DUALPI2_SPLIT_GSO_SPLIT_GSO = 1,
__TCA_DUALPI2_SPLIT_GSO_MAX,
+}; +#define TCA_DUALPI2_SPLIT_GSO_MAX (__TCA_DUALPI2_SPLIT_GSO_MAX - 1)
Looks like you fixed the type name but not the entry names :( Once again, TCA_ stands for TC Attribute. These are not attribute IDs but values. YNL will expect them to be prefixed with TC_DUALPI2, for example:
static const char * const tc_dualpi2_ecn_mask_strmap[] = { [TC_DUALPI2_ECN_MASK_L4S_ECT] = "l4s-ect", [TC_DUALPI2_ECN_MASK_CLA_ECT] = "cla-ect", [TC_DUALPI2_ECN_MASK_ANY_ECT] = "any-ect", };
Only the last enum you're adding in this file, which defines the attributes IDs should use the TCA_ prefix.
Thanks for feedback. May I ask is it fine if I put the enum like below?
enum tc_dualpi2_drop_overload { TC_DUALPI2_DROP_OVERLOAD_OVERFLOW = 0, TC_DUALPI2_DROP_OVERLOAD_DROP = 1, __TCA_DUALPI2_DROP_OVERLOAD_MAX, }; #define TCA_DUALPI2_DROP_OVERLOAD_MAX (__TCA_DUALPI2_DROP_OVERLOAD_MAX - 1)
enum tc_dualpi2_drop_early { TC_DUALPI2_DROP_EARLY_DROP_DEQUEUE = 0, TC_DUALPI2_DROP_EARLY_DROP_ENQUEUE = 1, __TCA_DUALPI2_DROP_EARLY_MAX, }; #define TCA_DUALPI2_DROP_EARLY_MAX (__TCA_DUALPI2_DROP_EARLY_MAX - 1)
enum tc_dualpi2_ecn_mask { TC_DUALPI2_ECN_MASK_L4S_ECT = 1, TC_DUALPI2_ECN_MASK_CLA_ECT = 2, TC_DUALPI2_ECN_MASK_ANY_ECT = 3, __TCA_DUALPI2_ECN_MASK_MAX, }; #define TCA_DUALPI2_ECN_MASK_MAX (__TCA_DUALPI2_ECN_MASK_MAX - 1)
enum tc_dualpi2_split_gso { TC_DUALPI2_SPLIT_GSO_NO_SPLIT_GSO = 0, TC_DUALPI2_SPLIT_GSO_SPLIT_GSO = 1, __TCA_DUALPI2_SPLIT_GSO_MAX, }; #define TCA_DUALPI2_SPLIT_GSO_MAX (__TCA_DUALPI2_SPLIT_GSO_MAX - 1)
And shall such change also been applied to Dualpi2 attributes below? As these are more attribute-like, so I assume no.
enum { TCA_DUALPI2_UNSPEC, TCA_DUALPI2_LIMIT, /* Packets */ TCA_DUALPI2_MEMORY_LIMIT, /* Bytes */ TCA_DUALPI2_TARGET, /* us */ TCA_DUALPI2_TUPDATE, /* us */ TCA_DUALPI2_ALPHA, /* Hz scaled up by 256 */ TCA_DUALPI2_BETA, /* Hz scaled up by 256 */ TCA_DUALPI2_STEP_THRESH_PKTS, /* Step threshold in packets */ TCA_DUALPI2_STEP_THRESH_US, /* Step threshold in microseconds */ TCA_DUALPI2_MIN_QLEN_STEP, /* Minimum qlen to apply STEP_THRESH */ TCA_DUALPI2_COUPLING, /* Coupling factor between queues */ TCA_DUALPI2_DROP_OVERLOAD, /* Whether to drop on overload */ TCA_DUALPI2_DROP_EARLY, /* Whether to drop on enqueue */ TCA_DUALPI2_C_PROTECTION, /* Percentage */ TCA_DUALPI2_ECN_MASK, /* L4S queue classification mask */ TCA_DUALPI2_SPLIT_GSO, /* Split GSO packets at enqueue */ TCA_DUALPI2_PAD, __TCA_DUALPI2_MAX };
#define TCA_DUALPI2_MAX (__TCA_DUALPI2_MAX - 1)