@@ -46,6 +46,12 @@ enum {
46
46
RED_DROP_PROBABILITY_SET = (1U << 2 )
47
47
};
48
48
49
+ enum {
50
+ GREEN_WRED_ENABLED = (1U << 0 ),
51
+ YELLOW_WRED_ENABLED = (1U << 1 ),
52
+ RED_WRED_ENABLED = (1U << 2 )
53
+ };
54
+
49
55
// field_name is what is expected in CONFIG_DB PORT_QOS_MAP table
50
56
map<string, sai_port_attr_t > qos_to_attr_map = {
51
57
{dscp_to_tc_field_name, SAI_PORT_ATTR_QOS_DSCP_TO_TC_MAP},
@@ -720,6 +726,7 @@ sai_object_id_t WredMapHandler::addQosItem(const vector<sai_attribute_t> &attrib
720
726
sai_attribute_t attr;
721
727
vector<sai_attribute_t > attrs;
722
728
uint8_t drop_prob_set = 0 ;
729
+ uint8_t wred_enable_set = 0 ;
723
730
724
731
attr.id = SAI_WRED_ATTR_WEIGHT;
725
732
attr.value .s32 = 0 ;
@@ -729,32 +736,44 @@ sai_object_id_t WredMapHandler::addQosItem(const vector<sai_attribute_t> &attrib
729
736
{
730
737
attrs.push_back (attrib);
731
738
732
- if (attrib.id == SAI_WRED_ATTR_GREEN_DROP_PROBABILITY)
733
- {
739
+ switch (attrib.id )
740
+ {
741
+ case SAI_WRED_ATTR_GREEN_ENABLE:
742
+ wred_enable_set |= GREEN_WRED_ENABLED;
743
+ break ;
744
+ case SAI_WRED_ATTR_YELLOW_ENABLE:
745
+ wred_enable_set |= YELLOW_WRED_ENABLED;
746
+ break ;
747
+ case SAI_WRED_ATTR_RED_ENABLE:
748
+ wred_enable_set |= RED_WRED_ENABLED;
749
+ break ;
750
+ case SAI_WRED_ATTR_GREEN_DROP_PROBABILITY:
734
751
drop_prob_set |= GREEN_DROP_PROBABILITY_SET;
735
- }
736
- else if (attrib.id == SAI_WRED_ATTR_YELLOW_DROP_PROBABILITY)
737
- {
752
+ break ;
753
+ case SAI_WRED_ATTR_YELLOW_DROP_PROBABILITY:
738
754
drop_prob_set |= YELLOW_DROP_PROBABILITY_SET;
739
- }
740
- else if (attrib.id == SAI_WRED_ATTR_RED_DROP_PROBABILITY)
741
- {
755
+ break ;
756
+ case SAI_WRED_ATTR_RED_DROP_PROBABILITY:
742
757
drop_prob_set |= RED_DROP_PROBABILITY_SET;
758
+ break ;
759
+ default :
760
+ break ;
743
761
}
744
762
}
745
- if (!(drop_prob_set & GREEN_DROP_PROBABILITY_SET))
763
+
764
+ if (!(drop_prob_set & GREEN_DROP_PROBABILITY_SET) && (wred_enable_set & GREEN_WRED_ENABLED))
746
765
{
747
766
attr.id = SAI_WRED_ATTR_GREEN_DROP_PROBABILITY;
748
767
attr.value .s32 = 100 ;
749
768
attrs.push_back (attr);
750
769
}
751
- if (!(drop_prob_set & YELLOW_DROP_PROBABILITY_SET))
770
+ if (!(drop_prob_set & YELLOW_DROP_PROBABILITY_SET) && (wred_enable_set & YELLOW_WRED_ENABLED) )
752
771
{
753
772
attr.id = SAI_WRED_ATTR_YELLOW_DROP_PROBABILITY;
754
773
attr.value .s32 = 100 ;
755
774
attrs.push_back (attr);
756
775
}
757
- if (!(drop_prob_set & RED_DROP_PROBABILITY_SET))
776
+ if (!(drop_prob_set & RED_DROP_PROBABILITY_SET) && (wred_enable_set & RED_WRED_ENABLED) )
758
777
{
759
778
attr.id = SAI_WRED_ATTR_RED_DROP_PROBABILITY;
760
779
attr.value .s32 = 100 ;
0 commit comments