Add TrafficDescriptor to DataProfileInfo
Test: build Bug: 208651109 Change-Id: Ic5e5edab9be1087044e1a303735a59a4cef8ee89 Merged-In: Ic5e5edab9be1087044e1a303735a59a4cef8ee89
This commit is contained in:
parent
c7b6c928a0
commit
e98dd0e943
19 changed files with 151 additions and 32 deletions
|
@ -53,6 +53,7 @@ parcelable DataProfileInfo {
|
|||
boolean preferred;
|
||||
boolean persistent;
|
||||
boolean alwaysOn;
|
||||
@nullable android.hardware.radio.data.TrafficDescriptor trafficDescriptor;
|
||||
const int ID_DEFAULT = 0;
|
||||
const int ID_TETHERED = 1;
|
||||
const int ID_IMS = 2;
|
||||
|
|
|
@ -46,7 +46,7 @@ interface IRadioData {
|
|||
oneway void setDataThrottling(in int serial, in android.hardware.radio.data.DataThrottlingAction dataThrottlingAction, in long completionDurationMillis);
|
||||
oneway void setInitialAttachApn(in int serial, in android.hardware.radio.data.DataProfileInfo dataProfileInfo);
|
||||
oneway void setResponseFunctions(in android.hardware.radio.data.IRadioDataResponse radioDataResponse, in android.hardware.radio.data.IRadioDataIndication radioDataIndication);
|
||||
oneway void setupDataCall(in int serial, in android.hardware.radio.AccessNetwork accessNetwork, in android.hardware.radio.data.DataProfileInfo dataProfileInfo, in boolean roamingAllowed, in android.hardware.radio.data.DataRequestReason reason, in android.hardware.radio.data.LinkAddress[] addresses, in String[] dnses, in int pduSessionId, in @nullable android.hardware.radio.data.SliceInfo sliceInfo, in @nullable android.hardware.radio.data.TrafficDescriptor trafficDescriptor, in boolean matchAllRuleAllowed);
|
||||
oneway void setupDataCall(in int serial, in android.hardware.radio.AccessNetwork accessNetwork, in android.hardware.radio.data.DataProfileInfo dataProfileInfo, in boolean roamingAllowed, in android.hardware.radio.data.DataRequestReason reason, in android.hardware.radio.data.LinkAddress[] addresses, in String[] dnses, in int pduSessionId, in @nullable android.hardware.radio.data.SliceInfo sliceInfo, in boolean matchAllRuleAllowed);
|
||||
oneway void startHandover(in int serial, in int callId);
|
||||
oneway void startKeepalive(in int serial, in android.hardware.radio.data.KeepaliveRequest keepalive);
|
||||
oneway void stopKeepalive(in int serial, in int sessionHandle);
|
||||
|
|
|
@ -37,5 +37,5 @@ interface IRadioDataIndication {
|
|||
oneway void dataCallListChanged(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.data.SetupDataCallResult[] dcList);
|
||||
oneway void keepaliveStatus(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.data.KeepaliveStatus status);
|
||||
oneway void pcoData(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.data.PcoDataInfo pco);
|
||||
oneway void unthrottleApn(in android.hardware.radio.RadioIndicationType type, in String apn);
|
||||
oneway void unthrottleApn(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.data.DataProfileInfo dataProfileInfo);
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import android.hardware.radio.RadioAccessFamily;
|
|||
import android.hardware.radio.data.ApnAuthType;
|
||||
import android.hardware.radio.data.ApnTypes;
|
||||
import android.hardware.radio.data.PdpProtocolType;
|
||||
import android.hardware.radio.data.TrafficDescriptor;
|
||||
|
||||
@VintfStability
|
||||
parcelable DataProfileInfo {
|
||||
|
@ -122,4 +123,12 @@ parcelable DataProfileInfo {
|
|||
* See 3GPP TS 23.501 section 5.6.13 for the details.
|
||||
*/
|
||||
boolean alwaysOn;
|
||||
/**
|
||||
* TrafficDescriptor for which data connection needs to be established.
|
||||
* It is used for URSP traffic matching as described in TS 24.526 Section 4.2.2.
|
||||
* It includes an optional DNN which, if present, must be used for traffic matching --
|
||||
* it does not specify the end point to be used for the data call. The end point is specified by
|
||||
* apn; apn must be used as the end point if one is not specified through URSP rules.
|
||||
*/
|
||||
@nullable TrafficDescriptor trafficDescriptor;
|
||||
}
|
||||
|
|
|
@ -219,12 +219,6 @@ oneway interface IRadioData {
|
|||
* 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.
|
||||
* @param trafficDescriptor TrafficDescriptor for which data connection needs to be established.
|
||||
* It is used for URSP traffic matching as described in TS 24.526 Section 4.2.2.
|
||||
* It includes an optional DNN which, if present, must be used for traffic matching --
|
||||
* it does not specify the end point to be used for the data call. The end point is
|
||||
* specified by DataProfileInfo.apn; DataProfileInfo.apn must be used as the end point if
|
||||
* one is not specified through URSP rules.
|
||||
* @param matchAllRuleAllowed bool to indicate if using default match-all URSP rule for this
|
||||
* request is allowed. If false, this request must not use the match-all URSP rule and if
|
||||
* a non-match-all rule is not found (or if URSP rules are not available) it should
|
||||
|
@ -238,7 +232,6 @@ oneway interface IRadioData {
|
|||
in DataProfileInfo dataProfileInfo, in boolean roamingAllowed,
|
||||
in DataRequestReason reason, in LinkAddress[] addresses, in String[] dnses,
|
||||
in int pduSessionId, in @nullable SliceInfo sliceInfo,
|
||||
in @nullable TrafficDescriptor trafficDescriptor,
|
||||
in boolean matchAllRuleAllowed);
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package android.hardware.radio.data;
|
||||
|
||||
import android.hardware.radio.RadioIndicationType;
|
||||
import android.hardware.radio.data.DataProfileInfo;
|
||||
import android.hardware.radio.data.KeepaliveStatus;
|
||||
import android.hardware.radio.data.PcoDataInfo;
|
||||
import android.hardware.radio.data.SetupDataCallResult;
|
||||
|
@ -68,7 +69,7 @@ oneway interface IRadioDataIndication {
|
|||
* is sent, AOSP will no longer throttle calls to IRadioData.SetupDataCall for the given APN.
|
||||
*
|
||||
* @param type Type of radio indication
|
||||
* @param apn Apn to unthrottle
|
||||
* @param dataProfileInfo Data profile info.
|
||||
*/
|
||||
void unthrottleApn(in RadioIndicationType type, in String apn);
|
||||
void unthrottleApn(in RadioIndicationType type, in DataProfileInfo dataProfileInfo);
|
||||
}
|
||||
|
|
|
@ -56,7 +56,9 @@ cc_library {
|
|||
"libutils",
|
||||
],
|
||||
srcs: [
|
||||
"DriverContext.cpp",
|
||||
"RadioCompatBase.cpp",
|
||||
"RadioIndication.cpp",
|
||||
"RadioResponse.cpp",
|
||||
"commonStructs.cpp",
|
||||
"config/RadioConfig.cpp",
|
||||
|
|
37
radio/aidl/compat/libradiocompat/DriverContext.cpp
Normal file
37
radio/aidl/compat/libradiocompat/DriverContext.cpp
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <libradiocompat/DriverContext.h>
|
||||
|
||||
namespace android::hardware::radio::compat {
|
||||
|
||||
namespace aidl = ::aidl::android::hardware::radio;
|
||||
|
||||
void DriverContext::addDataProfile(const aidl::data::DataProfileInfo& profile) {
|
||||
mDataProfiles[profile.apn] = profile;
|
||||
}
|
||||
|
||||
aidl::data::DataProfileInfo DriverContext::getDataProfile(const std::string& apn) {
|
||||
const auto it = mDataProfiles.find(apn);
|
||||
if (it != mDataProfiles.end()) return it->second;
|
||||
|
||||
// if not found in cache, return a made up default
|
||||
return {
|
||||
.apn = apn,
|
||||
};
|
||||
}
|
||||
|
||||
} // namespace android::hardware::radio::compat
|
|
@ -20,12 +20,13 @@
|
|||
|
||||
namespace android::hardware::radio::compat {
|
||||
|
||||
RadioCompatBase::RadioCompatBase(sp<V1_5::IRadio> hidlHal, sp<RadioResponse> radioResponse,
|
||||
sp<RadioIndication> radioIndication)
|
||||
: mHal1_5(hidlHal),
|
||||
RadioCompatBase::RadioCompatBase(std::shared_ptr<DriverContext> context, sp<V1_5::IRadio> hidlHal,
|
||||
sp<RadioResponse> radioResponse, sp<RadioIndication> radioInd)
|
||||
: mContext(context),
|
||||
mHal1_5(hidlHal),
|
||||
mHal1_6(V1_6::IRadio::castFrom(hidlHal)),
|
||||
mRadioResponse(radioResponse),
|
||||
mRadioIndication(radioIndication) {}
|
||||
mRadioIndication(radioInd) {}
|
||||
|
||||
V1_6::IRadioResponse& RadioCompatBase::respond() {
|
||||
CHECK(mRadioResponse) << "This shouldn't happen (response functions are passed in constructor)";
|
||||
|
|
23
radio/aidl/compat/libradiocompat/RadioIndication.cpp
Normal file
23
radio/aidl/compat/libradiocompat/RadioIndication.cpp
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <libradiocompat/RadioIndication.h>
|
||||
|
||||
namespace android::hardware::radio::compat {
|
||||
|
||||
RadioIndication::RadioIndication(std::shared_ptr<DriverContext> context) : mContext(context) {}
|
||||
|
||||
} // namespace android::hardware::radio::compat
|
|
@ -22,6 +22,8 @@
|
|||
|
||||
namespace android::hardware::radio::compat {
|
||||
|
||||
RadioResponse::RadioResponse(std::shared_ptr<DriverContext> context) : mContext(context) {}
|
||||
|
||||
Return<void> RadioResponse::acknowledgeRequest(int32_t serial) {
|
||||
LOG_CALL << serial;
|
||||
// TODO(b/203699028): send to correct requestor or confirm if spam is not a problem
|
||||
|
|
|
@ -139,14 +139,15 @@ ScopedAStatus RadioData::setupDataCall( //
|
|||
const aidl::DataProfileInfo& dataProfileInfo, bool roamingAllowed,
|
||||
aidl::DataRequestReason reason, const std::vector<aidl::LinkAddress>& addresses,
|
||||
const std::vector<std::string>& dnses, int32_t pduSessId,
|
||||
const std::optional<aidl::SliceInfo>& sliceInfo,
|
||||
const std::optional<aidl::TrafficDescriptor>& trDesc, bool matchAllRuleAllowed) {
|
||||
const std::optional<aidl::SliceInfo>& sliceInfo, bool matchAllRuleAllowed) {
|
||||
if (mHal1_6) {
|
||||
mHal1_6->setupDataCall_1_6( //
|
||||
serial, V1_5::AccessNetwork(accessNetwork), toHidl(dataProfileInfo), roamingAllowed,
|
||||
V1_2::DataRequestReason(reason), toHidl(addresses), toHidl(dnses), pduSessId,
|
||||
toHidl<V1_6::OptionalSliceInfo>(sliceInfo),
|
||||
toHidl<V1_6::OptionalTrafficDescriptor>(trDesc), matchAllRuleAllowed);
|
||||
toHidl<V1_6::OptionalTrafficDescriptor>(dataProfileInfo.trafficDescriptor),
|
||||
matchAllRuleAllowed);
|
||||
mContext->addDataProfile(dataProfileInfo);
|
||||
} else {
|
||||
mHal1_5->setupDataCall_1_5( //
|
||||
serial, V1_5::AccessNetwork(accessNetwork), toHidl(dataProfileInfo), roamingAllowed,
|
||||
|
|
|
@ -83,7 +83,7 @@ Return<void> RadioIndication::unthrottleApn(V1_0::RadioIndicationType type,
|
|||
const hidl_string& apn) {
|
||||
LOG_CALL << type;
|
||||
CHECK_CB(mDataCb);
|
||||
mDataCb->unthrottleApn(toAidl(type), apn);
|
||||
mDataCb->unthrottleApn(toAidl(type), mContext->getDataProfile(apn));
|
||||
return {};
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <aidl/android/hardware/radio/data/DataProfileInfo.h>
|
||||
|
||||
#include <map>
|
||||
|
||||
namespace android::hardware::radio::compat {
|
||||
|
||||
class DriverContext {
|
||||
std::map<std::string, ::aidl::android::hardware::radio::data::DataProfileInfo> mDataProfiles;
|
||||
|
||||
public:
|
||||
void addDataProfile(const ::aidl::android::hardware::radio::data::DataProfileInfo& profile);
|
||||
::aidl::android::hardware::radio::data::DataProfileInfo getDataProfile(const std::string& apn);
|
||||
};
|
||||
|
||||
} // namespace android::hardware::radio::compat
|
|
@ -15,6 +15,7 @@
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#include "DriverContext.h"
|
||||
#include "RadioIndication.h"
|
||||
#include "RadioResponse.h"
|
||||
|
||||
|
@ -24,6 +25,8 @@ namespace android::hardware::radio::compat {
|
|||
|
||||
class RadioCompatBase {
|
||||
protected:
|
||||
std::shared_ptr<DriverContext> mContext;
|
||||
|
||||
sp<V1_5::IRadio> mHal1_5;
|
||||
sp<V1_6::IRadio> mHal1_6;
|
||||
|
||||
|
@ -33,8 +36,8 @@ class RadioCompatBase {
|
|||
V1_6::IRadioResponse& respond();
|
||||
|
||||
public:
|
||||
RadioCompatBase(sp<V1_5::IRadio> hidlHal, sp<RadioResponse> radioResponse,
|
||||
sp<RadioIndication> radioIndication);
|
||||
RadioCompatBase(std::shared_ptr<DriverContext> context, sp<V1_5::IRadio> hidlHal,
|
||||
sp<RadioResponse> radioResponse, sp<RadioIndication> radioIndication);
|
||||
};
|
||||
|
||||
} // namespace android::hardware::radio::compat
|
||||
|
|
|
@ -55,7 +55,6 @@ class RadioData : public RadioCompatBase, public aidl::android::hardware::radio:
|
|||
const std::vector<::aidl::android::hardware::radio::data::LinkAddress>& addresses,
|
||||
const std::vector<std::string>& dnses, int32_t pduSessionId,
|
||||
const std::optional<::aidl::android::hardware::radio::data::SliceInfo>& sliceInfo,
|
||||
const std::optional<::aidl::android::hardware::radio::data::TrafficDescriptor>& trDescr,
|
||||
bool matchAllRuleAllowed) override;
|
||||
::ndk::ScopedAStatus startHandover(int32_t serial, int32_t callId) override;
|
||||
::ndk::ScopedAStatus startKeepalive(
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#include "DriverContext.h"
|
||||
|
||||
#include <aidl/android/hardware/radio/data/IRadioDataIndication.h>
|
||||
#include <aidl/android/hardware/radio/messaging/IRadioMessagingIndication.h>
|
||||
#include <aidl/android/hardware/radio/modem/IRadioModemIndication.h>
|
||||
|
@ -26,6 +28,8 @@
|
|||
namespace android::hardware::radio::compat {
|
||||
|
||||
class RadioIndication : public V1_6::IRadioIndication {
|
||||
std::shared_ptr<DriverContext> mContext;
|
||||
|
||||
std::shared_ptr<::aidl::android::hardware::radio::data::IRadioDataIndication> mDataCb;
|
||||
std::shared_ptr<::aidl::android::hardware::radio::messaging::IRadioMessagingIndication>
|
||||
mMessagingCb;
|
||||
|
@ -181,6 +185,8 @@ class RadioIndication : public V1_6::IRadioIndication {
|
|||
const hidl_vec<V1_6::PhonebookRecordInfo>& records) override;
|
||||
|
||||
public:
|
||||
RadioIndication(std::shared_ptr<DriverContext> context);
|
||||
|
||||
void setResponseFunction(
|
||||
std::shared_ptr<::aidl::android::hardware::radio::data::IRadioDataIndication> dataCb);
|
||||
void setResponseFunction(
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#include "DriverContext.h"
|
||||
|
||||
#include <aidl/android/hardware/radio/data/IRadioDataResponse.h>
|
||||
#include <aidl/android/hardware/radio/messaging/IRadioMessagingResponse.h>
|
||||
#include <aidl/android/hardware/radio/modem/IRadioModemResponse.h>
|
||||
|
@ -26,6 +28,8 @@
|
|||
namespace android::hardware::radio::compat {
|
||||
|
||||
class RadioResponse : public V1_6::IRadioResponse {
|
||||
std::shared_ptr<DriverContext> mContext;
|
||||
|
||||
std::shared_ptr<::aidl::android::hardware::radio::data::IRadioDataResponse> mDataCb;
|
||||
std::shared_ptr<::aidl::android::hardware::radio::messaging::IRadioMessagingResponse>
|
||||
mMessagingCb;
|
||||
|
@ -409,6 +413,8 @@ class RadioResponse : public V1_6::IRadioResponse {
|
|||
int32_t updatedRecordIndex) override;
|
||||
|
||||
public:
|
||||
RadioResponse(std::shared_ptr<DriverContext> context);
|
||||
|
||||
void setResponseFunction(
|
||||
std::shared_ptr<::aidl::android::hardware::radio::data::IRadioDataResponse> dataCb);
|
||||
void setResponseFunction(
|
||||
|
|
|
@ -36,7 +36,8 @@ using namespace std::string_literals;
|
|||
static std::vector<std::shared_ptr<ndk::ICInterface>> gPublishedHals;
|
||||
|
||||
template <typename T>
|
||||
static void publishRadioHal(sp<V1_5::IRadio> hidlHal, sp<compat::RadioResponse> responseCb,
|
||||
static void publishRadioHal(std::shared_ptr<compat::DriverContext> context,
|
||||
sp<V1_5::IRadio> hidlHal, sp<compat::RadioResponse> responseCb,
|
||||
sp<compat::RadioIndication> indicationCb, const std::string& slot) {
|
||||
const auto instance = T::descriptor + "/"s + slot;
|
||||
if (!AServiceManager_isDeclared(instance.c_str())) {
|
||||
|
@ -45,7 +46,7 @@ static void publishRadioHal(sp<V1_5::IRadio> hidlHal, sp<compat::RadioResponse>
|
|||
}
|
||||
LOG(DEBUG) << "Publishing " << instance;
|
||||
|
||||
auto aidlHal = ndk::SharedRefBase::make<T>(hidlHal, responseCb, indicationCb);
|
||||
auto aidlHal = ndk::SharedRefBase::make<T>(context, hidlHal, responseCb, indicationCb);
|
||||
gPublishedHals.push_back(aidlHal);
|
||||
const auto status = AServiceManager_addService(aidlHal->asBinder().get(), instance.c_str());
|
||||
CHECK_EQ(status, STATUS_OK);
|
||||
|
@ -57,16 +58,18 @@ static void publishRadio(std::string slot) {
|
|||
|
||||
hidl_utils::linkDeathToDeath(radioHidl);
|
||||
|
||||
auto responseCb = sp<compat::RadioResponse>::make();
|
||||
auto indicationCb = sp<compat::RadioIndication>::make();
|
||||
auto context = std::make_shared<compat::DriverContext>();
|
||||
|
||||
auto responseCb = sp<compat::RadioResponse>::make(context);
|
||||
auto indicationCb = sp<compat::RadioIndication>::make(context);
|
||||
radioHidl->setResponseFunctions(responseCb, indicationCb).assertOk();
|
||||
|
||||
publishRadioHal<compat::RadioData>(radioHidl, responseCb, indicationCb, slot);
|
||||
publishRadioHal<compat::RadioMessaging>(radioHidl, responseCb, indicationCb, slot);
|
||||
publishRadioHal<compat::RadioModem>(radioHidl, responseCb, indicationCb, slot);
|
||||
publishRadioHal<compat::RadioNetwork>(radioHidl, responseCb, indicationCb, slot);
|
||||
publishRadioHal<compat::RadioSim>(radioHidl, responseCb, indicationCb, slot);
|
||||
publishRadioHal<compat::RadioVoice>(radioHidl, responseCb, indicationCb, slot);
|
||||
publishRadioHal<compat::RadioData>(context, radioHidl, responseCb, indicationCb, slot);
|
||||
publishRadioHal<compat::RadioMessaging>(context, radioHidl, responseCb, indicationCb, slot);
|
||||
publishRadioHal<compat::RadioModem>(context, radioHidl, responseCb, indicationCb, slot);
|
||||
publishRadioHal<compat::RadioNetwork>(context, radioHidl, responseCb, indicationCb, slot);
|
||||
publishRadioHal<compat::RadioSim>(context, radioHidl, responseCb, indicationCb, slot);
|
||||
publishRadioHal<compat::RadioVoice>(context, radioHidl, responseCb, indicationCb, slot);
|
||||
}
|
||||
|
||||
static void publishRadioConfig() {
|
||||
|
|
Loading…
Reference in a new issue