VOL-3082: Fix incorrect interpretation of pbit position in the pbit
map string in the tech-profile
Change-Id: I38672953126484fe3cc6e5d16d06ce16e4fee817
diff --git a/pkg/techprofile/tech_profile.go b/pkg/techprofile/tech_profile.go
index cbbe835..00208d6 100644
--- a/pkg/techprofile/tech_profile.go
+++ b/pkg/techprofile/tech_profile.go
@@ -870,34 +870,38 @@
Scheduler: UsScheduler}
}
-func (t *TechProfileMgr) GetGemportIDForPbit(tp *TechProfile, Dir tp_pb.Direction, pbit uint32) uint32 {
+func (t *TechProfileMgr) GetGemportIDForPbit(tp *TechProfile, dir tp_pb.Direction, pbit uint32) uint32 {
/*
Function to get the Gemport ID mapped to a pbit.
*/
- if Dir == tp_pb.Direction_UPSTREAM {
+ if dir == tp_pb.Direction_UPSTREAM {
// upstream GEM ports
- NumGemPorts := len(tp.UpstreamGemPortAttributeList)
- for Count := 0; Count < NumGemPorts; Count++ {
- NumPbitMaps := len(tp.UpstreamGemPortAttributeList[Count].PbitMap)
- for ICount := 2; ICount < NumPbitMaps; ICount++ {
- if p, err := strconv.Atoi(string(tp.UpstreamGemPortAttributeList[Count].PbitMap[ICount])); err == nil {
- if uint32(ICount-2) == pbit && p == 1 { // Check this p-bit is set
- logger.Debugw("Found-US-GEMport-for-Pcp", log.Fields{"pbit": pbit, "GEMport": tp.UpstreamGemPortAttributeList[Count].GemportID})
- return tp.UpstreamGemPortAttributeList[Count].GemportID
+ numGemPorts := len(tp.UpstreamGemPortAttributeList)
+ for gemCnt := 0; gemCnt < numGemPorts; gemCnt++ {
+ lenOfPbitMap := len(tp.UpstreamGemPortAttributeList[gemCnt].PbitMap)
+ for pbitMapIdx := 2; pbitMapIdx < lenOfPbitMap; pbitMapIdx++ {
+ // Given a sample pbit map string "0b00000001", lenOfPbitMap is 10
+ // "lenOfPbitMap - pbitMapIdx + 1" will give pbit-i th value from LSB position in the pbit map string
+ if p, err := strconv.Atoi(string(tp.UpstreamGemPortAttributeList[gemCnt].PbitMap[lenOfPbitMap-pbitMapIdx+1])); err == nil {
+ if uint32(pbitMapIdx-2) == pbit && p == 1 { // Check this p-bit is set
+ logger.Debugw("Found-US-GEMport-for-Pcp", log.Fields{"pbit": pbit, "GEMport": tp.UpstreamGemPortAttributeList[gemCnt].GemportID})
+ return tp.UpstreamGemPortAttributeList[gemCnt].GemportID
}
}
}
}
- } else if Dir == tp_pb.Direction_DOWNSTREAM {
+ } else if dir == tp_pb.Direction_DOWNSTREAM {
//downstream GEM ports
- NumGemPorts := len(tp.DownstreamGemPortAttributeList)
- for Count := 0; Count < NumGemPorts; Count++ {
- NumPbitMaps := len(tp.DownstreamGemPortAttributeList[Count].PbitMap)
- for ICount := 2; ICount < NumPbitMaps; ICount++ {
- if p, err := strconv.Atoi(string(tp.DownstreamGemPortAttributeList[Count].PbitMap[ICount])); err == nil {
- if uint32(ICount-2) == pbit && p == 1 { // Check this p-bit is set
- logger.Debugw("Found-DS-GEMport-for-Pcp", log.Fields{"pbit": pbit, "GEMport": tp.DownstreamGemPortAttributeList[Count].GemportID})
- return tp.DownstreamGemPortAttributeList[Count].GemportID
+ numGemPorts := len(tp.DownstreamGemPortAttributeList)
+ for gemCnt := 0; gemCnt < numGemPorts; gemCnt++ {
+ lenOfPbitMap := len(tp.DownstreamGemPortAttributeList[gemCnt].PbitMap)
+ for pbitMapIdx := 2; pbitMapIdx < lenOfPbitMap; pbitMapIdx++ {
+ // Given a sample pbit map string "0b00000001", lenOfPbitMap is 10
+ // "lenOfPbitMap - pbitMapIdx + 1" will give pbit-i th value from LSB position in the pbit map string
+ if p, err := strconv.Atoi(string(tp.DownstreamGemPortAttributeList[gemCnt].PbitMap[lenOfPbitMap-pbitMapIdx+1])); err == nil {
+ if uint32(pbitMapIdx-2) == pbit && p == 1 { // Check this p-bit is set
+ logger.Debugw("Found-DS-GEMport-for-Pcp", log.Fields{"pbit": pbit, "GEMport": tp.DownstreamGemPortAttributeList[gemCnt].GemportID})
+ return tp.DownstreamGemPortAttributeList[gemCnt].GemportID
}
}
}