fstman: add HAL version 1.0

Add version 1.0 of the fstman HAL.
This HAL is served by the fst-manager daemon,
and allows the WIFI framework to control the
FST session and support features such as:
- Dynamic enslave of both master interface (wlan0)
and rate upgrade interface (wigig0). This allows
auto-detection and switching to FST connection
without special UI and disable/enable WIFI.
- Support renaming of group interfaces, this is
needed because the WIFI framework can assign
different names to the client interface (such
as wlan0/wlan1).
- Infrastructure for supporting fst-manager for
SoftAP in parallel with STA fst-manager.
- Support FST and WIFI SON modes.

Change-Id: I51b5c5eda9bdc401e25e915b295efa4abf2d50f1
This commit is contained in:
Lior David
2019-08-21 15:06:16 +03:00
parent f5d86d2a67
commit 7408986032
6 changed files with 475 additions and 0 deletions

View File

@@ -39,3 +39,8 @@ hidl_package_root {
name: "vendor.qti.hardware.bluetooth_dun",
path: "vendor/qcom/opensource/interfaces/bluetooth_dun",
}
hidl_package_root {
name: "vendor.qti.hardware.fstman",
path: "vendor/qcom/opensource/interfaces/fstman",
}

213
fstman/1.0/IFstGroup.hal Normal file
View File

@@ -0,0 +1,213 @@
/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package vendor.qti.hardware.fstman@1.0;
import IFstGroupCallback;
/**
* Interface exposed by the supplicant for each FST group (e.g bond0)
* it controls.
*/
interface IFstGroup {
/**
* Retrieves the name of the FST group.
*
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|
* @return name Name of the FST group, e.g., bond0
*/
getName() generates (FstManagerStatus status, string name);
/**
* Register for callbacks from this group.
*
* These callbacks are invoked for events that are specific to this group.
* Registration of multiple callback objects is supported. These objects must
* be automatically deleted when the corresponding client process is dead or
* if this group is removed.
*
* @param callback An instance of the |IFstGroupCallback| HIDL
* interface object.
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|,
*/
registerCallback(IFstGroupCallback callback)
generates (FstManagerStatus status);
/**
* Retrieve a list of all interfaces belonging to this group.
*
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|
* @return ifaceNames List of names for interfaces belonging to this group.
*/
listInterfaces() generates (FstManagerStatus status, vec<string> ifaceNames);
/**
* check if FST mode is supported for this group.
* When FST mode is supported, framework should detect FST-capable AP by
* checking for presence of MB IE in probe response.
*
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|,
* @return supported true if FST mode is supported, false if not.
*/
isFstModeSupported() generates (FstManagerStatus status, bool supported);
/**
* check if WIFI SON mode is supported for this group.
* When SON mode is supported, framework should detect SON-capable AP by
* checking for presence of SON IE in probe response.
*
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|,
* @return supported true if WIFI SON mode supported, false if not.
*/
isWifiSonModeSupported() generates (FstManagerStatus status, bool supported);
/**
* get the name of the MUX interface used by this group.
*
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|,
* @return name name of the MUX interface (such as bond0)
*/
getMuxInterfaceName() generates (FstManagerStatus status, string name);
/**
* set the name of the MUX interface used by this group.
* The group must not have any enslaved interfaces or active connection.
*
* @param name new name for the MUX interface.
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|,
*/
setMuxInterfaceName(string name) generates (FstManagerStatus status);
/**
* Enslave or release a group interface.
* When enslaving, interface will be added to master
* interface as a slave.
* When releasing, interface will be detached from
* master interface and no longer be a slave.
* When releasing, fst-manager will also disconnect
* any active connection on the interface (via supplicant)
*
* @param ifname interface name, must be one of the group interfaces.
* @param enslave true to enslave, false to release
*
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_ARGS_INVALID|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|,
*/
enslave(string ifname, bool enslave)
generates (FstManagerStatus status);
/**
* check if the interface is currently enslaved under the
* MUX interface.
*
* @param ifname interface name, must be one of the group interfaces.
*
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_ARGS_INVALID|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|,
* @return enslaved true if interface is enslaved, false if not.
*/
isEnslaved(string ifname)
generates (FstManagerStatus status, bool enslaved);
/**
* Changes the MAC address of the group master interface
* and its underlying interfaces.
*
* @param mac MAC address to change into.
* @return status WifiStatus of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|,
*/
setMacAddress(MacAddress mac) generates (FstManagerStatus status);
/**
* check if the specified interface is the rate upgrade master for
* this group. The rate upgrade master is typically the "always on"
* connection which is used as a fallback when the faster (but less
* reliable) interface is not available.
*
* @param ifname interface name, must be one of the group interfaces.
*
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_ARGS_INVALID|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|,
* @return isMaster true if interface is rate upgrade master, false if not.
*/
isRateUpgradeMaster(string ifname)
generates (FstManagerStatus status, bool isMaster);
/**
* rename one of the group interfaces.
* The interface must not be enslaved, and the group must
* not have an active connection.
*
* @param ifname interface name, must be one of the group interfaces.
* @param newifname new interface name for this interface.
*
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_ARGS_INVALID|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|,
*/
renameInterface(string ifname, string newifname)
generates (FstManagerStatus status);
};

