mirror of
				https://github.com/open5gs/open5gs.git
				synced 2025-11-04 05:53:18 +00:00 
			
		
		
		
	[UPF metrics] Use APN/DNN to expose dnn label
SMF started to provide APN/DNN in PFCP Establishment. APN/DNN is used to provide dnn label of metric fivegs_upffunction_upf_qosflows.
This commit is contained in:
		@@ -227,6 +227,8 @@ int upf_sess_remove(upf_sess_t *sess)
 | 
				
			|||||||
    ogs_pfcp_pool_final(&sess->pfcp);
 | 
					    ogs_pfcp_pool_final(&sess->pfcp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_free(&upf_sess_pool, sess);
 | 
					    ogs_pool_free(&upf_sess_pool, sess);
 | 
				
			||||||
 | 
					    if (sess->apn_dnn)
 | 
				
			||||||
 | 
					        ogs_free(sess->apn_dnn);
 | 
				
			||||||
    upf_metrics_inst_global_dec(UPF_METR_GLOB_GAUGE_UPF_SESSIONNBR);
 | 
					    upf_metrics_inst_global_dec(UPF_METR_GLOB_GAUGE_UPF_SESSIONNBR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_info("[Removed] Number of UPF-sessions is now %d",
 | 
					    ogs_info("[Removed] Number of UPF-sessions is now %d",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -118,6 +118,7 @@ typedef struct upf_sess_s {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* Accounting: */
 | 
					    /* Accounting: */
 | 
				
			||||||
    upf_sess_urr_acc_t urr_acc[OGS_MAX_NUM_OF_URR]; /* FIXME: This probably needs to be mved to a hashtable or alike */
 | 
					    upf_sess_urr_acc_t urr_acc[OGS_MAX_NUM_OF_URR]; /* FIXME: This probably needs to be mved to a hashtable or alike */
 | 
				
			||||||
 | 
					    char            *apn_dnn;            /* APN/DNN Item */
 | 
				
			||||||
} upf_sess_t;
 | 
					} upf_sess_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void upf_context_init(void);
 | 
					void upf_context_init(void);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -96,17 +96,24 @@ void upf_n4_handle_session_establishment_request(
 | 
				
			|||||||
    if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED)
 | 
					    if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED)
 | 
				
			||||||
        goto cleanup;
 | 
					        goto cleanup;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (req->apn_dnn.presence) {
 | 
				
			||||||
 | 
					        char apn_dnn[OGS_MAX_DNN_LEN+1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ogs_assert(0 < ogs_fqdn_parse(apn_dnn, req->apn_dnn.data,
 | 
				
			||||||
 | 
					                ogs_min(req->apn_dnn.len, OGS_MAX_DNN_LEN)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (sess->apn_dnn)
 | 
				
			||||||
 | 
					            ogs_free(sess->apn_dnn);
 | 
				
			||||||
 | 
					        sess->apn_dnn = ogs_strdup(apn_dnn);
 | 
				
			||||||
 | 
					        ogs_assert(sess->apn_dnn);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (i = 0; i < OGS_MAX_NUM_OF_QER; i++) {
 | 
					    for (i = 0; i < OGS_MAX_NUM_OF_QER; i++) {
 | 
				
			||||||
        if (ogs_pfcp_handle_create_qer(&sess->pfcp, &req->create_qer[i],
 | 
					        if (ogs_pfcp_handle_create_qer(&sess->pfcp, &req->create_qer[i],
 | 
				
			||||||
                    &cause_value, &offending_ie_value) == NULL)
 | 
					                    &cause_value, &offending_ie_value) == NULL)
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        if (req->apn_dnn.presence == 1) {
 | 
					        upf_metrics_inst_by_dnn_add(sess->apn_dnn,
 | 
				
			||||||
            upf_metrics_inst_by_dnn_add(req->apn_dnn.data,
 | 
					                UPF_METR_GAUGE_UPF_QOSFLOWS, 1);
 | 
				
			||||||
                    UPF_METR_GAUGE_UPF_QOSFLOWS, 1);
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            upf_metrics_inst_by_dnn_add(NULL,
 | 
					 | 
				
			||||||
                    UPF_METR_GAUGE_UPF_QOSFLOWS, 1);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED)
 | 
					    if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED)
 | 
				
			||||||
        goto cleanup;
 | 
					        goto cleanup;
 | 
				
			||||||
@@ -358,7 +365,7 @@ void upf_n4_handle_session_modification_request(
 | 
				
			|||||||
        if (ogs_pfcp_handle_create_qer(&sess->pfcp, &req->create_qer[i],
 | 
					        if (ogs_pfcp_handle_create_qer(&sess->pfcp, &req->create_qer[i],
 | 
				
			||||||
                    &cause_value, &offending_ie_value) == NULL)
 | 
					                    &cause_value, &offending_ie_value) == NULL)
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        upf_metrics_inst_by_dnn_add(NULL,
 | 
					        upf_metrics_inst_by_dnn_add(sess->apn_dnn,
 | 
				
			||||||
                UPF_METR_GAUGE_UPF_QOSFLOWS, 1);
 | 
					                UPF_METR_GAUGE_UPF_QOSFLOWS, 1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED)
 | 
					    if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED)
 | 
				
			||||||
@@ -376,7 +383,7 @@ void upf_n4_handle_session_modification_request(
 | 
				
			|||||||
        if (ogs_pfcp_handle_remove_qer(&sess->pfcp, &req->remove_qer[i],
 | 
					        if (ogs_pfcp_handle_remove_qer(&sess->pfcp, &req->remove_qer[i],
 | 
				
			||||||
                &cause_value, &offending_ie_value) == false)
 | 
					                &cause_value, &offending_ie_value) == false)
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        upf_metrics_inst_by_dnn_add(NULL,
 | 
					        upf_metrics_inst_by_dnn_add(sess->apn_dnn,
 | 
				
			||||||
                UPF_METR_GAUGE_UPF_QOSFLOWS, -1);
 | 
					                UPF_METR_GAUGE_UPF_QOSFLOWS, -1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED)
 | 
					    if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED)
 | 
				
			||||||
@@ -507,7 +514,7 @@ void upf_n4_handle_session_deletion_request(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    ogs_list_for_each(&sess->pfcp.pdr_list, pdr) {
 | 
					    ogs_list_for_each(&sess->pfcp.pdr_list, pdr) {
 | 
				
			||||||
        ogs_list_for_each(&sess->pfcp.qer_list, qer) {
 | 
					        ogs_list_for_each(&sess->pfcp.qer_list, qer) {
 | 
				
			||||||
            upf_metrics_inst_by_dnn_add(NULL,
 | 
					            upf_metrics_inst_by_dnn_add(sess->apn_dnn,
 | 
				
			||||||
                    UPF_METR_GAUGE_UPF_QOSFLOWS, -1);
 | 
					                    UPF_METR_GAUGE_UPF_QOSFLOWS, -1);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user