Promotion of wlan-service.lnx.1.1-00019.
CRs Change ID Subject -------------------------------------------------------------------------------------------------------------- 1017907 1044315 Ic8fcabf0ad514e5a73d5a9a9ebccb6ca52dcb9b4 Softap: Add support for STA+SoftAP Concurrency Change-Id: I7eaeacea9a9d6b45dbf87b52c65313386c1897d4 CRs-Fixed: 1017907, 1044315
This commit is contained in:
commit
f4e6d19070
3 changed files with 106 additions and 3 deletions
4
softap/sdk/Android.mk
Normal file → Executable file
4
softap/sdk/Android.mk
Normal file → Executable file
|
@ -4,7 +4,7 @@ LOCAL_PATH := $(call my-dir)
|
|||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_C_INCLUDES := $(TOP)/hardware/libhardware_legacy/wifi
|
||||
LOCAL_C_INCLUDES := $(TOP)/hardware/libhardware_legacy/wifi $(TOP)/external/libnl/include $(TOP)/external/wpa_supplicant_8/wpa_supplicant/src/drivers
|
||||
|
||||
LOCAL_MODULE:= libqsap_sdk
|
||||
|
||||
|
@ -61,7 +61,7 @@ LOCAL_SRC_FILES := qsap_api.c \
|
|||
|
||||
LOCAL_PRELINK_MODULE := false
|
||||
|
||||
LOCAL_SHARED_LIBRARIES := libnetutils libutils libbinder libcutils libhardware_legacy
|
||||
LOCAL_SHARED_LIBRARIES := libnetutils libutils libbinder libcutils libhardware_legacy libnl
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
|
|
103
softap/sdk/qsap_api.c
Normal file → Executable file
103
softap/sdk/qsap_api.c
Normal file → Executable file
|
@ -44,6 +44,12 @@
|
|||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <private/android_filesystem_config.h>
|
||||
#include <net/if.h>
|
||||
#include <netlink/netlink.h>
|
||||
#include <netlink/genl/genl.h>
|
||||
#include <netlink/genl/family.h>
|
||||
#include <netlink/genl/ctrl.h>
|
||||
#include "nl80211_copy.h"
|
||||
|
||||
#include "qsap_api.h"
|
||||
#include "qsap.h"
|
||||
|
@ -159,8 +165,8 @@ static struct Command cmd_list[eCMD_LAST] = {
|
|||
{ "chanlist", NULL },
|
||||
{ "ht_capab", NULL },
|
||||
{ "ieee80211h", NULL },
|
||||
|
||||
{ "enable_wigig_softap", NULL },
|
||||
{ "interface", NULL },
|
||||
};
|
||||
|
||||
struct Command qsap_str[eSTR_LAST] = {
|
||||
|
@ -3104,6 +3110,7 @@ void qsap_hostd_exec_cmd(s8 *pcmd, s8 *presp, u32 *plen)
|
|||
}
|
||||
|
||||
/* netd and Froyo Native UI specific API */
|
||||
#define DEFAULT_INTFERACE "wlan0"
|
||||
#define DEFAULT_SSID "SOFTAP_SSID"
|
||||
#define DEFAULT_CHANNEL 4
|
||||
#define DEFAULT_PASSPHRASE "12345678"
|
||||
|
@ -3133,6 +3140,16 @@ int qsapsetSoftap(int argc, char *argv[])
|
|||
ALOGD("ARG: %d - %s\n", i+1, argv[i]);
|
||||
}
|
||||
|
||||
/* set interface */
|
||||
if (argc > 2) {
|
||||
snprintf(cmdbuf, CMD_BUF_LEN, "set interface=%s",argv[2]);
|
||||
}
|
||||
else {
|
||||
snprintf(cmdbuf, CMD_BUF_LEN, "set interface=%s", DEFAULT_INTFERACE);
|
||||
}
|
||||
(void) qsap_hostd_exec_cmd(cmdbuf, respbuf, &rlen);
|
||||
|
||||
|
||||
/** set SSID */
|
||||
if(argc > 3) {
|
||||
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "set ssid=%s",argv[3]);
|
||||
|
@ -3340,3 +3357,87 @@ void qsap_set_ini_filename(void)
|
|||
ALOGE("INI FILE PROP NOT PRESENT: Use default path %s\n", fIni);
|
||||
return;
|
||||
}
|
||||
|
||||
int qsap_add_or_remove_interface(const char *newIface , int createIface)
|
||||
{
|
||||
const char *wlanIface = "wlan0";
|
||||
int retVal = 0;
|
||||
struct nl_msg *msg = NULL;
|
||||
struct nl_cb *cb = NULL;
|
||||
struct nl_cb *s_cb = NULL;
|
||||
struct nl_sock *nl_sock = NULL;
|
||||
int nl80211_id;
|
||||
enum nl80211_iftype type = NL80211_IFTYPE_AP;
|
||||
|
||||
/* Allocate a netlink socket */
|
||||
s_cb = nl_cb_alloc(NL_CB_DEFAULT);
|
||||
if (!s_cb) {
|
||||
ALOGE( "Failed to allocate Netlink Socket");
|
||||
retVal = -ENOMEM;
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
nl_sock = nl_socket_alloc_cb(s_cb);
|
||||
if (!nl_sock) {
|
||||
ALOGE( "Netlink socket Allocation failure");
|
||||
retVal = -ENOMEM;
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
/* connect to generic netlink socket */
|
||||
if (genl_connect(nl_sock)) {
|
||||
ALOGE( "Netlink socket Connection failure");
|
||||
retVal = -ENOLINK;
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
nl80211_id = genl_ctrl_resolve(nl_sock, "nl80211");
|
||||
if (nl80211_id < 0) {
|
||||
ALOGE( "nl80211 generic netlink not found");
|
||||
retVal = -ENOENT;
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
msg = nlmsg_alloc();
|
||||
if(!msg) {
|
||||
ALOGE( "Failed to allocate netlink message");
|
||||
retVal = -ENOMEM;
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
cb = nl_cb_alloc(NL_CB_DEFAULT);
|
||||
if (!cb) {
|
||||
ALOGE( "Failed to allocate netlink callback");
|
||||
retVal = -ENOMEM;
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
if (createIface == 1) {
|
||||
/* Issue NL80211_CMD_NEW_INTERFACE */
|
||||
genlmsg_put( msg, 0, 0, nl80211_id, 0, 0, NL80211_CMD_NEW_INTERFACE, 0);
|
||||
nla_put_u32( msg, NL80211_ATTR_IFINDEX, if_nametoindex( wlanIface ));
|
||||
NLA_PUT_STRING( msg, NL80211_ATTR_IFNAME, newIface);
|
||||
nla_put_u32( msg, NL80211_ATTR_IFTYPE, type);
|
||||
} else {
|
||||
genlmsg_put( msg, 0, 0, nl80211_id, 0, 0, NL80211_CMD_DEL_INTERFACE, 0);
|
||||
nla_put_u32( msg, NL80211_ATTR_IFINDEX, if_nametoindex( newIface ));
|
||||
}
|
||||
|
||||
retVal = nl_send_auto_complete(nl_sock, msg );
|
||||
if (retVal < 0 ) {
|
||||
goto nla_put_failure;
|
||||
}
|
||||
else {
|
||||
ALOGD("Interface %s is %s - Ok", (createIface == 1 ? "created":"removed") ,newIface);
|
||||
}
|
||||
nla_put_failure:
|
||||
if (nl_sock)
|
||||
nl_socket_free(nl_sock);
|
||||
if (s_cb)
|
||||
nl_cb_put(s_cb);
|
||||
if (msg)
|
||||
nlmsg_free(msg);
|
||||
if (cb)
|
||||
nl_cb_put(cb);
|
||||
return retVal;
|
||||
}
|
||||
|
|
2
softap/sdk/qsap_api.h
Normal file → Executable file
2
softap/sdk/qsap_api.h
Normal file → Executable file
|
@ -332,6 +332,7 @@ typedef enum esap_cmd {
|
|||
eCMD_IEEE80211H = 71,
|
||||
|
||||
eCMD_ENABLE_WIGIG_SOFTAP = 72,
|
||||
eCMD_INTERFACE = 73,
|
||||
|
||||
eCMD_LAST /** New command numbers should be added above this */
|
||||
} esap_cmd_t;
|
||||
|
@ -591,6 +592,7 @@ int qsap_hostd_exec(int argc, char ** argv);
|
|||
void qsap_hostd_exec_cmd(s8 *pcmd, s8 *presp, u32 *plen);
|
||||
s8 *qsap_get_config_value(s8 *pfile, struct Command *pcmd, s8 *pbuf, u32 *plen);
|
||||
int qsapsetSoftap(int argc, char *argv[]);
|
||||
int qsap_add_or_remove_interface(const char *iface_name, int create_iface);
|
||||
void qsap_del_ctrl_iface(void);
|
||||
s16 wifi_qsap_reset_to_default(s8 *pcfgfile, s8 *pdefault);
|
||||
void check_for_configuration_files(void);
|
||||
|
|
Loading…
Reference in a new issue