View File

@@ -0,0 +1,42 @@
/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package vendor.qti.hardware.fstman@1.0;
/**
* Callback Interface exposed by the fst-manager service
* for each FST group (IFstGroup).
*
* Clients need to host an instance of this HIDL interface object and
* pass a reference of the object to the supplicant via the
* corresponding |IFstGroup.registerCallback| method.
*/
interface IFstGroupCallback {
};

118
fstman/1.0/IFstManager.hal Normal file
View File

@@ -0,0 +1,118 @@
/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package vendor.qti.hardware.fstman@1.0;
import IFstGroup;
/**
* interface for communicating with fst-manager
*/
interface IFstManager {
/**
* Debug levels for the fst-manager.
* Only log messages with a level greater than the set level
* (via |setDebugParams|) will be logged.
*/
enum DebugLevel : uint32_t {
EXCESSIVE = 0,
MSGDUMP = 1,
DEBUG = 2,
INFO = 3,
WARNING = 4,
ERROR = 5
};
/**
* Gets a HIDL interface object for the group corresponding to group
* name which the fst-manager already controls.
*
* @param groupName The group name.
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|,
* |FstManagerStatusCode.FAILURE_GROUP_UNKOWN|
* @return group HIDL interface object representing the group if
* successful, null otherwise.
*/
getGroup(string groupName)
generates (FstManagerStatus status, IFstGroup group);
/**
* Retrieve a list of all the groups controlled by the fst-manager.
*
* The corresponding |IFstGroup| object for any group can be
* retrieved using |getGroup| method.
*
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|
* @return groupNames List of all group names controlled by the fst-manager.
*/
listGroups() generates (FstManagerStatus status, vec<string> groupNames);
/**
* Set debug parameters for the fst-manager.
*
* @param level Debug logging level for the fst-manager.
* (one of |DebugLevel| values).
* @param timestamp Determines whether to show timestamps in logs or
* not.
* @return status Status of the operation.
* Possible status codes:
* |FstManagerStatusCode.SUCCESS|,
* |FstManagerStatusCode.FAILURE_UNKNOWN|
*/
setDebugParams(DebugLevel level, bool showTimestamp)
generates (FstManagerStatus status);
/**
* Get the debug level set.
*
* @return level one of |DebugLevel| values.
*/
getDebugLevel() generates (DebugLevel level);
/**
* Get whether the timestamps are shown in the debug logs or not.
*
* @return enabled true if set, false otherwise.
*/
isDebugShowTimestampEnabled() generates (bool enabled);
/**
* Terminate the service.
* This must de-register the service and clear all state. If this HAL
* supports the lazy HAL protocol, then this may trigger daemon to exit and
* wait to be restarted.
*/
oneway terminate();
};

61
fstman/1.0/types.hal Normal file
View File

@@ -0,0 +1,61 @@
/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package vendor.qti.hardware.fstman@1.0;
/**
* Enum values indicating the status of any FST manager operation.
*/
enum FstManagerStatusCode : uint32_t {
/** No errors. */
SUCCESS,
/** Unknown failure occured. */
FAILURE_UNKNOWN,
/** One of the incoming args is invalid. */
FAILURE_ARGS_INVALID,
/** Unknown FST group */
FAILURE_GROUP_UNKNOWN,
};
/**
* Generic structure to return the status of any FST manager operation.
*/
struct FstManagerStatus {
FstManagerStatusCode code;
/**
* A vendor specific error message to provide more information beyond the
* status code.
* This will be used for debbuging purposes only.
*/
string debugMessage;
};
/**
* Mac Address type. 6 octets representing physical address of a device.
*/
typedef uint8_t[6] MacAddress;

36
fstman/current.txt Normal file
View File

@@ -0,0 +1,36 @@
# Copyright (c) 2019, The Linux Foundation. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
# * Neither the name of The Linux Foundation nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#
######HAL released in Android Q######
a916925177373b896bf211eb00faaeae7063ef40351286a64f4bec8e0079e6db vendor.qti.hardware.fstman@1.0::types
951b29cb64137afe92a225d85af245d96c89405dae56c6af5339f13f4c4e2904 vendor.qti.hardware.fstman@1.0::IFstGroup
24bd58f69a5d3be9294f9a671b81da1f36120ff17954d0ec94fbbff14f968a62 vendor.qti.hardware.fstman@1.0::IFstGroupCallback
d9f95a2ba931ce60b39b564d52ae4644e875b10e7ec27ce42da83a95dcff4e81 vendor.qti.hardware.fstman@1.0::IFstManager