diff --git a/src/hss/hss_init.c b/src/hss/hss_init.c index 1e0e79a43..4adeb753c 100644 --- a/src/hss/hss_init.c +++ b/src/hss/hss_init.c @@ -245,6 +245,7 @@ static int hss_ulr_cb( struct msg **msg, struct avp *avp, d_assert(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, avp_network_access_mode) == 0, goto out,); + /* Set the AMBR */ d_assert(fd_msg_avp_new(s6a_ambr, 0, &avp_ambr) == 0, goto out,); d_assert(fd_msg_avp_new(s6a_max_bandwidth_ul, 0, &avp_max_bandwidth_ul) == 0, goto out,); @@ -265,6 +266,7 @@ static int hss_ulr_cb( struct msg **msg, struct avp *avp, if (ue->num_of_pdn && ue->pdn[0]) { + /* Set the APN Configuration Profile */ struct avp *apn_configuration_profile; struct avp *context_identifier, *all_apn_conf_inc_ind; @@ -289,11 +291,12 @@ static int hss_ulr_cb( struct msg **msg, struct avp *avp, for (i = 0; i < ue->num_of_pdn; i++) { + /* Set the APN Configuration */ struct avp *apn_configuration, *context_identifier; struct avp *pdn_type, *service_selection; -#if 0 struct avp *eps_subscribed_qos_profile, *qos_class_identifier; -#endif + struct avp *allocation_retention_priority, *priority_level; + struct avp *pre_emption_capability, *pre_emption_vulnerability; hss_pdn_t *pdn = ue->pdn[i]; d_assert(pdn, goto out,); @@ -326,6 +329,76 @@ static int hss_ulr_cb( struct msg **msg, struct avp *avp, d_assert(fd_msg_avp_add(apn_configuration, MSG_BRW_LAST_CHILD, service_selection) == 0, goto out,); + /* Set the EPS Subscribed QoS Profile */ + d_assert(fd_msg_avp_new(s6a_eps_subscribed_qos_profile, 0, + &eps_subscribed_qos_profile) == 0, goto out,); + + d_assert(fd_msg_avp_new(s6a_qos_class_identifier, 0, + &qos_class_identifier) == 0, goto out,); + val.i32 = pdn->qci; + d_assert(fd_msg_avp_setvalue(qos_class_identifier, &val) == 0, + goto out,); + d_assert(fd_msg_avp_add(eps_subscribed_qos_profile, + MSG_BRW_LAST_CHILD, qos_class_identifier) == 0, goto out,); + + /* Set Allocation retention priority */ + d_assert(fd_msg_avp_new(s6a_allocation_retention_priority, 0, + &allocation_retention_priority) == 0, goto out,); + + d_assert(fd_msg_avp_new(s6a_priority_level, 0, + &priority_level) == 0, goto out,); + val.u32 = pdn->priority_level; + d_assert(fd_msg_avp_setvalue(priority_level, &val) == 0, + goto out,); + d_assert(fd_msg_avp_add(allocation_retention_priority, + MSG_BRW_LAST_CHILD, priority_level) == 0, goto out,); + + d_assert(fd_msg_avp_new(s6a_pre_emption_capability, 0, + &pre_emption_capability) == 0, goto out,); + val.u32 = pdn->pre_emption_capability; + d_assert(fd_msg_avp_setvalue(pre_emption_capability, &val) == 0, + goto out,); + d_assert(fd_msg_avp_add(allocation_retention_priority, + MSG_BRW_LAST_CHILD, pre_emption_capability) == 0, + goto out,); + + d_assert(fd_msg_avp_new(s6a_pre_emption_vulnerability, 0, + &pre_emption_vulnerability) == 0, goto out,); + val.u32 = pdn->pre_emption_vulnerability; + d_assert(fd_msg_avp_setvalue(pre_emption_vulnerability, &val) + == 0, goto out,); + d_assert(fd_msg_avp_add(allocation_retention_priority, + MSG_BRW_LAST_CHILD, pre_emption_vulnerability) == 0, + goto out,); + + d_assert(fd_msg_avp_add(eps_subscribed_qos_profile, + MSG_BRW_LAST_CHILD, allocation_retention_priority) == 0, + goto out,); + + d_assert(fd_msg_avp_add(apn_configuration, + MSG_BRW_LAST_CHILD, eps_subscribed_qos_profile) == 0, + goto out,); + + /* Set AMBR */ + d_assert(fd_msg_avp_new(s6a_ambr, 0, &avp_ambr) == 0, goto out,); + d_assert(fd_msg_avp_new(s6a_max_bandwidth_ul, 0, + &avp_max_bandwidth_ul) == 0, goto out,); + val.i32 = pdn->max_bandwidth_ul * 1024; /* bits per second */ + d_assert(fd_msg_avp_setvalue(avp_max_bandwidth_ul, &val) == 0, + goto out,); + d_assert(fd_msg_avp_add(avp_ambr, MSG_BRW_LAST_CHILD, + avp_max_bandwidth_ul) == 0, goto out,); + d_assert(fd_msg_avp_new(s6a_max_bandwidth_dl, 0, + &avp_max_bandwidth_dl) == 0, goto out,); + val.i32 = pdn->max_bandwidth_dl * 1024; /* bitsper second */ + d_assert(fd_msg_avp_setvalue(avp_max_bandwidth_dl, &val) == 0, + goto out,); + d_assert(fd_msg_avp_add(avp_ambr, MSG_BRW_LAST_CHILD, + avp_max_bandwidth_dl) == 0, goto out,); + + d_assert(fd_msg_avp_add(apn_configuration, + MSG_BRW_LAST_CHILD, avp_ambr) == 0, goto out,); + d_assert(fd_msg_avp_add(apn_configuration_profile, MSG_BRW_LAST_CHILD, apn_configuration) == 0, goto out,);