Skip to content

Wapi simplify #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Dec 31, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 2 additions & 40 deletions include/wireless/wapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ enum wapi_route_target_e

enum wapi_essid_flag_e
{
WAPI_ESSID_ON,
WAPI_ESSID_OFF
WAPI_ESSID_OFF,
WAPI_ESSID_ON
};

/* Supported operation modes. */
Expand Down Expand Up @@ -653,44 +653,6 @@ int wapi_scan_stat(int sock, FAR const char *ifname);

int wapi_scan_coll(int sock, FAR const char *ifname, FAR struct wapi_list_s *aps);

/************************************************************************************
* Name: wpa_driver_wext_set_ssid
*
* Description:
* Set SSID, SIOCSIWESSID
*
* Input Parameters:
* sockfd - Opened network socket
* ifname - Interface name
* ssid - SSID
* ssid_len - Length of SSID (0..32)
*
* Returned Value:
* 0 on success, -1 on failure
*
************************************************************************************/

int wpa_driver_wext_set_ssid(int sockfd, FAR const char *ifname,
FAR const uint8_t *ssid, size_t ssid_len);

/************************************************************************************
* Name: wpa_driver_wext_set_mode
*
* Description:
* Set wireless mode (infra/adhoc), SIOCSIWMODE
*
* Input Parameters:
* sockfd - Opened network socket
* ifname - Interface name
* mode - 0 = infra/BSS (associate with an AP), 1 = adhoc/IBSS
*
* Returned Value:
* 0 on success, -1 on failure
*
************************************************************************************/

int wpa_driver_wext_set_mode(int sockfd, FAR const char *ifname, int mode);

/************************************************************************************
* Name: wpa_driver_wext_set_key_ext
*
Expand Down
97 changes: 3 additions & 94 deletions wireless/wapi/src/driver_wext.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,97 +69,6 @@
* Public Functions
************************************************************************************/

/************************************************************************************
* Name: wpa_driver_wext_set_ssid
*
* Description:
* Set SSID, SIOCSIWESSID
*
* Input Parameters:
* sockfd - Opened network socket
* ifname - Interface name
* ssid - SSID
* ssid_len - Length of SSID (0..32)
*
* Returned Value:
* 0 on success, -1 on failure
*
************************************************************************************/

int wpa_driver_wext_set_ssid(int sockfd, FAR const char *ifname,
FAR const uint8_t *ssid, size_t ssid_len)
{
struct iwreq iwr;
int ret = 0;
char buf[33];

DEBUGASSERT(ifname != NULL && ssid != NULL && ssid_len > 0);

if (ssid_len > WAPI_ESSID_MAX_SIZE)
{
return -1;
}

memset(&iwr, 0, sizeof(iwr));
strncpy(iwr.ifr_name, ifname, IFNAMSIZ);

/* flags: 1 = ESSID is active, 0 = not (promiscuous) */

iwr.u.essid.flags = (ssid_len != 0);
memset(buf, 0, sizeof(buf));
memcpy(buf, ssid, ssid_len);
iwr.u.essid.pointer = (caddr_t) buf;

iwr.u.essid.length = ssid_len;

if (ioctl(sockfd, SIOCSIWESSID, (unsigned long)&iwr) < 0)
{
nerr("ERROR: ioctl[SIOCSIWESSID]: %d", errno);
ret = -1;
}

return ret;
}

/************************************************************************************
* Name: wpa_driver_wext_set_mode
*
* Description:
* Set wireless mode (infra/adhoc), SIOCSIWMODE
*
* Input Parameters:
* sockfd - Opened network socket
* ifname - Interface name
* mode - 0 = infra/BSS (associate with an AP), 1 = adhoc/IBSS
*
* Returned Value:
* 0 on success, -1 on failure
*
************************************************************************************/

int wpa_driver_wext_set_mode(int sockfd, FAR const char *ifname, int mode)
{
struct iwreq iwr;
int ret = -1;

DEBUGASSERT(ifname != NULL);

memset(&iwr, 0, sizeof(iwr));
strncpy(iwr.ifr_name, ifname, IFNAMSIZ);
iwr.u.mode = mode;

if (ioctl(sockfd, SIOCSIWMODE, (unsigned long)&iwr) == 0)
{
ret = 0;
goto done;
}

nerr("ERROR: ioctl[SIOCSIWMODE]: %d", errno);

done:
return ret;
}

