From 308569a87977d9632c158ab644bcb036c0994909 Mon Sep 17 00:00:00 2001 From: Sarah Chin Date: Thu, 16 Jan 2020 11:09:13 -0800 Subject: [PATCH] Support IPv6 MTU in IRadio 1.5 Change mtu->mtuV4 and add mtuV6 for DataProfileInfo and SetupDataCallResult Test: mm and build Bug: 146668814 Change-Id: I33320281730fdb91d2b07d11cd24a95d0834c9dd Merged-In: I33320281730fdb91d2b07d11cd24a95d0834c9dd --- current.txt | 2 +- radio/1.5/types.hal | 80 +++++++++++++-- .../1.5/vts/functional/radio_hidl_hal_api.cpp | 99 ++++++++++--------- 3 files changed, 126 insertions(+), 55 deletions(-) diff --git a/current.txt b/current.txt index d4f99a824a..5146aa0c7c 100644 --- a/current.txt +++ b/current.txt @@ -635,7 +635,7 @@ c9273429fcf98d797d3bb07fdba6f1be95bf960f9255cde169fd1ca4db85f856 android.hardwar ## # BEGIN Radio HAL Merge Conflict Avoidance Buffer - STOPSHIP if present ## -7b2481e38a41695de301cbced4259060108ce664132ec506b7533e6da202812a android.hardware.radio@1.5::types +372abc5d0502fc40ca0b83b233addf9babc7fd459bafb908915b1371fc6f1bd0 android.hardware.radio@1.5::types 603851ca0f5360778049902fc7486d0ff60065b16e83b99f076487667aba1928 android.hardware.radio@1.5::IRadio e96ae1c3a9c0689002ec2318e9c587f4f607c16a75a3cd38788b77eb91072021 android.hardware.radio@1.5::IRadioIndication 04cce8fdae2b03becda4ee6fe17cb032fd7d30152f8ab36f642d794e4f5f6999 android.hardware.radio@1.5::IRadioResponse diff --git a/radio/1.5/types.hal b/radio/1.5/types.hal index fde2251063..dd41fb2d79 100644 --- a/radio/1.5/types.hal +++ b/radio/1.5/types.hal @@ -324,13 +324,74 @@ enum ApnTypes : @1.4::ApnTypes { }; /** - * Extended from @1.4::DataProfileInfo to update ApnTypes to 1.5 version + * Extended from @1.4::DataProfileInfo to update ApnTypes to 1.5 version and replace mtu with + * mtuV4 and mtuV6. In the future, this must be extended instead of overwritten. */ struct DataProfileInfo { - @1.4::DataProfileInfo base; + + /** ID of the data profile. */ + DataProfileId profileId; + + /** The APN name. */ + string apn; + + /** PDP_type values. */ + PdpProtocolType protocol; + + /** PDP_type values used on roaming network. */ + PdpProtocolType roamingProtocol; + + /** APN authentication type. */ + ApnAuthType authType; + + /** The username for APN, or empty string. */ + string user; + + /** The password for APN, or empty string. */ + string password; + + /** Data profile technology type. */ + DataProfileInfoType type; + + /** The period in seconds to limit the maximum connections. */ + int32_t maxConnsTime; + + /** The maximum connections during maxConnsTime. */ + int32_t maxConns; + + /** + * The required wait time in seconds after a successful UE initiated disconnect of a given PDN + * connection before the device can send a new PDN connection request for that given PDN. + */ + int32_t waitTime; + + /** True to enable the profile, false to disable. */ + bool enabled; /** Supported APN types bitmap. See ApnTypes for the value of each bit. */ bitfield supportedApnTypesBitmap; + + /** The bearer bitmap. See RadioAccessFamily for the value of each bit. */ + bitfield bearerBitmap; + + /** Maximum transmission unit (MTU) size in bytes for IPv4. */ + int32_t mtuV4; + + /** Maximum transmission unit (MTU) size in bytes for IPv6. */ + int32_t mtuV6; + + /** + * True if this data profile was used to bring up the last default (i.e internet) data + * connection successfully. + */ + bool preferred; + + /** + * If true, modem must persist this data profile and profileId must not be + * set to DataProfileId.INVALID. If the same data profile exists, this data profile must + * overwrite it. + */ + bool persistent; }; /** @@ -377,7 +438,8 @@ struct LinkAddress { /** * Overwritten from @1.4::SetupDataCallResult in order to update the addresses to 1.5 - * version. In 1.5 the type of addresses changes to vector of LinkAddress. + * version. In 1.5 the type of addresses changes to vector of LinkAddress, and mtu is replaced by + * mtuV4 and mtuV6. */ struct SetupDataCallResult { /** Data call fail cause. DataCallFailCause.NONE if no error. */ @@ -431,10 +493,16 @@ struct SetupDataCallResult { vec pcscf; /** - * MTU received from network. Value <= 0 means network has either not sent a value or sent an - * invalid value. + * MTU received from network for IPv4. + * Value <= 0 means network has either not sent a value or sent an invalid value. */ - int32_t mtu; + int32_t mtuV4; + + /** + * MTU received from network for IPv6. + * Value <= 0 means network has either not sent a value or sent an invalid value. + */ + int32_t mtuV6; }; enum Domain : int32_t { diff --git a/radio/1.5/vts/functional/radio_hidl_hal_api.cpp b/radio/1.5/vts/functional/radio_hidl_hal_api.cpp index 600f801db2..100f211488 100644 --- a/radio/1.5/vts/functional/radio_hidl_hal_api.cpp +++ b/radio/1.5/vts/functional/radio_hidl_hal_api.cpp @@ -833,23 +833,24 @@ TEST_F(RadioHidlTest_v1_5, setupDataCall_1_5) { android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo; memset(&dataProfileInfo, 0, sizeof(dataProfileInfo)); - dataProfileInfo.base.profileId = DataProfileId::DEFAULT; - dataProfileInfo.base.apn = hidl_string("internet"); - dataProfileInfo.base.protocol = PdpProtocolType::IP; - dataProfileInfo.base.roamingProtocol = PdpProtocolType::IP; - dataProfileInfo.base.authType = ApnAuthType::NO_PAP_NO_CHAP; - dataProfileInfo.base.user = hidl_string("username"); - dataProfileInfo.base.password = hidl_string("password"); - dataProfileInfo.base.type = DataProfileInfoType::THREE_GPP; - dataProfileInfo.base.maxConnsTime = 300; - dataProfileInfo.base.maxConns = 20; - dataProfileInfo.base.waitTime = 0; - dataProfileInfo.base.enabled = true; + dataProfileInfo.profileId = DataProfileId::DEFAULT; + dataProfileInfo.apn = hidl_string("internet"); + dataProfileInfo.protocol = PdpProtocolType::IP; + dataProfileInfo.roamingProtocol = PdpProtocolType::IP; + dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP; + dataProfileInfo.user = hidl_string("username"); + dataProfileInfo.password = hidl_string("password"); + dataProfileInfo.type = DataProfileInfoType::THREE_GPP; + dataProfileInfo.maxConnsTime = 300; + dataProfileInfo.maxConns = 20; + dataProfileInfo.waitTime = 0; + dataProfileInfo.enabled = true; dataProfileInfo.supportedApnTypesBitmap = 320; - dataProfileInfo.base.bearerBitmap = 161543; - dataProfileInfo.base.mtu = 0; - dataProfileInfo.base.preferred = true; - dataProfileInfo.base.persistent = false; + dataProfileInfo.bearerBitmap = 161543; + dataProfileInfo.mtuV4 = 0; + dataProfileInfo.mtuV6 = 0; + dataProfileInfo.preferred = true; + dataProfileInfo.persistent = false; bool roamingAllowed = false; @@ -884,23 +885,24 @@ TEST_F(RadioHidlTest_v1_5, setInitialAttachApn_1_5) { // Create a dataProfileInfo android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo; memset(&dataProfileInfo, 0, sizeof(dataProfileInfo)); - dataProfileInfo.base.profileId = DataProfileId::DEFAULT; - dataProfileInfo.base.apn = hidl_string("internet"); - dataProfileInfo.base.protocol = PdpProtocolType::IPV4V6; - dataProfileInfo.base.roamingProtocol = PdpProtocolType::IPV4V6; - dataProfileInfo.base.authType = ApnAuthType::NO_PAP_NO_CHAP; - dataProfileInfo.base.user = hidl_string("username"); - dataProfileInfo.base.password = hidl_string("password"); - dataProfileInfo.base.type = DataProfileInfoType::THREE_GPP; - dataProfileInfo.base.maxConnsTime = 300; - dataProfileInfo.base.maxConns = 20; - dataProfileInfo.base.waitTime = 0; - dataProfileInfo.base.enabled = true; + dataProfileInfo.profileId = DataProfileId::DEFAULT; + dataProfileInfo.apn = hidl_string("internet"); + dataProfileInfo.protocol = PdpProtocolType::IPV4V6; + dataProfileInfo.roamingProtocol = PdpProtocolType::IPV4V6; + dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP; + dataProfileInfo.user = hidl_string("username"); + dataProfileInfo.password = hidl_string("password"); + dataProfileInfo.type = DataProfileInfoType::THREE_GPP; + dataProfileInfo.maxConnsTime = 300; + dataProfileInfo.maxConns = 20; + dataProfileInfo.waitTime = 0; + dataProfileInfo.enabled = true; dataProfileInfo.supportedApnTypesBitmap = 320; - dataProfileInfo.base.bearerBitmap = 161543; - dataProfileInfo.base.mtu = 0; - dataProfileInfo.base.preferred = true; - dataProfileInfo.base.persistent = false; + dataProfileInfo.bearerBitmap = 161543; + dataProfileInfo.mtuV4 = 0; + dataProfileInfo.mtuV6 = 0; + dataProfileInfo.preferred = true; + dataProfileInfo.persistent = false; radio_v1_5->setInitialAttachApn_1_5(serial, dataProfileInfo); @@ -923,23 +925,24 @@ TEST_F(RadioHidlTest_v1_5, setDataProfile_1_5) { // Create a dataProfileInfo android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo; memset(&dataProfileInfo, 0, sizeof(dataProfileInfo)); - dataProfileInfo.base.profileId = DataProfileId::DEFAULT; - dataProfileInfo.base.apn = hidl_string("internet"); - dataProfileInfo.base.protocol = PdpProtocolType::IPV4V6; - dataProfileInfo.base.roamingProtocol = PdpProtocolType::IPV4V6; - dataProfileInfo.base.authType = ApnAuthType::NO_PAP_NO_CHAP; - dataProfileInfo.base.user = hidl_string("username"); - dataProfileInfo.base.password = hidl_string("password"); - dataProfileInfo.base.type = DataProfileInfoType::THREE_GPP; - dataProfileInfo.base.maxConnsTime = 300; - dataProfileInfo.base.maxConns = 20; - dataProfileInfo.base.waitTime = 0; - dataProfileInfo.base.enabled = true; + dataProfileInfo.profileId = DataProfileId::DEFAULT; + dataProfileInfo.apn = hidl_string("internet"); + dataProfileInfo.protocol = PdpProtocolType::IPV4V6; + dataProfileInfo.roamingProtocol = PdpProtocolType::IPV4V6; + dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP; + dataProfileInfo.user = hidl_string("username"); + dataProfileInfo.password = hidl_string("password"); + dataProfileInfo.type = DataProfileInfoType::THREE_GPP; + dataProfileInfo.maxConnsTime = 300; + dataProfileInfo.maxConns = 20; + dataProfileInfo.waitTime = 0; + dataProfileInfo.enabled = true; dataProfileInfo.supportedApnTypesBitmap = 320; - dataProfileInfo.base.bearerBitmap = 161543; - dataProfileInfo.base.mtu = 0; - dataProfileInfo.base.preferred = true; - dataProfileInfo.base.persistent = true; + dataProfileInfo.bearerBitmap = 161543; + dataProfileInfo.mtuV4 = 0; + dataProfileInfo.mtuV6 = 0; + dataProfileInfo.preferred = true; + dataProfileInfo.persistent = true; // Create a dataProfileInfoList android::hardware::hidl_vec