@@ -28,7 +28,7 @@ extern task_zmq_ctx_t grpc_service_task_zmq_ctx;
2828
2929static void convert_proto_msg_to_itti_csr (
3030 magma::feg::CreateSessionResponsePgw& response,
31- s8_create_session_response_t * s5_response);
31+ s8_create_session_response_t * s5_response, bearer_qos_t dflt_bearer_qos );
3232
3333static void get_qos_from_proto_msg (
3434 const magma::feg::QosInformation& proto_qos, bearer_qos_t * bearer_qos) {
@@ -154,7 +154,8 @@ static void recv_s8_delete_session_response(
154154}
155155
156156static void recv_s8_create_session_response (
157- imsi64_t imsi64, teid_t context_teid, const grpc::Status& status,
157+ imsi64_t imsi64, teid_t context_teid, bearer_qos_t dflt_bearer_qos,
158+ const grpc::Status& status,
158159 magma::feg::CreateSessionResponsePgw& response) {
159160 OAILOG_FUNC_IN (LOG_SGW_S8);
160161 s8_create_session_response_t * s5_response = NULL ;
@@ -172,7 +173,7 @@ static void recv_s8_create_session_response(
172173 message_p->ittiMsgHeader .imsi = imsi64;
173174 s5_response->context_teid = context_teid;
174175 if (status.ok ()) {
175- convert_proto_msg_to_itti_csr (response, s5_response);
176+ convert_proto_msg_to_itti_csr (response, s5_response, dflt_bearer_qos );
176177 } else {
177178 OAILOG_ERROR (
178179 LOG_SGW_S8,
@@ -405,6 +406,7 @@ void send_s8_create_session_request(
405406 imsi64_t imsi64) {
406407 OAILOG_FUNC_IN (LOG_SGW_S8);
407408 magma::feg::CreateSessionRequestPgw csr_req;
409+ bearer_qos_t dflt_bearer_qos = {0 };
408410
409411 // teid shall remain same for both sgw's s11 interface and s8 interface as
410412 // teid is allocated per PDN
@@ -414,18 +416,21 @@ void send_s8_create_session_request(
414416 sgw_s11_teid);
415417
416418 fill_s8_create_session_req (msg, &csr_req, sgw_s11_teid);
419+ dflt_bearer_qos =
420+ msg->bearer_contexts_to_be_created .bearer_contexts [0 ].bearer_level_qos ;
417421
418422 magma::S8Client::s8_create_session_request (
419423 csr_req,
420- [imsi64, sgw_s11_teid](
424+ [imsi64, sgw_s11_teid, dflt_bearer_qos ](
421425 grpc::Status status, magma::feg::CreateSessionResponsePgw response) {
422- recv_s8_create_session_response (imsi64, sgw_s11_teid, status, response);
426+ recv_s8_create_session_response (
427+ imsi64, sgw_s11_teid, dflt_bearer_qos, status, response);
423428 });
424429}
425430
426431static void convert_proto_msg_to_itti_csr (
427432 magma::feg::CreateSessionResponsePgw& response,
428- s8_create_session_response_t * s5_response) {
433+ s8_create_session_response_t * s5_response, bearer_qos_t dflt_bearer_qos ) {
429434 OAILOG_FUNC_IN (LOG_SGW_S8);
430435 s5_response->apn_restriction_value = response.apn_restriction ();
431436 get_fteid_from_proto_msg (
@@ -437,7 +442,12 @@ static void convert_proto_msg_to_itti_csr(
437442 s8_bc->eps_bearer_id = response.bearer_context ().id ();
438443 s5_response->eps_bearer_id = s8_bc->eps_bearer_id ;
439444 s8_bc->charging_id = response.bearer_context ().charging_id ();
440- get_qos_from_proto_msg (response.bearer_context ().qos (), &s8_bc->qos );
445+ if (response.bearer_context ().valid_qos ()) {
446+ get_qos_from_proto_msg (response.bearer_context ().qos (), &s8_bc->qos );
447+ } else {
448+ // If qos is not received from PGW, set the qos that was sent in CS Req
449+ s8_bc->qos = dflt_bearer_qos;
450+ }
441451 get_fteid_from_proto_msg (
442452 response.bearer_context ().user_plane_fteid (), &s8_bc->pgw_s8_up );
443453 if (response.has_gtp_error ()) {
0 commit comments