1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.server.wifi; 18 19 import android.annotation.NonNull; 20 import android.annotation.Nullable; 21 import android.net.DhcpResultsParcelable; 22 import android.net.MacAddress; 23 import android.net.Network; 24 import android.net.wifi.BlockingOption; 25 import android.net.wifi.IWifiConnectedNetworkScorer; 26 import android.net.wifi.WifiConfiguration; 27 import android.net.wifi.WifiInfo; 28 import android.net.wifi.WifiManager; 29 import android.net.wifi.WifiManager.DeviceMobilityState; 30 import android.net.wifi.hotspot2.IProvisioningCallback; 31 import android.net.wifi.hotspot2.OsuProvider; 32 import android.net.wifi.nl80211.DeviceWiphyCapabilities; 33 import android.os.IBinder; 34 import android.os.Message; 35 import android.os.WorkSource; 36 37 import com.android.server.wifi.util.ActionListenerWrapper; 38 39 import java.io.FileDescriptor; 40 import java.io.PrintWriter; 41 import java.util.ArrayList; 42 import java.util.List; 43 import java.util.Set; 44 45 /** 46 * Default implementations for {@link ClientMode} APIs. 47 */ 48 public interface ClientModeDefaults extends ClientMode { dump(FileDescriptor fd, PrintWriter pw, String[] args)49 default void dump(FileDescriptor fd, PrintWriter pw, String[] args) { } 50 connectNetwork(NetworkUpdateResult result, ActionListenerWrapper wrapper, int callingUid, @NonNull String packageName, @Nullable String attributionTag)51 default void connectNetwork(NetworkUpdateResult result, ActionListenerWrapper wrapper, 52 int callingUid, @NonNull String packageName, @Nullable String attributionTag) { 53 // wifi off, can't connect. 54 wrapper.sendFailure(WifiManager.ActionListener.FAILURE_BUSY); 55 } 56 saveNetwork(NetworkUpdateResult result, ActionListenerWrapper wrapper, int callingUid, @NonNull String packageName)57 default void saveNetwork(NetworkUpdateResult result, ActionListenerWrapper wrapper, 58 int callingUid, @NonNull String packageName) { 59 // wifi off, nothing more to do here. 60 wrapper.sendSuccess(); 61 } 62 disconnect()63 default void disconnect() { } 64 reconnect(WorkSource ws)65 default void reconnect(WorkSource ws) { } 66 reassociate()67 default void reassociate() { } 68 startConnectToNetwork(int networkId, int uid, String bssid)69 default void startConnectToNetwork(int networkId, int uid, String bssid) { } 70 startRoamToNetwork(int networkId, String bssid)71 default void startRoamToNetwork(int networkId, String bssid) { } 72 onDeviceMobilityStateUpdated(@eviceMobilityState int newState)73 default void onDeviceMobilityStateUpdated(@DeviceMobilityState int newState) { } 74 setLinkLayerStatsPollingInterval(int newIntervalMs)75 default void setLinkLayerStatsPollingInterval(int newIntervalMs) { } 76 setWifiConnectedNetworkScorer( IBinder binder, IWifiConnectedNetworkScorer scorer, int callerUid)77 default boolean setWifiConnectedNetworkScorer( 78 IBinder binder, IWifiConnectedNetworkScorer scorer, int callerUid) { 79 // don't fail the public API when wifi is off. 80 return true; 81 } 82 clearWifiConnectedNetworkScorer()83 default void clearWifiConnectedNetworkScorer() { } 84 85 /** 86 * Notify the connected network scorer of the user accepting a network switch. 87 */ onNetworkSwitchAccepted(int targetNetworkId, String targetBssid)88 default void onNetworkSwitchAccepted(int targetNetworkId, String targetBssid) { } 89 90 /** 91 * Notify the connected network scorer of the user rejecting a network switch. 92 */ onNetworkSwitchRejected(int targetNetworkId, String targetBssid)93 default void onNetworkSwitchRejected(int targetNetworkId, String targetBssid) { } 94 resetSimAuthNetworks(@lientModeImpl.ResetSimReason int resetReason)95 default void resetSimAuthNetworks(@ClientModeImpl.ResetSimReason int resetReason) { } 96 onBluetoothConnectionStateChanged()97 default void onBluetoothConnectionStateChanged() { } 98 getConnectionInfo()99 default WifiInfo getConnectionInfo() { 100 return new WifiInfo(); 101 } 102 syncQueryPasspointIcon(long bssid, String fileName)103 default boolean syncQueryPasspointIcon(long bssid, String fileName) { 104 return false; 105 } 106 getCurrentNetwork()107 default Network getCurrentNetwork() { 108 return null; 109 } 110 syncGetDhcpResultsParcelable()111 default DhcpResultsParcelable syncGetDhcpResultsParcelable() { 112 return new DhcpResultsParcelable(); 113 } 114 syncStartSubscriptionProvisioning(int callingUid, OsuProvider provider, IProvisioningCallback callback)115 default boolean syncStartSubscriptionProvisioning(int callingUid, OsuProvider provider, 116 IProvisioningCallback callback) { 117 return false; 118 } 119 120 /** Enable TDLS session with remote MAC address */ enableTdls(String remoteMacAddress, boolean enable)121 default boolean enableTdls(String remoteMacAddress, boolean enable) { 122 return false; 123 } 124 125 /** Enable TDLS session with remote IP address */ enableTdlsWithRemoteIpAddress(String remoteIpAddress, boolean enable)126 default boolean enableTdlsWithRemoteIpAddress(String remoteIpAddress, boolean enable) { 127 return false; 128 } 129 130 /** Check if a TDLS session can be established */ isTdlsOperationCurrentlyAvailable()131 default boolean isTdlsOperationCurrentlyAvailable() { 132 return false; 133 } 134 135 /** The maximum number of TDLS sessions supported by the device */ getMaxSupportedConcurrentTdlsSessions()136 default int getMaxSupportedConcurrentTdlsSessions() { 137 return -1; 138 } 139 140 /** The number of Peer mac addresses configured in the device for establishing a TDLS session */ getNumberOfEnabledTdlsSessions()141 default int getNumberOfEnabledTdlsSessions() { 142 return 0; 143 } 144 dumpIpClient(FileDescriptor fd, PrintWriter pw, String[] args)145 default void dumpIpClient(FileDescriptor fd, PrintWriter pw, String[] args) { } 146 dumpWifiScoreReport(FileDescriptor fd, PrintWriter pw, String[] args)147 default void dumpWifiScoreReport(FileDescriptor fd, PrintWriter pw, String[] args) { } 148 enableVerboseLogging(boolean verbose)149 default void enableVerboseLogging(boolean verbose) { } 150 getFactoryMacAddress()151 default String getFactoryMacAddress() { 152 return null; 153 } 154 getConnectedWifiConfiguration()155 default WifiConfiguration getConnectedWifiConfiguration() { 156 return null; 157 } 158 getConnectingWifiConfiguration()159 default WifiConfiguration getConnectingWifiConfiguration() { 160 return null; 161 } 162 getConnectedBssid()163 default String getConnectedBssid() { 164 return null; 165 } 166 getConnectingBssid()167 default String getConnectingBssid() { 168 return null; 169 } 170 getWifiLinkLayerStats()171 default WifiLinkLayerStats getWifiLinkLayerStats() { 172 return null; 173 } 174 setPowerSave(@owerSaveClientType int client, boolean ps)175 default boolean setPowerSave(@PowerSaveClientType int client, boolean ps) { 176 return false; 177 } 178 enablePowerSave()179 default boolean enablePowerSave() { 180 return false; 181 } 182 setLowLatencyMode(boolean enabled)183 default boolean setLowLatencyMode(boolean enabled) { 184 return false; 185 } 186 getMcastLockManagerFilterController()187 default WifiMulticastLockManager.FilterController getMcastLockManagerFilterController() { 188 return new WifiMulticastLockManager.FilterController() { 189 @Override 190 public void startFilteringMulticastPackets() { } 191 @Override 192 public void stopFilteringMulticastPackets() { } 193 }; 194 } 195 isConnected()196 default boolean isConnected() { 197 return false; 198 } 199 isConnecting()200 default boolean isConnecting() { 201 return false; 202 } 203 isRoaming()204 default boolean isRoaming() { 205 return false; 206 } 207 isDisconnected()208 default boolean isDisconnected() { 209 return true; 210 } 211 isIpProvisioningTimedOut()212 default boolean isIpProvisioningTimedOut() { 213 return false; 214 } 215 isSupplicantTransientState()216 default boolean isSupplicantTransientState() { 217 return false; 218 } 219 onCellularConnectivityChanged(@ifiDataStall.CellularDataStatusCode int status)220 default void onCellularConnectivityChanged(@WifiDataStall.CellularDataStatusCode int status) {} 221 probeLink(ClientMode.LinkProbeCallback callback, int mcs)222 default void probeLink(ClientMode.LinkProbeCallback callback, int mcs) { 223 callback.onFailure(ClientMode.LinkProbeCallback.LINK_PROBE_ERROR_NOT_CONNECTED); 224 } 225 sendMessageToClientModeImpl(Message msg)226 default void sendMessageToClientModeImpl(Message msg) { } 227 setMboCellularDataStatus(boolean available)228 default void setMboCellularDataStatus(boolean available) { } 229 getRoamingCapabilities()230 default WifiNative.RoamingCapabilities getRoamingCapabilities() { 231 return null; 232 } 233 configureRoaming(WifiNative.RoamingConfig config)234 default boolean configureRoaming(WifiNative.RoamingConfig config) { 235 return false; 236 } 237 enableRoaming(boolean enabled)238 default boolean enableRoaming(boolean enabled) { 239 return false; 240 } 241 setCountryCode(String countryCode)242 default boolean setCountryCode(String countryCode) { 243 return false; 244 } 245 getTxPktFates()246 default List<WifiNative.TxFateReport> getTxPktFates() { 247 return new ArrayList<>(); 248 } 249 getRxPktFates()250 default List<WifiNative.RxFateReport> getRxPktFates() { 251 return new ArrayList<>(); 252 } 253 getDeviceWiphyCapabilities()254 default DeviceWiphyCapabilities getDeviceWiphyCapabilities() { 255 return null; 256 } 257 requestAnqp(String bssid, Set<Integer> anqpIds, Set<Integer> hs20Subtypes)258 default boolean requestAnqp(String bssid, Set<Integer> anqpIds, Set<Integer> hs20Subtypes) { 259 return false; 260 } 261 requestVenueUrlAnqp(String bssid)262 default boolean requestVenueUrlAnqp(String bssid) { 263 return false; 264 } 265 requestIcon(String bssid, String fileName)266 default boolean requestIcon(String bssid, String fileName) { 267 return false; 268 } 269 270 @Override setShouldReduceNetworkScore(boolean shouldReduceNetworkScore)271 default void setShouldReduceNetworkScore(boolean shouldReduceNetworkScore) { } 272 273 @Override updateCapabilities()274 default void updateCapabilities() { } 275 276 @Override isAffiliatedLinkBssid(MacAddress bssid)277 default boolean isAffiliatedLinkBssid(MacAddress bssid) { 278 return false; 279 } 280 281 @Override isMlo()282 default boolean isMlo() { 283 return false; 284 } 285 286 @Override onIdleModeChanged(boolean isIdle)287 default void onIdleModeChanged(boolean isIdle) { } 288 289 @Override blockNetwork(BlockingOption option)290 default void blockNetwork(BlockingOption option) { } 291 } 292