For this series:

Reviewed-and-tested-by: Bill Fischofer <[email protected]>

On Thu, Apr 28, 2016 at 12:54 AM, Bala Manoharan <[email protected]>
wrote:

> Reviewed-by: Balasubramanian Manoharan <[email protected]>
>
> On 28 April 2016 at 01:08, Barry Spinney <[email protected]> wrote:
>
>> This patch adds a new marking_colors_supported and marking_colors_needed
>> arrays.  Also splits the TOS marking function - which previously could
>> specify ECN or DSCP marking into two separate calls.  Also improved the
>> documentation.
>>
>> Signed-off-by: Barry Spinney <[email protected]>
>> ---
>>  include/odp/api/spec/traffic_mngr.h | 137
>> +++++++++++++++++++++++++++---------
>>  1 file changed, 104 insertions(+), 33 deletions(-)
>>
>> diff --git a/include/odp/api/spec/traffic_mngr.h
>> b/include/odp/api/spec/traffic_mngr.h
>> index fff4c46..7ed5fc9 100644
>> --- a/include/odp/api/spec/traffic_mngr.h
>> +++ b/include/odp/api/spec/traffic_mngr.h
>> @@ -293,19 +293,35 @@ typedef struct {
>>          * form of VLAN egress marking using the odp_tm_vlan_marking()
>>          * function.  This being true does not imply that all colors and
>>          * subfield values and changes are supported.  Unsupported
>> features
>> -        * can be detected by the marking function returning an error
>> code.*/
>> +        * can be detected by the marking function returning an error
>> code. */
>>         odp_bool_t vlan_marking_supported;
>>
>> -       /** ip_tos_marking_supported indicates that this TM system
>> supports
>> +       /** ecn_marking_supported indicates that this TM system supports
>> +        * Explicit Congestion Notification egress marking by using the
>> +        * odp_tm_ip_ecn_marking() function.  Note that the ECN is the
>> bottom
>> +        * two bits of the IPv4 TOS field or the analogous IPv6 Traffic
>> Class
>> +        * (TC) field.  Note that the ecn_marking_supported boolean being
>> +        * true does not imply that all colors are supported. */
>> +       odp_bool_t ecn_marking_supported;
>> +
>> +       /** drop_prec_marking_supported indicates that this TM system
>> supports
>>          * SOME form of IPv4/IPv6 egress marking by using the
>> -        * odp_tm_ip_tos_marking() function.  Note that the actually field
>> +        * odp_tm_drop_prec_marking() function.  Note that the actually
>> field
>>          * modified for IPv4 pkts is called TOS, whereas the field
>> modified
>>          * for IPv6 pkts is called Traffic Class (TC) - but they are
>> analogous
>> -        * fields.  Note that the ip_tos_marking_supported boolean being
>> true
>> +        * fields.  Note that the drop_prec_marking_supported boolean
>> being true
>>          * does not imply that all colors and subfield values and changes
>> are
>>          * supported.  Unsupported features can be detected by the marking
>>          * function returning an error code.*/
>> -       odp_bool_t ip_tos_marking_supported;
>> +       odp_bool_t drop_prec_marking_supported;
>> +
>> +       /** The marking_colors_supported array is used to indicate which
>> colors
>> +        * can be used for marking.  A value of FALSE means that this
>> color
>> +        * should not be enabled for either vlan marking, ecn marking or
>> +        * drop precedence marking.  A value of TRUE means that this
>> color is
>> +        * supported for at least one of (and ideally all of) vlan
>> marking,
>> +        * ecn marking or drop precedence marking. */
>> +       odp_bool_t marking_colors_supported[ODP_NUM_PACKET_COLORS];
>>
>>         /** The per_level array specifies the TM system capabilities that
>>          * can vary based upon the tm_node level. */
>> @@ -379,7 +395,7 @@ typedef struct {
>>         uint32_t max_tm_queues;
>>
>>         /** num_levels specifies that number of levels of hierarchical
>> -        * scheduling that will b used.  This is a count of the tm_node
>> +        * scheduling that will be used.  This is a count of the tm_node
>>          * stages and does not include tm_queues or tm_egress objects. */
>>         uint8_t num_levels;
>>
>> @@ -402,11 +418,25 @@ typedef struct {
>>          * vlan_marking_supported. */
>>         odp_bool_t vlan_marking_needed;
>>
>> -       /** ip_tos_marking_needed indicates that the ODP application
>> expects
>> +       /** ecn_marking_needed indicates that the ODP application expects
>> +        * to use some form of IPv4 TOS or IPv6 TC field egress marking by
>> +        * using the odp_tm_ecn_marking() function.  See also comments for
>> +        * ecn_marking_supported. */
>> +       odp_bool_t ecn_marking_needed;
>> +
>> +       /** drop_prec_marking_needed indicates that the ODP application
>> expects
>>          * to use some form of IPv4 TOS or IPv6 TC field egress marking by
>> -        * using the odp_tm_ip_tos_marking() function.  See also comments
>> for
>> -        * ip_tos_marking_supported. */
>> -       odp_bool_t ip_tos_marking_needed;
>> +        * using the odp_tm_drop_prec_marking() function.  See also
>> comments for
>> +        * drop_prec_marking_supported. */
>> +       odp_bool_t drop_prec_marking_needed;
>> +
>> +       /** The marking_colors_needed array is used to indicate which
>> colors
>> +        * are expected to be used for marking.  A value of FALSE means
>> that
>> +        * the application will not enable this color for vlan marking,
>> +        * ecn marking nor drop precedence marking.  A value of TRUE
>> means that
>> +        * the application expects to use this color in conjunction with
>> one or
>> +        * more of the marking API's. */
>> +       odp_bool_t marking_colors_needed[ODP_NUM_PACKET_COLORS];
>>
>>         /** The per_level array specifies the TM system requirements that
>>          * can vary based upon the tm_node level. */
>> @@ -480,7 +510,7 @@ void odp_tm_egress_init(odp_tm_egress_t *egress);
>>   * that N is larger than the capabilities_size, N will still be returned,
>>   * but only capabilities_size records will be filled in.
>>   *
>> - * @param[out] capabilities      An arary of odp_tm_capabilities_t
>> records to
>> + * @param[out] capabilities      An array of odp_tm_capabilities_t
>> records to
>>   *                               be filled in.
>>   * @param[in]  capabilities_size The number of odp_tm_capabilities_t
>> records
>>   *                               in the capabilities array.
>> @@ -598,7 +628,11 @@ int odp_tm_destroy(odp_tm_t odp_tm);
>>   * field (but only for pkts that already carry a VLAN tag) of a pkt
>> based upon
>>   * the final pkt (or shaper?) color assigned to the pkt when it reaches
>> the
>>   * egress node.  When drop_eligible_enabled is false, then the given
>> color has
>> - * no effect on the VLAN fields.
>> + * no effect on the VLAN fields.  See IEEE 802.1q for more details.
>> + *
>> + * Note that ALL ODP implementations are required to SUCCESSFULLY handle
>> all
>> + * calls to this function with drop_eligible_enabled == FALSE - i.e. must
>> + * always return 0 when disabling this feature.
>>   *
>>   * @param[in] odp_tm                 Odp_tm is used to identify the TM
>> system
>>   *                                   whose egress behavior is being
>> changed.
>> @@ -612,39 +646,76 @@ int odp_tm_vlan_marking(odp_tm_t           odp_tm,
>>                         odp_packet_color_t color,
>>                         odp_bool_t         drop_eligible_enabled);
>>
>> -/** IP Tos Marking.
>> +/** Explicit Congestion Notification Marking.
>> + *
>> + * The odp_tm_ecn_marking() function allows one to configure the TM
>> + * egress so that the two bit ECN subfield of the eight bit TOS field of
>> an
>> + * IPv4 pkt OR the eight bit Traffic Class (TC) field of an IPv6 pkt can
>> be
>> + * selectively modified based upon the final color assigned to the pkt
>> when it
>> + * reaches the egress.  Note that the IPv4 header checksum will be
>> updated -
>> + * but only if the IPv4 TOS field actually changes as a result of this
>> + * setting or the odp_tm_drop_prec_marking setting.  For IPv6, since
>> there is
>> + * no header checksum, nothing needs to be done.  Note that this marking
>> API
>> + * will only ever cause both ECN bits to be set to 1 - but only for TCP
>> pkts
>> + * whose incoming ECN bits are not both 0.  See RFC 3168 for more
>> details.
>>   *
>> - * The odp_tm_ip_tos_marking() function allows one to configure the TM
>> - * egress so that the eight bit TOS field of an IPv4 pkt OR the analogous
>> - * eight bit Traffic Class (TC) field of an IPv6 pkt can be selectively
>> - * modified based upon the final color assigned to the pkt when it
>> reaches the
>> - * egress.  Note that both the TOS/TC field and the VLAN header of a
>> VLAN tagged
>> - * IP pkt could be independently modified.  Also note that this function
>> - * will update the IPv4 header checksum - but only if the TOS field
>> actually
>> - * changes.  For IPv6, since there is no header checksum, nothing needs
>> to
>> - * be done.
>> + * Note that ALL ODP implementations are required to SUCCESSFULLY handle
>> all
>> + * calls to this function with ecn_ce_enabled == FALSE - i.e. must always
>> + * return 0 when disabling this feature.
>>   *
>>   * @param[in] odp_tm          Odp_tm is used to identify the TM system
>> whose
>>   *                            egress behavior is being changed.
>>   * @param[in] color           The packet color whose egress marking is
>>   *                            being changed.
>> - * @param[in] dscp_enabled    If true then egressed IPv4/IPv6 pkts with
>> this
>> - *                            color will have the pkt's DSCP subfield
>> set to the
>> - *                            new_dscp parameter (see below).
>> - * @param[in] new_dscp        The Differentiated Services Code Point
>> value.
>> - *                            Must be in the range 0..63.
>>   * @param[in] ecn_ce_enabled  If true then egressed IPv4/IPv6 pkts whose
>>   *                            protocol field is TCP AND whose ECN
>> subfield has
>> - *                            one of the two values 1 or 2, will set this
>> + *                            either one of the two values 1 or 2, will
>> set this
>>   *                            subfield to the value ECN_CE - i.e.
>> Congestion
>>   *                            Experienced (whose value is 3).
>>   * @return                    0 upon success, < 0 upon failure.
>>   */
>> -int odp_tm_ip_tos_marking(odp_tm_t           odp_tm,
>> -                         odp_packet_color_t color,
>> -                         odp_bool_t         dscp_enabled,
>> -                         uint8_t            new_dscp,
>> -                         odp_bool_t         ecn_ce_enabled);
>> +int odp_tm_ecn_marking(odp_tm_t           odp_tm,
>> +                      odp_packet_color_t color,
>> +                      odp_bool_t         ecn_ce_enabled);
>> +
>> +/** Drop Precedence Marking.
>> + *
>> + * The odp_tm_drop_prec_marking() function allows one to configure the TM
>> + * egress so that the two RFC 2597 Drop Precedence bits can be modified
>> + * based upon the final color assigned to the pkt when it reaches the
>> egress.
>> + * The Drop Precedence bits are contained within the six bit
>> Differentiated
>> + * Services Code Point subfield of the IPv4 TOS field or the IPv6 Traffic
>> + * Class (TC) field.  Specifically the Drop Precedence sub-subfield can
>> be
>> + * accessed with a DSCP bit mask of 0x06.  When enabled for a given
>> color,
>> + * these two bits will be set to Medium Drop Precedence (value 0x4) if
>> the
>> + * color is ODP_PACKET_YELLOW, set to High Drop Precedence (value 0x6) if
>> + * the color is ODP_PACKET_RED, otherwise set to Low Drop Precedence for
>> any
>> + * other color.  Of course an implementation can restrict the set of
>> colors
>> + * which can be enabled via the marking_colors_supported array in the
>> + * odp_tm_capabilities_t record.
>> + *
>> + * Note that the IPv4 header checksum will be updated - but only if the
>> + * IPv4 TOS field actually changes as a result of this setting or the
>> + * odp_tm_ecn_marking setting.  For IPv6, since there is no header
>> checksum,
>> + * nothing else needs to be done.
>> + *
>> + * Note that ALL ODP implementations are required to SUCCESSFULLY handle
>> all
>> + * calls to this function with drop_prec_enabled == FALSE - i.e. must
>> always
>> + * return 0 when disabling this feature.
>> + *
>> + * @param[in] odp_tm            Odp_tm is used to identify the TM system
>> whose
>> + *                              egress behavior is being changed.
>> + * @param[in] color             The packet color whose egress marking is
>> + *                              being changed.
>> + * @param[in] drop_prec_enabled If true then egressed IPv4/IPv6 pkts
>> with this
>> + *                              color will have the pkt's Drop Precedence
>> + *                              sub-subfield of the DSCP subfield set to
>> + *                              LOW, MEDIUM or HIGH drop precedence.
>> + * @return                      0 upon success, < 0 upon failure.
>> + */
>> +int odp_tm_drop_prec_marking(odp_tm_t           odp_tm,
>> +                            odp_packet_color_t color,
>> +                            odp_bool_t         drop_prec_enabled);
>>
>>  /** Shaper profile types and functions */
>>
>> --
>> 2.7.2
>>
>> _______________________________________________
>> lng-odp mailing list
>> [email protected]
>> https://lists.linaro.org/mailman/listinfo/lng-odp
>>
>
>
> _______________________________________________
> lng-odp mailing list
> [email protected]
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
>
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to