[VOL-5461] Duplicate MAC Bridge Port Numbers Cause Parameter Error in MBPCD ME Configuration in PonAniConfig
Signed-off-by: bseeniva <balaji.seenivasan@radisys.com>
Change-Id: I709a83ad9379721eef01c8a12b9067782aafba0e
diff --git a/VERSION b/VERSION
index 03aa22f..b221cd1 100755
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.12.25
+2.12.26
diff --git a/internal/pkg/avcfg/omci_ani_config.go b/internal/pkg/avcfg/omci_ani_config.go
index 4968d78..c58b18f 100755
--- a/internal/pkg/avcfg/omci_ani_config.go
+++ b/internal/pkg/avcfg/omci_ani_config.go
@@ -586,15 +586,26 @@
"TPPtr": strconv.FormatInt(int64(oFsm.mapperSP0ID), 16),
"device-id": oFsm.deviceID, "uni-id": oFsm.pOnuUniPort.UniID})
bridgePtr := cmn.MacBridgeServiceProfileEID + uint16(oFsm.pOnuUniPort.MacBpNo) //cmp also omci_cc.go::sendCreateMBServiceProfile
+ // generate unique MacBpNo from tech profile ID for ANI side
+ macBpNo, macBpNoErr := cmn.GenerateANISideMBPCDPortNo(uint16(oFsm.techProfileID))
+ if macBpNoErr != nil {
+ logger.Warn(ctx, "Failed to generate MAC bridge port number, Will set the port-number to 0xFF", log.Fields{
+ "device-id": oFsm.deviceID,
+ "uni-id": oFsm.pOnuUniPort.UniID,
+ "error": macBpNoErr,
+ })
+ macBpNo = 0xFF
+ }
meParams := me.ParamData{
EntityID: oFsm.macBPCD0ID,
Attributes: me.AttributeValueMap{
me.MacBridgePortConfigurationData_BridgeIdPointer: bridgePtr,
- me.MacBridgePortConfigurationData_PortNum: 0xFF, //fixed unique ANI side indication
- me.MacBridgePortConfigurationData_TpType: 3, //for .1PMapper
+ me.MacBridgePortConfigurationData_PortNum: uint8(macBpNo), //fixed unique ANI side indication
+ me.MacBridgePortConfigurationData_TpType: 3, //for .1PMapper
me.MacBridgePortConfigurationData_TpPointer: oFsm.mapperSP0ID,
},
}
+
oFsm.mutexPLastTxMeInstance.Lock()
meInstance, err := oFsm.pOmciCC.SendCreateMBPConfigDataVar(log.WithSpanFromContext(context.TODO(), ctx), oFsm.pDeviceHandler.GetOmciTimeout(), true,
oFsm.PAdaptFsm.CommChan, meParams)
diff --git a/internal/pkg/avcfg/omci_vlan_config.go b/internal/pkg/avcfg/omci_vlan_config.go
index 30aa96a..bc927c1 100755
--- a/internal/pkg/avcfg/omci_vlan_config.go
+++ b/internal/pkg/avcfg/omci_vlan_config.go
@@ -2336,7 +2336,8 @@
if uint32(oFsm.actualUniFlowParam.VlanRuleParams.InnerCvlan) == uint32(of.OfpVlanId_OFPVID_NONE) {
// this defines VID translation scenario: singletagged->singletagged (if not transparent)
logger.Debugw(ctx, "UniVlanConfigFsm Tx Set::EVTOCD single tagged translation rule", log.Fields{
- "match-pcp": matchPcp, "match-vid": matchVid, "set-pcp": setPcp, "set-vid:": setVid, "device-id": oFsm.deviceID})
+ "match-pcp": matchPcp, "match-vid": matchVid, "set-pcp": setPcp, "set-vid:": setVid, "device-id": oFsm.deviceID,
+ "tags-to-remove": oFsm.actualUniFlowParam.VlanRuleParams.TagsToRemove})
// fill vlan tagging operation table bit fields using network=bigEndian order and using slice offset 0 as highest 'word'
binary.BigEndian.PutUint32(sliceEvtocdRule[cFilterOuterOffset:],
cPrioIgnoreTag<<cFilterPrioOffset| // Not an outer-tag rule
diff --git a/internal/pkg/common/utils.go b/internal/pkg/common/utils.go
index f96a58a..8b0ee21 100755
--- a/internal/pkg/common/utils.go
+++ b/internal/pkg/common/utils.go
@@ -182,3 +182,11 @@
return false
}
}
+
+// GenerateANISideMBPCDPortNo returns ANISideMacBridgePortConfigurationDataPortNo
+func GenerateANISideMBPCDPortNo(tpID uint16) (uint16, error) {
+ if tpID < tpIDStart || tpID >= tpIDEnd {
+ return 0, fmt.Errorf("tech profile id out of range - %d", tpID)
+ }
+ return tpID - tpIDStart, nil
+}