Loading radio/1.6/IRadio.hal +13 −0 Original line number Diff line number Diff line Loading @@ -505,4 +505,17 @@ interface IRadio extends @1.5::IRadio { * Response function is IRadioResponse.getCurrentCallsResponse_1_6() */ oneway getCurrentCalls_1_6(int32_t serial); /** * Request to get the current slicing configuration including URSP rules and * NSSAIs (configured, allowed and rejected). * URSP stands for UE route selection policy and is defined in 3GPP TS 24.526 * Section 4.2. * An NSSAI is a collection of network slices. Each network slice is identified by * an S-NSSAI and is represented by the struct SliceInfo. NSSAI and S-NSSAI * are defined in 3GPP TS 24.501. * * Response function is IRadioResponse.getSlicingConfigResponse() */ oneway getSlicingConfig(int32_t serial); }; radio/1.6/IRadioResponse.hal +14 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import @1.6::RegStateResult; import @1.6::RadioResponseInfo; import @1.6::SetupDataCallResult; import @1.6::SignalStrength; import @1.6::SlicingConfig; /** * Interface declaring response functions to solicited radio requests. Loading Loading @@ -416,4 +417,17 @@ interface IRadioResponse extends @1.5::IRadioResponse { * RadioError:CANCELLED */ oneway getCurrentCallsResponse_1_6(RadioResponseInfo info, vec<Call> calls); /** * @param info Response info struct containing response type, serial no. and error * @param slicingConfig Current slicing configuration * * Valid errors returned: * RadioError:NONE * RadioError:RADIO_NOT_AVAILABLE * RadioError:INTERNAL_ERR * RadioError:MODEM_ERR */ oneway getSlicingConfigResponse(RadioResponseInfo info, SlicingConfig slicingConfig); }; radio/1.6/types.hal +144 −0 Original line number Diff line number Diff line Loading @@ -971,3 +971,147 @@ struct OSAppId { */ vec<uint8_t> osAppId; }; /** * This struct represents the current slicing configuration. */ struct SlicingConfig { /** * This vector contains the current URSP rules. Empty vector represents that no * rules are configured. */ vec<UrspRule> urspRules; /** * Struct containing all NSSAIs (list of slice info). */ Nssais nsaids; }; /** * This struct represents a single URSP rule as defined in 3GPP TS 24.526. */ struct UrspRule { /** * Precedence value in the range of 0 to 255. Higher value has lower * precedence. */ uint8_t precedence; /** * Used as a matcher for network requests. */ vec<TrafficDescriptor> trafficDescriptors; /** * List of routes (connection parameters) that must be used for requests * matching a trafficDescriptor. */ vec<RouteSelectionDescriptor> routeSelectionDescriptor; }; /** * This struct represents a single route selection descriptor as defined in * 3GPP TS 24.526. */ struct RouteSelectionDescriptor { /** * Precedence value in the range of 0 to 255. Higher value has lower * precedence. */ uint8_t precedence; /** * Parameters defining this RouteSelectionDescriptor. The length of the vector * must be >= 1. */ vec<RouteSelectionDescriptorParams> routeSelectionDescriptorParams; }; /** * This struct represents a route selection descriptor. A valid struct must have * at least one of the vectors non-empty. */ struct RouteSelectionDescriptorParams { /** * Valid values are IP, IPV6 and IPV4V6. */ OptionalPdpProtocolType sessionType; OptionalSscMode sscMode; /** * There can be 0 or more SliceInfo specified in a route descriptor. */ vec<SliceInfo> sliceInfo; /** * DNN stands for Data Network Name and represents an APN as defined in * 3GPP TS 23.003. There can be 0 or more DNNs specified in a route * descriptor. */ vec<string> dnn; }; /** * This safe_union represents an optional PdpProtocolType. */ safe_union OptionalPdpProtocolType { Monostate noinit; PdpProtocolType value; }; /** * This safe_union represents an optional SscMode. */ safe_union OptionalSscMode { Monostate noinit; SscMode value; }; /** * This struct contains all NSSAIs (lists of slices). */ struct Nssais { /** * These are all the slices configured by the network. This includes allowed * and rejected slices, as well as slices that are neither allowed nor rejected * yet. Empty vector indicates that no slices are configured, and in that case * allowed and rejected vectors must be empty as well. */ vec<SliceInfo> configured; /** * These are all the slices that the UE is allowed to use. All these slices * must be configured as well. Empty vector indicates that no slices are * allowed yet. */ vec<SliceInfo> allowed; /** * These are all the slices that the UE is not allowed to use. All these slices * must be configured as well. Empty vector indicates that no slices are * rejected yet. */ vec<RejectedSliceInfo> rejected; /** * Default configured NSSAI */ vec<SliceInfo> defaultConfigured; }; /** * This struct represents a network slice rejected by the network. It contains a * rejectionCause corresponding to a rejected network slice. */ struct RejectedSliceInfo { SliceInfo sliceInfo; SliceRejectionCause rejectionCause; }; enum SliceRejectionCause : int32_t { NOT_AVAILABLE_IN_PLMN, NOT_AVAILABLE_IN_REG_AREA, }; /** * Enum representing session and service continuity mode as defined in * 3GPP TS 23.501. */ enum SscMode : int32_t { MODE_1 = 1, MODE_2 = 2, MODE_3 = 3, }; radio/1.6/vts/functional/radio_hidl_hal_api.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,18 @@ TEST_P(RadioHidlTest_v1_6, setupDataCall_1_6_osAppId) { } } /* * Test IRadio.getSlicingConfig() for the response returned. */ TEST_P(RadioHidlTest_v1_6, getSlicingConfig) { serial = GetRandomSerialNumber(); radio_v1_6->getSlicingConfig(serial); EXPECT_EQ(std::cv_status::no_timeout, wait()); EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type); EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial); EXPECT_EQ(::android::hardware::radio::V1_6::RadioError::NONE, radioRsp_v1_6->rspInfo.error); } /* * Test IRadio_1_6.sendSms() for the response returned. */ Loading radio/1.6/vts/functional/radio_hidl_hal_utils_v1_6.h +4 −0 Original line number Diff line number Diff line Loading @@ -827,6 +827,10 @@ class RadioResponse_v1_6 : public ::android::hardware::radio::V1_6::IRadioRespon Return<void> getCurrentCallsResponse_1_6( const ::android::hardware::radio::V1_6::RadioResponseInfo& info, const ::android::hardware::hidl_vec<::android::hardware::radio::V1_6::Call>& calls); Return<void> getSlicingConfigResponse( const ::android::hardware::radio::V1_6::RadioResponseInfo& info, const ::android::hardware::radio::V1_6::SlicingConfig& slicingConfig); }; /* Callback class for radio indication */ Loading Loading
radio/1.6/IRadio.hal +13 −0 Original line number Diff line number Diff line Loading @@ -505,4 +505,17 @@ interface IRadio extends @1.5::IRadio { * Response function is IRadioResponse.getCurrentCallsResponse_1_6() */ oneway getCurrentCalls_1_6(int32_t serial); /** * Request to get the current slicing configuration including URSP rules and * NSSAIs (configured, allowed and rejected). * URSP stands for UE route selection policy and is defined in 3GPP TS 24.526 * Section 4.2. * An NSSAI is a collection of network slices. Each network slice is identified by * an S-NSSAI and is represented by the struct SliceInfo. NSSAI and S-NSSAI * are defined in 3GPP TS 24.501. * * Response function is IRadioResponse.getSlicingConfigResponse() */ oneway getSlicingConfig(int32_t serial); };
radio/1.6/IRadioResponse.hal +14 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import @1.6::RegStateResult; import @1.6::RadioResponseInfo; import @1.6::SetupDataCallResult; import @1.6::SignalStrength; import @1.6::SlicingConfig; /** * Interface declaring response functions to solicited radio requests. Loading Loading @@ -416,4 +417,17 @@ interface IRadioResponse extends @1.5::IRadioResponse { * RadioError:CANCELLED */ oneway getCurrentCallsResponse_1_6(RadioResponseInfo info, vec<Call> calls); /** * @param info Response info struct containing response type, serial no. and error * @param slicingConfig Current slicing configuration * * Valid errors returned: * RadioError:NONE * RadioError:RADIO_NOT_AVAILABLE * RadioError:INTERNAL_ERR * RadioError:MODEM_ERR */ oneway getSlicingConfigResponse(RadioResponseInfo info, SlicingConfig slicingConfig); };
radio/1.6/types.hal +144 −0 Original line number Diff line number Diff line Loading @@ -971,3 +971,147 @@ struct OSAppId { */ vec<uint8_t> osAppId; }; /** * This struct represents the current slicing configuration. */ struct SlicingConfig { /** * This vector contains the current URSP rules. Empty vector represents that no * rules are configured. */ vec<UrspRule> urspRules; /** * Struct containing all NSSAIs (list of slice info). */ Nssais nsaids; }; /** * This struct represents a single URSP rule as defined in 3GPP TS 24.526. */ struct UrspRule { /** * Precedence value in the range of 0 to 255. Higher value has lower * precedence. */ uint8_t precedence; /** * Used as a matcher for network requests. */ vec<TrafficDescriptor> trafficDescriptors; /** * List of routes (connection parameters) that must be used for requests * matching a trafficDescriptor. */ vec<RouteSelectionDescriptor> routeSelectionDescriptor; }; /** * This struct represents a single route selection descriptor as defined in * 3GPP TS 24.526. */ struct RouteSelectionDescriptor { /** * Precedence value in the range of 0 to 255. Higher value has lower * precedence. */ uint8_t precedence; /** * Parameters defining this RouteSelectionDescriptor. The length of the vector * must be >= 1. */ vec<RouteSelectionDescriptorParams> routeSelectionDescriptorParams; }; /** * This struct represents a route selection descriptor. A valid struct must have * at least one of the vectors non-empty. */ struct RouteSelectionDescriptorParams { /** * Valid values are IP, IPV6 and IPV4V6. */ OptionalPdpProtocolType sessionType; OptionalSscMode sscMode; /** * There can be 0 or more SliceInfo specified in a route descriptor. */ vec<SliceInfo> sliceInfo; /** * DNN stands for Data Network Name and represents an APN as defined in * 3GPP TS 23.003. There can be 0 or more DNNs specified in a route * descriptor. */ vec<string> dnn; }; /** * This safe_union represents an optional PdpProtocolType. */ safe_union OptionalPdpProtocolType { Monostate noinit; PdpProtocolType value; }; /** * This safe_union represents an optional SscMode. */ safe_union OptionalSscMode { Monostate noinit; SscMode value; }; /** * This struct contains all NSSAIs (lists of slices). */ struct Nssais { /** * These are all the slices configured by the network. This includes allowed * and rejected slices, as well as slices that are neither allowed nor rejected * yet. Empty vector indicates that no slices are configured, and in that case * allowed and rejected vectors must be empty as well. */ vec<SliceInfo> configured; /** * These are all the slices that the UE is allowed to use. All these slices * must be configured as well. Empty vector indicates that no slices are * allowed yet. */ vec<SliceInfo> allowed; /** * These are all the slices that the UE is not allowed to use. All these slices * must be configured as well. Empty vector indicates that no slices are * rejected yet. */ vec<RejectedSliceInfo> rejected; /** * Default configured NSSAI */ vec<SliceInfo> defaultConfigured; }; /** * This struct represents a network slice rejected by the network. It contains a * rejectionCause corresponding to a rejected network slice. */ struct RejectedSliceInfo { SliceInfo sliceInfo; SliceRejectionCause rejectionCause; }; enum SliceRejectionCause : int32_t { NOT_AVAILABLE_IN_PLMN, NOT_AVAILABLE_IN_REG_AREA, }; /** * Enum representing session and service continuity mode as defined in * 3GPP TS 23.501. */ enum SscMode : int32_t { MODE_1 = 1, MODE_2 = 2, MODE_3 = 3, };
radio/1.6/vts/functional/radio_hidl_hal_api.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,18 @@ TEST_P(RadioHidlTest_v1_6, setupDataCall_1_6_osAppId) { } } /* * Test IRadio.getSlicingConfig() for the response returned. */ TEST_P(RadioHidlTest_v1_6, getSlicingConfig) { serial = GetRandomSerialNumber(); radio_v1_6->getSlicingConfig(serial); EXPECT_EQ(std::cv_status::no_timeout, wait()); EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type); EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial); EXPECT_EQ(::android::hardware::radio::V1_6::RadioError::NONE, radioRsp_v1_6->rspInfo.error); } /* * Test IRadio_1_6.sendSms() for the response returned. */ Loading
radio/1.6/vts/functional/radio_hidl_hal_utils_v1_6.h +4 −0 Original line number Diff line number Diff line Loading @@ -827,6 +827,10 @@ class RadioResponse_v1_6 : public ::android::hardware::radio::V1_6::IRadioRespon Return<void> getCurrentCallsResponse_1_6( const ::android::hardware::radio::V1_6::RadioResponseInfo& info, const ::android::hardware::hidl_vec<::android::hardware::radio::V1_6::Call>& calls); Return<void> getSlicingConfigResponse( const ::android::hardware::radio::V1_6::RadioResponseInfo& info, const ::android::hardware::radio::V1_6::SlicingConfig& slicingConfig); }; /* Callback class for radio indication */ Loading