/* * 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. */ package com.android.server.wifi; import android.annotation.NonNull; import android.net.MacAddress; import android.net.wifi.SoftApConfiguration; import com.android.server.wifi.WifiNative.HostapdDeathEventHandler; import com.android.server.wifi.WifiNative.SoftApHalCallback; import java.io.PrintWriter; /** Abstraction of HAL interface */ interface IHostapdHal { /** * Begin initializing the IHostapdHal object. Specific initialization logic differs * between the HIDL and AIDL implementations. * * @return true if the initialization routine was successful */ boolean initialize(); /** * Start hostapd daemon. */ boolean startDaemon(); /** * Enable/Disable verbose logging. * * @param verboseEnabled true to enable, false to disable. * @param halVerboseEnabled true to enable hal verbose logging, false to disable. */ void enableVerboseLogging(boolean verboseEnabled, boolean halVerboseEnabled); /** * Add and start a new access point. * * @param ifaceName Name of the interface. * @param config Configuration to use for the AP. * @param isMetered Indicates the network is metered or not. Ignored in AIDL imp. * @param onFailureListener A runnable to be triggered on failure. * @return true on success, false otherwise. */ boolean addAccessPoint(@NonNull String ifaceName, @NonNull SoftApConfiguration config, boolean isMetered, Runnable onFailureListener); /** * Remove a previously started access point. * * @param ifaceName Name of the interface. * @return true on success, false otherwise. */ boolean removeAccessPoint(@NonNull String ifaceName); /** * Remove a previously connected client. * * @param ifaceName Name of the interface. * @param client Mac Address of the client. * @param reasonCode One of disconnect reason code which defined in {@link WifiManager}. * @return true on success, false otherwise. */ boolean forceClientDisconnect(@NonNull String ifaceName, @NonNull MacAddress client, int reasonCode); /** * Register the provided callback handler for SoftAp events. *
* Note that only one callback can be registered at a time - any registration overrides previous * registrations. * * @param ifaceName Name of the interface. * @param callback Callback listener for AP events. * @return true on success, false on failure. */ boolean registerApCallback(@NonNull String ifaceName, @NonNull SoftApHalCallback callback); /** * Returns whether or not the hostapd supports getting the AP info from the callback. */ boolean isApInfoCallbackSupported(); /** * Registers a death notification for hostapd. * @return Returns true on success. */ boolean registerDeathHandler(@NonNull HostapdDeathEventHandler handler); /** * Deregisters a death notification for hostapd. * @return Returns true on success. */ boolean deregisterDeathHandler(); /** * Signals whether Initialization started successfully. */ boolean isInitializationStarted(); /** * Signals whether Initialization completed successfully. */ boolean isInitializationComplete(); /** * Terminate the hostapd daemon & wait for it's death. */ void terminate(); /** * Dump information about the specific implementation. */ void dump(PrintWriter pw); }