From 85169ab87a78d927705394bda0472e56384ff77c Mon Sep 17 00:00:00 2001 From: Daniel Bright Date: Mon, 14 Dec 2020 12:51:08 -0800 Subject: [PATCH] Add S-NSSAI * Added support for S-NSSAI within HAL * Created struct SliceInfo that represents a S-NSSAI as defined in 3GPP TS 24.501. * Added slice info to setupDataCall and SetupDataCallResult Bug: 169960538 Test: made ims phone call Change-Id: I8d2c55bece07c599cb7d1ac0d16ad85c0acdeae5 --- radio/1.6/IRadio.hal | 5 +- radio/1.6/types.hal | 83 +++++++++++++++++++ .../1.6/vts/functional/radio_hidl_hal_api.cpp | 8 +- 3 files changed, 93 insertions(+), 3 deletions(-) diff --git a/radio/1.6/IRadio.hal b/radio/1.6/IRadio.hal index 3dc80b9e22..a398e7d07f 100644 --- a/radio/1.6/IRadio.hal +++ b/radio/1.6/IRadio.hal @@ -117,6 +117,9 @@ interface IRadio extends @1.5::IRadio { * @param pduSessionId The pdu session id to be used for this data call. A value of 0 means * no pdu session id was attached to this call. * Reference: 3GPP TS 24.007 section 11.2.3.1b + * @param sliceInfo SliceInfo to be used for the data connection when a handover occurs from + * EPDG to 5G. It is valid only when accessNetwork is AccessNetwork:NGRAN. If the slice + * passed from EPDG is rejected, then the data failure cause must be DataCallFailCause:SLICE_REJECTED. * * Response function is IRadioResponse.setupDataCallResponse_1_6() * @@ -125,7 +128,7 @@ interface IRadio extends @1.5::IRadio { oneway setupDataCall_1_6(int32_t serial, AccessNetwork accessNetwork, DataProfileInfo dataProfileInfo, bool roamingAllowed, DataRequestReason reason, vec addresses, vec dnses, - int32_t pduSessionId); + int32_t pduSessionId, OptionalSliceInfo sliceInfo); /** * Send an SMS message diff --git a/radio/1.6/types.hal b/radio/1.6/types.hal index f4dc0bdd17..c2de76b5e7 100644 --- a/radio/1.6/types.hal +++ b/radio/1.6/types.hal @@ -352,6 +352,12 @@ struct SetupDataCallResult { * Reference: 3GPP TS 24.007 section 11.2.3.1b */ int32_t pduSessionId; + + /** + * Slice used for this data call. It is valid only when this data call is on + * AccessNetwork:NGRAN. + */ + OptionalSliceInfo sliceInfo; }; /** @@ -733,3 +739,80 @@ struct Call { */ string forwardedNumber; }; + +/** + * This safe_union represents an optional slice info + */ +safe_union OptionalSliceInfo { + Monostate noinit; + SliceInfo value; +}; + +/** + * This struct represents a S-NSSAI as defined in 3GPP TS 24.501. + */ +struct SliceInfo { + /** + * The type of service provided by the slice. + * + * see: 3GPP TS 24.501 Section 9.11.2.8. + */ + SliceServiceType sst; + + /** + * Slice differentiator is the identifier of a slice that has + * SliceServiceType as SST. A value of -1 indicates that there is + * no corresponding SliceInfo of the HPLMN. + * + * see: 3GPP TS 24.501 Section 9.11.2.8. + */ + int32_t sliceDifferentiator; + + /** + * This SST corresponds to a SliceInfo (S-NSSAI) of the HPLMN; the SST is + * mapped to this value. + * + * see: 3GPP TS 24.501 Section 9.11.2.8. + */ + SliceServiceType mappedHplmnSst; + + /** + * Present only if both sliceDifferentiator and mappedHplmnSst are also + * present. This SD corresponds to a SliceInfo (S-NSSAI) of the HPLMN; + * sliceDifferentiator is mapped to this value. A value of -1 indicates that + * there is no corresponding SliceInfo of the HPLMN. + * + * see: 3GPP TS 24.501 Section 9.11.2.8. + */ + int32_t mappedHplmnSD; +}; + +/** + * Slice/Service Type as defined in 3GPP TS 23.501. + */ +enum SliceServiceType : uint8_t { + /* Not specified */ + NONE = 0, + + /* Slice suitable for the handling of 5G enhanced Mobile Broadband */ + EMBB = 1, + + /** + * Slice suitable for the handling of ultra-reliable low latency + * communications + */ + URLLC = 2, + + /* Slice suitable for the handling of massive IoT */ + MIOT = 3, +}; + +/** + * Expose more setup data call failures. + */ +enum DataCallFailCause : @1.4::DataCallFailCause { + /** + * Data call fail due to the slice not being allowed for the data call. + */ + SLICE_REJECTED = 0x8CC, +}; diff --git a/radio/1.6/vts/functional/radio_hidl_hal_api.cpp b/radio/1.6/vts/functional/radio_hidl_hal_api.cpp index 47babed32e..8b872921ec 100644 --- a/radio/1.6/vts/functional/radio_hidl_hal_api.cpp +++ b/radio/1.6/vts/functional/radio_hidl_hal_api.cpp @@ -56,8 +56,12 @@ TEST_P(RadioHidlTest_v1_6, setupDataCall_1_6) { ::android::hardware::radio::V1_2::DataRequestReason reason = ::android::hardware::radio::V1_2::DataRequestReason::NORMAL; - Return res = radio_v1_6->setupDataCall_1_6(serial, accessNetwork, dataProfileInfo, - roamingAllowed, reason, addresses, dnses, -1); + ::android::hardware::radio::V1_6::OptionalSliceInfo optionalSliceInfo; + memset(&optionalSliceInfo, 0, sizeof(optionalSliceInfo)); + + Return res = + radio_v1_6->setupDataCall_1_6(serial, accessNetwork, dataProfileInfo, roamingAllowed, + reason, addresses, dnses, -1, optionalSliceInfo); ASSERT_OK(res); EXPECT_EQ(std::cv_status::no_timeout, wait());