@@ -59,7 +59,7 @@ bool NrSdap::requiresSdapHeader(const DrbConfig *drb)
5959 return drb->isDefault || drb->qfiList .size () > 1 ;
6060}
6161
62- bool NrSdap::shouldEnableReflectiveQos (int qfi)
62+ bool NrSdap::shouldEnableReflectiveQos (Qfi qfi)
6363{
6464 return par (" useReflectiveQos" ).boolValue (); // for now -- should come from RRC config
6565}
@@ -106,35 +106,35 @@ void NrSdap::handleMessage(cMessage *msg)
106106
107107void NrSdap::handleUpperPacket (inet::Packet *pkt)
108108{
109- uint8_t qfi = 0 ;
109+ Qfi qfi = QFI_NONE ;
110110 bool qfiFromReflectiveQos = false ;
111111
112112 // Extract QFI from QfiReq tag if present (set by GtpUser from GTP-U header, or by app directly)
113113 if (pkt->hasTag <QfiReq>()) {
114114 qfi = pkt->getTag <QfiReq>()->getQfi ();
115- EV_INFO << " SDAP TX: QFI = " << ( int ) qfi << " extracted from QfiReq\n " ;
115+ EV_INFO << " SDAP TX: QFI = " << qfi << " extracted from QfiReq\n " ;
116116 }
117117 else if (isUe) {
118118 // UE UL: try reflective QoS first (3GPP-defined mechanism)
119119 if (reflectiveQosTable != nullptr ) {
120- uint8_t reflectiveQfi = reflectiveQosTable->lookupUplinkQfi (pkt);
121- if (reflectiveQfi > 0 ) {
120+ Qfi reflectiveQfi = reflectiveQosTable->lookupUplinkQfi (pkt);
121+ if (reflectiveQfi != QFI_NONE ) {
122122 qfi = reflectiveQfi;
123123 qfiFromReflectiveQos = true ;
124- EV_INFO << " SDAP TX: QFI = " << ( int ) qfi << " derived from reflective QoS\n " ;
124+ EV_INFO << " SDAP TX: QFI = " << qfi << " derived from reflective QoS\n " ;
125125 }
126126 }
127127 // Optional non-standard fallback: derive QFI from DSCP field of the IP header
128- if (qfi == 0 && par (" useDscpAsQfiFallback" ).boolValue ()) {
128+ if (qfi == QFI_NONE && par (" useDscpAsQfiFallback" ).boolValue ()) {
129129 if (pkt->hasTag <FlowControlInfo>()) {
130130 uint8_t tos = (uint8_t )pkt->getTag <FlowControlInfo>()->getTypeOfService ();
131131 if (tos > 0 ) {
132- qfi = tos >> 2 ;
133- EV_INFO << " SDAP TX: QFI = " << ( int ) qfi << " derived from DSCP (fallback)\n " ;
132+ qfi = Qfi ( tos >> 2 ) ;
133+ EV_INFO << " SDAP TX: QFI = " << qfi << " derived from DSCP (fallback)\n " ;
134134 }
135135 }
136136 }
137- if (qfi == 0 )
137+ if (qfi == QFI_NONE )
138138 EV_WARN << " SDAP TX: No QFI from reflective QoS or DSCP, using QFI=0 (default DRB)\n " ;
139139 }
140140 else {
@@ -153,13 +153,13 @@ void NrSdap::handleUpperPacket(inet::Packet *pkt)
153153 if (!drb) {
154154 drb = drbTable_.getDefaultDrb (nodeId);
155155 if (drb)
156- EV_WARN << " SDAP TX: No DRB mapping for nodeId=" << nodeId << " QFI=" << ( int ) qfi
156+ EV_WARN << " SDAP TX: No DRB mapping for nodeId=" << nodeId << " QFI=" << qfi
157157 << " , falling back to default DRB " << drb->drbId << " \n " ;
158158 }
159159 if (!drb)
160160 throw cRuntimeError (" SDAP TX: No DRB available for nodeId=%d" , (int )num (nodeId));
161161
162- EV_INFO << " SDAP TX: Selected DRB=" << drb->drbId << " for QFI=" << ( int ) qfi << " \n " ;
162+ EV_INFO << " SDAP TX: Selected DRB=" << drb->drbId << " for QFI=" << qfi << " \n " ;
163163
164164 // Check if SDAP header is required for this DRB
165165 if (requiresSdapHeader (drb)) {
@@ -172,7 +172,7 @@ void NrSdap::handleUpperPacket(inet::Packet *pkt)
172172 sdapHeader->setReflectiveQoS (enableReflectiveQos);
173173
174174 pkt->insertAtFront (sdapHeader);
175- EV_INFO << " SDAP TX: Inserted SDAP header with QFI = " << ( int ) qfi
175+ EV_INFO << " SDAP TX: Inserted SDAP header with QFI = " << qfi
176176 << " , reflectiveQoS = " << (enableReflectiveQos ? " true" : " false" ) << " \n " ;
177177 }
178178 else {
@@ -207,7 +207,7 @@ void NrSdap::handleLowerPacket(inet::Packet *pkt)
207207
208208 EV_INFO << " SDAP RX: Received packet from DRB " << drbId << " : " << pkt->peekAtFront () << " \n " ;
209209
210- int qfi = 0 ;
210+ Qfi qfi = QFI_NONE ;
211211
212212 // Check if packet has SDAP header (should be at the front according to 3GPP TS 37.324)
213213 if (requiresSdapHeader (drb)) {
@@ -218,14 +218,14 @@ void NrSdap::handleLowerPacket(inet::Packet *pkt)
218218 EV_INFO << " SDAP RX: Extracted SDAP header with QFI = " << qfi << " \n " ;
219219
220220 // Validate QFI range (0-63 according to 3GPP)
221- if (qfi > 63 ) {
221+ if (num ( qfi) > 63 ) {
222222 EV_WARN << " SDAP RX: Invalid QFI value " << qfi << " (should be 0-63)\n " ;
223- qfi = 0 ; // Use default QFI
223+ qfi = QFI_NONE;
224224 }
225225
226226 // Handle reflective QoS if UE and enabled
227227 if (sdapHeader->getReflectiveQoS ()) {
228- EV_INFO << " SDAP RX: Reflective QoS enabled for QFI " << ( int ) qfi << " \n " ;
228+ EV_INFO << " SDAP RX: Reflective QoS enabled for QFI " << qfi << " \n " ;
229229 if (isUe && reflectiveQosTable != nullptr ) {
230230 reflectiveQosTable->handleDownlinkFlow (pkt, qfi);
231231 }
@@ -243,7 +243,7 @@ void NrSdap::handleLowerPacket(inet::Packet *pkt)
243243
244244 // Validate QFI ↔ DRB consistency
245245 if (drb) {
246- if (!contains (drb->qfiList , ( int ) qfi))
246+ if (!contains (drb->qfiList , qfi))
247247 EV_WARN << " SDAP RX: DRB/QFI mismatch! Received on DRB=" << drbId << " , QFI=" << qfi << " not in qfiList\n " ;
248248 }
249249
@@ -255,7 +255,7 @@ void NrSdap::handleLowerPacket(inet::Packet *pkt)
255255 const inet::Protocol *upperProto = getUpperProtocol (drb);
256256 pkt->addTagIfAbsent <PacketProtocolTag>()->setProtocol (upperProto);
257257
258- EV_INFO << " SDAP RX: Forwarding packet with QFI " << qfi << " to upper layer (protocol: " << upperProto->getName () << " )\n " ;
258+ EV_INFO << " SDAP RX: Forwarding packet with QFI= " << qfi << " to upper layer (protocol: " << upperProto->getName () << " )\n " ;
259259 send (pkt, " upperLayerOut" );
260260}
261261
0 commit comments