Convert tethering offload IPCs from primitive args to a parcel.
Defining stable AIDL IPCs with primitive args is not future-proof
because AIDL does not support method overloading, so any time a
parameter is added a new method needs to be created.
It's better to use parcelables for parameters instead, because
parcelables can be extended in subsequent version.
Define a TetherOffloadRuleParcel data structure to represent
tethering offload rules, and switch the tethering offload IPCs to
it before we freeze the INetd AIDL.
Bug: 140541991
Test: atest netd_integration_test
Merged-In: I6e84b14872d38a897eb6a10fd37d816ec7e6da64
Change-Id: I6e84b14872d38a897eb6a10fd37d816ec7e6da64
diff --git a/server/NetdNativeService.cpp b/server/NetdNativeService.cpp
index fb7f839..b6c0d4e 100644
--- a/server/NetdNativeService.cpp
+++ b/server/NetdNativeService.cpp
@@ -52,6 +52,7 @@
using android::base::StringPrintf;
using android::base::WriteStringToFile;
+using android::net::TetherOffloadRuleParcel;
using android::net::TetherStatsParcel;
using android::net::UidRangeParcel;
using android::netdutils::DumpWriter;
@@ -1247,20 +1248,16 @@
return binder::Status::ok();
}
-binder::Status NetdNativeService::tetherRuleAddDownstreamIpv6(
- int intIfaceIndex, int extIfaceIndex, const std::vector<uint8_t>& ipAddress,
- const std::vector<uint8_t>& srcL2Address, const std::vector<uint8_t>& dstL2Address) {
+binder::Status NetdNativeService::tetherOffloadRuleAdd(const TetherOffloadRuleParcel& rule) {
ENFORCE_NETWORK_STACK_PERMISSIONS();
- return asBinderStatus(gCtls->tetherCtrl.addDownstreamIpv6Rule(
- intIfaceIndex, extIfaceIndex, ipAddress, srcL2Address, dstL2Address));
+ return asBinderStatus(gCtls->tetherCtrl.addOffloadRule(rule));
}
-binder::Status NetdNativeService::tetherRuleRemoveDownstreamIpv6(
- int extIfaceIndex, const std::vector<uint8_t>& ipAddress) {
+binder::Status NetdNativeService::tetherOffloadRuleRemove(const TetherOffloadRuleParcel& rule) {
ENFORCE_NETWORK_STACK_PERMISSIONS();
- return asBinderStatus(gCtls->tetherCtrl.removeDownstreamIpv6Rule(extIfaceIndex, ipAddress));
+ return asBinderStatus(gCtls->tetherCtrl.removeOffloadRule(rule));
}
} // namespace net