/* * Copyright (C) 2020 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. */ package android.hardware.tetheroffload.control@1.1; import @1.0::IOffloadControl; /** * Interface used to control the lifecycle of tethering offload. Note that callbacks of 1.1 HAL * can be registered with the existing callback registration methods from 1.0 HAL. */ interface IOffloadControl extends @1.0::IOffloadControl { /** * Instruct hardware to send callbacks after certain number of bytes have been transferred in * either direction on this upstream interface. * * The specified quota bytes must be applied to all traffic on the given upstream interface. * This includes hardware forwarded traffic, software forwarded traffic, and AP-originated * traffic. IPv4 and IPv6 traffic both count towards the same quota. IP headers are included * in the byte count quota, but, link-layer headers are not. * * This API may only be called while offload is occurring on this upstream. The hardware * management process MUST NOT store the values when offload is not started and applies once * offload is started. This is because the quota values would likely become stale over * time and would not reflect any new traffic that has occurred. * * This API replaces {@link @1.0::IOffloadControl::setDataLimit}, the framework will always * call setDataWarningAndLimit on 1.1 implementations, and setDataLimit on 1.0 implementations. * Thus, no interaction between the two APIs need to be addressed. * * The specified quota bytes MUST replace any previous quotas set by * {@code setDataWarningAndLimit} specified on the same interface. It may be interpreted as * "tell me when either or bytes have been transferred * (in either direction), and stop offload when bytes have been transferred, * starting now and counting from zero on ." * * Once the {@code warningBytes} is reached, the callback registered in initOffload must be * called with {@code OFFLOAD_WARNING_REACHED} to indicate this event. Once the event fires * for this upstream, no further {@code OFFLOAD_WARNING_REACHED} event will be fired for this * upstream unless this method is called again with the same interface. Note that there is * no need to call initOffload again to resume offload if stopOffload was not called by the * client. * * Similarly, Once the {@code limitBytes} is reached, the callback registered in initOffload * must be called with {@code OFFLOAD_STOPPED_LIMIT_REACHED} to indicate this event. Once * the event fires for this upstream, no further {@code OFFLOAD_STOPPED_LIMIT_REACHED} * event will be fired for this upstream unless this method is called again with the same * interface. However, unlike {@code warningBytes}, when {@code limitBytes} is reached, * all offload must be stopped. If offload is desired again, the hardware management * process must be completely reprogrammed by calling setUpstreamParameters and * addDownstream again. * * Note that when one of the quota bytes is reached, the other one is still considered valid * unless this method is called again with the same interface. * * @param upstream Upstream interface name that quota must apply to. * @param warningBytes The quota of warning, defined as the number of bytes, starting from * zero and counting from now. * @param limitBytes The quota of limit, defined as the number of bytes, starting from zero * and counting from now. * * @return success true if quota is applied, false otherwise * @return errMsg a human readable string if error has occurred. */ setDataWarningAndLimit(string upstream, uint64_t warningBytes, uint64_t limitBytes) generates (bool success, string errMsg); };