diff --git a/internal/context/sm_context.go b/internal/context/sm_context.go index af9b7df..2de8c64 100644 --- a/internal/context/sm_context.go +++ b/internal/context/sm_context.go @@ -661,8 +661,10 @@ func (c *SMContext) CreatePccRuleDataPath(pccRule *PCCRule, pccRule.Datapath.AddChargingRules(c, chgLevel, chgData) } - pccRule.Datapath.AddQoS(c, pccRule.QFI, qosData) - c.AddQosFlow(pccRule.QFI, qosData) + if pccRule.RefQosDataID() != "" { + pccRule.Datapath.AddQoS(c, pccRule.QFI, qosData) + c.AddQosFlow(pccRule.QFI, qosData) + } return nil } diff --git a/internal/context/sm_context_policy.go b/internal/context/sm_context_policy.go index aef74c7..9fb2b20 100644 --- a/internal/context/sm_context_policy.go +++ b/internal/context/sm_context_policy.go @@ -163,7 +163,11 @@ func (c *SMContext) ApplyPccRules( tgtQosID := tgtPcc.RefQosDataID() _, tgtQosData := c.getSrcTgtQosData(decision.QosDecs, tgtQosID) - tgtPcc.SetQFI(c.AssignQFI(tgtQosID)) + + // only assign the QFI when there is tgtQoSID (i.e. there is QoSData) + if tgtQosID != "" { + tgtPcc.SetQFI(c.AssignQFI(tgtQosID)) + } // Create Data path for targetPccRule if err := c.CreatePccRuleDataPath(tgtPcc, tgtTcData, tgtQosData, tgtChgData); err != nil { @@ -180,11 +184,12 @@ func (c *SMContext) ApplyPccRules( if err := applyFlowInfoOrPFD(tgtPcc); err != nil { return err } - finalPccRules[id] = tgtPcc + if tgtTcID != "" { finalTcDatas[tgtTcID] = tgtTcData } if tgtQosID != "" { + finalPccRules[id] = tgtPcc finalQosDatas[tgtQosID] = tgtQosData } if tgtChgID != "" {