diff --git a/lib/pfcp/build.c b/lib/pfcp/build.c index 663baa3d9..b2830abc2 100644 --- a/lib/pfcp/build.c +++ b/lib/pfcp/build.c @@ -773,21 +773,23 @@ void ogs_pfcp_build_update_urr( /* No change requested, skip. */ if (!(modify_flags & (OGS_PFCP_MODIFY_URR_MEAS_METHOD| OGS_PFCP_MODIFY_URR_REPORT_TRIGGER| - OGS_PFCP_MODIFY_URR_QUOTA_VALIDITY_TIME| - OGS_PFCP_MODIFY_URR_VOLUME_QUOTA| OGS_PFCP_MODIFY_URR_VOLUME_THRESH| + OGS_PFCP_MODIFY_URR_VOLUME_QUOTA| + OGS_PFCP_MODIFY_URR_TIME_THRESH| OGS_PFCP_MODIFY_URR_TIME_QUOTA| - OGS_PFCP_MODIFY_URR_TIME_THRESH))) + OGS_PFCP_MODIFY_URR_QUOTA_VALIDITY_TIME))) return; /* Change request: Send only changed IEs */ message->presence = 1; message->urr_id.presence = 1; message->urr_id.u32 = urr->id; + if (modify_flags & OGS_PFCP_MODIFY_URR_MEAS_METHOD) { message->measurement_method.presence = 1; message->measurement_method.u8 = urr->meas_method; } + if (modify_flags & OGS_PFCP_MODIFY_URR_REPORT_TRIGGER) { message->reporting_triggers.presence = 1; message->reporting_triggers.u24 = (urr->rep_triggers.reptri_5 << 16) @@ -804,12 +806,35 @@ void ogs_pfcp_build_update_urr( } } + if (modify_flags & OGS_PFCP_MODIFY_URR_VOLUME_QUOTA) { + if (urr->vol_quota.flags) { + message->volume_quota.presence = 1; + ogs_pfcp_build_volume( + &message->volume_quota, &urr->vol_quota, + &urrbuf[i].vol_quota, sizeof(urrbuf[i].vol_quota)); + } + } + if (modify_flags & OGS_PFCP_MODIFY_URR_TIME_THRESH) { if (urr->time_threshold) { message->time_threshold.presence = 1; message->time_threshold.u32 = urr->time_threshold; } } + + if (modify_flags & OGS_PFCP_MODIFY_URR_TIME_QUOTA) { + if (urr->time_quota) { + message->time_quota.presence = 1; + message->time_quota.u32 = urr->time_quota; + } + } + + if (modify_flags & OGS_PFCP_MODIFY_URR_QUOTA_VALIDITY_TIME) { + if (urr->quota_validity_time) { + message->quota_validity_time.presence = 1; + message->quota_validity_time.u32 = urr->quota_validity_time; + } + } } static struct {