diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl index c115c86357..35d3807ba4 100644 --- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl +++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl @@ -74,4 +74,5 @@ interface IRadioNetwork { oneway void triggerEmergencyNetworkScan(int serial, in android.hardware.radio.network.EmergencyNetworkScanTrigger request); oneway void cancelEmergencyNetworkScan(int serial, boolean resetScan); oneway void exitEmergencyMode(in int serial); + oneway void setNullCipherAndIntegrityEnabled(in int serial, in boolean enabled); } diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl index 24d587e655..141250d598 100644 --- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl +++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl @@ -73,4 +73,5 @@ interface IRadioNetworkResponse { oneway void triggerEmergencyNetworkScanResponse(in android.hardware.radio.RadioResponseInfo info); oneway void exitEmergencyModeResponse(in android.hardware.radio.RadioResponseInfo info); oneway void cancelEmergencyNetworkScanResponse(in android.hardware.radio.RadioResponseInfo info); + oneway void setNullCipherAndIntegrityEnabledResponse(in android.hardware.radio.RadioResponseInfo info); } diff --git a/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl b/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl index 574798aa59..28a69ac097 100644 --- a/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl +++ b/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl @@ -482,4 +482,24 @@ oneway interface IRadioNetwork { * Response function is IRadioEmergencyResponse.exitEmergencyModeResponse() */ void exitEmergencyMode(in int serial); + + /** + * Set if null encryption and integrity modes are enabled. If the value of enabled is false + * the modem must not allow any network communications with null ciphering or null integrity + * modes. In case of an emergency call, the modem must bypass this setting. + * + * Null ciphering and integrity modes include (but are not limited to): + * 2G: A5/0 + * 3G: UEA0 and UIA0 + * 4G: EEA0 and EIA0 + * 5G: NEA0 and NIA0 + * + * + * @param serial Serial number of the request. + * @param enabled To allow null encryption/integrity, set to true. + * Otherwise, false. + * + * Response callback is IRadioResponse.setNullCipherAndIntegrityEnabledResponse() + */ + void setNullCipherAndIntegrityEnabled(in int serial, in boolean enabled); } diff --git a/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl b/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl index fc4db2ca36..0cde5e6210 100644 --- a/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl +++ b/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl @@ -632,4 +632,14 @@ oneway interface IRadioNetworkResponse { * RadioError:MODEM_ERR */ void cancelEmergencyNetworkScanResponse(in RadioResponseInfo info); + + /** + * @param info Response info struct containing response type, serial no. and error + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:MODEM_ERR + */ + void setNullCipherAndIntegrityEnabledResponse(in RadioResponseInfo info); } diff --git a/radio/aidl/compat/libradiocompat/include/libradiocompat/RadioNetwork.h b/radio/aidl/compat/libradiocompat/include/libradiocompat/RadioNetwork.h index 5dd6f0ae8d..2e0488d1c0 100644 --- a/radio/aidl/compat/libradiocompat/include/libradiocompat/RadioNetwork.h +++ b/radio/aidl/compat/libradiocompat/include/libradiocompat/RadioNetwork.h @@ -100,6 +100,8 @@ class RadioNetwork : public RadioCompatBase, ::ndk::ScopedAStatus cancelEmergencyNetworkScan(int32_t serial, bool resetScan) override; ::ndk::ScopedAStatus exitEmergencyMode(int32_t serial) override; + ::ndk::ScopedAStatus setNullCipherAndIntegrityEnabled(int32_t serial, bool enabled) override; + protected: std::shared_ptr<::aidl::android::hardware::radio::network::IRadioNetworkResponse> respond(); diff --git a/radio/aidl/compat/libradiocompat/network/RadioNetwork.cpp b/radio/aidl/compat/libradiocompat/network/RadioNetwork.cpp index 6bb6b75b2e..bbe7fd70de 100644 --- a/radio/aidl/compat/libradiocompat/network/RadioNetwork.cpp +++ b/radio/aidl/compat/libradiocompat/network/RadioNetwork.cpp @@ -340,4 +340,11 @@ ScopedAStatus RadioNetwork::exitEmergencyMode(int32_t serial) { return ok(); } +ScopedAStatus RadioNetwork::setNullCipherAndIntegrityEnabled(int32_t serial, bool) { + LOG_CALL << serial; + LOG(ERROR) << " setNullCipherAndIntegrityEnabled is unsupported by HIDL HALs"; + respond()->setNullCipherAndIntegrityEnabledResponse(notSupported(serial)); + return ok(); +} + } // namespace android::hardware::radio::compat diff --git a/radio/aidl/vts/radio_network_response.cpp b/radio/aidl/vts/radio_network_response.cpp index 5599c0332f..82aaa1b85d 100644 --- a/radio/aidl/vts/radio_network_response.cpp +++ b/radio/aidl/vts/radio_network_response.cpp @@ -293,3 +293,10 @@ ndk::ScopedAStatus RadioNetworkResponse::cancelEmergencyNetworkScanResponse( parent_network.notify(info.serial); return ndk::ScopedAStatus::ok(); } + +ndk::ScopedAStatus RadioNetworkResponse::setNullCipherAndIntegrityEnabledResponse( + const RadioResponseInfo& info) { + rspInfo = info; + parent_network.notify(info.serial); + return ndk::ScopedAStatus::ok(); +} diff --git a/radio/aidl/vts/radio_network_utils.h b/radio/aidl/vts/radio_network_utils.h index 8480825421..67654b1494 100644 --- a/radio/aidl/vts/radio_network_utils.h +++ b/radio/aidl/vts/radio_network_utils.h @@ -158,6 +158,9 @@ class RadioNetworkResponse : public BnRadioNetworkResponse { virtual ndk::ScopedAStatus cancelEmergencyNetworkScanResponse( const RadioResponseInfo& info) override; + + virtual ndk::ScopedAStatus setNullCipherAndIntegrityEnabledResponse( + const RadioResponseInfo& info) override; }; /* Callback class for radio network indication */