/************************************************************************************
* Name: wpa_driver_wext_set_key_ext
*
Expand Down Expand Up @@ -272,7 +181,7 @@ int wpa_driver_wext_associate(FAR struct wpa_wconfig_s *wconfig)

strncpy(req.ifr_name, wconfig->ifname, IFNAMSIZ);

ret = wpa_driver_wext_set_mode(sockfd, wconfig->ifname, wconfig->sta_mode);
ret = wapi_set_mode(sockfd, wconfig->ifname, wconfig->sta_mode);
if (ret < 0)
{
nerr("ERROR: Fail set sta mode: %d\n", ret);
Expand Down Expand Up @@ -306,8 +215,8 @@ int wpa_driver_wext_associate(FAR struct wpa_wconfig_s *wconfig)
goto close_socket;
}

ret = wpa_driver_wext_set_ssid(sockfd, wconfig->ifname, wconfig->ssid,
wconfig->ssidlen);
ret = wapi_set_essid(sockfd, wconfig->ifname,
(FAR const char *)wconfig->ssid, WAPI_ESSID_ON);
if (ret < 0)
{
nerr("ERROR: Fail set ssid: %d\n", ret);
Expand Down
84 changes: 48 additions & 36 deletions wireless/wapi/src/wapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
* Included Files
****************************************************************************/

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
Expand Down Expand Up @@ -76,8 +77,7 @@ typedef void (*cmd3_t)(int sock, FAR const char *arg1,

static int wapi_str2int(FAR const char *str);
static double wapi_str2double(FAR const char *str);
static unsigned int wapi_str2ndx(FAR const char *name, FAR const char **list,
unsigned int listlen);
static unsigned int wapi_str2ndx(FAR const char *name, FAR const char **list);

static void wapi_show_cmd(int sock, FAR const char *ifname);
static void wapi_ip_cmd(int sock, FAR const char *ifname,
Expand Down Expand Up @@ -185,12 +185,18 @@ static double wapi_str2double(FAR const char *str)
*
****************************************************************************/

static unsigned int wapi_str2ndx(FAR const char *name, FAR const char **list,
unsigned int listlen)
static unsigned int wapi_str2ndx(FAR const char *name, FAR const char **list)
{
unsigned int ndx;

for (ndx = 0; ndx < listlen; ndx++)
/* Check the first character is enough, all prefix with WAPI_* */

if (isdigit(name[0]))
{
return atoi(name);
}

for (ndx = 0; list[ndx]; ndx++)
{
if (strcmp(name, list[ndx]) == 0)
{
Expand All @@ -200,9 +206,9 @@ static unsigned int wapi_str2ndx(FAR const char *name, FAR const char **list,

WAPI_ERROR("ERROR: Invalid option string: %s\n", name);
WAPI_ERROR(" Valid options include:\n");
for (ndx = 0; ndx < listlen; ndx++)
for (ndx = 0; list[ndx]; ndx++)
{
WAPI_ERROR(" - %s\n", list[ndx]);
WAPI_ERROR(" - [%d] %s\n", ndx, list[ndx]);
}

exit(EXIT_FAILURE);
Expand Down Expand Up @@ -456,8 +462,7 @@ static void wapi_freq_cmd(int sock, FAR const char *ifname,
/* Convert input strings to values */

frequency = wapi_str2double(freqstr);
freq_flag = (enum wapi_freq_flag_e)wapi_str2ndx(flagstr, g_wapi_freq_flags,
IW_FREQ_NFLAGS);
freq_flag = (enum wapi_freq_flag_e)wapi_str2ndx(flagstr, g_wapi_freq_flags);

/* Set the frequency */

Expand Down Expand Up @@ -487,7 +492,7 @@ static void wapi_essid_cmd(int sock, FAR const char *ifname,

/* Convert input strings to values */

essid_flag = (enum wapi_essid_flag_e)wapi_str2ndx(flagstr, g_wapi_essid_flags, 2);
essid_flag = (enum wapi_essid_flag_e)wapi_str2ndx(flagstr, g_wapi_essid_flags);

/* Set the ESSID */

Expand Down Expand Up @@ -517,7 +522,7 @@ static void wapi_mode_cmd(int sock, FAR const char *ifname,

/* Convert input strings to values */

mode = (enum wapi_mode_e)wapi_str2ndx(modestr, g_wapi_modes, IW_MODE_NFLAGS);
mode = (enum wapi_mode_e)wapi_str2ndx(modestr, g_wapi_modes);

/* Set operating mode */

Expand Down Expand Up @@ -584,7 +589,7 @@ static void wapi_bitrate_cmd(int sock, FAR const char *ifname,

bitrate = wapi_str2int(ratestr);
bitrate_flag = (enum wapi_bitrate_flag_e)
wapi_str2ndx(flagstr, g_wapi_bitrate_flags, 2);
wapi_str2ndx(flagstr, g_wapi_bitrate_flags);

/* Set bitrate */

Expand Down Expand Up @@ -617,7 +622,7 @@ static void wapi_txpower_cmd(int sock, FAR const char *ifname,

txpower = wapi_str2int(pwrstr);
txpower_flag = (enum wapi_txpower_flag_e)
wapi_str2ndx(flagstr, g_wapi_txpower_flags, IW_TXPOW_NFLAGS);
wapi_str2ndx(flagstr, g_wapi_txpower_flags);

/* Set txpower */

Expand Down Expand Up @@ -650,16 +655,23 @@ static void wapi_scan_cmd(int sock, FAR const char *ifname)
/* Start scan */

ret = wapi_scan_init(sock, ifname);
WAPI_ERROR("ERROR: wapi_scan_init() failed: %d\n", ret);
if (ret < 0)
{
WAPI_ERROR("ERROR: wapi_scan_init() failed: %d\n", ret);
return;
}

/* Wait for completion */

do
{
sleep(sleepdur);
ret = wapi_scan_stat(sock, ifname);
WAPI_ERROR("ERROR: wapi_scan_stat() failed: %d, sleeptries: %d\n",
ret, sleeptries);
if (ret < 0)
{
WAPI_ERROR("ERROR: wapi_scan_stat() failed: %d, sleeptries: %d\n",
ret, sleeptries);
}
}
while (--sleeptries > 0 && ret > 0);

Expand Down Expand Up @@ -716,46 +728,46 @@ static void wapi_showusage(FAR const char *progname, int exitcode)
{
int i;

fprintf(stderr, "Usage: %s show <ifname>\n", progname);
fprintf(stderr, " %s scan <ifname>\n", progname);
fprintf(stderr, " %s ip <ifname> <IP address>\n", progname);
fprintf(stderr, " %s mask <ifname> <mask>\n", progname);
fprintf(stderr, " %s freq <ifname> <frequency> <flag>\n", progname);
fprintf(stderr, " %s essid <ifname> <essid> <flag>\n", progname);
fprintf(stderr, " %s mode <ifname> <ifname> <mode>\n", progname);
fprintf(stderr, " %s ap <ifname> <ifname> <MAC address>\n", progname);
fprintf(stderr, " %s bitrate <ifname> <bitrate> <flag>\n", progname);
fprintf(stderr, " %s txpower <ifname> <txpower> <flag>\n", progname);
fprintf(stderr, "Usage: %s show <ifname>\n", progname);
fprintf(stderr, " %s scan <ifname>\n", progname);
fprintf(stderr, " %s ip <ifname> <IP address>\n", progname);
fprintf(stderr, " %s mask <ifname> <mask>\n", progname);
fprintf(stderr, " %s freq <ifname> <frequency> <index/flag>\n", progname);
fprintf(stderr, " %s essid <ifname> <essid> <index/flag>\n", progname);
fprintf(stderr, " %s mode <ifname> <ifname> <index/mode>\n", progname);
fprintf(stderr, " %s ap <ifname> <ifname> <MAC address>\n", progname);
fprintf(stderr, " %s bitrate <ifname> <bitrate> <index/flag>\n", progname);
fprintf(stderr, " %s txpower <ifname> <txpower> <index/flag>\n", progname);
fprintf(stderr, " %s help\n", progname);

fprintf(stderr, "\nFrequency Flags:\n");
for (i = 0; i < IW_FREQ_NFLAGS; i++)
for (i = 0; g_wapi_freq_flags[i]; i++)
{
fprintf(stderr, " %s\n", g_wapi_freq_flags[i]);
fprintf(stderr, " [%d] %s\n", i, g_wapi_freq_flags[i]);
}

fprintf(stderr, "\nESSID Flags:\n");
for (i = 0; i < 2; i++)
for (i = 0; g_wapi_essid_flags[i]; i++)
{
fprintf(stderr, " %s\n", g_wapi_essid_flags[i]);
fprintf(stderr, " [%d] %s\n", i, g_wapi_essid_flags[i]);
}

fprintf(stderr, "\nOperating Modes:\n");
for (i = 0; i < IW_MODE_NFLAGS; i++)
for (i = 0; g_wapi_modes[i]; i++)
{
fprintf(stderr, " %s\n", g_wapi_modes[i]);
fprintf(stderr, " [%d] %s\n", i, g_wapi_modes[i]);
}

fprintf(stderr, "\nBitrate Flags:\n");
for (i = 0; i < 2; i++)
for (i = 0; g_wapi_bitrate_flags[i]; i++)
{
fprintf(stderr, " %s\n", g_wapi_bitrate_flags[i]);
fprintf(stderr, " [%d] %s\n", i, g_wapi_bitrate_flags[i]);
}

fprintf(stderr, "\nTX power Flags:\n");
for (i = 0; i < IW_TXPOW_NFLAGS; i++)
for (i = 0; g_wapi_txpower_flags[i]; i++)
{
fprintf(stderr, " %s\n", g_wapi_txpower_flags[i]);
fprintf(stderr, " [%d] %s\n", i, g_wapi_txpower_flags[i]);
}

exit(exitcode);
Expand Down
Loading