> -----Original Message-----
> From: Donald Hunter <donald.hun...@gmail.com> 
> Sent: Wednesday, April 23, 2025 1:29 PM
> To: Chia-Yu Chang (Nokia) <chia-yu.ch...@nokia-bell-labs.com>
> Cc: xandf...@gmail.com; net...@vger.kernel.org; dave.t...@gmail.com; 
> pab...@redhat.com; j...@mojatatu.com; k...@kernel.org; 
> step...@networkplumber.org; xiyou.wangc...@gmail.com; j...@resnulli.us; 
> da...@davemloft.net; eduma...@google.com; ho...@kernel.org; 
> andrew+net...@lunn.ch; a...@fiberby.net; liuhang...@gmail.com; 
> sh...@kernel.org; linux-kselftest@vger.kernel.org; i...@kernel.org; 
> ncardw...@google.com; Koen De Schepper (Nokia) 
> <koen.de_schep...@nokia-bell-labs.com>; g.white <g.wh...@cablelabs.com>; 
> ingemar.s.johans...@ericsson.com; mirja.kuehlew...@ericsson.com; 
> chesh...@apple.com; rs.i...@gmx.at; jason_living...@comcast.com; vidhi_goel 
> <vidhi_g...@apple.com>
> Subject: Re: [PATCH v12 net-next 1/5] Documentation: netlink: specs: tc: Add 
> DualPI2 specification
> 
> 
> 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.
> 
> 
> 
> chia-yu.ch...@nokia-bell-labs.com writes:
> 
> > From: Chia-Yu Chang <chia-yu.ch...@nokia-bell-labs.com>
> >
> > Introduce the specification of tc qdisc DualPI2 stats and attributes, 
> > which is the reference implementation of IETF RFC9332 DualQ Coupled 
> > AQM
> > (https://datatracker.ietf.org/doc/html/rfc9332) providing two 
> > different
> > queues: low latency queue (L-queue) and classic queue (C-queue).
> >
> > Signed-off-by: Chia-Yu Chang <chia-yu.ch...@nokia-bell-labs.com>
> > ---
> >  Documentation/netlink/specs/tc.yaml | 144 
> > ++++++++++++++++++++++++++++
> >  1 file changed, 144 insertions(+)
> 
> The syntax is not valid so this doesn't pass the schema check and presumably 
> hasn't been tested. Please validate YNL .yaml additions e.g.
> 
> ./tools/net/ynl/pyynl/cli.py \
>     --spec Documentation/netlink/specs/tc.yaml \
>     --list-ops
> 
> ...
> jsonschema.exceptions.ValidationError: Additional properties are not allowed 
> ('entries' was unexpected) ...
> On instance['attribute-sets'][30]['attributes'][14]:
>     {'name': 'gso_split',
>      'type': 'flags',
>      'doc': 'Split aggregated skb or not',
>      'entries': ['split_gso', 'no_split_gso']}
> 

Hi Donald,

        Thanks for the feedback, and I will take actions for below points as 
well as the corresponding iproute2-net fixes.
        One more question is I see "uint" type is not valid during validation - 
see below (but which was suggested in v11), shall I change it back to u32/u8?

Failed validating 'enum' in 
schema['properties']['definitions']['items']['properties']['members']['items']['properties']['type']:
    {'description': "The netlink attribute type. Members of type 'binary' "
                    "or 'pad'\n"
                    "must also have the 'len' property set.\n",
     'enum': ['u8',
              'u16',
              'u32',
              'u64',
              's8',
              's16',
              's32',
              's64',
              'string',
              'binary',
              'pad']}

On instance['definitions'][42]['members'][12]['type']:
    'uint'      

Best regards,
Chia-Yu
 
> >
> > diff --git a/Documentation/netlink/specs/tc.yaml 
> > b/Documentation/netlink/specs/tc.yaml
> > index aacccea5dfe4..08255bba81c4 100644
> > --- a/Documentation/netlink/specs/tc.yaml
> > +++ b/Documentation/netlink/specs/tc.yaml
> > @@ -816,6 +816,58 @@ definitions:
> >        -
> >          name: drop-overmemory
> >          type: u32
> > +  -
> > +    name: tc-dualpi2-xstats
> > +    type: struct
> > +    members:
> > +      -
> > +        name: prob
> > +        type: uint
> > +        doc: Current probability
> > +      -
> > +        name: delay_c
> 
> Please use dashes in member names, e.g. "delay-c", to follow YNL conventions. 
> Same for all member and attribute names below.
> 
> > +        type: uint
> > +        doc: Current C-queue delay in microseconds
> > +      -
> > +        name: delay_l
> > +        type: uint
> > +        doc: Current L-queue delay in microseconds
> > +      -
> > +        name: pkts_in_c
> > +        type: uint
> > +        doc: Number of packets enqueued in the C-queue
> > +      -
> > +        name: pkts_in_l
> > +        type: uint
> > +        doc: Number of packets enqueued in the L-queue
> > +      -
> > +        name: maxq
> > +        type: uint
> > +        doc: Maximum number of packets seen by the DualPI2
> > +      -
> > +        name: ecn_mark
> > +        type: uint
> > +        doc: All packets marked with ecn
> > +      -
> > +        name: step_mark
> > +        type: uint
> > +        doc: Only packets marked with ecn due to L-queue step AQM
> > +      -
> > +        name: credit
> > +        type: int
> > +        doc: Current credit value for WRR
> > +      -
> > +        name: memory_used
> > +        type: uint
> > +        doc: Memory used in bytes by the DualPI2
> > +      -
> > +        name: max_memory_used
> > +        type: uint
> > +        doc: Maximum memory used in bytes by the DualPI2
> > +      -
> > +        name: memory_limit
> > +        type: uint
> > +        doc: Memory limit in bytes
> >    -
> >      name: tc-fq-pie-xstats
> >      type: struct
> > @@ -2299,6 +2351,92 @@ attribute-sets:
> >        -
> >          name: quantum
> >          type: u32
> > +  -
> > +    name: tc-dualpi2-attrs
> > +    attributes:
> > +      -
> > +        name: limit
> > +        type: uint
> > +        doc: Limit of total number of packets in queue
> > +      -
> > +        name: memlimit
> > +        type: uint
> > +        doc: Memory limit of total number of packets in queue
> > +      -
> > +        name: target
> > +        type: uint
> > +        doc: Classic target delay in microseconds
> > +      -
> > +        name: tupdate
> > +        type: uint
> > +        doc: Drop probability update interval time in microseconds
> > +      -
> > +        name: alpha
> > +        type: uint
> > +        doc: Integral gain factor in Hz for PI controller
> > +      -
> > +        name: beta
> > +        type: uint
> > +        doc: Proportional gain factor in Hz for PI controller
> > +      -
> > +        name: step_thresh
> > +        type: uint
> > +        doc: L4S step marking threshold in microseconds or in packet (see 
> > step_packets)
> > +      -
> > +        name: step_packets
> > +        type: flags
> > +        doc: L4S Step marking threshold unit
> > +        entries:
> > +        - microseconds
> > +        - packets
> 
> This is not valid syntax. Enumerations and sets of flags need to be defined 
> separately. For example, look at the definition of tc-cls-flags and its usage.
> 
> BUT step_packets is defined as a boolean in the implementation so could be 
> implemented as a boolean flag in the API. If it needs to be extensible in 
> future then it should be declared as an enum in uAPI and defined in this spec 
> as an enum. Either way, the parsing and policy in patch 2 should be made more 
> robust.
> 
> > +      -
> > +        name: min_qlen_step
> > +        type: uint
> > +        doc: Packets enqueued to the L-queue can apply the step threshold 
> > when the queue length of L-queue is larger than this value. (0 is 
> > recommended)
> > +      -
> > +        name: coupling_factor
> > +        type: uint
> > +        doc: Probability coupling factor between Classic and L4S (2 is 
> > recommended)
> > +      -
> > +        name: drop_overload
> > +        type: flags
> > +        doc: Control the overload strategy (drop to preserve latency or 
> > let the queue overflow)
> > +        entries:
> > +        - drop_on_overload
> > +        - overflow
> 
> Not valid syntax. Use a boolean flag or define an enum.
> 
> > +      -
> > +        name: drop_early
> > +        type: flags
> > +        doc: Decide where the Classic packets are PI-based dropped or 
> > marked
> > +        entries:
> > +        - drop_enqueue
> > +        - drop_dequeue
> 
> Not valid syntax. Use a boolean flag or define an enum.
> 
> > +      -
> > +        name: classic_protection
> > +        type: uint
> > +        doc: Classic WRR weight in percentage (from 0 to 100)
> > +      -
> > +        name: ecn_mask
> > +        type: flags
> > +        doc: Configure the L-queue ECN classifier
> > +        entries:
> > +        - l4s_ect
> > +        - any_ect
> 
> Not valid syntax. Type should probably match implementation, unless you want 
> to enumerate the valid values by definining an enum.
> 
> > +      -
> > +        name: gso_split
> > +        type: flags
> > +        doc: Split aggregated skb or not
> > +        entries:
> > +        - split_gso
> > +        - no_split_gso
> 
> Not valid syntax. Use a boolean flag or define an enum.
> 
> > +      -
> > +        name: max_rtt
> > +        type: uint
> > +        doc: The maximum expected RTT of the traffic that is controlled by 
> > DualPI2 in usec
> > +      -
> > +        name: typical_rtt
> > +        type: uint
> > +        doc: The typical base RTT of the traffic that is controlled 
> > + by DualPI2 in usec
> >    -
> >      name: tc-ematch-attrs
> >      attributes:
> > @@ -3679,6 +3817,9 @@ sub-messages:
> >        -
> >          value: drr
> >          attribute-set: tc-drr-attrs
> > +      -
> > +        value: dualpi2
> > +        attribute-set: tc-dualpi2-attrs
> >        -
> >          value: etf
> >          attribute-set: tc-etf-attrs
> > @@ -3846,6 +3987,9 @@ sub-messages:
> >        -
> >          value: codel
> >          fixed-header: tc-codel-xstats
> > +      -
> > +        value: dualpi2
> > +        fixed-header: tc-dualpi2-xstats
> >        -
> >          value: fq
> >          fixed-header: tc-fq-qd-stats

Reply via email to