From fa0102a9a4a453bbaabeb95257732d82f6a26add Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Fri, 30 Jun 2017 12:56:46 +0900 Subject: [PATCH 01/16] Fix Tizen coding rule check error mesh-service-interface.c:174: ERROR: [BRC_M_SMT] else should follow close brace '}' uigned-off-by: saerome.kim --- src/mesh-service-interface.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesh-service-interface.c b/src/mesh-service-interface.c index 5c21bd8..9bdce7b 100644 --- a/src/mesh-service-interface.c +++ b/src/mesh-service-interface.c @@ -170,9 +170,9 @@ static gboolean _meshd_dbus_handle_enable(Manager *object, if (MESHD_ERROR_IN_PROGRESS == ret) { MESH_LOGE("Currently set netlink event handler !! [%d]", ret); ret = MESHD_ERROR_NONE; - } - else if (MESHD_ERROR_NONE != ret) + } else if (MESHD_ERROR_NONE != ret) { MESH_LOGE("Failed to register mesh event handler !! [%d]", ret); + } ret = mesh_interface_initialize(service->interface_info); if (MESHD_ERROR_NONE != ret) { -- 2.7.4 From 996926c051fdc301377434e121a4a17b2067ee29 Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Fri, 30 Jun 2017 12:58:56 +0900 Subject: [PATCH 02/16] Move mesh peer monitoring service from 'enable' to 'enable_mesh' Signed-off-by: saerome.kim --- src/mesh-monitor.c | 2 -- src/mesh-service-interface.c | 7 +++++++ src/mesh-service.c | 5 ----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/mesh-monitor.c b/src/mesh-monitor.c index da7a688..ac5b0de 100644 --- a/src/mesh-monitor.c +++ b/src/mesh-monitor.c @@ -74,7 +74,6 @@ static int _get_station_info(void *pdata) iter = service->station_list; while (iter) { mesh_station_info_s *item = (mesh_station_info_s*)iter->data; - MESH_LOGE("KSR1 : [%s]", item->bssid); iter = g_list_next(iter); } @@ -120,7 +119,6 @@ static int _get_station_info(void *pdata) iter = service->station_list; while (iter) { mesh_station_info_s *item2 = (mesh_station_info_s*)iter->data; - MESH_LOGE("KSR2 : [%s]", item2->bssid); iter = g_list_next(iter); } diff --git a/src/mesh-service-interface.c b/src/mesh-service-interface.c index 9bdce7b..eb771d0 100644 --- a/src/mesh-service-interface.c +++ b/src/mesh-service-interface.c @@ -27,6 +27,7 @@ #include "mesh-util.h" #include "mesh-gdbus.h" #include "mesh-service.h" +#include "mesh-monitor.h" #include "mesh-service-interface.h" #include "mesh-generated-code.h" @@ -378,6 +379,9 @@ static gboolean _meshd_dbus_handle_enable_mesh(NetMesh *object, MESH_LOGE("Failed to mesh_request_set_mesh_gate [%d]", ret); #endif + if (MESHD_ERROR_NONE == ret) + mesh_start_peer_monitor(service); + net_mesh_complete_enable_mesh(object, invocation, ret); return TRUE; @@ -404,6 +408,9 @@ static gboolean _meshd_dbus_handle_disable_mesh(NetMesh *object, if (MESHD_ERROR_NONE != ret) MESH_LOGE("Failed to disable mesh network !"); + /* Stop Mesh Node Monitoring Service */ + mesh_stop_peer_monitor(service); + /* Make response */ net_mesh_complete_disable_mesh(object, invocation, ret); diff --git a/src/mesh-service.c b/src/mesh-service.c index fc74c75..8ca577b 100644 --- a/src/mesh-service.c +++ b/src/mesh-service.c @@ -22,7 +22,6 @@ #include "mesh-log.h" #include "mesh-util.h" #include "mesh-service.h" -#include "mesh-monitor.h" mesh_service *meshd_service_new() { @@ -56,8 +55,6 @@ gboolean meshd_service_run(mesh_service *service) { meshd_check_null_ret_error("service", service, FALSE); meshd_check_null_ret_error("service->main_loop", service->main_loop, FALSE); - /* Start Mesh Node Monitoring Service */ - mesh_start_peer_monitor(service); g_main_loop_run(service->main_loop); @@ -68,8 +65,6 @@ gboolean meshd_service_exit(mesh_service *service) { meshd_check_null_ret_error("service", service, FALSE); meshd_check_null_ret_error("service->main_loop", service->main_loop, FALSE); - /* Stop Mesh Node Monitoring Service */ - mesh_stop_peer_monitor(service); g_main_loop_quit(service->main_loop); -- 2.7.4 From c57ea388451d2ae251f75a426c63e578da6cd83a Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Fri, 30 Jun 2017 13:00:16 +0900 Subject: [PATCH 03/16] Fix build error temporally Signed-off-by: saerome.kim --- src/mesh-monitor.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mesh-monitor.c b/src/mesh-monitor.c index ac5b0de..55f3b90 100644 --- a/src/mesh-monitor.c +++ b/src/mesh-monitor.c @@ -74,6 +74,7 @@ static int _get_station_info(void *pdata) iter = service->station_list; while (iter) { mesh_station_info_s *item = (mesh_station_info_s*)iter->data; + MESH_LOGD("[%s]", item->bssid); iter = g_list_next(iter); } @@ -119,6 +120,7 @@ static int _get_station_info(void *pdata) iter = service->station_list; while (iter) { mesh_station_info_s *item2 = (mesh_station_info_s*)iter->data; + MESH_LOGE("[%s]", item2->bssid); iter = g_list_next(iter); } -- 2.7.4 From 26db8839fe2dfb6bebba39106789973ba3d4798d Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Fri, 30 Jun 2017 13:07:57 +0900 Subject: [PATCH 04/16] Added initial monitoring service for external interface Signed-off-by: saerome.kim --- CMakeLists.txt | 10 + include/mesh-device-monitor.h | 42 +++++ include/{mesh-monitor.h => mesh-peer-monitor.h} | 4 +- include/mesh.h | 9 + packaging/meshd.spec | 4 + src/mesh-device-monitor.c | 241 ++++++++++++++++++++++++ src/mesh-interface.c | 27 ++- src/{mesh-monitor.c => mesh-peer-monitor.c} | 65 +++++-- src/mesh-service-interface.c | 22 +-- 9 files changed, 389 insertions(+), 35 deletions(-) create mode 100644 include/mesh-device-monitor.h rename include/{mesh-monitor.h => mesh-peer-monitor.h} (85%) create mode 100644 src/mesh-device-monitor.c rename src/{mesh-monitor.c => mesh-peer-monitor.c} (77%) diff --git a/CMakeLists.txt b/CMakeLists.txt index a5d32a9..a7d116f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,7 @@ INCLUDE(FindPkgConfig) SET(PKG_MODULES gio-2.0 gio-unix-2.0 +# gudev-1.0 dlog libnl-3.0 libnl-genl-3.0 @@ -32,6 +33,15 @@ SET(CMAKE_C_FLAGS_RELEASE "-fPIE") ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"") ADD_DEFINITIONS("-DUSE_DLOG") ADD_DEFINITIONS("-DTIZEN_DEBUG_ENABLE") +IF(USE_UDEV_MONITOR) + ADD_DEFINITIONS(-DUSE_UDEV_MONITOR) +ENDIF(USE_UDEV_MONITOR) +IF(USE_NETLINK_MONITOR) + ADD_DEFINITIONS(-DUSE_NETLINK_MONITOR) +ENDIF(USE_NETLINK_MONITOR) +IF(USE_IOCTL_MONITOR) + ADD_DEFINITIONS(-DUSE_IOCTL_MONITOR) +ENDIF(USE_IOCTL_MONITOR) IF(TIZEN_FEATURE_MESH_ON_DEMAND) ADD_DEFINITIONS(-DTIZEN_FEATURE_MESH_ON_DEMAND) ENDIF(TIZEN_FEATURE_MESH_ON_DEMAND) diff --git a/include/mesh-device-monitor.h b/include/mesh-device-monitor.h new file mode 100644 index 0000000..e7f2048 --- /dev/null +++ b/include/mesh-device-monitor.h @@ -0,0 +1,42 @@ +/* + * Network Configuration Module + * + * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. + * + * 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. + * + */ +#ifndef __MESH_DEVICE_MONITOR_H__ +#define __MESH_DEVICE_MONITOR_H__ + +#ifdef USE_IOCTL_MONITOR +#define ETH_REG_BMSR 0x01 +#define BMSR_LINK_VALID 0x0004 + +#define SIOCGMIIPHY 0x8947 /* Get address of MII PHY in use. */ +#define SIOCGMIIREG 0x8948 /* Read MII PHY register */ + +struct _stMData { + unsigned short phy_id; + unsigned short reg_num; + unsigned short val_in; + unsigned short val_out; +}; +int mesh_get_ethernet_cable_state(int *status); +#endif /* USE_IOCTL_MONITOR */ + +#ifdef USE_NETLINK_MONITOR +int mesh_device_monitor(void *pdata); +#endif /* USE_NETLINK_MONITOR */ + +#endif /* __MESH_DEVICE_MONITOR_H__ */ diff --git a/include/mesh-monitor.h b/include/mesh-peer-monitor.h similarity index 85% rename from include/mesh-monitor.h rename to include/mesh-peer-monitor.h index d9d6dc3..441ee3f 100644 --- a/include/mesh-monitor.h +++ b/include/mesh-peer-monitor.h @@ -19,8 +19,8 @@ #ifndef __MESH_MONITOR_H__ #define __MESH_MONITOR_H__ -int mesh_start_peer_monitor(void *pdata); +int mesh_start_monitor_service(void *pdata); -int mesh_stop_peer_monitor(void *pdata); +int mesh_stop_monitor_service(void *pdata); #endif /* __MESH_MONITOR_H__ */ \ No newline at end of file diff --git a/include/mesh.h b/include/mesh.h index 89416f0..8949e9d 100644 --- a/include/mesh.h +++ b/include/mesh.h @@ -21,6 +21,9 @@ #include #include +#ifdef USE_UDEV_MONITOR +#include +#endif /* USE_UDEV_MONITOR */ #include /**< Internal error code with mesh daemon. It should be matched with API side */ @@ -56,9 +59,13 @@ typedef struct { gchar *mesh_interface; /**< The name of mesh network interface */ gchar *softap_interface; /**< The name of SoftAP network interface */ gchar *external_interface; /**< The name of external network interface */ + gboolean can_be_gate; /**< Whether this device can be Mesh Gate */ gchar *mesh_id; /**< Mesh ID */ gint mesh_channel; /**< The channel number of mesh network */ +#ifdef USE_UDEV_MONITOR + GUdevClient *udev_client; /**< The udev event client */ +#endif /* USE_UDEV_MONITOR */ } mesh_interface_s; /**< Saved mesh network list structure */ @@ -161,6 +168,8 @@ typedef struct _mesh_service { GList *station_list; /**< Mesh station list */ GList *mpath_list; /**< MPath list */ + int netlink_fd; /**< Netlink event socket file descriptor */ + int monitor_timer; /**< Timer ID for peer monitoring service */ } mesh_service; #endif /* __MESH_H__ */ diff --git a/packaging/meshd.spec b/packaging/meshd.spec index 801908b..74f6dad 100644 --- a/packaging/meshd.spec +++ b/packaging/meshd.spec @@ -1,4 +1,7 @@ %define CHECK_MESH_PRIVILEGE False +%define UDEV_MONITOR False +%define NETLINK_MONITOR False +%define IOCTL_MONITOR False Name: meshd Summary: mesh network daemon @@ -13,6 +16,7 @@ Source3: meshd.service BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(gio-unix-2.0) +#BuildRequires: pkgconfig(gudev-1.0) BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(libnl-3.0) BuildRequires: pkgconfig(dbus-1) diff --git a/src/mesh-device-monitor.c b/src/mesh-device-monitor.c new file mode 100644 index 0000000..aab4b7f --- /dev/null +++ b/src/mesh-device-monitor.c @@ -0,0 +1,241 @@ +/* + * Network Configuration Module + * + * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. + * + * 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. + * + */ +#include +#include +#include + +#include +#include +#ifdef USE_IOCTL_MONITOR +#include +#endif +#ifdef USE_NETLINK_MONITOR +#include +#include +#include +#include +#include +#include +#endif /* USE_NETLINK_MONITOR */ + +#include "mesh.h" +#include "mesh-log.h" +#include "mesh-util.h" +#include "mesh-device-monitor.h" + +#ifdef USE_NETLINK_MONITOR +static void mesh_read_netlink_msg(void *pdata) +{ + int len; + int buf[1024]; + + struct sockaddr_nl sa; + struct nlmsghdr *nh; + struct ifinfomsg *ifimsg; + struct rtattr *attribute; + struct iovec iov = { buf, sizeof(buf) }; + struct msghdr msg = { (void *)&sa, sizeof(sa), &iov, 1, NULL, 0, 0 }; + + mesh_interface_s *info = NULL; + mesh_service *service = (mesh_service *)pdata; + meshd_check_null_ret("service", service); + info = service->interface_info; + meshd_check_null_ret("info", info); + + len = recvmsg(service->netlink_fd, &msg, 0); + if(-1 == len) { + MESH_LOGE("recvmsg error"); + return; + } + + for (nh = (struct nlmsghdr *)buf; NLMSG_OK(nh, len); nh = NLMSG_NEXT(nh, len)) { + if (nh->nlmsg_type == NLMSG_ERROR) { + MESH_LOGE("Read Netlink Message Error!!"); + continue; + } + if (nh->nlmsg_type == NLMSG_DONE) { + MESH_LOGD("Read Netlink Message Done"); + return; + } + + ifimsg = NLMSG_DATA(nh); + MESH_LOGD("Message : [%u %u %u 0x%X 0x%X]", + ifimsg->ifi_family, + ifimsg->ifi_type, + ifimsg->ifi_index, + ifimsg->ifi_flags, + ifimsg->ifi_change); + /* Monitor external interface state change */ + if (ARPHRD_ETHER != ifimsg->ifi_type) + return; + + attribute = IFLA_RTA(ifimsg); + if (IFLA_IFNAME == attribute->rta_type) { + if (!g_strcmp0(info->external_interface, RTA_DATA(attribute))) { + MESH_LOGD("Event from external interface : [%s]", RTA_DATA(attribute)); + if (RTM_NEWLINK == nh->nlmsg_type && false == info->can_be_gate && + IFF_LOWER_UP == (ifimsg->ifi_flags & IFF_LOWER_UP)) { + MESH_LOGD("RTM_NEWLINK : [%s]", RTA_DATA(attribute)); + info->can_be_gate = true; + } else if (RTM_DELLINK == nh->nlmsg_type) { + MESH_LOGD("RTM_DELLINK : [%s]", RTA_DATA(attribute)); + info->can_be_gate = false; + } + } + } + } +} + +static gboolean _on_socket_msg_received(GIOChannel *source, + GIOCondition condition, gpointer data) +{ + NOTUSED(source); + NOTUSED(condition); + + mesh_read_netlink_msg(data); + + /* Do not remove I/O source */ + return TRUE; +} + +int mesh_device_monitor(void *pdata) +{ + struct sockaddr_nl sa; + guint event_source; + GIOChannel *recv_channel = NULL; + + mesh_service *service = (mesh_service *)pdata; + meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); + + memset(&sa, 0, sizeof(sa)); + sa.nl_family = AF_NETLINK; + sa.nl_groups = RTMGRP_LINK; + + service->netlink_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); + if(-1 == service->netlink_fd) { + MESH_LOGE("Netlink socket creation error"); + return MESHD_ERROR_OPERATION_FAILED; + } + + if(bind(service->netlink_fd, (struct sockaddr *) &sa, sizeof(sa)) == -1) { + MESH_LOGE("bind error"); + return MESHD_ERROR_OPERATION_FAILED; + } + + recv_channel = g_io_channel_unix_new(service->netlink_fd); + event_source = g_io_add_watch(recv_channel, (G_IO_IN | G_IO_ERR), + _on_socket_msg_received, (gpointer)service); + g_io_channel_unref(recv_channel); + + return 0; +} +#endif /* USE_NETLINK_MONITOR */ + +#ifdef USE_IOCTL_MONITOR +/* Check send notification status */ +static gboolean g_chk_eth_send_notification = FALSE; +#define MAX_SIZE_ERROR_BUFFER 128 + +static int _ethernet_cable_plugin_status_check() +{ + struct ifreq ifr; + int soketfd = -1; + int error = 0; + int ret = 0; + struct _stMData *mdata; + struct timeval tv; + char error_buf[MAX_SIZE_ERROR_BUFFER] = {}; + + soketfd = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0); + if (soketfd < 0) { + MESH_LOGE("Failed to create socket"); + return -errno; + } + + /* Set Timeout for IOCTL Call */ + tv.tv_sec = 1; + tv.tv_usec = 0; + + if (setsockopt(soketfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, + sizeof(struct timeval)) < 0) { + + strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER); + MESH_LOGE("Failed to set socket option : [%d] [%s]", -errno, error_buf); + goto done; + } + + memset(&ifr, 0, sizeof(ifr)); + g_strlcpy(ifr.ifr_name, "eth0", IFNAMSIZ); + if (ioctl(soketfd, SIOCGMIIPHY, &ifr) < 0){ + error = -errno; + strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER); + MESH_LOGE("SIOCGMIIPHY on eth0 failed : [%d] [%s]", errno, error_buf); + goto done; + } + + mdata = (struct _stMData *)&ifr.ifr_data; + mdata->reg_num = ETH_REG_BMSR; + + if (ioctl(soketfd, SIOCGMIIREG, &ifr) < 0){ + error = -errno; + strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER); + MESH_LOGE("SIOCGMIIREG on %s failed , [%d] [%s] ", ifr.ifr_name,errno,error_buf); + goto done; + } + ret = mdata->val_out; + ret = ret & BMSR_LINK_VALID; + + MESH_LOGD("value of ret : %d",ret); + + if (ret == 4) { + if (!g_chk_eth_send_notification) { + MESH_LOGE("Return Value : [%d]", ret); + } + g_chk_eth_send_notification = TRUE; + } else if (ret == 0) { + if (g_chk_eth_send_notification) { + MESH_LOGE("Return Value : [%d]", ret); + } + g_chk_eth_send_notification = FALSE; + } + + + error = 0; +done: + close(soketfd); + return error; +} + +int mesh_get_ethernet_cable_state(int *status) +{ + int error = 0; + meshd_check_null_ret_error("status", status, MESHD_ERROR_INVALID_PARAMETER); + + if ((error = _ethernet_cable_plugin_status_check()) != 0) { + MESH_LOGE("Error !!! Failed to check ethernet cable status [%d]\n", error); + return error; + } + + if (g_chk_eth_send_notification == TRUE) + *status = 1; /* Ethernet cable Attached */ + else + *status = 0; /* Ethernet cable Deattached */ + return MESHD_ERROR_NONE; +} +#endif diff --git a/src/mesh-interface.c b/src/mesh-interface.c index 15ee3a3..cef4287 100644 --- a/src/mesh-interface.c +++ b/src/mesh-interface.c @@ -18,7 +18,9 @@ */ #include #include - +#ifdef USE_UDEV_MONITOR +#include +#endif /* USE_UDEV_MONITOR */ #include #include #include @@ -245,6 +247,25 @@ char* mesh_interface_get_address(const char* if_name) return result; } +#ifdef USE_UDEV_MONITOR +static void __on_uevent(GUdevClient *client, gchar *action, GUdevDevice *device, gpointer user_data) +{ + NOTUSED(client); + NOTUSED(device); + NOTUSED(user_data); + + MESH_LOGD("KSR : action:[%s]", action); +} + +static void _interface_status_monitor_init(mesh_interface_s *info) +{ + const gchar *subsystem[] = {"net", NULL}; + + info->udev_client = g_udev_client_new(subsystem); + g_signal_connect(info->udev_client, "uevent", G_CALLBACK(__on_uevent), info); +} +#endif /* USE_UDEV_MONITOR */ + int mesh_interface_initialize(mesh_interface_s *info) { if (NULL == info) { @@ -280,6 +301,9 @@ int mesh_interface_initialize(mesh_interface_s *info) MESH_LOGD(" SoftAP : [%s]", info->softap_interface); MESH_LOGD(" External: [%s]", info->external_interface); +#ifdef USE_UDEV_MONITOR + _interface_status_monitor_init(info); +#endif /* USE_UDEV_MONITOR */ return MESHD_ERROR_NONE; } @@ -393,3 +417,4 @@ int mesh_interface_check_bridge_interface_exists(const char* bridge, const char* return MESHD_ERROR_NONE; } + diff --git a/src/mesh-monitor.c b/src/mesh-peer-monitor.c similarity index 77% rename from src/mesh-monitor.c rename to src/mesh-peer-monitor.c index 55f3b90..535ed40 100644 --- a/src/mesh-monitor.c +++ b/src/mesh-peer-monitor.c @@ -23,13 +23,13 @@ #include "mesh-util.h" #include "mesh-request.h" #include "mesh-netlink.h" -#include "mesh-monitor.h" +#include "mesh-interface.h" +#include "mesh-peer-monitor.h" +#include "mesh-device-monitor.h" #define MESH_MONITORING_TIME 5 #define MESH_MAXIMUM_BEACON_LOST_COUNT 10 -static guint g_timer = 0; - static void _on_station_list_destroy(gpointer data) { mesh_station_info_s *info = (mesh_station_info_s*)data; @@ -191,42 +191,73 @@ static gboolean _get_mpath_info(void *pdata) #endif static gboolean _on_mesh_monitor_cb(gpointer pdata) { + int ret; +#ifdef USE_IOCTL_MONITOR + int state; +#else + bool state; +#endif /* USE_IOCTL_MONITOR */ mesh_service *service = (mesh_service *)pdata; - - MESH_LOGD("Evaluting..."); + if (service) { + mesh_interface_s *info = service->interface_info; + if (info) { + /* Exceptionally, checking external interface processes here. */ +#ifdef USE_IOCTL_MONITOR + ret = mesh_get_ethernet_cable_state(&state); +#else + ret = mesh_interface_check_external_exists(info->external_interface, &state); +#endif /* USE_IOCTL_MONITOR */ + MESH_LOGE("Status : %d %d %d", ret, info->can_be_gate, state); + if (MESHD_ERROR_NONE == ret) { + if (info->can_be_gate != state) { + /* Detect external network state (i.e. Ethernet) + and decide to make gate enabled */ + if (state) + mesh_request_set_mesh_gate(info->bridge_interface, + info->mesh_interface, info->external_interface); + else + mesh_request_unset_mesh_gate(info->bridge_interface, + info->mesh_interface, info->external_interface); + + MESH_LOGD("External interface state has been changed : [%d]", state); + info->can_be_gate = state; + } + } #if 0 - _get_mpath_info(service); + _get_mpath_info(service); #endif - _get_station_info(service); + _get_station_info(service); + } + } return G_SOURCE_CONTINUE; } -int mesh_start_peer_monitor(void *pdata) +int mesh_start_monitor_service(void *pdata) { int ret = MESHD_ERROR_NONE; mesh_service *service = (mesh_service *)pdata; + meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - if (g_timer) - mesh_stop_peer_monitor(pdata); + if (service->monitor_timer) + mesh_stop_monitor_service(pdata); - g_timer = g_timeout_add_seconds(MESH_MONITORING_TIME, _on_mesh_monitor_cb, service); + service->monitor_timer = g_timeout_add_seconds(MESH_MONITORING_TIME, _on_mesh_monitor_cb, service); MESH_LOGD("Peer Monitoring Service Started"); return ret; } -int mesh_stop_peer_monitor(void *pdata) +int mesh_stop_monitor_service(void *pdata) { int ret = MESHD_ERROR_NONE; mesh_service *service = (mesh_service *)pdata; + meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - NOTUSED(service); - - if (g_timer) { - g_source_remove(g_timer); - g_timer = 0; + if (service->monitor_timer) { + g_source_remove(service->monitor_timer); + service->monitor_timer = 0; } MESH_LOGD("Peer Monitoring Service Stopped"); diff --git a/src/mesh-service-interface.c b/src/mesh-service-interface.c index eb771d0..5e904c1 100644 --- a/src/mesh-service-interface.c +++ b/src/mesh-service-interface.c @@ -27,7 +27,8 @@ #include "mesh-util.h" #include "mesh-gdbus.h" #include "mesh-service.h" -#include "mesh-monitor.h" +#include "mesh-peer-monitor.h" +#include "mesh-device-monitor.h" #include "mesh-service-interface.h" #include "mesh-generated-code.h" @@ -370,18 +371,10 @@ static gboolean _meshd_dbus_handle_enable_mesh(NetMesh *object, if (MESHD_ERROR_NONE != ret) MESH_LOGE("Failed to mesh_request_enable_network [%d]", ret); -#if 0 - /* Detect external network state (i.e. Ethernet) - and decide to make gate enabled */ - ret = mesh_request_set_mesh_gate(info->bridge_interface, - info->mesh_interface, info->external_interface); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_set_mesh_gate [%d]", ret); -#endif - - if (MESHD_ERROR_NONE == ret) - mesh_start_peer_monitor(service); - + mesh_start_monitor_service(service); +#ifdef USE_NETLINK_MONITOR + mesh_device_monitor(service); +#endif /* USE_NETLINK_MONITOR */ net_mesh_complete_enable_mesh(object, invocation, ret); return TRUE; @@ -409,8 +402,7 @@ static gboolean _meshd_dbus_handle_disable_mesh(NetMesh *object, MESH_LOGE("Failed to disable mesh network !"); /* Stop Mesh Node Monitoring Service */ - mesh_stop_peer_monitor(service); - + mesh_stop_monitor_service(service); /* Make response */ net_mesh_complete_disable_mesh(object, invocation, ret); -- 2.7.4 From c07fbf3ac85bd92e7f8150b9b447d655c1de70bc Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Mon, 3 Jul 2017 13:38:14 +0900 Subject: [PATCH 05/16] Implement sending 'enable ethernet' to the ConnMan Fix sending 'enable ethernet' to the ConnMan Signed-off-by: saerome.kim Signed-off-by: Saurav Babu --- include/mesh-gdbus.h | 1 + src/mesh-gdbus.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++- src/mesh-peer-monitor.c | 6 +++++ 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/include/mesh-gdbus.h b/include/mesh-gdbus.h index eed8fe9..10a7309 100644 --- a/include/mesh-gdbus.h +++ b/include/mesh-gdbus.h @@ -56,6 +56,7 @@ int mesh_gdbus_set_passphrase(mesh_service *service, mesh_scan_result_s *info, int mesh_gdbus_connect_network(mesh_service *service, mesh_scan_result_s *info); int mesh_gdbus_disconnect_network(mesh_service *service, mesh_scan_result_s *info); int mesh_gdbus_remove_network(mesh_service *service, mesh_scan_result_s *info); +int mesh_gdbus_enable_ethernet_interface(mesh_service *service, bool state); #ifdef __cplusplus } diff --git a/src/mesh-gdbus.c b/src/mesh-gdbus.c index 82b4af8..ecf4163 100644 --- a/src/mesh-gdbus.c +++ b/src/mesh-gdbus.c @@ -24,6 +24,7 @@ static GDBusProxy *_gproxy_connman = NULL; static GDBusProxy *_gproxy_connman_mesh = NULL; static GDBusProxy *_gproxy_connman_technology = NULL; +static GDBusProxy *_gproxy_connman_ethernet = NULL; static int _meshd_close_gdbus_call(mesh_service *service); static int _mesh_gdbus_get_mesh_network_property(mesh_service *service, @@ -107,6 +108,24 @@ static GDBusProxy *_proxy_get_connman_mesh(mesh_service *service) return proxy; } +static GDBusProxy *_proxy_get_connman_ethernet(mesh_service *service) +{ + GDBusProxy *proxy = NULL; + meshd_check_null_ret_error("service", service, NULL); + + if (NULL == _gproxy_connman_ethernet) { + proxy = g_dbus_proxy_new_sync(service->connection, + G_DBUS_PROXY_FLAGS_NONE, NULL, + CONNMAN_SERVER_NAME, /* Name */ + "/net/connman/technology/ethernet", /* Object Path */ + CONNMAN_INTERFACE_TECH, /* interface Name */ + NULL, NULL); + } else + proxy = _gproxy_connman_ethernet; + + return proxy; +} + static GDBusProxy *_proxy_get_connman_technology(mesh_service *service) { GDBusProxy *proxy = NULL; @@ -338,6 +357,12 @@ int meshd_dbus_start(mesh_service *service) g_dbus_proxy_set_default_timeout( G_DBUS_PROXY(_gproxy_connman_technology), MESH_DBUS_PROXY_TIMEOUT); + _gproxy_connman_ethernet = _proxy_get_connman_ethernet(service); + meshd_check_null_ret_error("_gproxy_connman_ethernet", _gproxy_connman_ethernet, + MESHD_ERROR_IO_ERROR); + g_dbus_proxy_set_default_timeout( + G_DBUS_PROXY(_gproxy_connman_ethernet), MESH_DBUS_PROXY_TIMEOUT); + /* Subscribe events */ _meshd_subscribe_event(service); @@ -542,7 +567,7 @@ int mesh_gdbus_mesh_cancel_scan(mesh_service *service) /* Scan is not in progress */ if (g_strrstr(error->message, "Already exists")) ret = MESHD_ERROR_NONE; - + g_error_free(error); } @@ -1161,3 +1186,40 @@ int mesh_gdbus_remove_network(mesh_service *service, mesh_scan_result_s *info) return MESHD_ERROR_NONE; } + + +int mesh_gdbus_enable_ethernet_interface(mesh_service *service, bool state) +{ + int ret = MESHD_ERROR_NONE; + GVariant *variant = NULL; + GError *error = NULL; + mesh_interface_s *info = NULL; + + meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); + meshd_check_null_ret_error("connection", service->connection, + MESHD_ERROR_INVALID_PARAMETER); + meshd_check_null_ret_error("_gproxy_connman_technology", + _gproxy_connman_technology, MESHD_ERROR_IO_ERROR); + + info = service->interface_info; + meshd_check_null_ret_error("info", info, MESHD_ERROR_INVALID_PARAMETER); + + variant = g_dbus_proxy_call_sync(_gproxy_connman_ethernet, "SetProperty", + g_variant_new("(sv)", "Powered", g_variant_new_boolean(state)), + G_DBUS_CALL_FLAGS_NONE, + -1, NULL, &error); + if (variant) { + MESH_LOGD("Successfully requested. [Powered]"); + } else if (error) { + ret = MESHD_ERROR_IO_ERROR; + MESH_LOGE("Failed DBus call [%s]", error->message); + + /* Interface not exists (Not created yet) */ + if (g_strrstr(error->message, "No such device")) + ret = MESHD_ERROR_NONE; + g_error_free(error); + } + + return ret; +} + diff --git a/src/mesh-peer-monitor.c b/src/mesh-peer-monitor.c index 535ed40..079087e 100644 --- a/src/mesh-peer-monitor.c +++ b/src/mesh-peer-monitor.c @@ -21,6 +21,7 @@ #include "mesh.h" #include "mesh-log.h" #include "mesh-util.h" +#include "mesh-gdbus.h" #include "mesh-request.h" #include "mesh-netlink.h" #include "mesh-interface.h" @@ -210,6 +211,7 @@ static gboolean _on_mesh_monitor_cb(gpointer pdata) MESH_LOGE("Status : %d %d %d", ret, info->can_be_gate, state); if (MESHD_ERROR_NONE == ret) { if (info->can_be_gate != state) { + mesh_gdbus_enable_ethernet_interface(service, state); /* Detect external network state (i.e. Ethernet) and decide to make gate enabled */ if (state) @@ -222,7 +224,11 @@ static gboolean _on_mesh_monitor_cb(gpointer pdata) MESH_LOGD("External interface state has been changed : [%d]", state); info->can_be_gate = state; } + } else { + /* In error case, we call enable etheret again for OdroidU3 */ + mesh_gdbus_enable_ethernet_interface(service, true); } + #if 0 _get_mpath_info(service); #endif -- 2.7.4 From 9b5ffe441157e9bc1b4e9fc7537e5021e8e7574a Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Mon, 3 Jul 2017 13:58:56 +0900 Subject: [PATCH 06/16] Modified sometings related to 'mesh_set_gate' - Changed 'mesh_set_gate / mesh_unset_gate API - Added the 'SetMeshGate' GDbus command Signed-off-by: saerome.kim --- include/mesh-gdbus.h | 1 + include/mesh.h | 3 +++ introspection/mesh.xml | 5 +++-- src/mesh-gdbus.c | 42 ++++++++++++++++++++++++++++++++++++++++++ src/mesh-peer-monitor.c | 6 +++--- src/mesh-service-interface.c | 30 +++++++++++++++++++++++++----- 6 files changed, 77 insertions(+), 10 deletions(-) diff --git a/include/mesh-gdbus.h b/include/mesh-gdbus.h index 10a7309..edc4d22 100644 --- a/include/mesh-gdbus.h +++ b/include/mesh-gdbus.h @@ -57,6 +57,7 @@ int mesh_gdbus_connect_network(mesh_service *service, mesh_scan_result_s *info); int mesh_gdbus_disconnect_network(mesh_service *service, mesh_scan_result_s *info); int mesh_gdbus_remove_network(mesh_service *service, mesh_scan_result_s *info); int mesh_gdbus_enable_ethernet_interface(mesh_service *service, bool state); +int mesh_gdbus_set_mesh_gate(mesh_service *service); #ifdef __cplusplus } diff --git a/include/mesh.h b/include/mesh.h index 8949e9d..5fc6cc9 100644 --- a/include/mesh.h +++ b/include/mesh.h @@ -66,6 +66,9 @@ typedef struct { #ifdef USE_UDEV_MONITOR GUdevClient *udev_client; /**< The udev event client */ #endif /* USE_UDEV_MONITOR */ + bool gate_announce; /**< Gate Announce Dnable/Disable */ + int hwmp_root_mode; /**< HWMP Root Mode (0, 2,3 or 4) */ + int stp; /**< Spanning Tree Protocol Enable/Disablel */ } mesh_interface_s; /**< Saved mesh network list structure */ diff --git a/introspection/mesh.xml b/introspection/mesh.xml index 519d46f..3cdb056 100644 --- a/introspection/mesh.xml +++ b/introspection/mesh.xml @@ -45,8 +45,9 @@ - - + + + diff --git a/src/mesh-gdbus.c b/src/mesh-gdbus.c index ecf4163..1ed034a 100644 --- a/src/mesh-gdbus.c +++ b/src/mesh-gdbus.c @@ -1223,3 +1223,45 @@ int mesh_gdbus_enable_ethernet_interface(mesh_service *service, bool state) return ret; } +int mesh_gdbus_set_mesh_gate(mesh_service *service) +{ + int ret = MESHD_ERROR_NONE; + GVariant *variant = NULL; + GError *error = NULL; + GVariant *var_dict = NULL; + GVariantDict dict; + mesh_interface_s *info = NULL; + + meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); + meshd_check_null_ret_error("connection", service->connection, + MESHD_ERROR_INVALID_PARAMETER); + meshd_check_null_ret_error("_gproxy_connman_technology", + _gproxy_connman_technology, MESHD_ERROR_IO_ERROR); + + info = service->interface_info; + + g_variant_dict_init(&dict, NULL); + g_variant_dict_insert(&dict, "GateAnnounce", "b", info->gate_announce); + g_variant_dict_insert(&dict, "HWMPRootMode", "q", info->hwmp_root_mode); + g_variant_dict_insert(&dict, "STP", "q", info->stp); + var_dict = g_variant_dict_end(&dict); + + variant = g_dbus_proxy_call_sync(_gproxy_connman_technology, "MeshCommands", + g_variant_new("(sv)", "SetMeshGate", var_dict), + G_DBUS_CALL_FLAGS_NONE, + -1, NULL, &error); + if (variant) { + MESH_LOGD("Successfully requested. [SetMeshGate]"); + } else if (error) { + ret = MESHD_ERROR_IO_ERROR; + MESH_LOGE("Failed DBus call [%s]", error->message); + + /* Interface not exists */ + if (g_strrstr(error->message, "No such device")) + ret = MESHD_ERROR_INVALID_PARAMETER; + g_error_free(error); + } + + return ret; +} + diff --git a/src/mesh-peer-monitor.c b/src/mesh-peer-monitor.c index 079087e..8bfc044 100644 --- a/src/mesh-peer-monitor.c +++ b/src/mesh-peer-monitor.c @@ -208,10 +208,11 @@ static gboolean _on_mesh_monitor_cb(gpointer pdata) #else ret = mesh_interface_check_external_exists(info->external_interface, &state); #endif /* USE_IOCTL_MONITOR */ - MESH_LOGE("Status : %d %d %d", ret, info->can_be_gate, state); + MESH_LOGD("Status : %d %d %d", ret, info->can_be_gate, state); if (MESHD_ERROR_NONE == ret) { if (info->can_be_gate != state) { mesh_gdbus_enable_ethernet_interface(service, state); +#if 0 /* Detect external network state (i.e. Ethernet) and decide to make gate enabled */ if (state) @@ -220,7 +221,7 @@ static gboolean _on_mesh_monitor_cb(gpointer pdata) else mesh_request_unset_mesh_gate(info->bridge_interface, info->mesh_interface, info->external_interface); - +#endif MESH_LOGD("External interface state has been changed : [%d]", state); info->can_be_gate = state; } @@ -228,7 +229,6 @@ static gboolean _on_mesh_monitor_cb(gpointer pdata) /* In error case, we call enable etheret again for OdroidU3 */ mesh_gdbus_enable_ethernet_interface(service, true); } - #if 0 _get_mpath_info(service); #endif diff --git a/src/mesh-service-interface.c b/src/mesh-service-interface.c index 5e904c1..753a5eb 100644 --- a/src/mesh-service-interface.c +++ b/src/mesh-service-interface.c @@ -495,21 +495,31 @@ static gboolean _meshd_dbus_handle_get_connected_peers(NetMesh *object, } static gboolean _meshd_dbus_handle_set_gate(NetMesh *object, - GDBusMethodInvocation *invocation, gboolean stp, gboolean gate_announce, - gpointer user_data) + GDBusMethodInvocation *invocation, gint16 gate_announce, guint hwmp_root_mode, + gboolean stp, gpointer user_data) { int ret = MESHD_ERROR_NONE; mesh_service *service = (mesh_service *)user_data; mesh_interface_s *info = service->interface_info; - MESH_LOGD("STP = %d", stp); MESH_LOGD("gate_announce = %d", gate_announce); + MESH_LOGD("HWMP_Root_Mode = %d", hwmp_root_mode); + MESH_LOGD("STP = %d", stp); - /* Set STP and gate_announce */ + info->gate_announce = gate_announce; + info->hwmp_root_mode = hwmp_root_mode; + info->stp = stp; + + /* Set STP and gate_announce right now */ ret = mesh_request_set_mesh_gate(info->bridge_interface, info->mesh_interface, info->external_interface); if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_set_mesh_gate [%d]", ret); + MESH_LOGE("Failed to mesh_gdbus_set_mesh_gate [%d]", ret); + + /* Set STP and gate_announce for connmand */ + ret = mesh_gdbus_set_mesh_gate(service); + if (MESHD_ERROR_NONE != ret) + MESH_LOGE("Failed to mesh_gdbus_set_mesh_gate [%d]", ret); net_mesh_complete_set_gate(object, invocation, ret); @@ -524,11 +534,21 @@ static gboolean _meshd_dbus_handle_unset_gate(NetMesh *object, mesh_service *service = (mesh_service *)user_data; mesh_interface_s *info = service->interface_info; + info->gate_announce = 0; + info->hwmp_root_mode = 0; + info->stp = 0; + + /* Unset STP and Gate Annouce right now */ ret = mesh_request_unset_mesh_gate(info->bridge_interface, info->mesh_interface, info->external_interface); if (MESHD_ERROR_NONE != ret) MESH_LOGE("Failed to mesh_request_unset_mesh_gate [%d]", ret); + /* Set STP and gate_announce for connmand */ + ret = mesh_gdbus_set_mesh_gate(service); + if (MESHD_ERROR_NONE != ret) + MESH_LOGE("Failed to mesh_gdbus_set_mesh_gate [%d]", ret); + net_mesh_complete_unset_gate(object, invocation, ret); return TRUE; -- 2.7.4 From f41e4db45822c84ae4836cacc3711bfe2f9081ed Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Mon, 3 Jul 2017 14:37:40 +0900 Subject: [PATCH 07/16] Remove unused codes releated to below: - monitoring /sys/class/net/eth0 using udev event - monitoring /sys/class/net/eth0 using netlink event Signed-off-by: saerome.kim --- CMakeLists.txt | 10 -- include/mesh-device-monitor.h | 42 -------- include/mesh.h | 7 +- introspection/mesh.xml | 6 +- packaging/meshd.spec | 4 - src/mesh-device-monitor.c | 241 ------------------------------------------ src/mesh-interface.c | 25 ----- src/mesh-peer-monitor.c | 9 -- src/mesh-service-interface.c | 5 +- 9 files changed, 5 insertions(+), 344 deletions(-) delete mode 100644 include/mesh-device-monitor.h mode change 100644 => 100755 introspection/mesh.xml delete mode 100644 src/mesh-device-monitor.c diff --git a/CMakeLists.txt b/CMakeLists.txt index a7d116f..a5d32a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,6 @@ INCLUDE(FindPkgConfig) SET(PKG_MODULES gio-2.0 gio-unix-2.0 -# gudev-1.0 dlog libnl-3.0 libnl-genl-3.0 @@ -33,15 +32,6 @@ SET(CMAKE_C_FLAGS_RELEASE "-fPIE") ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"") ADD_DEFINITIONS("-DUSE_DLOG") ADD_DEFINITIONS("-DTIZEN_DEBUG_ENABLE") -IF(USE_UDEV_MONITOR) - ADD_DEFINITIONS(-DUSE_UDEV_MONITOR) -ENDIF(USE_UDEV_MONITOR) -IF(USE_NETLINK_MONITOR) - ADD_DEFINITIONS(-DUSE_NETLINK_MONITOR) -ENDIF(USE_NETLINK_MONITOR) -IF(USE_IOCTL_MONITOR) - ADD_DEFINITIONS(-DUSE_IOCTL_MONITOR) -ENDIF(USE_IOCTL_MONITOR) IF(TIZEN_FEATURE_MESH_ON_DEMAND) ADD_DEFINITIONS(-DTIZEN_FEATURE_MESH_ON_DEMAND) ENDIF(TIZEN_FEATURE_MESH_ON_DEMAND) diff --git a/include/mesh-device-monitor.h b/include/mesh-device-monitor.h deleted file mode 100644 index e7f2048..0000000 --- a/include/mesh-device-monitor.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Network Configuration Module - * - * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. - * - * 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. - * - */ -#ifndef __MESH_DEVICE_MONITOR_H__ -#define __MESH_DEVICE_MONITOR_H__ - -#ifdef USE_IOCTL_MONITOR -#define ETH_REG_BMSR 0x01 -#define BMSR_LINK_VALID 0x0004 - -#define SIOCGMIIPHY 0x8947 /* Get address of MII PHY in use. */ -#define SIOCGMIIREG 0x8948 /* Read MII PHY register */ - -struct _stMData { - unsigned short phy_id; - unsigned short reg_num; - unsigned short val_in; - unsigned short val_out; -}; -int mesh_get_ethernet_cable_state(int *status); -#endif /* USE_IOCTL_MONITOR */ - -#ifdef USE_NETLINK_MONITOR -int mesh_device_monitor(void *pdata); -#endif /* USE_NETLINK_MONITOR */ - -#endif /* __MESH_DEVICE_MONITOR_H__ */ diff --git a/include/mesh.h b/include/mesh.h index 5fc6cc9..2eef8e0 100644 --- a/include/mesh.h +++ b/include/mesh.h @@ -21,9 +21,6 @@ #include #include -#ifdef USE_UDEV_MONITOR -#include -#endif /* USE_UDEV_MONITOR */ #include /**< Internal error code with mesh daemon. It should be matched with API side */ @@ -63,9 +60,7 @@ typedef struct { gchar *mesh_id; /**< Mesh ID */ gint mesh_channel; /**< The channel number of mesh network */ -#ifdef USE_UDEV_MONITOR - GUdevClient *udev_client; /**< The udev event client */ -#endif /* USE_UDEV_MONITOR */ + bool gate_announce; /**< Gate Announce Dnable/Disable */ int hwmp_root_mode; /**< HWMP Root Mode (0, 2,3 or 4) */ int stp; /**< Spanning Tree Protocol Enable/Disablel */ diff --git a/introspection/mesh.xml b/introspection/mesh.xml old mode 100644 new mode 100755 index 3cdb056..93f8947 --- a/introspection/mesh.xml +++ b/introspection/mesh.xml @@ -45,9 +45,9 @@ - - - + + + diff --git a/packaging/meshd.spec b/packaging/meshd.spec index 74f6dad..801908b 100644 --- a/packaging/meshd.spec +++ b/packaging/meshd.spec @@ -1,7 +1,4 @@ %define CHECK_MESH_PRIVILEGE False -%define UDEV_MONITOR False -%define NETLINK_MONITOR False -%define IOCTL_MONITOR False Name: meshd Summary: mesh network daemon @@ -16,7 +13,6 @@ Source3: meshd.service BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(gio-unix-2.0) -#BuildRequires: pkgconfig(gudev-1.0) BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(libnl-3.0) BuildRequires: pkgconfig(dbus-1) diff --git a/src/mesh-device-monitor.c b/src/mesh-device-monitor.c deleted file mode 100644 index aab4b7f..0000000 --- a/src/mesh-device-monitor.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Network Configuration Module - * - * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. - * - * 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. - * - */ -#include -#include -#include - -#include -#include -#ifdef USE_IOCTL_MONITOR -#include -#endif -#ifdef USE_NETLINK_MONITOR -#include -#include -#include -#include -#include -#include -#endif /* USE_NETLINK_MONITOR */ - -#include "mesh.h" -#include "mesh-log.h" -#include "mesh-util.h" -#include "mesh-device-monitor.h" - -#ifdef USE_NETLINK_MONITOR -static void mesh_read_netlink_msg(void *pdata) -{ - int len; - int buf[1024]; - - struct sockaddr_nl sa; - struct nlmsghdr *nh; - struct ifinfomsg *ifimsg; - struct rtattr *attribute; - struct iovec iov = { buf, sizeof(buf) }; - struct msghdr msg = { (void *)&sa, sizeof(sa), &iov, 1, NULL, 0, 0 }; - - mesh_interface_s *info = NULL; - mesh_service *service = (mesh_service *)pdata; - meshd_check_null_ret("service", service); - info = service->interface_info; - meshd_check_null_ret("info", info); - - len = recvmsg(service->netlink_fd, &msg, 0); - if(-1 == len) { - MESH_LOGE("recvmsg error"); - return; - } - - for (nh = (struct nlmsghdr *)buf; NLMSG_OK(nh, len); nh = NLMSG_NEXT(nh, len)) { - if (nh->nlmsg_type == NLMSG_ERROR) { - MESH_LOGE("Read Netlink Message Error!!"); - continue; - } - if (nh->nlmsg_type == NLMSG_DONE) { - MESH_LOGD("Read Netlink Message Done"); - return; - } - - ifimsg = NLMSG_DATA(nh); - MESH_LOGD("Message : [%u %u %u 0x%X 0x%X]", - ifimsg->ifi_family, - ifimsg->ifi_type, - ifimsg->ifi_index, - ifimsg->ifi_flags, - ifimsg->ifi_change); - /* Monitor external interface state change */ - if (ARPHRD_ETHER != ifimsg->ifi_type) - return; - - attribute = IFLA_RTA(ifimsg); - if (IFLA_IFNAME == attribute->rta_type) { - if (!g_strcmp0(info->external_interface, RTA_DATA(attribute))) { - MESH_LOGD("Event from external interface : [%s]", RTA_DATA(attribute)); - if (RTM_NEWLINK == nh->nlmsg_type && false == info->can_be_gate && - IFF_LOWER_UP == (ifimsg->ifi_flags & IFF_LOWER_UP)) { - MESH_LOGD("RTM_NEWLINK : [%s]", RTA_DATA(attribute)); - info->can_be_gate = true; - } else if (RTM_DELLINK == nh->nlmsg_type) { - MESH_LOGD("RTM_DELLINK : [%s]", RTA_DATA(attribute)); - info->can_be_gate = false; - } - } - } - } -} - -static gboolean _on_socket_msg_received(GIOChannel *source, - GIOCondition condition, gpointer data) -{ - NOTUSED(source); - NOTUSED(condition); - - mesh_read_netlink_msg(data); - - /* Do not remove I/O source */ - return TRUE; -} - -int mesh_device_monitor(void *pdata) -{ - struct sockaddr_nl sa; - guint event_source; - GIOChannel *recv_channel = NULL; - - mesh_service *service = (mesh_service *)pdata; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - - memset(&sa, 0, sizeof(sa)); - sa.nl_family = AF_NETLINK; - sa.nl_groups = RTMGRP_LINK; - - service->netlink_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); - if(-1 == service->netlink_fd) { - MESH_LOGE("Netlink socket creation error"); - return MESHD_ERROR_OPERATION_FAILED; - } - - if(bind(service->netlink_fd, (struct sockaddr *) &sa, sizeof(sa)) == -1) { - MESH_LOGE("bind error"); - return MESHD_ERROR_OPERATION_FAILED; - } - - recv_channel = g_io_channel_unix_new(service->netlink_fd); - event_source = g_io_add_watch(recv_channel, (G_IO_IN | G_IO_ERR), - _on_socket_msg_received, (gpointer)service); - g_io_channel_unref(recv_channel); - - return 0; -} -#endif /* USE_NETLINK_MONITOR */ - -#ifdef USE_IOCTL_MONITOR -/* Check send notification status */ -static gboolean g_chk_eth_send_notification = FALSE; -#define MAX_SIZE_ERROR_BUFFER 128 - -static int _ethernet_cable_plugin_status_check() -{ - struct ifreq ifr; - int soketfd = -1; - int error = 0; - int ret = 0; - struct _stMData *mdata; - struct timeval tv; - char error_buf[MAX_SIZE_ERROR_BUFFER] = {}; - - soketfd = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0); - if (soketfd < 0) { - MESH_LOGE("Failed to create socket"); - return -errno; - } - - /* Set Timeout for IOCTL Call */ - tv.tv_sec = 1; - tv.tv_usec = 0; - - if (setsockopt(soketfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, - sizeof(struct timeval)) < 0) { - - strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER); - MESH_LOGE("Failed to set socket option : [%d] [%s]", -errno, error_buf); - goto done; - } - - memset(&ifr, 0, sizeof(ifr)); - g_strlcpy(ifr.ifr_name, "eth0", IFNAMSIZ); - if (ioctl(soketfd, SIOCGMIIPHY, &ifr) < 0){ - error = -errno; - strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER); - MESH_LOGE("SIOCGMIIPHY on eth0 failed : [%d] [%s]", errno, error_buf); - goto done; - } - - mdata = (struct _stMData *)&ifr.ifr_data; - mdata->reg_num = ETH_REG_BMSR; - - if (ioctl(soketfd, SIOCGMIIREG, &ifr) < 0){ - error = -errno; - strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER); - MESH_LOGE("SIOCGMIIREG on %s failed , [%d] [%s] ", ifr.ifr_name,errno,error_buf); - goto done; - } - ret = mdata->val_out; - ret = ret & BMSR_LINK_VALID; - - MESH_LOGD("value of ret : %d",ret); - - if (ret == 4) { - if (!g_chk_eth_send_notification) { - MESH_LOGE("Return Value : [%d]", ret); - } - g_chk_eth_send_notification = TRUE; - } else if (ret == 0) { - if (g_chk_eth_send_notification) { - MESH_LOGE("Return Value : [%d]", ret); - } - g_chk_eth_send_notification = FALSE; - } - - - error = 0; -done: - close(soketfd); - return error; -} - -int mesh_get_ethernet_cable_state(int *status) -{ - int error = 0; - meshd_check_null_ret_error("status", status, MESHD_ERROR_INVALID_PARAMETER); - - if ((error = _ethernet_cable_plugin_status_check()) != 0) { - MESH_LOGE("Error !!! Failed to check ethernet cable status [%d]\n", error); - return error; - } - - if (g_chk_eth_send_notification == TRUE) - *status = 1; /* Ethernet cable Attached */ - else - *status = 0; /* Ethernet cable Deattached */ - return MESHD_ERROR_NONE; -} -#endif diff --git a/src/mesh-interface.c b/src/mesh-interface.c index cef4287..03f1cf7 100644 --- a/src/mesh-interface.c +++ b/src/mesh-interface.c @@ -18,9 +18,6 @@ */ #include #include -#ifdef USE_UDEV_MONITOR -#include -#endif /* USE_UDEV_MONITOR */ #include #include #include @@ -247,25 +244,6 @@ char* mesh_interface_get_address(const char* if_name) return result; } -#ifdef USE_UDEV_MONITOR -static void __on_uevent(GUdevClient *client, gchar *action, GUdevDevice *device, gpointer user_data) -{ - NOTUSED(client); - NOTUSED(device); - NOTUSED(user_data); - - MESH_LOGD("KSR : action:[%s]", action); -} - -static void _interface_status_monitor_init(mesh_interface_s *info) -{ - const gchar *subsystem[] = {"net", NULL}; - - info->udev_client = g_udev_client_new(subsystem); - g_signal_connect(info->udev_client, "uevent", G_CALLBACK(__on_uevent), info); -} -#endif /* USE_UDEV_MONITOR */ - int mesh_interface_initialize(mesh_interface_s *info) { if (NULL == info) { @@ -301,9 +279,6 @@ int mesh_interface_initialize(mesh_interface_s *info) MESH_LOGD(" SoftAP : [%s]", info->softap_interface); MESH_LOGD(" External: [%s]", info->external_interface); -#ifdef USE_UDEV_MONITOR - _interface_status_monitor_init(info); -#endif /* USE_UDEV_MONITOR */ return MESHD_ERROR_NONE; } diff --git a/src/mesh-peer-monitor.c b/src/mesh-peer-monitor.c index 8bfc044..4369ba2 100644 --- a/src/mesh-peer-monitor.c +++ b/src/mesh-peer-monitor.c @@ -26,7 +26,6 @@ #include "mesh-netlink.h" #include "mesh-interface.h" #include "mesh-peer-monitor.h" -#include "mesh-device-monitor.h" #define MESH_MONITORING_TIME 5 #define MESH_MAXIMUM_BEACON_LOST_COUNT 10 @@ -193,21 +192,13 @@ static gboolean _get_mpath_info(void *pdata) static gboolean _on_mesh_monitor_cb(gpointer pdata) { int ret; -#ifdef USE_IOCTL_MONITOR - int state; -#else bool state; -#endif /* USE_IOCTL_MONITOR */ mesh_service *service = (mesh_service *)pdata; if (service) { mesh_interface_s *info = service->interface_info; if (info) { /* Exceptionally, checking external interface processes here. */ -#ifdef USE_IOCTL_MONITOR - ret = mesh_get_ethernet_cable_state(&state); -#else ret = mesh_interface_check_external_exists(info->external_interface, &state); -#endif /* USE_IOCTL_MONITOR */ MESH_LOGD("Status : %d %d %d", ret, info->can_be_gate, state); if (MESHD_ERROR_NONE == ret) { if (info->can_be_gate != state) { diff --git a/src/mesh-service-interface.c b/src/mesh-service-interface.c index 753a5eb..b7aadcd 100644 --- a/src/mesh-service-interface.c +++ b/src/mesh-service-interface.c @@ -28,7 +28,6 @@ #include "mesh-gdbus.h" #include "mesh-service.h" #include "mesh-peer-monitor.h" -#include "mesh-device-monitor.h" #include "mesh-service-interface.h" #include "mesh-generated-code.h" @@ -372,9 +371,7 @@ static gboolean _meshd_dbus_handle_enable_mesh(NetMesh *object, MESH_LOGE("Failed to mesh_request_enable_network [%d]", ret); mesh_start_monitor_service(service); -#ifdef USE_NETLINK_MONITOR - mesh_device_monitor(service); -#endif /* USE_NETLINK_MONITOR */ + net_mesh_complete_enable_mesh(object, invocation, ret); return TRUE; -- 2.7.4 From be661fc71b7f2d4309598cde1cf8dfdd0f52abae Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Mon, 3 Jul 2017 15:06:42 +0900 Subject: [PATCH 08/16] Make the first wireless interface up and start wpa_supplicant if the wireless interface down & wpa_supplicant is not started Signed-off-by: saerome.kim --- CMakeLists.txt | 3 ++- packaging/meshd.spec | 1 + src/mesh-service-interface.c | 47 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a5d32a9..5cd0e85 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,8 @@ SET(PKG_MODULES libnl-genl-3.0 dbus-1 libcrypto - libtzplatform-config) + libtzplatform-config + capi-network-wifi-manager) pkg_check_modules(daemon_pkgs REQUIRED ${PKG_MODULES}) MESSAGE(" - Adding external C flags") diff --git a/packaging/meshd.spec b/packaging/meshd.spec index 801908b..7596874 100644 --- a/packaging/meshd.spec +++ b/packaging/meshd.spec @@ -18,6 +18,7 @@ BuildRequires: pkgconfig(libnl-3.0) BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(libcrypto) BuildRequires: pkgconfig(libtzplatform-config) +BuildRequires: pkgconfig(capi-network-wifi-manager) BuildRequires: cmake # if meshd do dhcp instead of connman Requires: net-tools diff --git a/src/mesh-service-interface.c b/src/mesh-service-interface.c index b7aadcd..cb4bacc 100644 --- a/src/mesh-service-interface.c +++ b/src/mesh-service-interface.c @@ -21,6 +21,7 @@ #include #include +#include #include "mesh.h" #include "mesh-log.h" @@ -45,6 +46,34 @@ typedef struct _meshd_dbus_client_s { gchar *bus_name; } meshd_dbus_client_s; +#define CASE_TO_STR(x) case x: return #x; + +static const char* wifi_error_to_string(wifi_manager_error_e err) +{ + switch (err) { + /* CHECK: List all enum values here */ + CASE_TO_STR(WIFI_MANAGER_ERROR_NONE) + CASE_TO_STR(WIFI_MANAGER_ERROR_INVALID_PARAMETER) + CASE_TO_STR(WIFI_MANAGER_ERROR_OUT_OF_MEMORY) + CASE_TO_STR(WIFI_MANAGER_ERROR_INVALID_OPERATION) + CASE_TO_STR(WIFI_MANAGER_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED) + CASE_TO_STR(WIFI_MANAGER_ERROR_OPERATION_FAILED) + CASE_TO_STR(WIFI_MANAGER_ERROR_NO_CONNECTION) + CASE_TO_STR(WIFI_MANAGER_ERROR_NOW_IN_PROGRESS) + CASE_TO_STR(WIFI_MANAGER_ERROR_ALREADY_EXISTS) + CASE_TO_STR(WIFI_MANAGER_ERROR_OPERATION_ABORTED) + CASE_TO_STR(WIFI_MANAGER_ERROR_DHCP_FAILED) + CASE_TO_STR(WIFI_MANAGER_ERROR_INVALID_KEY) + CASE_TO_STR(WIFI_MANAGER_ERROR_NO_REPLY) + CASE_TO_STR(WIFI_MANAGER_ERROR_SECURITY_RESTRICTED) + CASE_TO_STR(WIFI_MANAGER_ERROR_ALREADY_INITIALIZED) + CASE_TO_STR(WIFI_MANAGER_ERROR_PERMISSION_DENIED) + CASE_TO_STR(WIFI_MANAGER_ERROR_NOT_SUPPORTED) + default : + return "WIFI_MANAGER_ERROR_UNKNOWN"; + } +} + NetMesh* meshd_dbus_get_object() { return meshd_dbus_object; @@ -154,6 +183,24 @@ static gboolean _meshd_dbus_handle_enable(Manager *object, mesh_service *service = (mesh_service *)user_data; mesh_interface_s *info = service->interface_info; + wifi_manager_h wifi_handle = NULL; + bool wifi_activated = false; + + /* Initialize Wi-Fi driver */ + ret = wifi_manager_initialize(&wifi_handle); + if (WIFI_MANAGER_ERROR_NONE != ret) + MESH_LOGE("Failed to get wifi manager handle ! [%s(%X)]", + wifi_error_to_string(ret), ret); + + wifi_manager_is_activated(wifi_handle, &wifi_activated); + if (false == wifi_activated) { + ret = wifi_manager_activate(wifi_handle, NULL, NULL); + if (WIFI_MANAGER_ERROR_NONE != ret) { + MESH_LOGE("Failed to activate wifi ! [%s(%X)]", wifi_error_to_string(ret), ret); + } + } + wifi_manager_deinitialize(wifi_handle); + if (service->mesh_activated) { /* Already activated */ manager_complete_enable(object, invocation, MESHD_ERROR_NONE); -- 2.7.4 From d4b8157eed3eba6cbc300d916f2c2fcfb7acb6cc Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Mon, 3 Jul 2017 16:07:07 +0900 Subject: [PATCH 09/16] Fix Tizen coding rules Signed-off-by: saerome.kim --- include/mesh-gdbus.h | 6 +++--- include/mesh-peer-monitor.h | 1 - include/mesh-request.h | 2 +- src/mesh-service-interface.c | 6 +++--- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/include/mesh-gdbus.h b/include/mesh-gdbus.h index edc4d22..d680bbb 100644 --- a/include/mesh-gdbus.h +++ b/include/mesh-gdbus.h @@ -43,16 +43,16 @@ int mesh_gdbus_create_mesh_interface(mesh_service *service); int mesh_gdbus_remove_mesh_interface(mesh_service *service); int mesh_gdbus_mesh_scan(mesh_service *service); int mesh_gdbus_mesh_specific_scan(mesh_service *service, gchar *mesh_id, - gint channel); + gint channel); int mesh_gdbus_mesh_cancel_scan(mesh_service *service); int mesh_gdbus_get_mesh_networks(mesh_service *service); int mesh_gdbus_get_joined_mesh_network(mesh_service *service); int mesh_gdbus_get_connected_peers(mesh_service *service); int mesh_gdbus_create_network(mesh_service *service, gchar *mesh_id, - gint channel, meshd_security_type_e sec); + gint channel, meshd_security_type_e sec); int mesh_gdbus_set_passphrase(mesh_service *service, mesh_scan_result_s *info, - gchar *passphrase); + gchar *passphrase); int mesh_gdbus_connect_network(mesh_service *service, mesh_scan_result_s *info); int mesh_gdbus_disconnect_network(mesh_service *service, mesh_scan_result_s *info); int mesh_gdbus_remove_network(mesh_service *service, mesh_scan_result_s *info); diff --git a/include/mesh-peer-monitor.h b/include/mesh-peer-monitor.h index 441ee3f..982d281 100644 --- a/include/mesh-peer-monitor.h +++ b/include/mesh-peer-monitor.h @@ -20,7 +20,6 @@ #define __MESH_MONITOR_H__ int mesh_start_monitor_service(void *pdata); - int mesh_stop_monitor_service(void *pdata); #endif /* __MESH_MONITOR_H__ */ \ No newline at end of file diff --git a/include/mesh-request.h b/include/mesh-request.h index f4d8d61..8abcec7 100644 --- a/include/mesh-request.h +++ b/include/mesh-request.h @@ -24,7 +24,7 @@ int mesh_request_enable_network(mesh_service *service); int mesh_request_disable_network(mesh_service *service); int mesh_request_scan(mesh_service *service); int mesh_request_specific_scan(mesh_service *service, gchar *mesh_id, - gint channel); + gint channel); int mesh_request_cancel_scan(mesh_service *service); int mesh_request_get_networks(mesh_service *service); int mesh_request_get_joined_network(mesh_service *service); diff --git a/src/mesh-service-interface.c b/src/mesh-service-interface.c index cb4bacc..7f9fad3 100644 --- a/src/mesh-service-interface.c +++ b/src/mesh-service-interface.c @@ -195,9 +195,9 @@ static gboolean _meshd_dbus_handle_enable(Manager *object, wifi_manager_is_activated(wifi_handle, &wifi_activated); if (false == wifi_activated) { ret = wifi_manager_activate(wifi_handle, NULL, NULL); - if (WIFI_MANAGER_ERROR_NONE != ret) { - MESH_LOGE("Failed to activate wifi ! [%s(%X)]", wifi_error_to_string(ret), ret); - } + if (WIFI_MANAGER_ERROR_NONE != ret) + MESH_LOGE("Failed to activate wifi ! [%s(%X)]", + wifi_error_to_string(ret), ret); } wifi_manager_deinitialize(wifi_handle); -- 2.7.4 From e65c6c27ba7b83a677e7352501556933ae5abebb Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Mon, 3 Jul 2017 21:13:18 +0900 Subject: [PATCH 10/16] Add handling 'data_rate' parameter Signed-off-by: saerome.kim --- src/mesh-service-interface.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mesh-service-interface.c b/src/mesh-service-interface.c index 7f9fad3..192b225 100644 --- a/src/mesh-service-interface.c +++ b/src/mesh-service-interface.c @@ -389,6 +389,8 @@ static gboolean _meshd_dbus_handle_get_found_mesh_networks(NetMesh *object, g_variant_new_int32(scan_item->rssi)); g_variant_builder_add(&builder, "{sv}", "channel", g_variant_new_uint32(scan_item->channel)); + g_variant_builder_add(&builder, "{sv}", "data_rate", + g_variant_new_int32(scan_item->data_rate)); g_variant_builder_add(&builder, "{sv}", "security", g_variant_new_uint32((int)scan_item->security)); g_variant_builder_add(&builder, "{sv}", "state", -- 2.7.4 From c8f1ba1b94dbc188cd2b3cd389188947c2e64ef7 Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Mon, 3 Jul 2017 21:53:18 +0900 Subject: [PATCH 11/16] Change the calling order mesh_gdbus_set_mesh_gate and mesh_request_set_mesh_gate/mesh_request_unset_mesh_gate Signed-off-by: saerome.kim --- src/mesh-service-interface.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/mesh-service-interface.c b/src/mesh-service-interface.c index 192b225..e272cdf 100644 --- a/src/mesh-service-interface.c +++ b/src/mesh-service-interface.c @@ -556,16 +556,17 @@ static gboolean _meshd_dbus_handle_set_gate(NetMesh *object, info->hwmp_root_mode = hwmp_root_mode; info->stp = stp; + /* Set STP and gate_announce for connmand */ + ret = mesh_gdbus_set_mesh_gate(service); + if (MESHD_ERROR_NONE != ret) + MESH_LOGE("Failed to mesh_gdbus_set_mesh_gate [%d]", ret); + /* Set STP and gate_announce right now */ ret = mesh_request_set_mesh_gate(info->bridge_interface, info->mesh_interface, info->external_interface); if (MESHD_ERROR_NONE != ret) MESH_LOGE("Failed to mesh_gdbus_set_mesh_gate [%d]", ret); - /* Set STP and gate_announce for connmand */ - ret = mesh_gdbus_set_mesh_gate(service); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_gdbus_set_mesh_gate [%d]", ret); net_mesh_complete_set_gate(object, invocation, ret); @@ -584,17 +585,17 @@ static gboolean _meshd_dbus_handle_unset_gate(NetMesh *object, info->hwmp_root_mode = 0; info->stp = 0; + /* Set STP and gate_announce for connmand */ + ret = mesh_gdbus_set_mesh_gate(service); + if (MESHD_ERROR_NONE != ret) + MESH_LOGE("Failed to mesh_gdbus_set_mesh_gate [%d]", ret); + /* Unset STP and Gate Annouce right now */ ret = mesh_request_unset_mesh_gate(info->bridge_interface, info->mesh_interface, info->external_interface); if (MESHD_ERROR_NONE != ret) MESH_LOGE("Failed to mesh_request_unset_mesh_gate [%d]", ret); - /* Set STP and gate_announce for connmand */ - ret = mesh_gdbus_set_mesh_gate(service); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_gdbus_set_mesh_gate [%d]", ret); - net_mesh_complete_unset_gate(object, invocation, ret); return TRUE; -- 2.7.4 From 2748ffa5cce526ab8b4de5c99b058dcd6a27d3fe Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Tue, 4 Jul 2017 14:16:12 +0900 Subject: [PATCH 12/16] Removed dependency of related to the latest nl80211.h Signed-off-by: saerome.kim --- include/nl80211.h | 5126 ---------------------------------------------------- src/mesh-gdbus.c | 2 +- src/mesh-netlink.c | 43 +- 3 files changed, 36 insertions(+), 5135 deletions(-) delete mode 100644 include/nl80211.h diff --git a/include/nl80211.h b/include/nl80211.h deleted file mode 100644 index 56368e9..0000000 --- a/include/nl80211.h +++ /dev/null @@ -1,5126 +0,0 @@ -#ifndef __LINUX_NL80211_H -#define __LINUX_NL80211_H -/* - * 802.11 netlink interface public header - * - * Copyright 2006-2010 Johannes Berg - * Copyright 2008 Michael Wu - * Copyright 2008 Luis Carlos Cobo - * Copyright 2008 Michael Buesch - * Copyright 2008, 2009 Luis R. Rodriguez - * Copyright 2008 Jouni Malinen - * Copyright 2008 Colin McCabe - * Copyright 2015 Intel Deutschland GmbH - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - */ - -/* - * This header file defines the userspace API to the wireless stack. Please - * be careful not to break things - i.e. don't move anything around or so - * unless you can demonstrate that it breaks neither API nor ABI. - * - * Additions to the API should be accompanied by actual implementations in - * an upstream driver, so that example implementations exist in case there - * are ever concerns about the precise semantics of the API or changes are - * needed, and to ensure that code for dead (no longer implemented) API - * can actually be identified and removed. - * Nonetheless, semantics should also be documented carefully in this file. - */ - -#include - -#define NL80211_GENL_NAME "nl80211" - -#define NL80211_MULTICAST_GROUP_CONFIG "config" -#define NL80211_MULTICAST_GROUP_SCAN "scan" -#define NL80211_MULTICAST_GROUP_REG "regulatory" -#define NL80211_MULTICAST_GROUP_MLME "mlme" -#define NL80211_MULTICAST_GROUP_VENDOR "vendor" -#define NL80211_MULTICAST_GROUP_NAN "nan" -#define NL80211_MULTICAST_GROUP_TESTMODE "testmode" - -/** - * DOC: Station handling - * - * Stations are added per interface, but a special case exists with VLAN - * interfaces. When a station is bound to an AP interface, it may be moved - * into a VLAN identified by a VLAN interface index (%NL80211_ATTR_STA_VLAN). - * The station is still assumed to belong to the AP interface it was added - * to. - * - * Station handling varies per interface type and depending on the driver's - * capabilities. - * - * For drivers supporting TDLS with external setup (WIPHY_FLAG_SUPPORTS_TDLS - * and WIPHY_FLAG_TDLS_EXTERNAL_SETUP), the station lifetime is as follows: - * - a setup station entry is added, not yet authorized, without any rate - * or capability information, this just exists to avoid race conditions - * - when the TDLS setup is done, a single NL80211_CMD_SET_STATION is valid - * to add rate and capability information to the station and at the same - * time mark it authorized. - * - %NL80211_TDLS_ENABLE_LINK is then used - * - after this, the only valid operation is to remove it by tearing down - * the TDLS link (%NL80211_TDLS_DISABLE_LINK) - * - * TODO: need more info for other interface types - */ - -/** - * DOC: Frame transmission/registration support - * - * Frame transmission and registration support exists to allow userspace - * management entities such as wpa_supplicant react to management frames - * that are not being handled by the kernel. This includes, for example, - * certain classes of action frames that cannot be handled in the kernel - * for various reasons. - * - * Frame registration is done on a per-interface basis and registrations - * cannot be removed other than by closing the socket. It is possible to - * specify a registration filter to register, for example, only for a - * certain type of action frame. In particular with action frames, those - * that userspace registers for will not be returned as unhandled by the - * driver, so that the registered application has to take responsibility - * for doing that. - * - * The type of frame that can be registered for is also dependent on the - * driver and interface type. The frame types are advertised in wiphy - * attributes so applications know what to expect. - * - * NOTE: When an interface changes type while registrations are active, - * these registrations are ignored until the interface type is - * changed again. This means that changing the interface type can - * lead to a situation that couldn't otherwise be produced, but - * any such registrations will be dormant in the sense that they - * will not be serviced, i.e. they will not receive any frames. - * - * Frame transmission allows userspace to send for example the required - * responses to action frames. It is subject to some sanity checking, - * but many frames can be transmitted. When a frame was transmitted, its - * status is indicated to the sending socket. - * - * For more technical details, see the corresponding command descriptions - * below. - */ - -/** - * DOC: Virtual interface / concurrency capabilities - * - * Some devices are able to operate with virtual MACs, they can have - * more than one virtual interface. The capability handling for this - * is a bit complex though, as there may be a number of restrictions - * on the types of concurrency that are supported. - * - * To start with, each device supports the interface types listed in - * the %NL80211_ATTR_SUPPORTED_IFTYPES attribute, but by listing the - * types there no concurrency is implied. - * - * Once concurrency is desired, more attributes must be observed: - * To start with, since some interface types are purely managed in - * software, like the AP-VLAN type in mac80211 for example, there's - * an additional list of these, they can be added at any time and - * are only restricted by some semantic restrictions (e.g. AP-VLAN - * cannot be added without a corresponding AP interface). This list - * is exported in the %NL80211_ATTR_SOFTWARE_IFTYPES attribute. - * - * Further, the list of supported combinations is exported. This is - * in the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute. Basically, - * it exports a list of "groups", and at any point in time the - * interfaces that are currently active must fall into any one of - * the advertised groups. Within each group, there are restrictions - * on the number of interfaces of different types that are supported - * and also the number of different channels, along with potentially - * some other restrictions. See &enum nl80211_if_combination_attrs. - * - * All together, these attributes define the concurrency of virtual - * interfaces that a given device supports. - */ - -/** - * DOC: packet coalesce support - * - * In most cases, host that receives IPv4 and IPv6 multicast/broadcast - * packets does not do anything with these packets. Therefore the - * reception of these unwanted packets causes unnecessary processing - * and power consumption. - * - * Packet coalesce feature helps to reduce number of received interrupts - * to host by buffering these packets in firmware/hardware for some - * predefined time. Received interrupt will be generated when one of the - * following events occur. - * a) Expiration of hardware timer whose expiration time is set to maximum - * coalescing delay of matching coalesce rule. - * b) Coalescing buffer in hardware reaches it's limit. - * c) Packet doesn't match any of the configured coalesce rules. - * - * User needs to configure following parameters for creating a coalesce - * rule. - * a) Maximum coalescing delay - * b) List of packet patterns which needs to be matched - * c) Condition for coalescence. pattern 'match' or 'no match' - * Multiple such rules can be created. - */ - -/** - * enum nl80211_commands - supported nl80211 commands - * - * @NL80211_CMD_UNSPEC: unspecified command to catch errors - * - * @NL80211_CMD_GET_WIPHY: request information about a wiphy or dump request - * to get a list of all present wiphys. - * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or - * %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME, - * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ (and the - * attributes determining the channel width; this is used for setting - * monitor mode channel), %NL80211_ATTR_WIPHY_RETRY_SHORT, - * %NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD, - * and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD. - * However, for setting the channel, see %NL80211_CMD_SET_CHANNEL - * instead, the support here is for backward compatibility only. - * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request - * or rename notification. Has attributes %NL80211_ATTR_WIPHY and - * %NL80211_ATTR_WIPHY_NAME. - * @NL80211_CMD_DEL_WIPHY: Wiphy deleted. Has attributes - * %NL80211_ATTR_WIPHY and %NL80211_ATTR_WIPHY_NAME. - * - * @NL80211_CMD_GET_INTERFACE: Request an interface's configuration; - * either a dump request for all interfaces or a specific get with a - * single %NL80211_ATTR_IFINDEX is supported. - * @NL80211_CMD_SET_INTERFACE: Set type of a virtual interface, requires - * %NL80211_ATTR_IFINDEX and %NL80211_ATTR_IFTYPE. - * @NL80211_CMD_NEW_INTERFACE: Newly created virtual interface or response - * to %NL80211_CMD_GET_INTERFACE. Has %NL80211_ATTR_IFINDEX, - * %NL80211_ATTR_WIPHY and %NL80211_ATTR_IFTYPE attributes. Can also - * be sent from userspace to request creation of a new virtual interface, - * then requires attributes %NL80211_ATTR_WIPHY, %NL80211_ATTR_IFTYPE and - * %NL80211_ATTR_IFNAME. - * @NL80211_CMD_DEL_INTERFACE: Virtual interface was deleted, has attributes - * %NL80211_ATTR_IFINDEX and %NL80211_ATTR_WIPHY. Can also be sent from - * userspace to request deletion of a virtual interface, then requires - * attribute %NL80211_ATTR_IFINDEX. - * - * @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified - * by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC. - * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT, - * %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD. - * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA, - * %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC, %NL80211_ATTR_KEY_CIPHER, - * and %NL80211_ATTR_KEY_SEQ attributes. - * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX - * or %NL80211_ATTR_MAC. - * - * @NL80211_CMD_GET_BEACON: (not used) - * @NL80211_CMD_SET_BEACON: change the beacon on an access point interface - * using the %NL80211_ATTR_BEACON_HEAD and %NL80211_ATTR_BEACON_TAIL - * attributes. For drivers that generate the beacon and probe responses - * internally, the following attributes must be provided: %NL80211_ATTR_IE, - * %NL80211_ATTR_IE_PROBE_RESP and %NL80211_ATTR_IE_ASSOC_RESP. - * @NL80211_CMD_START_AP: Start AP operation on an AP interface, parameters - * are like for %NL80211_CMD_SET_BEACON, and additionally parameters that - * do not change are used, these include %NL80211_ATTR_BEACON_INTERVAL, - * %NL80211_ATTR_DTIM_PERIOD, %NL80211_ATTR_SSID, - * %NL80211_ATTR_HIDDEN_SSID, %NL80211_ATTR_CIPHERS_PAIRWISE, - * %NL80211_ATTR_CIPHER_GROUP, %NL80211_ATTR_WPA_VERSIONS, - * %NL80211_ATTR_AKM_SUITES, %NL80211_ATTR_PRIVACY, - * %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_INACTIVITY_TIMEOUT, - * %NL80211_ATTR_ACL_POLICY and %NL80211_ATTR_MAC_ADDRS. - * The channel to use can be set on the interface or be given using the - * %NL80211_ATTR_WIPHY_FREQ and the attributes determining channel width. - * @NL80211_CMD_NEW_BEACON: old alias for %NL80211_CMD_START_AP - * @NL80211_CMD_STOP_AP: Stop AP operation on the given interface - * @NL80211_CMD_DEL_BEACON: old alias for %NL80211_CMD_STOP_AP - * - * @NL80211_CMD_GET_STATION: Get station attributes for station identified by - * %NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_SET_STATION: Set station attributes for station identified by - * %NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_NEW_STATION: Add a station with given attributes to the - * the interface identified by %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_DEL_STATION: Remove a station identified by %NL80211_ATTR_MAC - * or, if no MAC address given, all stations, on the interface identified - * by %NL80211_ATTR_IFINDEX. %NL80211_ATTR_MGMT_SUBTYPE and - * %NL80211_ATTR_REASON_CODE can optionally be used to specify which type - * of disconnection indication should be sent to the station - * (Deauthentication or Disassociation frame and reason code for that - * frame). - * - * @NL80211_CMD_GET_MPATH: Get mesh path attributes for mesh path to - * destination %NL80211_ATTR_MAC on the interface identified by - * %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_SET_MPATH: Set mesh path attributes for mesh path to - * destination %NL80211_ATTR_MAC on the interface identified by - * %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_NEW_MPATH: Create a new mesh path for the destination given by - * %NL80211_ATTR_MAC via %NL80211_ATTR_MPATH_NEXT_HOP. - * @NL80211_CMD_DEL_MPATH: Delete a mesh path to the destination given by - * %NL80211_ATTR_MAC. - * @NL80211_CMD_NEW_PATH: Add a mesh path with given attributes to the - * the interface identified by %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_DEL_PATH: Remove a mesh path identified by %NL80211_ATTR_MAC - * or, if no MAC address given, all mesh paths, on the interface identified - * by %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_SET_BSS: Set BSS attributes for BSS identified by - * %NL80211_ATTR_IFINDEX. - * - * @NL80211_CMD_GET_REG: ask the wireless core to send us its currently set - * regulatory domain. If %NL80211_ATTR_WIPHY is specified and the device - * has a private regulatory domain, it will be returned. Otherwise, the - * global regdomain will be returned. - * A device will have a private regulatory domain if it uses the - * regulatory_hint() API. Even when a private regdomain is used the channel - * information will still be mended according to further hints from - * the regulatory core to help with compliance. A dump version of this API - * is now available which will returns the global regdomain as well as - * all private regdomains of present wiphys (for those that have it). - * If a wiphy is self-managed (%NL80211_ATTR_WIPHY_SELF_MANAGED_REG), then - * its private regdomain is the only valid one for it. The regulatory - * core is not used to help with compliance in this case. - * @NL80211_CMD_SET_REG: Set current regulatory domain. CRDA sends this command - * after being queried by the kernel. CRDA replies by sending a regulatory - * domain structure which consists of %NL80211_ATTR_REG_ALPHA set to our - * current alpha2 if it found a match. It also provides - * NL80211_ATTR_REG_RULE_FLAGS, and a set of regulatory rules. Each - * regulatory rule is a nested set of attributes given by - * %NL80211_ATTR_REG_RULE_FREQ_[START|END] and - * %NL80211_ATTR_FREQ_RANGE_MAX_BW with an attached power rule given by - * %NL80211_ATTR_REG_RULE_POWER_MAX_ANT_GAIN and - * %NL80211_ATTR_REG_RULE_POWER_MAX_EIRP. - * @NL80211_CMD_REQ_SET_REG: ask the wireless core to set the regulatory domain - * to the specified ISO/IEC 3166-1 alpha2 country code. The core will - * store this as a valid request and then query userspace for it. - * - * @NL80211_CMD_GET_MESH_CONFIG: Get mesh networking properties for the - * interface identified by %NL80211_ATTR_IFINDEX - * - * @NL80211_CMD_SET_MESH_CONFIG: Set mesh networking properties for the - * interface identified by %NL80211_ATTR_IFINDEX - * - * @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The - * interface is identified with %NL80211_ATTR_IFINDEX and the management - * frame subtype with %NL80211_ATTR_MGMT_SUBTYPE. The extra IE data to be - * added to the end of the specified management frame is specified with - * %NL80211_ATTR_IE. If the command succeeds, the requested data will be - * added to all specified management frames generated by - * kernel/firmware/driver. - * Note: This command has been removed and it is only reserved at this - * point to avoid re-using existing command number. The functionality this - * command was planned for has been provided with cleaner design with the - * option to specify additional IEs in NL80211_CMD_TRIGGER_SCAN, - * NL80211_CMD_AUTHENTICATE, NL80211_CMD_ASSOCIATE, - * NL80211_CMD_DEAUTHENTICATE, and NL80211_CMD_DISASSOCIATE. - * - * @NL80211_CMD_GET_SCAN: get scan results - * @NL80211_CMD_TRIGGER_SCAN: trigger a new scan with the given parameters - * %NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the - * probe requests at CCK rate or not. %NL80211_ATTR_MAC can be used to - * specify a BSSID to scan for; if not included, the wildcard BSSID will - * be used. - * @NL80211_CMD_NEW_SCAN_RESULTS: scan notification (as a reply to - * NL80211_CMD_GET_SCAN and on the "scan" multicast group) - * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons, - * partial scan results may be available - * - * @NL80211_CMD_START_SCHED_SCAN: start a scheduled scan at certain - * intervals and certain number of cycles, as specified by - * %NL80211_ATTR_SCHED_SCAN_PLANS. If %NL80211_ATTR_SCHED_SCAN_PLANS is - * not specified and only %NL80211_ATTR_SCHED_SCAN_INTERVAL is specified, - * scheduled scan will run in an infinite loop with the specified interval. - * These attributes are mutually exculsive, - * i.e. NL80211_ATTR_SCHED_SCAN_INTERVAL must not be passed if - * NL80211_ATTR_SCHED_SCAN_PLANS is defined. - * If for some reason scheduled scan is aborted by the driver, all scan - * plans are canceled (including scan plans that did not start yet). - * Like with normal scans, if SSIDs (%NL80211_ATTR_SCAN_SSIDS) - * are passed, they are used in the probe requests. For - * broadcast, a broadcast SSID must be passed (ie. an empty - * string). If no SSID is passed, no probe requests are sent and - * a passive scan is performed. %NL80211_ATTR_SCAN_FREQUENCIES, - * if passed, define which channels should be scanned; if not - * passed, all channels allowed for the current regulatory domain - * are used. Extra IEs can also be passed from the userspace by - * using the %NL80211_ATTR_IE attribute. The first cycle of the - * scheduled scan can be delayed by %NL80211_ATTR_SCHED_SCAN_DELAY - * is supplied. - * @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan. Returns -ENOENT if - * scheduled scan is not running. The caller may assume that as soon - * as the call returns, it is safe to start a new scheduled scan again. - * @NL80211_CMD_SCHED_SCAN_RESULTS: indicates that there are scheduled scan - * results available. - * @NL80211_CMD_SCHED_SCAN_STOPPED: indicates that the scheduled scan has - * stopped. The driver may issue this event at any time during a - * scheduled scan. One reason for stopping the scan is if the hardware - * does not support starting an association or a normal scan while running - * a scheduled scan. This event is also sent when the - * %NL80211_CMD_STOP_SCHED_SCAN command is received or when the interface - * is brought down while a scheduled scan was running. - * - * @NL80211_CMD_GET_SURVEY: get survey resuls, e.g. channel occupation - * or noise level - * @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to - * NL80211_CMD_GET_SURVEY and on the "scan" multicast group) - * - * @NL80211_CMD_SET_PMKSA: Add a PMKSA cache entry, using %NL80211_ATTR_MAC - * (for the BSSID) and %NL80211_ATTR_PMKID. - * @NL80211_CMD_DEL_PMKSA: Delete a PMKSA cache entry, using %NL80211_ATTR_MAC - * (for the BSSID) and %NL80211_ATTR_PMKID. - * @NL80211_CMD_FLUSH_PMKSA: Flush all PMKSA cache entries. - * - * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain - * has been changed and provides details of the request information - * that caused the change such as who initiated the regulatory request - * (%NL80211_ATTR_REG_INITIATOR), the wiphy_idx - * (%NL80211_ATTR_REG_ALPHA2) on which the request was made from if - * the initiator was %NL80211_REGDOM_SET_BY_COUNTRY_IE or - * %NL80211_REGDOM_SET_BY_DRIVER, the type of regulatory domain - * set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is - * %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on - * to (%NL80211_ATTR_REG_ALPHA2). - * @NL80211_CMD_REG_BEACON_HINT: indicates to userspace that an AP beacon - * has been found while world roaming thus enabling active scan or - * any mode of operation that initiates TX (beacons) on a channel - * where we would not have been able to do either before. As an example - * if you are world roaming (regulatory domain set to world or if your - * driver is using a custom world roaming regulatory domain) and while - * doing a passive scan on the 5 GHz band you find an AP there (if not - * on a DFS channel) you will now be able to actively scan for that AP - * or use AP mode on your card on that same channel. Note that this will - * never be used for channels 1-11 on the 2 GHz band as they are always - * enabled world wide. This beacon hint is only sent if your device had - * either disabled active scanning or beaconing on a channel. We send to - * userspace the wiphy on which we removed a restriction from - * (%NL80211_ATTR_WIPHY) and the channel on which this occurred - * before (%NL80211_ATTR_FREQ_BEFORE) and after (%NL80211_ATTR_FREQ_AFTER) - * the beacon hint was processed. - * - * @NL80211_CMD_AUTHENTICATE: authentication request and notification. - * This command is used both as a command (request to authenticate) and - * as an event on the "mlme" multicast group indicating completion of the - * authentication process. - * When used as a command, %NL80211_ATTR_IFINDEX is used to identify the - * interface. %NL80211_ATTR_MAC is used to specify PeerSTAAddress (and - * BSSID in case of station mode). %NL80211_ATTR_SSID is used to specify - * the SSID (mainly for association, but is included in authentication - * request, too, to help BSS selection. %NL80211_ATTR_WIPHY_FREQ is used - * to specify the frequence of the channel in MHz. %NL80211_ATTR_AUTH_TYPE - * is used to specify the authentication type. %NL80211_ATTR_IE is used to - * define IEs (VendorSpecificInfo, but also including RSN IE and FT IEs) - * to be added to the frame. - * When used as an event, this reports reception of an Authentication - * frame in station and IBSS modes when the local MLME processed the - * frame, i.e., it was for the local STA and was received in correct - * state. This is similar to MLME-AUTHENTICATE.confirm primitive in the - * MLME SAP interface (kernel providing MLME, userspace SME). The - * included %NL80211_ATTR_FRAME attribute contains the management frame - * (including both the header and frame body, but not FCS). This event is - * also used to indicate if the authentication attempt timed out. In that - * case the %NL80211_ATTR_FRAME attribute is replaced with a - * %NL80211_ATTR_TIMED_OUT flag (and %NL80211_ATTR_MAC to indicate which - * pending authentication timed out). - * @NL80211_CMD_ASSOCIATE: association request and notification; like - * NL80211_CMD_AUTHENTICATE but for Association and Reassociation - * (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request, - * MLME-ASSOCIATE.confirm or MLME-REASSOCIATE.confirm primitives). The - * %NL80211_ATTR_PREV_BSSID attribute is used to specify whether the - * request is for the initial association to an ESS (that attribute not - * included) or for reassociation within the ESS (that attribute is - * included). - * @NL80211_CMD_DEAUTHENTICATE: deauthentication request and notification; like - * NL80211_CMD_AUTHENTICATE but for Deauthentication frames (similar to - * MLME-DEAUTHENTICATION.request and MLME-DEAUTHENTICATE.indication - * primitives). - * @NL80211_CMD_DISASSOCIATE: disassociation request and notification; like - * NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to - * MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives). - * - * @NL80211_CMD_MICHAEL_MIC_FAILURE: notification of a locally detected Michael - * MIC (part of TKIP) failure; sent on the "mlme" multicast group; the - * event includes %NL80211_ATTR_MAC to describe the source MAC address of - * the frame with invalid MIC, %NL80211_ATTR_KEY_TYPE to show the key - * type, %NL80211_ATTR_KEY_IDX to indicate the key identifier, and - * %NL80211_ATTR_KEY_SEQ to indicate the TSC value of the frame; this - * event matches with MLME-MICHAELMICFAILURE.indication() primitive - * - * @NL80211_CMD_JOIN_IBSS: Join a new IBSS -- given at least an SSID and a - * FREQ attribute (for the initial frequency if no peer can be found) - * and optionally a MAC (as BSSID) and FREQ_FIXED attribute if those - * should be fixed rather than automatically determined. Can only be - * executed on a network interface that is UP, and fixed BSSID/FREQ - * may be rejected. Another optional parameter is the beacon interval, - * given in the %NL80211_ATTR_BEACON_INTERVAL attribute, which if not - * given defaults to 100 TU (102.4ms). - * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is - * determined by the network interface. - * - * @NL80211_CMD_TESTMODE: testmode command, takes a wiphy (or ifindex) attribute - * to identify the device, and the TESTDATA blob attribute to pass through - * to the driver. - * - * @NL80211_CMD_CONNECT: connection request and notification; this command - * requests to connect to a specified network but without separating - * auth and assoc steps. For this, you need to specify the SSID in a - * %NL80211_ATTR_SSID attribute, and can optionally specify the association - * IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_USE_MFP, - * %NL80211_ATTR_MAC, %NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT, - * %NL80211_ATTR_CONTROL_PORT_ETHERTYPE, - * %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, %NL80211_ATTR_MAC_HINT, and - * %NL80211_ATTR_WIPHY_FREQ_HINT. - * If included, %NL80211_ATTR_MAC and %NL80211_ATTR_WIPHY_FREQ are - * restrictions on BSS selection, i.e., they effectively prevent roaming - * within the ESS. %NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT - * can be included to provide a recommendation of the initial BSS while - * allowing the driver to roam to other BSSes within the ESS and also to - * ignore this recommendation if the indicated BSS is not ideal. Only one - * set of BSSID,frequency parameters is used (i.e., either the enforcing - * %NL80211_ATTR_MAC,%NL80211_ATTR_WIPHY_FREQ or the less strict - * %NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT). - * %NL80211_ATTR_PREV_BSSID can be used to request a reassociation within - * the ESS in case the device is already associated and an association with - * a different BSS is desired. - * Background scan period can optionally be - * specified in %NL80211_ATTR_BG_SCAN_PERIOD, - * if not specified default background scan configuration - * in driver is used and if period value is 0, bg scan will be disabled. - * This attribute is ignored if driver does not support roam scan. - * It is also sent as an event, with the BSSID and response IEs when the - * connection is established or failed to be established. This can be - * determined by the %NL80211_ATTR_STATUS_CODE attribute (0 = success, - * non-zero = failure). If %NL80211_ATTR_TIMED_OUT is included in the - * event, the connection attempt failed due to not being able to initiate - * authentication/association or not receiving a response from the AP. - * Non-zero %NL80211_ATTR_STATUS_CODE value is indicated in that case as - * well to remain backwards compatible. - * @NL80211_CMD_ROAM: request that the card roam (currently not implemented), - * sent as an event when the card/driver roamed by itself. - * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify - * userspace that a connection was dropped by the AP or due to other - * reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and - * %NL80211_ATTR_REASON_CODE attributes are used. - * - * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices - * associated with this wiphy must be down and will follow. - * - * @NL80211_CMD_REMAIN_ON_CHANNEL: Request to remain awake on the specified - * channel for the specified amount of time. This can be used to do - * off-channel operations like transmit a Public Action frame and wait for - * a response while being associated to an AP on another channel. - * %NL80211_ATTR_IFINDEX is used to specify which interface (and thus - * radio) is used. %NL80211_ATTR_WIPHY_FREQ is used to specify the - * frequency for the operation. - * %NL80211_ATTR_DURATION is used to specify the duration in milliseconds - * to remain on the channel. This command is also used as an event to - * notify when the requested duration starts (it may take a while for the - * driver to schedule this time due to other concurrent needs for the - * radio). - * When called, this operation returns a cookie (%NL80211_ATTR_COOKIE) - * that will be included with any events pertaining to this request; - * the cookie is also used to cancel the request. - * @NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL: This command can be used to cancel a - * pending remain-on-channel duration if the desired operation has been - * completed prior to expiration of the originally requested duration. - * %NL80211_ATTR_WIPHY or %NL80211_ATTR_IFINDEX is used to specify the - * radio. The %NL80211_ATTR_COOKIE attribute must be given as well to - * uniquely identify the request. - * This command is also used as an event to notify when a requested - * remain-on-channel duration has expired. - * - * @NL80211_CMD_SET_TX_BITRATE_MASK: Set the mask of rates to be used in TX - * rate selection. %NL80211_ATTR_IFINDEX is used to specify the interface - * and @NL80211_ATTR_TX_RATES the set of allowed rates. - * - * @NL80211_CMD_REGISTER_FRAME: Register for receiving certain mgmt frames - * (via @NL80211_CMD_FRAME) for processing in userspace. This command - * requires an interface index, a frame type attribute (optional for - * backward compatibility reasons, if not given assumes action frames) - * and a match attribute containing the first few bytes of the frame - * that should match, e.g. a single byte for only a category match or - * four bytes for vendor frames including the OUI. The registration - * cannot be dropped, but is removed automatically when the netlink - * socket is closed. Multiple registrations can be made. - * @NL80211_CMD_REGISTER_ACTION: Alias for @NL80211_CMD_REGISTER_FRAME for - * backward compatibility - * @NL80211_CMD_FRAME: Management frame TX request and RX notification. This - * command is used both as a request to transmit a management frame and - * as an event indicating reception of a frame that was not processed in - * kernel code, but is for us (i.e., which may need to be processed in a - * user space application). %NL80211_ATTR_FRAME is used to specify the - * frame contents (including header). %NL80211_ATTR_WIPHY_FREQ is used - * to indicate on which channel the frame is to be transmitted or was - * received. If this channel is not the current channel (remain-on-channel - * or the operational channel) the device will switch to the given channel - * and transmit the frame, optionally waiting for a response for the time - * specified using %NL80211_ATTR_DURATION. When called, this operation - * returns a cookie (%NL80211_ATTR_COOKIE) that will be included with the - * TX status event pertaining to the TX request. - * %NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the - * management frames at CCK rate or not in 2GHz band. - * %NL80211_ATTR_CSA_C_OFFSETS_TX is an array of offsets to CSA - * counters which will be updated to the current value. This attribute - * is used during CSA period. - * @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this - * command may be used with the corresponding cookie to cancel the wait - * time if it is known that it is no longer necessary. - * @NL80211_CMD_ACTION: Alias for @NL80211_CMD_FRAME for backward compatibility. - * @NL80211_CMD_FRAME_TX_STATUS: Report TX status of a management frame - * transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies - * the TX command and %NL80211_ATTR_FRAME includes the contents of the - * frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged - * the frame. - * @NL80211_CMD_ACTION_TX_STATUS: Alias for @NL80211_CMD_FRAME_TX_STATUS for - * backward compatibility. - * - * @NL80211_CMD_SET_POWER_SAVE: Set powersave, using %NL80211_ATTR_PS_STATE - * @NL80211_CMD_GET_POWER_SAVE: Get powersave status in %NL80211_ATTR_PS_STATE - * - * @NL80211_CMD_SET_CQM: Connection quality monitor configuration. This command - * is used to configure connection quality monitoring notification trigger - * levels. - * @NL80211_CMD_NOTIFY_CQM: Connection quality monitor notification. This - * command is used as an event to indicate the that a trigger level was - * reached. - * @NL80211_CMD_SET_CHANNEL: Set the channel (using %NL80211_ATTR_WIPHY_FREQ - * and the attributes determining channel width) the given interface - * (identifed by %NL80211_ATTR_IFINDEX) shall operate on. - * In case multiple channels are supported by the device, the mechanism - * with which it switches channels is implementation-defined. - * When a monitor interface is given, it can only switch channel while - * no other interfaces are operating to avoid disturbing the operation - * of any other interfaces, and other interfaces will again take - * precedence when they are used. - * - * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface. - * - * @NL80211_CMD_JOIN_MESH: Join a mesh. The mesh ID must be given, and initial - * mesh config parameters may be given. - * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the - * network is determined by the network interface. - * - * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame - * notification. This event is used to indicate that an unprotected - * deauthentication frame was dropped when MFP is in use. - * @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame - * notification. This event is used to indicate that an unprotected - * disassociation frame was dropped when MFP is in use. - * - * @NL80211_CMD_NEW_PEER_CANDIDATE: Notification on the reception of a - * beacon or probe response from a compatible mesh peer. This is only - * sent while no station information (sta_info) exists for the new peer - * candidate and when @NL80211_MESH_SETUP_USERSPACE_AUTH, - * @NL80211_MESH_SETUP_USERSPACE_AMPE, or - * @NL80211_MESH_SETUP_USERSPACE_MPM is set. On reception of this - * notification, userspace may decide to create a new station - * (@NL80211_CMD_NEW_STATION). To stop this notification from - * reoccurring, the userspace authentication daemon may want to create the - * new station with the AUTHENTICATED flag unset and maybe change it later - * depending on the authentication result. - * - * @NL80211_CMD_GET_WOWLAN: get Wake-on-Wireless-LAN (WoWLAN) settings. - * @NL80211_CMD_SET_WOWLAN: set Wake-on-Wireless-LAN (WoWLAN) settings. - * Since wireless is more complex than wired ethernet, it supports - * various triggers. These triggers can be configured through this - * command with the %NL80211_ATTR_WOWLAN_TRIGGERS attribute. For - * more background information, see - * http://wireless.kernel.org/en/users/Documentation/WoWLAN. - * The @NL80211_CMD_SET_WOWLAN command can also be used as a notification - * from the driver reporting the wakeup reason. In this case, the - * @NL80211_ATTR_WOWLAN_TRIGGERS attribute will contain the reason - * for the wakeup, if it was caused by wireless. If it is not present - * in the wakeup notification, the wireless device didn't cause the - * wakeup but reports that it was woken up. - * - * @NL80211_CMD_SET_REKEY_OFFLOAD: This command is used give the driver - * the necessary information for supporting GTK rekey offload. This - * feature is typically used during WoWLAN. The configuration data - * is contained in %NL80211_ATTR_REKEY_DATA (which is nested and - * contains the data in sub-attributes). After rekeying happened, - * this command may also be sent by the driver as an MLME event to - * inform userspace of the new replay counter. - * - * @NL80211_CMD_PMKSA_CANDIDATE: This is used as an event to inform userspace - * of PMKSA caching dandidates. - * - * @NL80211_CMD_TDLS_OPER: Perform a high-level TDLS command (e.g. link setup). - * In addition, this can be used as an event to request userspace to take - * actions on TDLS links (set up a new link or tear down an existing one). - * In such events, %NL80211_ATTR_TDLS_OPERATION indicates the requested - * operation, %NL80211_ATTR_MAC contains the peer MAC address, and - * %NL80211_ATTR_REASON_CODE the reason code to be used (only with - * %NL80211_TDLS_TEARDOWN). - * @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame. The - * %NL80211_ATTR_TDLS_ACTION attribute determines the type of frame to be - * sent. Public Action codes (802.11-2012 8.1.5.1) will be sent as - * 802.11 management frames, while TDLS action codes (802.11-2012 - * 8.5.13.1) will be encapsulated and sent as data frames. The currently - * supported Public Action code is %WLAN_PUB_ACTION_TDLS_DISCOVER_RES - * and the currently supported TDLS actions codes are given in - * &enum ieee80211_tdls_actioncode. - * - * @NL80211_CMD_UNEXPECTED_FRAME: Used by an application controlling an AP - * (or GO) interface (i.e. hostapd) to ask for unexpected frames to - * implement sending deauth to stations that send unexpected class 3 - * frames. Also used as the event sent by the kernel when such a frame - * is received. - * For the event, the %NL80211_ATTR_MAC attribute carries the TA and - * other attributes like the interface index are present. - * If used as the command it must have an interface index and you can - * only unsubscribe from the event by closing the socket. Subscription - * is also for %NL80211_CMD_UNEXPECTED_4ADDR_FRAME events. - * - * @NL80211_CMD_UNEXPECTED_4ADDR_FRAME: Sent as an event indicating that the - * associated station identified by %NL80211_ATTR_MAC sent a 4addr frame - * and wasn't already in a 4-addr VLAN. The event will be sent similarly - * to the %NL80211_CMD_UNEXPECTED_FRAME event, to the same listener. - * - * @NL80211_CMD_PROBE_CLIENT: Probe an associated station on an AP interface - * by sending a null data frame to it and reporting when the frame is - * acknowleged. This is used to allow timing out inactive clients. Uses - * %NL80211_ATTR_IFINDEX and %NL80211_ATTR_MAC. The command returns a - * direct reply with an %NL80211_ATTR_COOKIE that is later used to match - * up the event with the request. The event includes the same data and - * has %NL80211_ATTR_ACK set if the frame was ACKed. - * - * @NL80211_CMD_REGISTER_BEACONS: Register this socket to receive beacons from - * other BSSes when any interfaces are in AP mode. This helps implement - * OLBC handling in hostapd. Beacons are reported in %NL80211_CMD_FRAME - * messages. Note that per PHY only one application may register. - * - * @NL80211_CMD_SET_NOACK_MAP: sets a bitmap for the individual TIDs whether - * No Acknowledgement Policy should be applied. - * - * @NL80211_CMD_CH_SWITCH_NOTIFY: An AP or GO may decide to switch channels - * independently of the userspace SME, send this event indicating - * %NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ and the - * attributes determining channel width. This indication may also be - * sent when a remotely-initiated switch (e.g., when a STA receives a CSA - * from the remote AP) is completed; - * - * @NL80211_CMD_CH_SWITCH_STARTED_NOTIFY: Notify that a channel switch - * has been started on an interface, regardless of the initiator - * (ie. whether it was requested from a remote device or - * initiated on our own). It indicates that - * %NL80211_ATTR_IFINDEX will be on %NL80211_ATTR_WIPHY_FREQ - * after %NL80211_ATTR_CH_SWITCH_COUNT TBTT's. The userspace may - * decide to react to this indication by requesting other - * interfaces to change channel as well. - * - * @NL80211_CMD_START_P2P_DEVICE: Start the given P2P Device, identified by - * its %NL80211_ATTR_WDEV identifier. It must have been created with - * %NL80211_CMD_NEW_INTERFACE previously. After it has been started, the - * P2P Device can be used for P2P operations, e.g. remain-on-channel and - * public action frame TX. - * @NL80211_CMD_STOP_P2P_DEVICE: Stop the given P2P Device, identified by - * its %NL80211_ATTR_WDEV identifier. - * - * @NL80211_CMD_CONN_FAILED: connection request to an AP failed; used to - * notify userspace that AP has rejected the connection request from a - * station, due to particular reason. %NL80211_ATTR_CONN_FAILED_REASON - * is used for this. - * - * @NL80211_CMD_SET_MCAST_RATE: Change the rate used to send multicast frames - * for IBSS or MESH vif. - * - * @NL80211_CMD_SET_MAC_ACL: sets ACL for MAC address based access control. - * This is to be used with the drivers advertising the support of MAC - * address based access control. List of MAC addresses is passed in - * %NL80211_ATTR_MAC_ADDRS and ACL policy is passed in - * %NL80211_ATTR_ACL_POLICY. Driver will enable ACL with this list, if it - * is not already done. The new list will replace any existing list. Driver - * will clear its ACL when the list of MAC addresses passed is empty. This - * command is used in AP/P2P GO mode. Driver has to make sure to clear its - * ACL list during %NL80211_CMD_STOP_AP. - * - * @NL80211_CMD_RADAR_DETECT: Start a Channel availability check (CAC). Once - * a radar is detected or the channel availability scan (CAC) has finished - * or was aborted, or a radar was detected, usermode will be notified with - * this event. This command is also used to notify userspace about radars - * while operating on this channel. - * %NL80211_ATTR_RADAR_EVENT is used to inform about the type of the - * event. - * - * @NL80211_CMD_GET_PROTOCOL_FEATURES: Get global nl80211 protocol features, - * i.e. features for the nl80211 protocol rather than device features. - * Returns the features in the %NL80211_ATTR_PROTOCOL_FEATURES bitmap. - * - * @NL80211_CMD_UPDATE_FT_IES: Pass down the most up-to-date Fast Transition - * Information Element to the WLAN driver - * - * @NL80211_CMD_FT_EVENT: Send a Fast transition event from the WLAN driver - * to the supplicant. This will carry the target AP's MAC address along - * with the relevant Information Elements. This event is used to report - * received FT IEs (MDIE, FTIE, RSN IE, TIE, RICIE). - * - * @NL80211_CMD_CRIT_PROTOCOL_START: Indicates user-space will start running - * a critical protocol that needs more reliability in the connection to - * complete. - * - * @NL80211_CMD_CRIT_PROTOCOL_STOP: Indicates the connection reliability can - * return back to normal. - * - * @NL80211_CMD_GET_COALESCE: Get currently supported coalesce rules. - * @NL80211_CMD_SET_COALESCE: Configure coalesce rules or clear existing rules. - * - * @NL80211_CMD_CHANNEL_SWITCH: Perform a channel switch by announcing the - * the new channel information (Channel Switch Announcement - CSA) - * in the beacon for some time (as defined in the - * %NL80211_ATTR_CH_SWITCH_COUNT parameter) and then change to the - * new channel. Userspace provides the new channel information (using - * %NL80211_ATTR_WIPHY_FREQ and the attributes determining channel - * width). %NL80211_ATTR_CH_SWITCH_BLOCK_TX may be supplied to inform - * other station that transmission must be blocked until the channel - * switch is complete. - * - * @NL80211_CMD_VENDOR: Vendor-specified command/event. The command is specified - * by the %NL80211_ATTR_VENDOR_ID attribute and a sub-command in - * %NL80211_ATTR_VENDOR_SUBCMD. Parameter(s) can be transported in - * %NL80211_ATTR_VENDOR_DATA. - * For feature advertisement, the %NL80211_ATTR_VENDOR_DATA attribute is - * used in the wiphy data as a nested attribute containing descriptions - * (&struct nl80211_vendor_cmd_info) of the supported vendor commands. - * This may also be sent as an event with the same attributes. - * - * @NL80211_CMD_SET_QOS_MAP: Set Interworking QoS mapping for IP DSCP values. - * The QoS mapping information is included in %NL80211_ATTR_QOS_MAP. If - * that attribute is not included, QoS mapping is disabled. Since this - * QoS mapping is relevant for IP packets, it is only valid during an - * association. This is cleared on disassociation and AP restart. - * - * @NL80211_CMD_ADD_TX_TS: Ask the kernel to add a traffic stream for the given - * %NL80211_ATTR_TSID and %NL80211_ATTR_MAC with %NL80211_ATTR_USER_PRIO - * and %NL80211_ATTR_ADMITTED_TIME parameters. - * Note that the action frame handshake with the AP shall be handled by - * userspace via the normal management RX/TX framework, this only sets - * up the TX TS in the driver/device. - * If the admitted time attribute is not added then the request just checks - * if a subsequent setup could be successful, the intent is to use this to - * avoid setting up a session with the AP when local restrictions would - * make that impossible. However, the subsequent "real" setup may still - * fail even if the check was successful. - * @NL80211_CMD_DEL_TX_TS: Remove an existing TS with the %NL80211_ATTR_TSID - * and %NL80211_ATTR_MAC parameters. It isn't necessary to call this - * before removing a station entry entirely, or before disassociating - * or similar, cleanup will happen in the driver/device in this case. - * - * @NL80211_CMD_GET_MPP: Get mesh path attributes for mesh proxy path to - * destination %NL80211_ATTR_MAC on the interface identified by - * %NL80211_ATTR_IFINDEX. - * - * @NL80211_CMD_JOIN_OCB: Join the OCB network. The center frequency and - * bandwidth of a channel must be given. - * @NL80211_CMD_LEAVE_OCB: Leave the OCB network -- no special arguments, the - * network is determined by the network interface. - * - * @NL80211_CMD_TDLS_CHANNEL_SWITCH: Start channel-switching with a TDLS peer, - * identified by the %NL80211_ATTR_MAC parameter. A target channel is - * provided via %NL80211_ATTR_WIPHY_FREQ and other attributes determining - * channel width/type. The target operating class is given via - * %NL80211_ATTR_OPER_CLASS. - * The driver is responsible for continually initiating channel-switching - * operations and returning to the base channel for communication with the - * AP. - * @NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH: Stop channel-switching with a TDLS - * peer given by %NL80211_ATTR_MAC. Both peers must be on the base channel - * when this command completes. - * - * @NL80211_CMD_WIPHY_REG_CHANGE: Similar to %NL80211_CMD_REG_CHANGE, but used - * as an event to indicate changes for devices with wiphy-specific regdom - * management. - * - * @NL80211_CMD_ABORT_SCAN: Stop an ongoing scan. Returns -ENOENT if a scan is - * not running. The driver indicates the status of the scan through - * cfg80211_scan_done(). - * - * @NL80211_CMD_START_NAN: Start NAN operation, identified by its - * %NL80211_ATTR_WDEV interface. This interface must have been previously - * created with %NL80211_CMD_NEW_INTERFACE. After it has been started, the - * NAN interface will create or join a cluster. This command must have a - * valid %NL80211_ATTR_NAN_MASTER_PREF attribute and optional - * %NL80211_ATTR_NAN_DUAL attributes. - * After this command NAN functions can be added. - * @NL80211_CMD_STOP_NAN: Stop the NAN operation, identified by - * its %NL80211_ATTR_WDEV interface. - * @NL80211_CMD_ADD_NAN_FUNCTION: Add a NAN function. The function is defined - * with %NL80211_ATTR_NAN_FUNC nested attribute. When called, this - * operation returns the strictly positive and unique instance id - * (%NL80211_ATTR_NAN_FUNC_INST_ID) and a cookie (%NL80211_ATTR_COOKIE) - * of the function upon success. - * Since instance ID's can be re-used, this cookie is the right - * way to identify the function. This will avoid races when a termination - * event is handled by the user space after it has already added a new - * function that got the same instance id from the kernel as the one - * which just terminated. - * This cookie may be used in NAN events even before the command - * returns, so userspace shouldn't process NAN events until it processes - * the response to this command. - * Look at %NL80211_ATTR_SOCKET_OWNER as well. - * @NL80211_CMD_DEL_NAN_FUNCTION: Delete a NAN function by cookie. - * This command is also used as a notification sent when a NAN function is - * terminated. This will contain a %NL80211_ATTR_NAN_FUNC_INST_ID - * and %NL80211_ATTR_COOKIE attributes. - * @NL80211_CMD_CHANGE_NAN_CONFIG: Change current NAN configuration. NAN - * must be operational (%NL80211_CMD_START_NAN was executed). - * It must contain at least one of the following attributes: - * %NL80211_ATTR_NAN_MASTER_PREF, %NL80211_ATTR_NAN_DUAL. - * @NL80211_CMD_NAN_FUNC_MATCH: Notification sent when a match is reported. - * This will contain a %NL80211_ATTR_NAN_MATCH nested attribute and - * %NL80211_ATTR_COOKIE. - * - * @NL80211_CMD_MAX: highest used command number - * @__NL80211_CMD_AFTER_LAST: internal use - */ -enum nl80211_commands { -/* don't change the order or add anything between, this is ABI! */ - NL80211_CMD_UNSPEC, - - NL80211_CMD_GET_WIPHY, /* can dump */ - NL80211_CMD_SET_WIPHY, - NL80211_CMD_NEW_WIPHY, - NL80211_CMD_DEL_WIPHY, - - NL80211_CMD_GET_INTERFACE, /* can dump */ - NL80211_CMD_SET_INTERFACE, - NL80211_CMD_NEW_INTERFACE, - NL80211_CMD_DEL_INTERFACE, - - NL80211_CMD_GET_KEY, - NL80211_CMD_SET_KEY, - NL80211_CMD_NEW_KEY, - NL80211_CMD_DEL_KEY, - - NL80211_CMD_GET_BEACON, - NL80211_CMD_SET_BEACON, - NL80211_CMD_START_AP, - NL80211_CMD_NEW_BEACON = NL80211_CMD_START_AP, - NL80211_CMD_STOP_AP, - NL80211_CMD_DEL_BEACON = NL80211_CMD_STOP_AP, - - NL80211_CMD_GET_STATION, - NL80211_CMD_SET_STATION, - NL80211_CMD_NEW_STATION, - NL80211_CMD_DEL_STATION, - - NL80211_CMD_GET_MPATH, - NL80211_CMD_SET_MPATH, - NL80211_CMD_NEW_MPATH, - NL80211_CMD_DEL_MPATH, - - NL80211_CMD_SET_BSS, - - NL80211_CMD_SET_REG, - NL80211_CMD_REQ_SET_REG, - - NL80211_CMD_GET_MESH_CONFIG, - NL80211_CMD_SET_MESH_CONFIG, - - NL80211_CMD_SET_MGMT_EXTRA_IE /* reserved; not used */, - - NL80211_CMD_GET_REG, - - NL80211_CMD_GET_SCAN, - NL80211_CMD_TRIGGER_SCAN, - NL80211_CMD_NEW_SCAN_RESULTS, - NL80211_CMD_SCAN_ABORTED, - - NL80211_CMD_REG_CHANGE, - - NL80211_CMD_AUTHENTICATE, - NL80211_CMD_ASSOCIATE, - NL80211_CMD_DEAUTHENTICATE, - NL80211_CMD_DISASSOCIATE, - - NL80211_CMD_MICHAEL_MIC_FAILURE, - - NL80211_CMD_REG_BEACON_HINT, - - NL80211_CMD_JOIN_IBSS, - NL80211_CMD_LEAVE_IBSS, - - NL80211_CMD_TESTMODE, - - NL80211_CMD_CONNECT, - NL80211_CMD_ROAM, - NL80211_CMD_DISCONNECT, - - NL80211_CMD_SET_WIPHY_NETNS, - - NL80211_CMD_GET_SURVEY, - NL80211_CMD_NEW_SURVEY_RESULTS, - - NL80211_CMD_SET_PMKSA, - NL80211_CMD_DEL_PMKSA, - NL80211_CMD_FLUSH_PMKSA, - - NL80211_CMD_REMAIN_ON_CHANNEL, - NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, - - NL80211_CMD_SET_TX_BITRATE_MASK, - - NL80211_CMD_REGISTER_FRAME, - NL80211_CMD_REGISTER_ACTION = NL80211_CMD_REGISTER_FRAME, - NL80211_CMD_FRAME, - NL80211_CMD_ACTION = NL80211_CMD_FRAME, - NL80211_CMD_FRAME_TX_STATUS, - NL80211_CMD_ACTION_TX_STATUS = NL80211_CMD_FRAME_TX_STATUS, - - NL80211_CMD_SET_POWER_SAVE, - NL80211_CMD_GET_POWER_SAVE, - - NL80211_CMD_SET_CQM, - NL80211_CMD_NOTIFY_CQM, - - NL80211_CMD_SET_CHANNEL, - NL80211_CMD_SET_WDS_PEER, - - NL80211_CMD_FRAME_WAIT_CANCEL, - - NL80211_CMD_JOIN_MESH, - NL80211_CMD_LEAVE_MESH, - - NL80211_CMD_UNPROT_DEAUTHENTICATE, - NL80211_CMD_UNPROT_DISASSOCIATE, - - NL80211_CMD_NEW_PEER_CANDIDATE, - - NL80211_CMD_GET_WOWLAN, - NL80211_CMD_SET_WOWLAN, - - NL80211_CMD_START_SCHED_SCAN, - NL80211_CMD_STOP_SCHED_SCAN, - NL80211_CMD_SCHED_SCAN_RESULTS, - NL80211_CMD_SCHED_SCAN_STOPPED, - - NL80211_CMD_SET_REKEY_OFFLOAD, - - NL80211_CMD_PMKSA_CANDIDATE, - - NL80211_CMD_TDLS_OPER, - NL80211_CMD_TDLS_MGMT, - - NL80211_CMD_UNEXPECTED_FRAME, - - NL80211_CMD_PROBE_CLIENT, - - NL80211_CMD_REGISTER_BEACONS, - - NL80211_CMD_UNEXPECTED_4ADDR_FRAME, - - NL80211_CMD_SET_NOACK_MAP, - - NL80211_CMD_CH_SWITCH_NOTIFY, - - NL80211_CMD_START_P2P_DEVICE, - NL80211_CMD_STOP_P2P_DEVICE, - - NL80211_CMD_CONN_FAILED, - - NL80211_CMD_SET_MCAST_RATE, - - NL80211_CMD_SET_MAC_ACL, - - NL80211_CMD_RADAR_DETECT, - - NL80211_CMD_GET_PROTOCOL_FEATURES, - - NL80211_CMD_UPDATE_FT_IES, - NL80211_CMD_FT_EVENT, - - NL80211_CMD_CRIT_PROTOCOL_START, - NL80211_CMD_CRIT_PROTOCOL_STOP, - - NL80211_CMD_GET_COALESCE, - NL80211_CMD_SET_COALESCE, - - NL80211_CMD_CHANNEL_SWITCH, - - NL80211_CMD_VENDOR, - - NL80211_CMD_SET_QOS_MAP, - - NL80211_CMD_ADD_TX_TS, - NL80211_CMD_DEL_TX_TS, - - NL80211_CMD_GET_MPP, - - NL80211_CMD_JOIN_OCB, - NL80211_CMD_LEAVE_OCB, - - NL80211_CMD_CH_SWITCH_STARTED_NOTIFY, - - NL80211_CMD_TDLS_CHANNEL_SWITCH, - NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH, - - NL80211_CMD_WIPHY_REG_CHANGE, - - NL80211_CMD_ABORT_SCAN, - - NL80211_CMD_START_NAN, - NL80211_CMD_STOP_NAN, - NL80211_CMD_ADD_NAN_FUNCTION, - NL80211_CMD_DEL_NAN_FUNCTION, - NL80211_CMD_CHANGE_NAN_CONFIG, - NL80211_CMD_NAN_MATCH, - - /* add new commands above here */ - - /* used to define NL80211_CMD_MAX below */ - __NL80211_CMD_AFTER_LAST, - NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1 -}; - -/* - * Allow user space programs to use #ifdef on new commands by defining them - * here - */ -#define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS -#define NL80211_CMD_SET_MGMT_EXTRA_IE NL80211_CMD_SET_MGMT_EXTRA_IE -#define NL80211_CMD_REG_CHANGE NL80211_CMD_REG_CHANGE -#define NL80211_CMD_AUTHENTICATE NL80211_CMD_AUTHENTICATE -#define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE -#define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE -#define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE -#define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT - -#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS - -/* source-level API compatibility */ -#define NL80211_CMD_GET_MESH_PARAMS NL80211_CMD_GET_MESH_CONFIG -#define NL80211_CMD_SET_MESH_PARAMS NL80211_CMD_SET_MESH_CONFIG -#define NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE NL80211_MESH_SETUP_IE - -/** - * enum nl80211_attrs - nl80211 netlink attributes - * - * @NL80211_ATTR_UNSPEC: unspecified attribute to catch errors - * - * @NL80211_ATTR_WIPHY: index of wiphy to operate on, cf. - * /sys/class/ieee80211//index - * @NL80211_ATTR_WIPHY_NAME: wiphy name (used for renaming) - * @NL80211_ATTR_WIPHY_TXQ_PARAMS: a nested array of TX queue parameters - * @NL80211_ATTR_WIPHY_FREQ: frequency of the selected channel in MHz, - * defines the channel together with the (deprecated) - * %NL80211_ATTR_WIPHY_CHANNEL_TYPE attribute or the attributes - * %NL80211_ATTR_CHANNEL_WIDTH and if needed %NL80211_ATTR_CENTER_FREQ1 - * and %NL80211_ATTR_CENTER_FREQ2 - * @NL80211_ATTR_CHANNEL_WIDTH: u32 attribute containing one of the values - * of &enum nl80211_chan_width, describing the channel width. See the - * documentation of the enum for more information. - * @NL80211_ATTR_CENTER_FREQ1: Center frequency of the first part of the - * channel, used for anything but 20 MHz bandwidth - * @NL80211_ATTR_CENTER_FREQ2: Center frequency of the second part of the - * channel, used only for 80+80 MHz bandwidth - * @NL80211_ATTR_WIPHY_CHANNEL_TYPE: included with NL80211_ATTR_WIPHY_FREQ - * if HT20 or HT40 are to be used (i.e., HT disabled if not included): - * NL80211_CHAN_NO_HT = HT not allowed (i.e., same as not including - * this attribute) - * NL80211_CHAN_HT20 = HT20 only - * NL80211_CHAN_HT40MINUS = secondary channel is below the primary channel - * NL80211_CHAN_HT40PLUS = secondary channel is above the primary channel - * This attribute is now deprecated. - * @NL80211_ATTR_WIPHY_RETRY_SHORT: TX retry limit for frames whose length is - * less than or equal to the RTS threshold; allowed range: 1..255; - * dot11ShortRetryLimit; u8 - * @NL80211_ATTR_WIPHY_RETRY_LONG: TX retry limit for frames whose length is - * greater than the RTS threshold; allowed range: 1..255; - * dot11ShortLongLimit; u8 - * @NL80211_ATTR_WIPHY_FRAG_THRESHOLD: fragmentation threshold, i.e., maximum - * length in octets for frames; allowed range: 256..8000, disable - * fragmentation with (u32)-1; dot11FragmentationThreshold; u32 - * @NL80211_ATTR_WIPHY_RTS_THRESHOLD: RTS threshold (TX frames with length - * larger than or equal to this use RTS/CTS handshake); allowed range: - * 0..65536, disable with (u32)-1; dot11RTSThreshold; u32 - * @NL80211_ATTR_WIPHY_COVERAGE_CLASS: Coverage Class as defined by IEEE 802.11 - * section 7.3.2.9; dot11CoverageClass; u8 - * - * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on - * @NL80211_ATTR_IFNAME: network interface name - * @NL80211_ATTR_IFTYPE: type of virtual interface, see &enum nl80211_iftype - * - * @NL80211_ATTR_WDEV: wireless device identifier, used for pseudo-devices - * that don't have a netdev (u64) - * - * @NL80211_ATTR_MAC: MAC address (various uses) - * - * @NL80211_ATTR_KEY_DATA: (temporal) key data; for TKIP this consists of - * 16 bytes encryption key followed by 8 bytes each for TX and RX MIC - * keys - * @NL80211_ATTR_KEY_IDX: key ID (u8, 0-3) - * @NL80211_ATTR_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11 - * section 7.3.2.25.1, e.g. 0x000FAC04) - * @NL80211_ATTR_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and - * CCMP keys, each six bytes in little endian - * @NL80211_ATTR_KEY_DEFAULT: Flag attribute indicating the key is default key - * @NL80211_ATTR_KEY_DEFAULT_MGMT: Flag attribute indicating the key is the - * default management key - * @NL80211_ATTR_CIPHER_SUITES_PAIRWISE: For crypto settings for connect or - * other commands, indicates which pairwise cipher suites are used - * @NL80211_ATTR_CIPHER_SUITE_GROUP: For crypto settings for connect or - * other commands, indicates which group cipher suite is used - * - * @NL80211_ATTR_BEACON_INTERVAL: beacon interval in TU - * @NL80211_ATTR_DTIM_PERIOD: DTIM period for beaconing - * @NL80211_ATTR_BEACON_HEAD: portion of the beacon before the TIM IE - * @NL80211_ATTR_BEACON_TAIL: portion of the beacon after the TIM IE - * - * @NL80211_ATTR_STA_AID: Association ID for the station (u16) - * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of - * &enum nl80211_sta_flags (deprecated, use %NL80211_ATTR_STA_FLAGS2) - * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by - * IEEE 802.11 7.3.1.6 (u16). - * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported - * rates as defined by IEEE 802.11 7.3.2.2 but without the length - * restriction (at most %NL80211_MAX_SUPP_RATES). - * @NL80211_ATTR_STA_VLAN: interface index of VLAN interface to move station - * to, or the AP interface the station was originally added to to. - * @NL80211_ATTR_STA_INFO: information about a station, part of station info - * given for %NL80211_CMD_GET_STATION, nested attribute containing - * info as possible, see &enum nl80211_sta_info. - * - * @NL80211_ATTR_WIPHY_BANDS: Information about an operating bands, - * consisting of a nested array. - * - * @NL80211_ATTR_MESH_ID: mesh id (1-32 bytes). - * @NL80211_ATTR_STA_PLINK_ACTION: action to perform on the mesh peer link - * (see &enum nl80211_plink_action). - * @NL80211_ATTR_MPATH_NEXT_HOP: MAC address of the next hop for a mesh path. - * @NL80211_ATTR_MPATH_INFO: information about a mesh_path, part of mesh path - * info given for %NL80211_CMD_GET_MPATH, nested attribute described at - * &enum nl80211_mpath_info. - * - * @NL80211_ATTR_MNTR_FLAGS: flags, nested element with NLA_FLAG attributes of - * &enum nl80211_mntr_flags. - * - * @NL80211_ATTR_REG_ALPHA2: an ISO-3166-alpha2 country code for which the - * current regulatory domain should be set to or is already set to. - * For example, 'CR', for Costa Rica. This attribute is used by the kernel - * to query the CRDA to retrieve one regulatory domain. This attribute can - * also be used by userspace to query the kernel for the currently set - * regulatory domain. We chose an alpha2 as that is also used by the - * IEEE-802.11 country information element to identify a country. - * Users can also simply ask the wireless core to set regulatory domain - * to a specific alpha2. - * @NL80211_ATTR_REG_RULES: a nested array of regulatory domain regulatory - * rules. - * - * @NL80211_ATTR_BSS_CTS_PROT: whether CTS protection is enabled (u8, 0 or 1) - * @NL80211_ATTR_BSS_SHORT_PREAMBLE: whether short preamble is enabled - * (u8, 0 or 1) - * @NL80211_ATTR_BSS_SHORT_SLOT_TIME: whether short slot time enabled - * (u8, 0 or 1) - * @NL80211_ATTR_BSS_BASIC_RATES: basic rates, array of basic - * rates in format defined by IEEE 802.11 7.3.2.2 but without the length - * restriction (at most %NL80211_MAX_SUPP_RATES). - * - * @NL80211_ATTR_HT_CAPABILITY: HT Capability information element (from - * association request when used with NL80211_CMD_NEW_STATION) - * - * @NL80211_ATTR_SUPPORTED_IFTYPES: nested attribute containing all - * supported interface types, each a flag attribute with the number - * of the interface mode. - * - * @NL80211_ATTR_MGMT_SUBTYPE: Management frame subtype for - * %NL80211_CMD_SET_MGMT_EXTRA_IE. - * - * @NL80211_ATTR_IE: Information element(s) data (used, e.g., with - * %NL80211_CMD_SET_MGMT_EXTRA_IE). - * - * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with - * a single scan request, a wiphy attribute. - * @NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS: number of SSIDs you can - * scan with a single scheduled scan request, a wiphy attribute. - * @NL80211_ATTR_MAX_SCAN_IE_LEN: maximum length of information elements - * that can be added to a scan request - * @NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN: maximum length of information - * elements that can be added to a scheduled scan request - * @NL80211_ATTR_MAX_MATCH_SETS: maximum number of sets that can be - * used with @NL80211_ATTR_SCHED_SCAN_MATCH, a wiphy attribute. - * - * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) - * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive - * scanning and include a zero-length SSID (wildcard) for wildcard scan - * @NL80211_ATTR_BSS: scan result BSS - * - * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain - * currently in effect. This could be any of the %NL80211_REGDOM_SET_BY_* - * @NL80211_ATTR_REG_TYPE: indicates the type of the regulatory domain currently - * set. This can be one of the nl80211_reg_type (%NL80211_REGDOM_TYPE_*) - * - * @NL80211_ATTR_SUPPORTED_COMMANDS: wiphy attribute that specifies - * an array of command numbers (i.e. a mapping index to command number) - * that the driver for the given wiphy supports. - * - * @NL80211_ATTR_FRAME: frame data (binary attribute), including frame header - * and body, but not FCS; used, e.g., with NL80211_CMD_AUTHENTICATE and - * NL80211_CMD_ASSOCIATE events - * @NL80211_ATTR_SSID: SSID (binary attribute, 0..32 octets) - * @NL80211_ATTR_AUTH_TYPE: AuthenticationType, see &enum nl80211_auth_type, - * represented as a u32 - * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and - * %NL80211_CMD_DISASSOCIATE, u16 - * - * @NL80211_ATTR_KEY_TYPE: Key Type, see &enum nl80211_key_type, represented as - * a u32 - * - * @NL80211_ATTR_FREQ_BEFORE: A channel which has suffered a regulatory change - * due to considerations from a beacon hint. This attribute reflects - * the state of the channel _before_ the beacon hint processing. This - * attributes consists of a nested attribute containing - * NL80211_FREQUENCY_ATTR_* - * @NL80211_ATTR_FREQ_AFTER: A channel which has suffered a regulatory change - * due to considerations from a beacon hint. This attribute reflects - * the state of the channel _after_ the beacon hint processing. This - * attributes consists of a nested attribute containing - * NL80211_FREQUENCY_ATTR_* - * - * @NL80211_ATTR_CIPHER_SUITES: a set of u32 values indicating the supported - * cipher suites - * - * @NL80211_ATTR_FREQ_FIXED: a flag indicating the IBSS should not try to look - * for other networks on different channels - * - * @NL80211_ATTR_TIMED_OUT: a flag indicating than an operation timed out; this - * is used, e.g., with %NL80211_CMD_AUTHENTICATE event - * - * @NL80211_ATTR_USE_MFP: Whether management frame protection (IEEE 802.11w) is - * used for the association (&enum nl80211_mfp, represented as a u32); - * this attribute can be used - * with %NL80211_CMD_ASSOCIATE and %NL80211_CMD_CONNECT requests - * - * @NL80211_ATTR_STA_FLAGS2: Attribute containing a - * &struct nl80211_sta_flag_update. - * - * @NL80211_ATTR_CONTROL_PORT: A flag indicating whether user space controls - * IEEE 802.1X port, i.e., sets/clears %NL80211_STA_FLAG_AUTHORIZED, in - * station mode. If the flag is included in %NL80211_CMD_ASSOCIATE - * request, the driver will assume that the port is unauthorized until - * authorized by user space. Otherwise, port is marked authorized by - * default in station mode. - * @NL80211_ATTR_CONTROL_PORT_ETHERTYPE: A 16-bit value indicating the - * ethertype that will be used for key negotiation. It can be - * specified with the associate and connect commands. If it is not - * specified, the value defaults to 0x888E (PAE, 802.1X). This - * attribute is also used as a flag in the wiphy information to - * indicate that protocols other than PAE are supported. - * @NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT: When included along with - * %NL80211_ATTR_CONTROL_PORT_ETHERTYPE, indicates that the custom - * ethertype frames used for key negotiation must not be encrypted. - * - * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver. - * We recommend using nested, driver-specific attributes within this. - * - * @NL80211_ATTR_DISCONNECTED_BY_AP: A flag indicating that the DISCONNECT - * event was due to the AP disconnecting the station, and not due to - * a local disconnect request. - * @NL80211_ATTR_STATUS_CODE: StatusCode for the %NL80211_CMD_CONNECT - * event (u16) - * @NL80211_ATTR_PRIVACY: Flag attribute, used with connect(), indicating - * that protected APs should be used. This is also used with NEW_BEACON to - * indicate that the BSS is to use protection. - * - * @NL80211_ATTR_CIPHERS_PAIRWISE: Used with CONNECT, ASSOCIATE, and NEW_BEACON - * to indicate which unicast key ciphers will be used with the connection - * (an array of u32). - * @NL80211_ATTR_CIPHER_GROUP: Used with CONNECT, ASSOCIATE, and NEW_BEACON to - * indicate which group key cipher will be used with the connection (a - * u32). - * @NL80211_ATTR_WPA_VERSIONS: Used with CONNECT, ASSOCIATE, and NEW_BEACON to - * indicate which WPA version(s) the AP we want to associate with is using - * (a u32 with flags from &enum nl80211_wpa_versions). - * @NL80211_ATTR_AKM_SUITES: Used with CONNECT, ASSOCIATE, and NEW_BEACON to - * indicate which key management algorithm(s) to use (an array of u32). - * - * @NL80211_ATTR_REQ_IE: (Re)association request information elements as - * sent out by the card, for ROAM and successful CONNECT events. - * @NL80211_ATTR_RESP_IE: (Re)association response information elements as - * sent by peer, for ROAM and successful CONNECT events. - * - * @NL80211_ATTR_PREV_BSSID: previous BSSID, to be used in ASSOCIATE and CONNECT - * commands to specify a request to reassociate within an ESS, i.e., to use - * Reassociate Request frame (with the value of this attribute in the - * Current AP address field) instead of Association Request frame which is - * used for the initial association to an ESS. - * - * @NL80211_ATTR_KEY: key information in a nested attribute with - * %NL80211_KEY_* sub-attributes - * @NL80211_ATTR_KEYS: array of keys for static WEP keys for connect() - * and join_ibss(), key information is in a nested attribute each - * with %NL80211_KEY_* sub-attributes - * - * @NL80211_ATTR_PID: Process ID of a network namespace. - * - * @NL80211_ATTR_GENERATION: Used to indicate consistent snapshots for - * dumps. This number increases whenever the object list being - * dumped changes, and as such userspace can verify that it has - * obtained a complete and consistent snapshot by verifying that - * all dump messages contain the same generation number. If it - * changed then the list changed and the dump should be repeated - * completely from scratch. - * - * @NL80211_ATTR_4ADDR: Use 4-address frames on a virtual interface - * - * @NL80211_ATTR_SURVEY_INFO: survey information about a channel, part of - * the survey response for %NL80211_CMD_GET_SURVEY, nested attribute - * containing info as possible, see &enum survey_info. - * - * @NL80211_ATTR_PMKID: PMK material for PMKSA caching. - * @NL80211_ATTR_MAX_NUM_PMKIDS: maximum number of PMKIDs a firmware can - * cache, a wiphy attribute. - * - * @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32. - * @NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION: Device attribute that - * specifies the maximum duration that can be requested with the - * remain-on-channel operation, in milliseconds, u32. - * - * @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects. - * - * @NL80211_ATTR_TX_RATES: Nested set of attributes - * (enum nl80211_tx_rate_attributes) describing TX rates per band. The - * enum nl80211_band value is used as the index (nla_type() of the nested - * data. If a band is not included, it will be configured to allow all - * rates based on negotiated supported rates information. This attribute - * is used with %NL80211_CMD_SET_TX_BITRATE_MASK and with starting AP, - * and joining mesh networks (not IBSS yet). In the later case, it must - * specify just a single bitrate, which is to be used for the beacon. - * The driver must also specify support for this with the extended - * features NL80211_EXT_FEATURE_BEACON_RATE_LEGACY, - * NL80211_EXT_FEATURE_BEACON_RATE_HT and - * NL80211_EXT_FEATURE_BEACON_RATE_VHT. - * - * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain - * at least one byte, currently used with @NL80211_CMD_REGISTER_FRAME. - * @NL80211_ATTR_FRAME_TYPE: A u16 indicating the frame type/subtype for the - * @NL80211_CMD_REGISTER_FRAME command. - * @NL80211_ATTR_TX_FRAME_TYPES: wiphy capability attribute, which is a - * nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing - * information about which frame types can be transmitted with - * %NL80211_CMD_FRAME. - * @NL80211_ATTR_RX_FRAME_TYPES: wiphy capability attribute, which is a - * nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing - * information about which frame types can be registered for RX. - * - * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was - * acknowledged by the recipient. - * - * @NL80211_ATTR_PS_STATE: powersave state, using &enum nl80211_ps_state values. - * - * @NL80211_ATTR_CQM: connection quality monitor configuration in a - * nested attribute with %NL80211_ATTR_CQM_* sub-attributes. - * - * @NL80211_ATTR_LOCAL_STATE_CHANGE: Flag attribute to indicate that a command - * is requesting a local authentication/association state change without - * invoking actual management frame exchange. This can be used with - * NL80211_CMD_AUTHENTICATE, NL80211_CMD_DEAUTHENTICATE, - * NL80211_CMD_DISASSOCIATE. - * - * @NL80211_ATTR_AP_ISOLATE: (AP mode) Do not forward traffic between stations - * connected to this BSS. - * - * @NL80211_ATTR_WIPHY_TX_POWER_SETTING: Transmit power setting type. See - * &enum nl80211_tx_power_setting for possible values. - * @NL80211_ATTR_WIPHY_TX_POWER_LEVEL: Transmit power level in signed mBm units. - * This is used in association with @NL80211_ATTR_WIPHY_TX_POWER_SETTING - * for non-automatic settings. - * - * @NL80211_ATTR_SUPPORT_IBSS_RSN: The device supports IBSS RSN, which mostly - * means support for per-station GTKs. - * - * @NL80211_ATTR_WIPHY_ANTENNA_TX: Bitmap of allowed antennas for transmitting. - * This can be used to mask out antennas which are not attached or should - * not be used for transmitting. If an antenna is not selected in this - * bitmap the hardware is not allowed to transmit on this antenna. - * - * Each bit represents one antenna, starting with antenna 1 at the first - * bit. Depending on which antennas are selected in the bitmap, 802.11n - * drivers can derive which chainmasks to use (if all antennas belonging to - * a particular chain are disabled this chain should be disabled) and if - * a chain has diversity antennas wether diversity should be used or not. - * HT capabilities (STBC, TX Beamforming, Antenna selection) can be - * derived from the available chains after applying the antenna mask. - * Non-802.11n drivers can derive wether to use diversity or not. - * Drivers may reject configurations or RX/TX mask combinations they cannot - * support by returning -EINVAL. - * - * @NL80211_ATTR_WIPHY_ANTENNA_RX: Bitmap of allowed antennas for receiving. - * This can be used to mask out antennas which are not attached or should - * not be used for receiving. If an antenna is not selected in this bitmap - * the hardware should not be configured to receive on this antenna. - * For a more detailed description see @NL80211_ATTR_WIPHY_ANTENNA_TX. - * - * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX: Bitmap of antennas which are available - * for configuration as TX antennas via the above parameters. - * - * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX: Bitmap of antennas which are available - * for configuration as RX antennas via the above parameters. - * - * @NL80211_ATTR_MCAST_RATE: Multicast tx rate (in 100 kbps) for IBSS - * - * @NL80211_ATTR_OFFCHANNEL_TX_OK: For management frame TX, the frame may be - * transmitted on another channel when the channel given doesn't match - * the current channel. If the current channel doesn't match and this - * flag isn't set, the frame will be rejected. This is also used as an - * nl80211 capability flag. - * - * @NL80211_ATTR_BSS_HT_OPMODE: HT operation mode (u16) - * - * @NL80211_ATTR_KEY_DEFAULT_TYPES: A nested attribute containing flags - * attributes, specifying what a key should be set as default as. - * See &enum nl80211_key_default_types. - * - * @NL80211_ATTR_MESH_SETUP: Optional mesh setup parameters. These cannot be - * changed once the mesh is active. - * @NL80211_ATTR_MESH_CONFIG: Mesh configuration parameters, a nested attribute - * containing attributes from &enum nl80211_meshconf_params. - * @NL80211_ATTR_SUPPORT_MESH_AUTH: Currently, this means the underlying driver - * allows auth frames in a mesh to be passed to userspace for processing via - * the @NL80211_MESH_SETUP_USERSPACE_AUTH flag. - * @NL80211_ATTR_STA_PLINK_STATE: The state of a mesh peer link as defined in - * &enum nl80211_plink_state. Used when userspace is driving the peer link - * management state machine. @NL80211_MESH_SETUP_USERSPACE_AMPE or - * @NL80211_MESH_SETUP_USERSPACE_MPM must be enabled. - * - * @NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED: indicates, as part of the wiphy - * capabilities, the supported WoWLAN triggers - * @NL80211_ATTR_WOWLAN_TRIGGERS: used by %NL80211_CMD_SET_WOWLAN to - * indicate which WoW triggers should be enabled. This is also - * used by %NL80211_CMD_GET_WOWLAN to get the currently enabled WoWLAN - * triggers. - * - * @NL80211_ATTR_SCHED_SCAN_INTERVAL: Interval between scheduled scan - * cycles, in msecs. - * - * @NL80211_ATTR_SCHED_SCAN_MATCH: Nested attribute with one or more - * sets of attributes to match during scheduled scans. Only BSSs - * that match any of the sets will be reported. These are - * pass-thru filter rules. - * For a match to succeed, the BSS must match all attributes of a - * set. Since not every hardware supports matching all types of - * attributes, there is no guarantee that the reported BSSs are - * fully complying with the match sets and userspace needs to be - * able to ignore them by itself. - * Thus, the implementation is somewhat hardware-dependent, but - * this is only an optimization and the userspace application - * needs to handle all the non-filtered results anyway. - * If the match attributes don't make sense when combined with - * the values passed in @NL80211_ATTR_SCAN_SSIDS (eg. if an SSID - * is included in the probe request, but the match attributes - * will never let it go through), -EINVAL may be returned. - * If ommited, no filtering is done. - * - * @NL80211_ATTR_INTERFACE_COMBINATIONS: Nested attribute listing the supported - * interface combinations. In each nested item, it contains attributes - * defined in &enum nl80211_if_combination_attrs. - * @NL80211_ATTR_SOFTWARE_IFTYPES: Nested attribute (just like - * %NL80211_ATTR_SUPPORTED_IFTYPES) containing the interface types that - * are managed in software: interfaces of these types aren't subject to - * any restrictions in their number or combinations. - * - * @NL80211_ATTR_REKEY_DATA: nested attribute containing the information - * necessary for GTK rekeying in the device, see &enum nl80211_rekey_data. - * - * @NL80211_ATTR_SCAN_SUPP_RATES: rates per to be advertised as supported in scan, - * nested array attribute containing an entry for each band, with the entry - * being a list of supported rates as defined by IEEE 802.11 7.3.2.2 but - * without the length restriction (at most %NL80211_MAX_SUPP_RATES). - * - * @NL80211_ATTR_HIDDEN_SSID: indicates whether SSID is to be hidden from Beacon - * and Probe Response (when response to wildcard Probe Request); see - * &enum nl80211_hidden_ssid, represented as a u32 - * - * @NL80211_ATTR_IE_PROBE_RESP: Information element(s) for Probe Response frame. - * This is used with %NL80211_CMD_NEW_BEACON and %NL80211_CMD_SET_BEACON to - * provide extra IEs (e.g., WPS/P2P IE) into Probe Response frames when the - * driver (or firmware) replies to Probe Request frames. - * @NL80211_ATTR_IE_ASSOC_RESP: Information element(s) for (Re)Association - * Response frames. This is used with %NL80211_CMD_NEW_BEACON and - * %NL80211_CMD_SET_BEACON to provide extra IEs (e.g., WPS/P2P IE) into - * (Re)Association Response frames when the driver (or firmware) replies to - * (Re)Association Request frames. - * - * @NL80211_ATTR_STA_WME: Nested attribute containing the wme configuration - * of the station, see &enum nl80211_sta_wme_attr. - * @NL80211_ATTR_SUPPORT_AP_UAPSD: the device supports uapsd when working - * as AP. - * - * @NL80211_ATTR_ROAM_SUPPORT: Indicates whether the firmware is capable of - * roaming to another AP in the same ESS if the signal lever is low. - * - * @NL80211_ATTR_PMKSA_CANDIDATE: Nested attribute containing the PMKSA caching - * candidate information, see &enum nl80211_pmksa_candidate_attr. - * - * @NL80211_ATTR_TX_NO_CCK_RATE: Indicates whether to use CCK rate or not - * for management frames transmission. In order to avoid p2p probe/action - * frames are being transmitted at CCK rate in 2GHz band, the user space - * applications use this attribute. - * This attribute is used with %NL80211_CMD_TRIGGER_SCAN and - * %NL80211_CMD_FRAME commands. - * - * @NL80211_ATTR_TDLS_ACTION: Low level TDLS action code (e.g. link setup - * request, link setup confirm, link teardown, etc.). Values are - * described in the TDLS (802.11z) specification. - * @NL80211_ATTR_TDLS_DIALOG_TOKEN: Non-zero token for uniquely identifying a - * TDLS conversation between two devices. - * @NL80211_ATTR_TDLS_OPERATION: High level TDLS operation; see - * &enum nl80211_tdls_operation, represented as a u8. - * @NL80211_ATTR_TDLS_SUPPORT: A flag indicating the device can operate - * as a TDLS peer sta. - * @NL80211_ATTR_TDLS_EXTERNAL_SETUP: The TDLS discovery/setup and teardown - * procedures should be performed by sending TDLS packets via - * %NL80211_CMD_TDLS_MGMT. Otherwise %NL80211_CMD_TDLS_OPER should be - * used for asking the driver to perform a TDLS operation. - * - * @NL80211_ATTR_DEVICE_AP_SME: This u32 attribute may be listed for devices - * that have AP support to indicate that they have the AP SME integrated - * with support for the features listed in this attribute, see - * &enum nl80211_ap_sme_features. - * - * @NL80211_ATTR_DONT_WAIT_FOR_ACK: Used with %NL80211_CMD_FRAME, this tells - * the driver to not wait for an acknowledgement. Note that due to this, - * it will also not give a status callback nor return a cookie. This is - * mostly useful for probe responses to save airtime. - * - * @NL80211_ATTR_FEATURE_FLAGS: This u32 attribute contains flags from - * &enum nl80211_feature_flags and is advertised in wiphy information. - * @NL80211_ATTR_PROBE_RESP_OFFLOAD: Indicates that the HW responds to probe - * requests while operating in AP-mode. - * This attribute holds a bitmap of the supported protocols for - * offloading (see &enum nl80211_probe_resp_offload_support_attr). - * - * @NL80211_ATTR_PROBE_RESP: Probe Response template data. Contains the entire - * probe-response frame. The DA field in the 802.11 header is zero-ed out, - * to be filled by the FW. - * @NL80211_ATTR_DISABLE_HT: Force HT capable interfaces to disable - * this feature. Currently, only supported in mac80211 drivers. - * @NL80211_ATTR_HT_CAPABILITY_MASK: Specify which bits of the - * ATTR_HT_CAPABILITY to which attention should be paid. - * Currently, only mac80211 NICs support this feature. - * The values that may be configured are: - * MCS rates, MAX-AMSDU, HT-20-40 and HT_CAP_SGI_40 - * AMPDU density and AMPDU factor. - * All values are treated as suggestions and may be ignored - * by the driver as required. The actual values may be seen in - * the station debugfs ht_caps file. - * - * @NL80211_ATTR_DFS_REGION: region for regulatory rules which this country - * abides to when initiating radiation on DFS channels. A country maps - * to one DFS region. - * - * @NL80211_ATTR_NOACK_MAP: This u16 bitmap contains the No Ack Policy of - * up to 16 TIDs. - * - * @NL80211_ATTR_INACTIVITY_TIMEOUT: timeout value in seconds, this can be - * used by the drivers which has MLME in firmware and does not have support - * to report per station tx/rx activity to free up the staion entry from - * the list. This needs to be used when the driver advertises the - * capability to timeout the stations. - * - * @NL80211_ATTR_RX_SIGNAL_DBM: signal strength in dBm (as a 32-bit int); - * this attribute is (depending on the driver capabilities) added to - * received frames indicated with %NL80211_CMD_FRAME. - * - * @NL80211_ATTR_BG_SCAN_PERIOD: Background scan period in seconds - * or 0 to disable background scan. - * - * @NL80211_ATTR_USER_REG_HINT_TYPE: type of regulatory hint passed from - * userspace. If unset it is assumed the hint comes directly from - * a user. If set code could specify exactly what type of source - * was used to provide the hint. For the different types of - * allowed user regulatory hints see nl80211_user_reg_hint_type. - * - * @NL80211_ATTR_CONN_FAILED_REASON: The reason for which AP has rejected - * the connection request from a station. nl80211_connect_failed_reason - * enum has different reasons of connection failure. - * - * @NL80211_ATTR_SAE_DATA: SAE elements in Authentication frames. This starts - * with the Authentication transaction sequence number field. - * - * @NL80211_ATTR_VHT_CAPABILITY: VHT Capability information element (from - * association request when used with NL80211_CMD_NEW_STATION) - * - * @NL80211_ATTR_SCAN_FLAGS: scan request control flags (u32) - * - * @NL80211_ATTR_P2P_CTWINDOW: P2P GO Client Traffic Window (u8), used with - * the START_AP and SET_BSS commands - * @NL80211_ATTR_P2P_OPPPS: P2P GO opportunistic PS (u8), used with the - * START_AP and SET_BSS commands. This can have the values 0 or 1; - * if not given in START_AP 0 is assumed, if not given in SET_BSS - * no change is made. - * - * @NL80211_ATTR_LOCAL_MESH_POWER_MODE: local mesh STA link-specific power mode - * defined in &enum nl80211_mesh_power_mode. - * - * @NL80211_ATTR_ACL_POLICY: ACL policy, see &enum nl80211_acl_policy, - * carried in a u32 attribute - * - * @NL80211_ATTR_MAC_ADDRS: Array of nested MAC addresses, used for - * MAC ACL. - * - * @NL80211_ATTR_MAC_ACL_MAX: u32 attribute to advertise the maximum - * number of MAC addresses that a device can support for MAC - * ACL. - * - * @NL80211_ATTR_RADAR_EVENT: Type of radar event for notification to userspace, - * contains a value of enum nl80211_radar_event (u32). - * - * @NL80211_ATTR_EXT_CAPA: 802.11 extended capabilities that the kernel driver - * has and handles. The format is the same as the IE contents. See - * 802.11-2012 8.4.2.29 for more information. - * @NL80211_ATTR_EXT_CAPA_MASK: Extended capabilities that the kernel driver - * has set in the %NL80211_ATTR_EXT_CAPA value, for multibit fields. - * - * @NL80211_ATTR_STA_CAPABILITY: Station capabilities (u16) are advertised to - * the driver, e.g., to enable TDLS power save (PU-APSD). - * - * @NL80211_ATTR_STA_EXT_CAPABILITY: Station extended capabilities are - * advertised to the driver, e.g., to enable TDLS off channel operations - * and PU-APSD. - * - * @NL80211_ATTR_PROTOCOL_FEATURES: global nl80211 feature flags, see - * &enum nl80211_protocol_features, the attribute is a u32. - * - * @NL80211_ATTR_SPLIT_WIPHY_DUMP: flag attribute, userspace supports - * receiving the data for a single wiphy split across multiple - * messages, given with wiphy dump message - * - * @NL80211_ATTR_MDID: Mobility Domain Identifier - * - * @NL80211_ATTR_IE_RIC: Resource Information Container Information - * Element - * - * @NL80211_ATTR_CRIT_PROT_ID: critical protocol identifier requiring increased - * reliability, see &enum nl80211_crit_proto_id (u16). - * @NL80211_ATTR_MAX_CRIT_PROT_DURATION: duration in milliseconds in which - * the connection should have increased reliability (u16). - * - * @NL80211_ATTR_PEER_AID: Association ID for the peer TDLS station (u16). - * This is similar to @NL80211_ATTR_STA_AID but with a difference of being - * allowed to be used with the first @NL80211_CMD_SET_STATION command to - * update a TDLS peer STA entry. - * - * @NL80211_ATTR_COALESCE_RULE: Coalesce rule information. - * - * @NL80211_ATTR_CH_SWITCH_COUNT: u32 attribute specifying the number of TBTT's - * until the channel switch event. - * @NL80211_ATTR_CH_SWITCH_BLOCK_TX: flag attribute specifying that transmission - * must be blocked on the current channel (before the channel switch - * operation). - * @NL80211_ATTR_CSA_IES: Nested set of attributes containing the IE information - * for the time while performing a channel switch. - * @NL80211_ATTR_CSA_C_OFF_BEACON: An array of offsets (u16) to the channel - * switch counters in the beacons tail (%NL80211_ATTR_BEACON_TAIL). - * @NL80211_ATTR_CSA_C_OFF_PRESP: An array of offsets (u16) to the channel - * switch counters in the probe response (%NL80211_ATTR_PROBE_RESP). - * - * @NL80211_ATTR_RXMGMT_FLAGS: flags for nl80211_send_mgmt(), u32. - * As specified in the &enum nl80211_rxmgmt_flags. - * - * @NL80211_ATTR_STA_SUPPORTED_CHANNELS: array of supported channels. - * - * @NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES: array of supported - * supported operating classes. - * - * @NL80211_ATTR_HANDLE_DFS: A flag indicating whether user space - * controls DFS operation in IBSS mode. If the flag is included in - * %NL80211_CMD_JOIN_IBSS request, the driver will allow use of DFS - * channels and reports radar events to userspace. Userspace is required - * to react to radar events, e.g. initiate a channel switch or leave the - * IBSS network. - * - * @NL80211_ATTR_SUPPORT_5_MHZ: A flag indicating that the device supports - * 5 MHz channel bandwidth. - * @NL80211_ATTR_SUPPORT_10_MHZ: A flag indicating that the device supports - * 10 MHz channel bandwidth. - * - * @NL80211_ATTR_OPMODE_NOTIF: Operating mode field from Operating Mode - * Notification Element based on association request when used with - * %NL80211_CMD_NEW_STATION; u8 attribute. - * - * @NL80211_ATTR_VENDOR_ID: The vendor ID, either a 24-bit OUI or, if - * %NL80211_VENDOR_ID_IS_LINUX is set, a special Linux ID (not used yet) - * @NL80211_ATTR_VENDOR_SUBCMD: vendor sub-command - * @NL80211_ATTR_VENDOR_DATA: data for the vendor command, if any; this - * attribute is also used for vendor command feature advertisement - * @NL80211_ATTR_VENDOR_EVENTS: used for event list advertising in the wiphy - * info, containing a nested array of possible events - * - * @NL80211_ATTR_QOS_MAP: IP DSCP mapping for Interworking QoS mapping. This - * data is in the format defined for the payload of the QoS Map Set element - * in IEEE Std 802.11-2012, 8.4.2.97. - * - * @NL80211_ATTR_MAC_HINT: MAC address recommendation as initial BSS - * @NL80211_ATTR_WIPHY_FREQ_HINT: frequency of the recommended initial BSS - * - * @NL80211_ATTR_MAX_AP_ASSOC_STA: Device attribute that indicates how many - * associated stations are supported in AP mode (including P2P GO); u32. - * Since drivers may not have a fixed limit on the maximum number (e.g., - * other concurrent operations may affect this), drivers are allowed to - * advertise values that cannot always be met. In such cases, an attempt - * to add a new station entry with @NL80211_CMD_NEW_STATION may fail. - * - * @NL80211_ATTR_CSA_C_OFFSETS_TX: An array of csa counter offsets (u16) which - * should be updated when the frame is transmitted. - * @NL80211_ATTR_MAX_CSA_COUNTERS: U8 attribute used to advertise the maximum - * supported number of csa counters. - * - * @NL80211_ATTR_TDLS_PEER_CAPABILITY: flags for TDLS peer capabilities, u32. - * As specified in the &enum nl80211_tdls_peer_capability. - * - * @NL80211_ATTR_SOCKET_OWNER: Flag attribute, if set during interface - * creation then the new interface will be owned by the netlink socket - * that created it and will be destroyed when the socket is closed. - * If set during scheduled scan start then the new scan req will be - * owned by the netlink socket that created it and the scheduled scan will - * be stopped when the socket is closed. - * If set during configuration of regulatory indoor operation then the - * regulatory indoor configuration would be owned by the netlink socket - * that configured the indoor setting, and the indoor operation would be - * cleared when the socket is closed. - * If set during NAN interface creation, the interface will be destroyed - * if the socket is closed just like any other interface. Moreover, only - * the netlink socket that created the interface will be allowed to add - * and remove functions. NAN notifications will be sent in unicast to that - * socket. Without this attribute, any socket can add functions and the - * notifications will be sent to the %NL80211_MCGRP_NAN multicast group. - * - * @NL80211_ATTR_TDLS_INITIATOR: flag attribute indicating the current end is - * the TDLS link initiator. - * - * @NL80211_ATTR_USE_RRM: flag for indicating whether the current connection - * shall support Radio Resource Measurements (11k). This attribute can be - * used with %NL80211_CMD_ASSOCIATE and %NL80211_CMD_CONNECT requests. - * User space applications are expected to use this flag only if the - * underlying device supports these minimal RRM features: - * %NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES, - * %NL80211_FEATURE_QUIET, - * Or, if global RRM is supported, see: - * %NL80211_EXT_FEATURE_RRM - * If this flag is used, driver must add the Power Capabilities IE to the - * association request. In addition, it must also set the RRM capability - * flag in the association request's Capability Info field. - * - * @NL80211_ATTR_WIPHY_DYN_ACK: flag attribute used to enable ACK timeout - * estimation algorithm (dynack). In order to activate dynack - * %NL80211_FEATURE_ACKTO_ESTIMATION feature flag must be set by lower - * drivers to indicate dynack capability. Dynack is automatically disabled - * setting valid value for coverage class. - * - * @NL80211_ATTR_TSID: a TSID value (u8 attribute) - * @NL80211_ATTR_USER_PRIO: user priority value (u8 attribute) - * @NL80211_ATTR_ADMITTED_TIME: admitted time in units of 32 microseconds - * (per second) (u16 attribute) - * - * @NL80211_ATTR_SMPS_MODE: SMPS mode to use (ap mode). see - * &enum nl80211_smps_mode. - * - * @NL80211_ATTR_OPER_CLASS: operating class - * - * @NL80211_ATTR_MAC_MASK: MAC address mask - * - * @NL80211_ATTR_WIPHY_SELF_MANAGED_REG: flag attribute indicating this device - * is self-managing its regulatory information and any regulatory domain - * obtained from it is coming from the device's wiphy and not the global - * cfg80211 regdomain. - * - * @NL80211_ATTR_EXT_FEATURES: extended feature flags contained in a byte - * array. The feature flags are identified by their bit index (see &enum - * nl80211_ext_feature_index). The bit index is ordered starting at the - * least-significant bit of the first byte in the array, ie. bit index 0 - * is located at bit 0 of byte 0. bit index 25 would be located at bit 1 - * of byte 3 (u8 array). - * - * @NL80211_ATTR_SURVEY_RADIO_STATS: Request overall radio statistics to be - * returned along with other survey data. If set, @NL80211_CMD_GET_SURVEY - * may return a survey entry without a channel indicating global radio - * statistics (only some values are valid and make sense.) - * For devices that don't return such an entry even then, the information - * should be contained in the result as the sum of the respective counters - * over all channels. - * - * @NL80211_ATTR_SCHED_SCAN_DELAY: delay before the first cycle of a - * scheduled scan is started. Or the delay before a WoWLAN - * net-detect scan is started, counting from the moment the - * system is suspended. This value is a u32, in seconds. - - * @NL80211_ATTR_REG_INDOOR: flag attribute, if set indicates that the device - * is operating in an indoor environment. - * - * @NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS: maximum number of scan plans for - * scheduled scan supported by the device (u32), a wiphy attribute. - * @NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL: maximum interval (in seconds) for - * a scan plan (u32), a wiphy attribute. - * @NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS: maximum number of iterations in - * a scan plan (u32), a wiphy attribute. - * @NL80211_ATTR_SCHED_SCAN_PLANS: a list of scan plans for scheduled scan. - * Each scan plan defines the number of scan iterations and the interval - * between scans. The last scan plan will always run infinitely, - * thus it must not specify the number of iterations, only the interval - * between scans. The scan plans are executed sequentially. - * Each scan plan is a nested attribute of &enum nl80211_sched_scan_plan. - * @NL80211_ATTR_PBSS: flag attribute. If set it means operate - * in a PBSS. Specified in %NL80211_CMD_CONNECT to request - * connecting to a PCP, and in %NL80211_CMD_START_AP to start - * a PCP instead of AP. Relevant for DMG networks only. - * @NL80211_ATTR_BSS_SELECT: nested attribute for driver supporting the - * BSS selection feature. When used with %NL80211_CMD_GET_WIPHY it contains - * attributes according &enum nl80211_bss_select_attr to indicate what - * BSS selection behaviours are supported. When used with %NL80211_CMD_CONNECT - * it contains the behaviour-specific attribute containing the parameters for - * BSS selection to be done by driver and/or firmware. - * - * @NL80211_ATTR_STA_SUPPORT_P2P_PS: whether P2P PS mechanism supported - * or not. u8, one of the values of &enum nl80211_sta_p2p_ps_status - * - * @NL80211_ATTR_PAD: attribute used for padding for 64-bit alignment - * - * @NL80211_ATTR_IFTYPE_EXT_CAPA: Nested attribute of the following attributes: - * %NL80211_ATTR_IFTYPE, %NL80211_ATTR_EXT_CAPA, - * %NL80211_ATTR_EXT_CAPA_MASK, to specify the extended capabilities per - * interface type. - * - * @NL80211_ATTR_MU_MIMO_GROUP_DATA: array of 24 bytes that defines a MU-MIMO - * groupID for monitor mode. - * The first 8 bytes are a mask that defines the membership in each - * group (there are 64 groups, group 0 and 63 are reserved), - * each bit represents a group and set to 1 for being a member in - * that group and 0 for not being a member. - * The remaining 16 bytes define the position in each group: 2 bits for - * each group. - * (smaller group numbers represented on most significant bits and bigger - * group numbers on least significant bits.) - * This attribute is used only if all interfaces are in monitor mode. - * Set this attribute in order to monitor packets using the given MU-MIMO - * groupID data. - * to turn off that feature set all the bits of the groupID to zero. - * @NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR: mac address for the sniffer to follow - * when using MU-MIMO air sniffer. - * to turn that feature off set an invalid mac address - * (e.g. FF:FF:FF:FF:FF:FF) - * - * @NL80211_ATTR_SCAN_START_TIME_TSF: The time at which the scan was actually - * started (u64). The time is the TSF of the BSS the interface that - * requested the scan is connected to (if available, otherwise this - * attribute must not be included). - * @NL80211_ATTR_SCAN_START_TIME_TSF_BSSID: The BSS according to which - * %NL80211_ATTR_SCAN_START_TIME_TSF is set. - * @NL80211_ATTR_MEASUREMENT_DURATION: measurement duration in TUs (u16). If - * %NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY is not set, this is the - * maximum measurement duration allowed. This attribute is used with - * measurement requests. It can also be used with %NL80211_CMD_TRIGGER_SCAN - * if the scan is used for beacon report radio measurement. - * @NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY: flag attribute that indicates - * that the duration specified with %NL80211_ATTR_MEASUREMENT_DURATION is - * mandatory. If this flag is not set, the duration is the maximum duration - * and the actual measurement duration may be shorter. - * - * @NL80211_ATTR_MESH_PEER_AID: Association ID for the mesh peer (u16). This is - * used to pull the stored data for mesh peer in power save state. - * - * @NL80211_ATTR_NAN_MASTER_PREF: the master preference to be used by - * %NL80211_CMD_START_NAN and optionally with - * %NL80211_CMD_CHANGE_NAN_CONFIG. Its type is u8 and it can't be 0. - * Also, values 1 and 255 are reserved for certification purposes and - * should not be used during a normal device operation. - * @NL80211_ATTR_NAN_DUAL: NAN dual band operation config (see - * &enum nl80211_nan_dual_band_conf). This attribute is used with - * %NL80211_CMD_START_NAN and optionally with - * %NL80211_CMD_CHANGE_NAN_CONFIG. - * @NL80211_ATTR_NAN_FUNC: a function that can be added to NAN. See - * &enum nl80211_nan_func_attributes for description of this nested - * attribute. - * @NL80211_ATTR_NAN_MATCH: used to report a match. This is a nested attribute. - * See &enum nl80211_nan_match_attributes. - * - * @NUM_NL80211_ATTR: total number of nl80211_attrs available - * @NL80211_ATTR_MAX: highest attribute number currently defined - * @__NL80211_ATTR_AFTER_LAST: internal use - */ -enum nl80211_attrs { -/* don't change the order or add anything between, this is ABI! */ - NL80211_ATTR_UNSPEC, - - NL80211_ATTR_WIPHY, - NL80211_ATTR_WIPHY_NAME, - - NL80211_ATTR_IFINDEX, - NL80211_ATTR_IFNAME, - NL80211_ATTR_IFTYPE, - - NL80211_ATTR_MAC, - - NL80211_ATTR_KEY_DATA, - NL80211_ATTR_KEY_IDX, - NL80211_ATTR_KEY_CIPHER, - NL80211_ATTR_KEY_SEQ, - NL80211_ATTR_KEY_DEFAULT, - - NL80211_ATTR_BEACON_INTERVAL, - NL80211_ATTR_DTIM_PERIOD, - NL80211_ATTR_BEACON_HEAD, - NL80211_ATTR_BEACON_TAIL, - - NL80211_ATTR_STA_AID, - NL80211_ATTR_STA_FLAGS, - NL80211_ATTR_STA_LISTEN_INTERVAL, - NL80211_ATTR_STA_SUPPORTED_RATES, - NL80211_ATTR_STA_VLAN, - NL80211_ATTR_STA_INFO, - - NL80211_ATTR_WIPHY_BANDS, - - NL80211_ATTR_MNTR_FLAGS, - - NL80211_ATTR_MESH_ID, - NL80211_ATTR_STA_PLINK_ACTION, - NL80211_ATTR_MPATH_NEXT_HOP, - NL80211_ATTR_MPATH_INFO, - - NL80211_ATTR_BSS_CTS_PROT, - NL80211_ATTR_BSS_SHORT_PREAMBLE, - NL80211_ATTR_BSS_SHORT_SLOT_TIME, - - NL80211_ATTR_HT_CAPABILITY, - - NL80211_ATTR_SUPPORTED_IFTYPES, - - NL80211_ATTR_REG_ALPHA2, - NL80211_ATTR_REG_RULES, - - NL80211_ATTR_MESH_CONFIG, - - NL80211_ATTR_BSS_BASIC_RATES, - - NL80211_ATTR_WIPHY_TXQ_PARAMS, - NL80211_ATTR_WIPHY_FREQ, - NL80211_ATTR_WIPHY_CHANNEL_TYPE, - - NL80211_ATTR_KEY_DEFAULT_MGMT, - - NL80211_ATTR_MGMT_SUBTYPE, - NL80211_ATTR_IE, - - NL80211_ATTR_MAX_NUM_SCAN_SSIDS, - - NL80211_ATTR_SCAN_FREQUENCIES, - NL80211_ATTR_SCAN_SSIDS, - NL80211_ATTR_GENERATION, /* replaces old SCAN_GENERATION */ - NL80211_ATTR_BSS, - - NL80211_ATTR_REG_INITIATOR, - NL80211_ATTR_REG_TYPE, - - NL80211_ATTR_SUPPORTED_COMMANDS, - - NL80211_ATTR_FRAME, - NL80211_ATTR_SSID, - NL80211_ATTR_AUTH_TYPE, - NL80211_ATTR_REASON_CODE, - - NL80211_ATTR_KEY_TYPE, - - NL80211_ATTR_MAX_SCAN_IE_LEN, - NL80211_ATTR_CIPHER_SUITES, - - NL80211_ATTR_FREQ_BEFORE, - NL80211_ATTR_FREQ_AFTER, - - NL80211_ATTR_FREQ_FIXED, - - - NL80211_ATTR_WIPHY_RETRY_SHORT, - NL80211_ATTR_WIPHY_RETRY_LONG, - NL80211_ATTR_WIPHY_FRAG_THRESHOLD, - NL80211_ATTR_WIPHY_RTS_THRESHOLD, - - NL80211_ATTR_TIMED_OUT, - - NL80211_ATTR_USE_MFP, - - NL80211_ATTR_STA_FLAGS2, - - NL80211_ATTR_CONTROL_PORT, - - NL80211_ATTR_TESTDATA, - - NL80211_ATTR_PRIVACY, - - NL80211_ATTR_DISCONNECTED_BY_AP, - NL80211_ATTR_STATUS_CODE, - - NL80211_ATTR_CIPHER_SUITES_PAIRWISE, - NL80211_ATTR_CIPHER_SUITE_GROUP, - NL80211_ATTR_WPA_VERSIONS, - NL80211_ATTR_AKM_SUITES, - - NL80211_ATTR_REQ_IE, - NL80211_ATTR_RESP_IE, - - NL80211_ATTR_PREV_BSSID, - - NL80211_ATTR_KEY, - NL80211_ATTR_KEYS, - - NL80211_ATTR_PID, - - NL80211_ATTR_4ADDR, - - NL80211_ATTR_SURVEY_INFO, - - NL80211_ATTR_PMKID, - NL80211_ATTR_MAX_NUM_PMKIDS, - - NL80211_ATTR_DURATION, - - NL80211_ATTR_COOKIE, - - NL80211_ATTR_WIPHY_COVERAGE_CLASS, - - NL80211_ATTR_TX_RATES, - - NL80211_ATTR_FRAME_MATCH, - - NL80211_ATTR_ACK, - - NL80211_ATTR_PS_STATE, - - NL80211_ATTR_CQM, - - NL80211_ATTR_LOCAL_STATE_CHANGE, - - NL80211_ATTR_AP_ISOLATE, - - NL80211_ATTR_WIPHY_TX_POWER_SETTING, - NL80211_ATTR_WIPHY_TX_POWER_LEVEL, - - NL80211_ATTR_TX_FRAME_TYPES, - NL80211_ATTR_RX_FRAME_TYPES, - NL80211_ATTR_FRAME_TYPE, - - NL80211_ATTR_CONTROL_PORT_ETHERTYPE, - NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, - - NL80211_ATTR_SUPPORT_IBSS_RSN, - - NL80211_ATTR_WIPHY_ANTENNA_TX, - NL80211_ATTR_WIPHY_ANTENNA_RX, - - NL80211_ATTR_MCAST_RATE, - - NL80211_ATTR_OFFCHANNEL_TX_OK, - - NL80211_ATTR_BSS_HT_OPMODE, - - NL80211_ATTR_KEY_DEFAULT_TYPES, - - NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION, - - NL80211_ATTR_MESH_SETUP, - - NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX, - NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX, - - NL80211_ATTR_SUPPORT_MESH_AUTH, - NL80211_ATTR_STA_PLINK_STATE, - - NL80211_ATTR_WOWLAN_TRIGGERS, - NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, - - NL80211_ATTR_SCHED_SCAN_INTERVAL, - - NL80211_ATTR_INTERFACE_COMBINATIONS, - NL80211_ATTR_SOFTWARE_IFTYPES, - - NL80211_ATTR_REKEY_DATA, - - NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS, - NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN, - - NL80211_ATTR_SCAN_SUPP_RATES, - - NL80211_ATTR_HIDDEN_SSID, - - NL80211_ATTR_IE_PROBE_RESP, - NL80211_ATTR_IE_ASSOC_RESP, - - NL80211_ATTR_STA_WME, - NL80211_ATTR_SUPPORT_AP_UAPSD, - - NL80211_ATTR_ROAM_SUPPORT, - - NL80211_ATTR_SCHED_SCAN_MATCH, - NL80211_ATTR_MAX_MATCH_SETS, - - NL80211_ATTR_PMKSA_CANDIDATE, - - NL80211_ATTR_TX_NO_CCK_RATE, - - NL80211_ATTR_TDLS_ACTION, - NL80211_ATTR_TDLS_DIALOG_TOKEN, - NL80211_ATTR_TDLS_OPERATION, - NL80211_ATTR_TDLS_SUPPORT, - NL80211_ATTR_TDLS_EXTERNAL_SETUP, - - NL80211_ATTR_DEVICE_AP_SME, - - NL80211_ATTR_DONT_WAIT_FOR_ACK, - - NL80211_ATTR_FEATURE_FLAGS, - - NL80211_ATTR_PROBE_RESP_OFFLOAD, - - NL80211_ATTR_PROBE_RESP, - - NL80211_ATTR_DFS_REGION, - - NL80211_ATTR_DISABLE_HT, - NL80211_ATTR_HT_CAPABILITY_MASK, - - NL80211_ATTR_NOACK_MAP, - - NL80211_ATTR_INACTIVITY_TIMEOUT, - - NL80211_ATTR_RX_SIGNAL_DBM, - - NL80211_ATTR_BG_SCAN_PERIOD, - - NL80211_ATTR_WDEV, - - NL80211_ATTR_USER_REG_HINT_TYPE, - - NL80211_ATTR_CONN_FAILED_REASON, - - NL80211_ATTR_SAE_DATA, - - NL80211_ATTR_VHT_CAPABILITY, - - NL80211_ATTR_SCAN_FLAGS, - - NL80211_ATTR_CHANNEL_WIDTH, - NL80211_ATTR_CENTER_FREQ1, - NL80211_ATTR_CENTER_FREQ2, - - NL80211_ATTR_P2P_CTWINDOW, - NL80211_ATTR_P2P_OPPPS, - - NL80211_ATTR_LOCAL_MESH_POWER_MODE, - - NL80211_ATTR_ACL_POLICY, - - NL80211_ATTR_MAC_ADDRS, - - NL80211_ATTR_MAC_ACL_MAX, - - NL80211_ATTR_RADAR_EVENT, - - NL80211_ATTR_EXT_CAPA, - NL80211_ATTR_EXT_CAPA_MASK, - - NL80211_ATTR_STA_CAPABILITY, - NL80211_ATTR_STA_EXT_CAPABILITY, - - NL80211_ATTR_PROTOCOL_FEATURES, - NL80211_ATTR_SPLIT_WIPHY_DUMP, - - NL80211_ATTR_DISABLE_VHT, - NL80211_ATTR_VHT_CAPABILITY_MASK, - - NL80211_ATTR_MDID, - NL80211_ATTR_IE_RIC, - - NL80211_ATTR_CRIT_PROT_ID, - NL80211_ATTR_MAX_CRIT_PROT_DURATION, - - NL80211_ATTR_PEER_AID, - - NL80211_ATTR_COALESCE_RULE, - - NL80211_ATTR_CH_SWITCH_COUNT, - NL80211_ATTR_CH_SWITCH_BLOCK_TX, - NL80211_ATTR_CSA_IES, - NL80211_ATTR_CSA_C_OFF_BEACON, - NL80211_ATTR_CSA_C_OFF_PRESP, - - NL80211_ATTR_RXMGMT_FLAGS, - - NL80211_ATTR_STA_SUPPORTED_CHANNELS, - - NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES, - - NL80211_ATTR_HANDLE_DFS, - - NL80211_ATTR_SUPPORT_5_MHZ, - NL80211_ATTR_SUPPORT_10_MHZ, - - NL80211_ATTR_OPMODE_NOTIF, - - NL80211_ATTR_VENDOR_ID, - NL80211_ATTR_VENDOR_SUBCMD, - NL80211_ATTR_VENDOR_DATA, - NL80211_ATTR_VENDOR_EVENTS, - - NL80211_ATTR_QOS_MAP, - - NL80211_ATTR_MAC_HINT, - NL80211_ATTR_WIPHY_FREQ_HINT, - - NL80211_ATTR_MAX_AP_ASSOC_STA, - - NL80211_ATTR_TDLS_PEER_CAPABILITY, - - NL80211_ATTR_SOCKET_OWNER, - - NL80211_ATTR_CSA_C_OFFSETS_TX, - NL80211_ATTR_MAX_CSA_COUNTERS, - - NL80211_ATTR_TDLS_INITIATOR, - - NL80211_ATTR_USE_RRM, - - NL80211_ATTR_WIPHY_DYN_ACK, - - NL80211_ATTR_TSID, - NL80211_ATTR_USER_PRIO, - NL80211_ATTR_ADMITTED_TIME, - - NL80211_ATTR_SMPS_MODE, - - NL80211_ATTR_OPER_CLASS, - - NL80211_ATTR_MAC_MASK, - - NL80211_ATTR_WIPHY_SELF_MANAGED_REG, - - NL80211_ATTR_EXT_FEATURES, - - NL80211_ATTR_SURVEY_RADIO_STATS, - - NL80211_ATTR_NETNS_FD, - - NL80211_ATTR_SCHED_SCAN_DELAY, - - NL80211_ATTR_REG_INDOOR, - - NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS, - NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL, - NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS, - NL80211_ATTR_SCHED_SCAN_PLANS, - - NL80211_ATTR_PBSS, - - NL80211_ATTR_BSS_SELECT, - - NL80211_ATTR_STA_SUPPORT_P2P_PS, - - NL80211_ATTR_PAD, - - NL80211_ATTR_IFTYPE_EXT_CAPA, - - NL80211_ATTR_MU_MIMO_GROUP_DATA, - NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR, - - NL80211_ATTR_SCAN_START_TIME_TSF, - NL80211_ATTR_SCAN_START_TIME_TSF_BSSID, - NL80211_ATTR_MEASUREMENT_DURATION, - NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY, - - NL80211_ATTR_MESH_PEER_AID, - - NL80211_ATTR_NAN_MASTER_PREF, - NL80211_ATTR_NAN_DUAL, - NL80211_ATTR_NAN_FUNC, - NL80211_ATTR_NAN_MATCH, - - /* add attributes here, update the policy in nl80211.c */ - - __NL80211_ATTR_AFTER_LAST, - NUM_NL80211_ATTR = __NL80211_ATTR_AFTER_LAST, - NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 -}; - -/* source-level API compatibility */ -#define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION -#define NL80211_ATTR_MESH_PARAMS NL80211_ATTR_MESH_CONFIG -#define NL80211_ATTR_IFACE_SOCKET_OWNER NL80211_ATTR_SOCKET_OWNER - -/* - * Allow user space programs to use #ifdef on new attributes by defining them - * here - */ -#define NL80211_CMD_CONNECT NL80211_CMD_CONNECT -#define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY -#define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES -#define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS -#define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ -#define NL80211_ATTR_WIPHY_CHANNEL_TYPE NL80211_ATTR_WIPHY_CHANNEL_TYPE -#define NL80211_ATTR_MGMT_SUBTYPE NL80211_ATTR_MGMT_SUBTYPE -#define NL80211_ATTR_IE NL80211_ATTR_IE -#define NL80211_ATTR_REG_INITIATOR NL80211_ATTR_REG_INITIATOR -#define NL80211_ATTR_REG_TYPE NL80211_ATTR_REG_TYPE -#define NL80211_ATTR_FRAME NL80211_ATTR_FRAME -#define NL80211_ATTR_SSID NL80211_ATTR_SSID -#define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE -#define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE -#define NL80211_ATTR_CIPHER_SUITES_PAIRWISE NL80211_ATTR_CIPHER_SUITES_PAIRWISE -#define NL80211_ATTR_CIPHER_SUITE_GROUP NL80211_ATTR_CIPHER_SUITE_GROUP -#define NL80211_ATTR_WPA_VERSIONS NL80211_ATTR_WPA_VERSIONS -#define NL80211_ATTR_AKM_SUITES NL80211_ATTR_AKM_SUITES -#define NL80211_ATTR_KEY NL80211_ATTR_KEY -#define NL80211_ATTR_KEYS NL80211_ATTR_KEYS -#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS - -#define NL80211_MAX_SUPP_RATES 32 -#define NL80211_MAX_SUPP_HT_RATES 77 -#define NL80211_MAX_SUPP_REG_RULES 64 -#define NL80211_TKIP_DATA_OFFSET_ENCR_KEY 0 -#define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY 16 -#define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24 -#define NL80211_HT_CAPABILITY_LEN 26 -#define NL80211_VHT_CAPABILITY_LEN 12 - -#define NL80211_MAX_NR_CIPHER_SUITES 5 -#define NL80211_MAX_NR_AKM_SUITES 2 - -#define NL80211_MIN_REMAIN_ON_CHANNEL_TIME 10 - -/* default RSSI threshold for scan results if none specified. */ -#define NL80211_SCAN_RSSI_THOLD_OFF -300 - -#define NL80211_CQM_TXE_MAX_INTVL 1800 - -/** - * enum nl80211_iftype - (virtual) interface types - * - * @NL80211_IFTYPE_UNSPECIFIED: unspecified type, driver decides - * @NL80211_IFTYPE_ADHOC: independent BSS member - * @NL80211_IFTYPE_STATION: managed BSS member - * @NL80211_IFTYPE_AP: access point - * @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points; VLAN interfaces - * are a bit special in that they must always be tied to a pre-existing - * AP type interface. - * @NL80211_IFTYPE_WDS: wireless distribution interface - * @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames - * @NL80211_IFTYPE_MESH_POINT: mesh point - * @NL80211_IFTYPE_P2P_CLIENT: P2P client - * @NL80211_IFTYPE_P2P_GO: P2P group owner - * @NL80211_IFTYPE_P2P_DEVICE: P2P device interface type, this is not a netdev - * and therefore can't be created in the normal ways, use the - * %NL80211_CMD_START_P2P_DEVICE and %NL80211_CMD_STOP_P2P_DEVICE - * commands to create and destroy one - * @NL80211_IF_TYPE_OCB: Outside Context of a BSS - * This mode corresponds to the MIB variable dot11OCBActivated=true - * @NL80211_IFTYPE_NAN: NAN device interface type (not a netdev) - * @NL80211_IFTYPE_MAX: highest interface type number currently defined - * @NUM_NL80211_IFTYPES: number of defined interface types - * - * These values are used with the %NL80211_ATTR_IFTYPE - * to set the type of an interface. - * - */ -enum nl80211_iftype { - NL80211_IFTYPE_UNSPECIFIED, - NL80211_IFTYPE_ADHOC, - NL80211_IFTYPE_STATION, - NL80211_IFTYPE_AP, - NL80211_IFTYPE_AP_VLAN, - NL80211_IFTYPE_WDS, - NL80211_IFTYPE_MONITOR, - NL80211_IFTYPE_MESH_POINT, - NL80211_IFTYPE_P2P_CLIENT, - NL80211_IFTYPE_P2P_GO, - NL80211_IFTYPE_P2P_DEVICE, - NL80211_IFTYPE_OCB, - NL80211_IFTYPE_NAN, - - /* keep last */ - NUM_NL80211_IFTYPES, - NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1 -}; - -/** - * enum nl80211_sta_flags - station flags - * - * Station flags. When a station is added to an AP interface, it is - * assumed to be already associated (and hence authenticated.) - * - * @__NL80211_STA_FLAG_INVALID: attribute number 0 is reserved - * @NL80211_STA_FLAG_AUTHORIZED: station is authorized (802.1X) - * @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames - * with short barker preamble - * @NL80211_STA_FLAG_WME: station is WME/QoS capable - * @NL80211_STA_FLAG_MFP: station uses management frame protection - * @NL80211_STA_FLAG_AUTHENTICATED: station is authenticated - * @NL80211_STA_FLAG_TDLS_PEER: station is a TDLS peer -- this flag should - * only be used in managed mode (even in the flags mask). Note that the - * flag can't be changed, it is only valid while adding a station, and - * attempts to change it will silently be ignored (rather than rejected - * as errors.) - * @NL80211_STA_FLAG_ASSOCIATED: station is associated; used with drivers - * that support %NL80211_FEATURE_FULL_AP_CLIENT_STATE to transition a - * previously added station into associated state - * @NL80211_STA_FLAG_MAX: highest station flag number currently defined - * @__NL80211_STA_FLAG_AFTER_LAST: internal use - */ -enum nl80211_sta_flags { - __NL80211_STA_FLAG_INVALID, - NL80211_STA_FLAG_AUTHORIZED, - NL80211_STA_FLAG_SHORT_PREAMBLE, - NL80211_STA_FLAG_WME, - NL80211_STA_FLAG_MFP, - NL80211_STA_FLAG_AUTHENTICATED, - NL80211_STA_FLAG_TDLS_PEER, - NL80211_STA_FLAG_ASSOCIATED, - - /* keep last */ - __NL80211_STA_FLAG_AFTER_LAST, - NL80211_STA_FLAG_MAX = __NL80211_STA_FLAG_AFTER_LAST - 1 -}; - -/** - * enum nl80211_sta_p2p_ps_status - station support of P2P PS - * - * @NL80211_P2P_PS_UNSUPPORTED: station doesn't support P2P PS mechanism - * @@NL80211_P2P_PS_SUPPORTED: station supports P2P PS mechanism - * @NUM_NL80211_P2P_PS_STATUS: number of values - */ -enum nl80211_sta_p2p_ps_status { - NL80211_P2P_PS_UNSUPPORTED = 0, - NL80211_P2P_PS_SUPPORTED, - - NUM_NL80211_P2P_PS_STATUS, -}; - -#define NL80211_STA_FLAG_MAX_OLD_API NL80211_STA_FLAG_TDLS_PEER - -/** - * struct nl80211_sta_flag_update - station flags mask/set - * @mask: mask of station flags to set - * @set: which values to set them to - * - * Both mask and set contain bits as per &enum nl80211_sta_flags. - */ -struct nl80211_sta_flag_update { - __u32 mask; - __u32 set; -} __attribute__((packed)); - -/** - * enum nl80211_rate_info - bitrate information - * - * These attribute types are used with %NL80211_STA_INFO_TXRATE - * when getting information about the bitrate of a station. - * There are 2 attributes for bitrate, a legacy one that represents - * a 16-bit value, and new one that represents a 32-bit value. - * If the rate value fits into 16 bit, both attributes are reported - * with the same value. If the rate is too high to fit into 16 bits - * (>6.5535Gbps) only 32-bit attribute is included. - * User space tools encouraged to use the 32-bit attribute and fall - * back to the 16-bit one for compatibility with older kernels. - * - * @__NL80211_RATE_INFO_INVALID: attribute number 0 is reserved - * @NL80211_RATE_INFO_BITRATE: total bitrate (u16, 100kbit/s) - * @NL80211_RATE_INFO_MCS: mcs index for 802.11n (u8) - * @NL80211_RATE_INFO_40_MHZ_WIDTH: 40 MHz dualchannel bitrate - * @NL80211_RATE_INFO_SHORT_GI: 400ns guard interval - * @NL80211_RATE_INFO_BITRATE32: total bitrate (u32, 100kbit/s) - * @NL80211_RATE_INFO_MAX: highest rate_info number currently defined - * @NL80211_RATE_INFO_VHT_MCS: MCS index for VHT (u8) - * @NL80211_RATE_INFO_VHT_NSS: number of streams in VHT (u8) - * @NL80211_RATE_INFO_80_MHZ_WIDTH: 80 MHz VHT rate - * @NL80211_RATE_INFO_80P80_MHZ_WIDTH: unused - 80+80 is treated the - * same as 160 for purposes of the bitrates - * @NL80211_RATE_INFO_160_MHZ_WIDTH: 160 MHz VHT rate - * @NL80211_RATE_INFO_10_MHZ_WIDTH: 10 MHz width - note that this is - * a legacy rate and will be reported as the actual bitrate, i.e. - * half the base (20 MHz) rate - * @NL80211_RATE_INFO_5_MHZ_WIDTH: 5 MHz width - note that this is - * a legacy rate and will be reported as the actual bitrate, i.e. - * a quarter of the base (20 MHz) rate - * @__NL80211_RATE_INFO_AFTER_LAST: internal use - */ -enum nl80211_rate_info { - __NL80211_RATE_INFO_INVALID, - NL80211_RATE_INFO_BITRATE, - NL80211_RATE_INFO_MCS, - NL80211_RATE_INFO_40_MHZ_WIDTH, - NL80211_RATE_INFO_SHORT_GI, - NL80211_RATE_INFO_BITRATE32, - NL80211_RATE_INFO_VHT_MCS, - NL80211_RATE_INFO_VHT_NSS, - NL80211_RATE_INFO_80_MHZ_WIDTH, - NL80211_RATE_INFO_80P80_MHZ_WIDTH, - NL80211_RATE_INFO_160_MHZ_WIDTH, - NL80211_RATE_INFO_10_MHZ_WIDTH, - NL80211_RATE_INFO_5_MHZ_WIDTH, - - /* keep last */ - __NL80211_RATE_INFO_AFTER_LAST, - NL80211_RATE_INFO_MAX = __NL80211_RATE_INFO_AFTER_LAST - 1 -}; - -/** - * enum nl80211_sta_bss_param - BSS information collected by STA - * - * These attribute types are used with %NL80211_STA_INFO_BSS_PARAM - * when getting information about the bitrate of a station. - * - * @__NL80211_STA_BSS_PARAM_INVALID: attribute number 0 is reserved - * @NL80211_STA_BSS_PARAM_CTS_PROT: whether CTS protection is enabled (flag) - * @NL80211_STA_BSS_PARAM_SHORT_PREAMBLE: whether short preamble is enabled - * (flag) - * @NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME: whether short slot time is enabled - * (flag) - * @NL80211_STA_BSS_PARAM_DTIM_PERIOD: DTIM period for beaconing (u8) - * @NL80211_STA_BSS_PARAM_BEACON_INTERVAL: Beacon interval (u16) - * @NL80211_STA_BSS_PARAM_MAX: highest sta_bss_param number currently defined - * @__NL80211_STA_BSS_PARAM_AFTER_LAST: internal use - */ -enum nl80211_sta_bss_param { - __NL80211_STA_BSS_PARAM_INVALID, - NL80211_STA_BSS_PARAM_CTS_PROT, - NL80211_STA_BSS_PARAM_SHORT_PREAMBLE, - NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME, - NL80211_STA_BSS_PARAM_DTIM_PERIOD, - NL80211_STA_BSS_PARAM_BEACON_INTERVAL, - - /* keep last */ - __NL80211_STA_BSS_PARAM_AFTER_LAST, - NL80211_STA_BSS_PARAM_MAX = __NL80211_STA_BSS_PARAM_AFTER_LAST - 1 -}; - -/** - * enum nl80211_sta_info - station information - * - * These attribute types are used with %NL80211_ATTR_STA_INFO - * when getting information about a station. - * - * @__NL80211_STA_INFO_INVALID: attribute number 0 is reserved - * @NL80211_STA_INFO_INACTIVE_TIME: time since last activity (u32, msecs) - * @NL80211_STA_INFO_RX_BYTES: total received bytes (MPDU length) - * (u32, from this station) - * @NL80211_STA_INFO_TX_BYTES: total transmitted bytes (MPDU length) - * (u32, to this station) - * @NL80211_STA_INFO_RX_BYTES64: total received bytes (MPDU length) - * (u64, from this station) - * @NL80211_STA_INFO_TX_BYTES64: total transmitted bytes (MPDU length) - * (u64, to this station) - * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm) - * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute - * containing info as possible, see &enum nl80211_rate_info - * @NL80211_STA_INFO_RX_PACKETS: total received packet (MSDUs and MMPDUs) - * (u32, from this station) - * @NL80211_STA_INFO_TX_PACKETS: total transmitted packets (MSDUs and MMPDUs) - * (u32, to this station) - * @NL80211_STA_INFO_TX_RETRIES: total retries (MPDUs) (u32, to this station) - * @NL80211_STA_INFO_TX_FAILED: total failed packets (MPDUs) - * (u32, to this station) - * @NL80211_STA_INFO_SIGNAL_AVG: signal strength average (u8, dBm) - * @NL80211_STA_INFO_LLID: the station's mesh LLID - * @NL80211_STA_INFO_PLID: the station's mesh PLID - * @NL80211_STA_INFO_PLINK_STATE: peer link state for the station - * (see %enum nl80211_plink_state) - * @NL80211_STA_INFO_RX_BITRATE: last unicast data frame rx rate, nested - * attribute, like NL80211_STA_INFO_TX_BITRATE. - * @NL80211_STA_INFO_BSS_PARAM: current station's view of BSS, nested attribute - * containing info as possible, see &enum nl80211_sta_bss_param - * @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected - * @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update. - * @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32) - * @NL80211_STA_INFO_T_OFFSET: timing offset with respect to this STA (s64) - * @NL80211_STA_INFO_LOCAL_PM: local mesh STA link-specific power mode - * @NL80211_STA_INFO_PEER_PM: peer mesh STA link-specific power mode - * @NL80211_STA_INFO_NONPEER_PM: neighbor mesh STA power save mode towards - * non-peer STA - * @NL80211_STA_INFO_CHAIN_SIGNAL: per-chain signal strength of last PPDU - * Contains a nested array of signal strength attributes (u8, dBm) - * @NL80211_STA_INFO_CHAIN_SIGNAL_AVG: per-chain signal strength average - * Same format as NL80211_STA_INFO_CHAIN_SIGNAL. - * @NL80211_STA_EXPECTED_THROUGHPUT: expected throughput considering also the - * 802.11 header (u32, kbps) - * @NL80211_STA_INFO_RX_DROP_MISC: RX packets dropped for unspecified reasons - * (u64) - * @NL80211_STA_INFO_BEACON_RX: number of beacons received from this peer (u64) - * @NL80211_STA_INFO_BEACON_SIGNAL_AVG: signal strength average - * for beacons only (u8, dBm) - * @NL80211_STA_INFO_TID_STATS: per-TID statistics (see &enum nl80211_tid_stats) - * This is a nested attribute where each the inner attribute number is the - * TID+1 and the special TID 16 (i.e. value 17) is used for non-QoS frames; - * each one of those is again nested with &enum nl80211_tid_stats - * attributes carrying the actual values. - * @NL80211_STA_INFO_RX_DURATION: aggregate PPDU duration for all frames - * received from the station (u64, usec) - * @NL80211_STA_INFO_PAD: attribute used for padding for 64-bit alignment - * @__NL80211_STA_INFO_AFTER_LAST: internal - * @NL80211_STA_INFO_MAX: highest possible station info attribute - */ -enum nl80211_sta_info { - __NL80211_STA_INFO_INVALID, - NL80211_STA_INFO_INACTIVE_TIME, - NL80211_STA_INFO_RX_BYTES, - NL80211_STA_INFO_TX_BYTES, - NL80211_STA_INFO_LLID, - NL80211_STA_INFO_PLID, - NL80211_STA_INFO_PLINK_STATE, - NL80211_STA_INFO_SIGNAL, - NL80211_STA_INFO_TX_BITRATE, - NL80211_STA_INFO_RX_PACKETS, - NL80211_STA_INFO_TX_PACKETS, - NL80211_STA_INFO_TX_RETRIES, - NL80211_STA_INFO_TX_FAILED, - NL80211_STA_INFO_SIGNAL_AVG, - NL80211_STA_INFO_RX_BITRATE, - NL80211_STA_INFO_BSS_PARAM, - NL80211_STA_INFO_CONNECTED_TIME, - NL80211_STA_INFO_STA_FLAGS, - NL80211_STA_INFO_BEACON_LOSS, - NL80211_STA_INFO_T_OFFSET, - NL80211_STA_INFO_LOCAL_PM, - NL80211_STA_INFO_PEER_PM, - NL80211_STA_INFO_NONPEER_PM, - NL80211_STA_INFO_RX_BYTES64, - NL80211_STA_INFO_TX_BYTES64, - NL80211_STA_INFO_CHAIN_SIGNAL, - NL80211_STA_INFO_CHAIN_SIGNAL_AVG, - NL80211_STA_INFO_EXPECTED_THROUGHPUT, - NL80211_STA_INFO_RX_DROP_MISC, - NL80211_STA_INFO_BEACON_RX, - NL80211_STA_INFO_BEACON_SIGNAL_AVG, - NL80211_STA_INFO_TID_STATS, - NL80211_STA_INFO_RX_DURATION, - NL80211_STA_INFO_PAD, - - /* keep last */ - __NL80211_STA_INFO_AFTER_LAST, - NL80211_STA_INFO_MAX = __NL80211_STA_INFO_AFTER_LAST - 1 -}; - -/** - * enum nl80211_tid_stats - per TID statistics attributes - * @__NL80211_TID_STATS_INVALID: attribute number 0 is reserved - * @NL80211_TID_STATS_RX_MSDU: number of MSDUs received (u64) - * @NL80211_TID_STATS_TX_MSDU: number of MSDUs transmitted (or - * attempted to transmit; u64) - * @NL80211_TID_STATS_TX_MSDU_RETRIES: number of retries for - * transmitted MSDUs (not counting the first attempt; u64) - * @NL80211_TID_STATS_TX_MSDU_FAILED: number of failed transmitted - * MSDUs (u64) - * @NL80211_TID_STATS_PAD: attribute used for padding for 64-bit alignment - * @NUM_NL80211_TID_STATS: number of attributes here - * @NL80211_TID_STATS_MAX: highest numbered attribute here - */ -enum nl80211_tid_stats { - __NL80211_TID_STATS_INVALID, - NL80211_TID_STATS_RX_MSDU, - NL80211_TID_STATS_TX_MSDU, - NL80211_TID_STATS_TX_MSDU_RETRIES, - NL80211_TID_STATS_TX_MSDU_FAILED, - NL80211_TID_STATS_PAD, - - /* keep last */ - NUM_NL80211_TID_STATS, - NL80211_TID_STATS_MAX = NUM_NL80211_TID_STATS - 1 -}; - -/** - * enum nl80211_mpath_flags - nl80211 mesh path flags - * - * @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active - * @NL80211_MPATH_FLAG_RESOLVING: the mesh path discovery process is running - * @NL80211_MPATH_FLAG_SN_VALID: the mesh path contains a valid SN - * @NL80211_MPATH_FLAG_FIXED: the mesh path has been manually set - * @NL80211_MPATH_FLAG_RESOLVED: the mesh path discovery process succeeded - */ -enum nl80211_mpath_flags { - NL80211_MPATH_FLAG_ACTIVE = 1<<0, - NL80211_MPATH_FLAG_RESOLVING = 1<<1, - NL80211_MPATH_FLAG_SN_VALID = 1<<2, - NL80211_MPATH_FLAG_FIXED = 1<<3, - NL80211_MPATH_FLAG_RESOLVED = 1<<4, -}; - -/** - * enum nl80211_mpath_info - mesh path information - * - * These attribute types are used with %NL80211_ATTR_MPATH_INFO when getting - * information about a mesh path. - * - * @__NL80211_MPATH_INFO_INVALID: attribute number 0 is reserved - * @NL80211_MPATH_INFO_FRAME_QLEN: number of queued frames for this destination - * @NL80211_MPATH_INFO_SN: destination sequence number - * @NL80211_MPATH_INFO_METRIC: metric (cost) of this mesh path - * @NL80211_MPATH_INFO_EXPTIME: expiration time for the path, in msec from now - * @NL80211_MPATH_INFO_FLAGS: mesh path flags, enumerated in - * &enum nl80211_mpath_flags; - * @NL80211_MPATH_INFO_DISCOVERY_TIMEOUT: total path discovery timeout, in msec - * @NL80211_MPATH_INFO_DISCOVERY_RETRIES: mesh path discovery retries - * @NL80211_MPATH_INFO_MAX: highest mesh path information attribute number - * currently defind - * @__NL80211_MPATH_INFO_AFTER_LAST: internal use - */ -enum nl80211_mpath_info { - __NL80211_MPATH_INFO_INVALID, - NL80211_MPATH_INFO_FRAME_QLEN, - NL80211_MPATH_INFO_SN, - NL80211_MPATH_INFO_METRIC, - NL80211_MPATH_INFO_EXPTIME, - NL80211_MPATH_INFO_FLAGS, - NL80211_MPATH_INFO_DISCOVERY_TIMEOUT, - NL80211_MPATH_INFO_DISCOVERY_RETRIES, - - /* keep last */ - __NL80211_MPATH_INFO_AFTER_LAST, - NL80211_MPATH_INFO_MAX = __NL80211_MPATH_INFO_AFTER_LAST - 1 -}; - -/** - * enum nl80211_band_attr - band attributes - * @__NL80211_BAND_ATTR_INVALID: attribute number 0 is reserved - * @NL80211_BAND_ATTR_FREQS: supported frequencies in this band, - * an array of nested frequency attributes - * @NL80211_BAND_ATTR_RATES: supported bitrates in this band, - * an array of nested bitrate attributes - * @NL80211_BAND_ATTR_HT_MCS_SET: 16-byte attribute containing the MCS set as - * defined in 802.11n - * @NL80211_BAND_ATTR_HT_CAPA: HT capabilities, as in the HT information IE - * @NL80211_BAND_ATTR_HT_AMPDU_FACTOR: A-MPDU factor, as in 11n - * @NL80211_BAND_ATTR_HT_AMPDU_DENSITY: A-MPDU density, as in 11n - * @NL80211_BAND_ATTR_VHT_MCS_SET: 32-byte attribute containing the MCS set as - * defined in 802.11ac - * @NL80211_BAND_ATTR_VHT_CAPA: VHT capabilities, as in the HT information IE - * @NL80211_BAND_ATTR_MAX: highest band attribute currently defined - * @__NL80211_BAND_ATTR_AFTER_LAST: internal use - */ -enum nl80211_band_attr { - __NL80211_BAND_ATTR_INVALID, - NL80211_BAND_ATTR_FREQS, - NL80211_BAND_ATTR_RATES, - - NL80211_BAND_ATTR_HT_MCS_SET, - NL80211_BAND_ATTR_HT_CAPA, - NL80211_BAND_ATTR_HT_AMPDU_FACTOR, - NL80211_BAND_ATTR_HT_AMPDU_DENSITY, - - NL80211_BAND_ATTR_VHT_MCS_SET, - NL80211_BAND_ATTR_VHT_CAPA, - - /* keep last */ - __NL80211_BAND_ATTR_AFTER_LAST, - NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1 -}; - -#define NL80211_BAND_ATTR_HT_CAPA NL80211_BAND_ATTR_HT_CAPA - -/** - * enum nl80211_frequency_attr - frequency attributes - * @__NL80211_FREQUENCY_ATTR_INVALID: attribute number 0 is reserved - * @NL80211_FREQUENCY_ATTR_FREQ: Frequency in MHz - * @NL80211_FREQUENCY_ATTR_DISABLED: Channel is disabled in current - * regulatory domain. - * @NL80211_FREQUENCY_ATTR_NO_IR: no mechanisms that initiate radiation - * are permitted on this channel, this includes sending probe - * requests, or modes of operation that require beaconing. - * @NL80211_FREQUENCY_ATTR_RADAR: Radar detection is mandatory - * on this channel in current regulatory domain. - * @NL80211_FREQUENCY_ATTR_MAX_TX_POWER: Maximum transmission power in mBm - * (100 * dBm). - * @NL80211_FREQUENCY_ATTR_DFS_STATE: current state for DFS - * (enum nl80211_dfs_state) - * @NL80211_FREQUENCY_ATTR_DFS_TIME: time in miliseconds for how long - * this channel is in this DFS state. - * @NL80211_FREQUENCY_ATTR_NO_HT40_MINUS: HT40- isn't possible with this - * channel as the control channel - * @NL80211_FREQUENCY_ATTR_NO_HT40_PLUS: HT40+ isn't possible with this - * channel as the control channel - * @NL80211_FREQUENCY_ATTR_NO_80MHZ: any 80 MHz channel using this channel - * as the primary or any of the secondary channels isn't possible, - * this includes 80+80 channels - * @NL80211_FREQUENCY_ATTR_NO_160MHZ: any 160 MHz (but not 80+80) channel - * using this channel as the primary or any of the secondary channels - * isn't possible - * @NL80211_FREQUENCY_ATTR_DFS_CAC_TIME: DFS CAC time in milliseconds. - * @NL80211_FREQUENCY_ATTR_INDOOR_ONLY: Only indoor use is permitted on this - * channel. A channel that has the INDOOR_ONLY attribute can only be - * used when there is a clear assessment that the device is operating in - * an indoor surroundings, i.e., it is connected to AC power (and not - * through portable DC inverters) or is under the control of a master - * that is acting as an AP and is connected to AC power. - * @NL80211_FREQUENCY_ATTR_IR_CONCURRENT: IR operation is allowed on this - * channel if it's connected concurrently to a BSS on the same channel on - * the 2 GHz band or to a channel in the same UNII band (on the 5 GHz - * band), and IEEE80211_CHAN_RADAR is not set. Instantiating a GO or TDLS - * off-channel on a channel that has the IR_CONCURRENT attribute set can be - * done when there is a clear assessment that the device is operating under - * the guidance of an authorized master, i.e., setting up a GO or TDLS - * off-channel while the device is also connected to an AP with DFS and - * radar detection on the UNII band (it is up to user-space, i.e., - * wpa_supplicant to perform the required verifications). Using this - * attribute for IR is disallowed for master interfaces (IBSS, AP). - * @NL80211_FREQUENCY_ATTR_NO_20MHZ: 20 MHz operation is not allowed - * on this channel in current regulatory domain. - * @NL80211_FREQUENCY_ATTR_NO_10MHZ: 10 MHz operation is not allowed - * on this channel in current regulatory domain. - * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number - * currently defined - * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use - * - * See https://apps.fcc.gov/eas/comments/GetPublishedDocument.html?id=327&tn=528122 - * for more information on the FCC description of the relaxations allowed - * by NL80211_FREQUENCY_ATTR_INDOOR_ONLY and - * NL80211_FREQUENCY_ATTR_IR_CONCURRENT. - */ -enum nl80211_frequency_attr { - __NL80211_FREQUENCY_ATTR_INVALID, - NL80211_FREQUENCY_ATTR_FREQ, - NL80211_FREQUENCY_ATTR_DISABLED, - NL80211_FREQUENCY_ATTR_NO_IR, - __NL80211_FREQUENCY_ATTR_NO_IBSS, - NL80211_FREQUENCY_ATTR_RADAR, - NL80211_FREQUENCY_ATTR_MAX_TX_POWER, - NL80211_FREQUENCY_ATTR_DFS_STATE, - NL80211_FREQUENCY_ATTR_DFS_TIME, - NL80211_FREQUENCY_ATTR_NO_HT40_MINUS, - NL80211_FREQUENCY_ATTR_NO_HT40_PLUS, - NL80211_FREQUENCY_ATTR_NO_80MHZ, - NL80211_FREQUENCY_ATTR_NO_160MHZ, - NL80211_FREQUENCY_ATTR_DFS_CAC_TIME, - NL80211_FREQUENCY_ATTR_INDOOR_ONLY, - NL80211_FREQUENCY_ATTR_IR_CONCURRENT, - NL80211_FREQUENCY_ATTR_NO_20MHZ, - NL80211_FREQUENCY_ATTR_NO_10MHZ, - - /* keep last */ - __NL80211_FREQUENCY_ATTR_AFTER_LAST, - NL80211_FREQUENCY_ATTR_MAX = __NL80211_FREQUENCY_ATTR_AFTER_LAST - 1 -}; - -#define NL80211_FREQUENCY_ATTR_MAX_TX_POWER NL80211_FREQUENCY_ATTR_MAX_TX_POWER -#define NL80211_FREQUENCY_ATTR_PASSIVE_SCAN NL80211_FREQUENCY_ATTR_NO_IR -#define NL80211_FREQUENCY_ATTR_NO_IBSS NL80211_FREQUENCY_ATTR_NO_IR -#define NL80211_FREQUENCY_ATTR_NO_IR NL80211_FREQUENCY_ATTR_NO_IR -#define NL80211_FREQUENCY_ATTR_GO_CONCURRENT \ - NL80211_FREQUENCY_ATTR_IR_CONCURRENT - -/** - * enum nl80211_bitrate_attr - bitrate attributes - * @__NL80211_BITRATE_ATTR_INVALID: attribute number 0 is reserved - * @NL80211_BITRATE_ATTR_RATE: Bitrate in units of 100 kbps - * @NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE: Short preamble supported - * in 2.4 GHz band. - * @NL80211_BITRATE_ATTR_MAX: highest bitrate attribute number - * currently defined - * @__NL80211_BITRATE_ATTR_AFTER_LAST: internal use - */ -enum nl80211_bitrate_attr { - __NL80211_BITRATE_ATTR_INVALID, - NL80211_BITRATE_ATTR_RATE, - NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE, - - /* keep last */ - __NL80211_BITRATE_ATTR_AFTER_LAST, - NL80211_BITRATE_ATTR_MAX = __NL80211_BITRATE_ATTR_AFTER_LAST - 1 -}; - -/** - * enum nl80211_initiator - Indicates the initiator of a reg domain request - * @NL80211_REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world - * regulatory domain. - * @NL80211_REGDOM_SET_BY_USER: User asked the wireless core to set the - * regulatory domain. - * @NL80211_REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the - * wireless core it thinks its knows the regulatory domain we should be in. - * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an - * 802.11 country information element with regulatory information it - * thinks we should consider. cfg80211 only processes the country - * code from the IE, and relies on the regulatory domain information - * structure passed by userspace (CRDA) from our wireless-regdb. - * If a channel is enabled but the country code indicates it should - * be disabled we disable the channel and re-enable it upon disassociation. - */ -enum nl80211_reg_initiator { - NL80211_REGDOM_SET_BY_CORE, - NL80211_REGDOM_SET_BY_USER, - NL80211_REGDOM_SET_BY_DRIVER, - NL80211_REGDOM_SET_BY_COUNTRY_IE, -}; - -/** - * enum nl80211_reg_type - specifies the type of regulatory domain - * @NL80211_REGDOM_TYPE_COUNTRY: the regulatory domain set is one that pertains - * to a specific country. When this is set you can count on the - * ISO / IEC 3166 alpha2 country code being valid. - * @NL80211_REGDOM_TYPE_WORLD: the regulatory set domain is the world regulatory - * domain. - * @NL80211_REGDOM_TYPE_CUSTOM_WORLD: the regulatory domain set is a custom - * driver specific world regulatory domain. These do not apply system-wide - * and are only applicable to the individual devices which have requested - * them to be applied. - * @NL80211_REGDOM_TYPE_INTERSECTION: the regulatory domain set is the product - * of an intersection between two regulatory domains -- the previously - * set regulatory domain on the system and the last accepted regulatory - * domain request to be processed. - */ -enum nl80211_reg_type { - NL80211_REGDOM_TYPE_COUNTRY, - NL80211_REGDOM_TYPE_WORLD, - NL80211_REGDOM_TYPE_CUSTOM_WORLD, - NL80211_REGDOM_TYPE_INTERSECTION, -}; - -/** - * enum nl80211_reg_rule_attr - regulatory rule attributes - * @__NL80211_REG_RULE_ATTR_INVALID: attribute number 0 is reserved - * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional - * considerations for a given frequency range. These are the - * &enum nl80211_reg_rule_flags. - * @NL80211_ATTR_FREQ_RANGE_START: starting frequencry for the regulatory - * rule in KHz. This is not a center of frequency but an actual regulatory - * band edge. - * @NL80211_ATTR_FREQ_RANGE_END: ending frequency for the regulatory rule - * in KHz. This is not a center a frequency but an actual regulatory - * band edge. - * @NL80211_ATTR_FREQ_RANGE_MAX_BW: maximum allowed bandwidth for this - * frequency range, in KHz. - * @NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN: the maximum allowed antenna gain - * for a given frequency range. The value is in mBi (100 * dBi). - * If you don't have one then don't send this. - * @NL80211_ATTR_POWER_RULE_MAX_EIRP: the maximum allowed EIRP for - * a given frequency range. The value is in mBm (100 * dBm). - * @NL80211_ATTR_DFS_CAC_TIME: DFS CAC time in milliseconds. - * If not present or 0 default CAC time will be used. - * @NL80211_REG_RULE_ATTR_MAX: highest regulatory rule attribute number - * currently defined - * @__NL80211_REG_RULE_ATTR_AFTER_LAST: internal use - */ -enum nl80211_reg_rule_attr { - __NL80211_REG_RULE_ATTR_INVALID, - NL80211_ATTR_REG_RULE_FLAGS, - - NL80211_ATTR_FREQ_RANGE_START, - NL80211_ATTR_FREQ_RANGE_END, - NL80211_ATTR_FREQ_RANGE_MAX_BW, - - NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN, - NL80211_ATTR_POWER_RULE_MAX_EIRP, - - NL80211_ATTR_DFS_CAC_TIME, - - /* keep last */ - __NL80211_REG_RULE_ATTR_AFTER_LAST, - NL80211_REG_RULE_ATTR_MAX = __NL80211_REG_RULE_ATTR_AFTER_LAST - 1 -}; - -/** - * enum nl80211_sched_scan_match_attr - scheduled scan match attributes - * @__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: attribute number 0 is reserved - * @NL80211_SCHED_SCAN_MATCH_ATTR_SSID: SSID to be used for matching, - * only report BSS with matching SSID. - * @NL80211_SCHED_SCAN_MATCH_ATTR_RSSI: RSSI threshold (in dBm) for reporting a - * BSS in scan results. Filtering is turned off if not specified. Note that - * if this attribute is in a match set of its own, then it is treated as - * the default value for all matchsets with an SSID, rather than being a - * matchset of its own without an RSSI filter. This is due to problems with - * how this API was implemented in the past. Also, due to the same problem, - * the only way to create a matchset with only an RSSI filter (with this - * attribute) is if there's only a single matchset with the RSSI attribute. - * @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter - * attribute number currently defined - * @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use - */ -enum nl80211_sched_scan_match_attr { - __NL80211_SCHED_SCAN_MATCH_ATTR_INVALID, - - NL80211_SCHED_SCAN_MATCH_ATTR_SSID, - NL80211_SCHED_SCAN_MATCH_ATTR_RSSI, - - /* keep last */ - __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST, - NL80211_SCHED_SCAN_MATCH_ATTR_MAX = - __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST - 1 -}; - -/* only for backward compatibility */ -#define NL80211_ATTR_SCHED_SCAN_MATCH_SSID NL80211_SCHED_SCAN_MATCH_ATTR_SSID - -/** - * enum nl80211_reg_rule_flags - regulatory rule flags - * - * @NL80211_RRF_NO_OFDM: OFDM modulation not allowed - * @NL80211_RRF_NO_CCK: CCK modulation not allowed - * @NL80211_RRF_NO_INDOOR: indoor operation not allowed - * @NL80211_RRF_NO_OUTDOOR: outdoor operation not allowed - * @NL80211_RRF_DFS: DFS support is required to be used - * @NL80211_RRF_PTP_ONLY: this is only for Point To Point links - * @NL80211_RRF_PTMP_ONLY: this is only for Point To Multi Point links - * @NL80211_RRF_NO_IR: no mechanisms that initiate radiation are allowed, - * this includes probe requests or modes of operation that require - * beaconing. - * @NL80211_RRF_AUTO_BW: maximum available bandwidth should be calculated - * base on contiguous rules and wider channels will be allowed to cross - * multiple contiguous/overlapping frequency ranges. - * @NL80211_RRF_IR_CONCURRENT: See &NL80211_FREQUENCY_ATTR_IR_CONCURRENT - * @NL80211_RRF_NO_HT40MINUS: channels can't be used in HT40- operation - * @NL80211_RRF_NO_HT40PLUS: channels can't be used in HT40+ operation - * @NL80211_RRF_NO_80MHZ: 80MHz operation not allowed - * @NL80211_RRF_NO_160MHZ: 160MHz operation not allowed - */ -enum nl80211_reg_rule_flags { - NL80211_RRF_NO_OFDM = 1<<0, - NL80211_RRF_NO_CCK = 1<<1, - NL80211_RRF_NO_INDOOR = 1<<2, - NL80211_RRF_NO_OUTDOOR = 1<<3, - NL80211_RRF_DFS = 1<<4, - NL80211_RRF_PTP_ONLY = 1<<5, - NL80211_RRF_PTMP_ONLY = 1<<6, - NL80211_RRF_NO_IR = 1<<7, - __NL80211_RRF_NO_IBSS = 1<<8, - NL80211_RRF_AUTO_BW = 1<<11, - NL80211_RRF_IR_CONCURRENT = 1<<12, - NL80211_RRF_NO_HT40MINUS = 1<<13, - NL80211_RRF_NO_HT40PLUS = 1<<14, - NL80211_RRF_NO_80MHZ = 1<<15, - NL80211_RRF_NO_160MHZ = 1<<16, -}; - -#define NL80211_RRF_PASSIVE_SCAN NL80211_RRF_NO_IR -#define NL80211_RRF_NO_IBSS NL80211_RRF_NO_IR -#define NL80211_RRF_NO_IR NL80211_RRF_NO_IR -#define NL80211_RRF_NO_HT40 (NL80211_RRF_NO_HT40MINUS |\ - NL80211_RRF_NO_HT40PLUS) -#define NL80211_RRF_GO_CONCURRENT NL80211_RRF_IR_CONCURRENT - -/* For backport compatibility with older userspace */ -#define NL80211_RRF_NO_IR_ALL (NL80211_RRF_NO_IR | __NL80211_RRF_NO_IBSS) - -/** - * enum nl80211_dfs_regions - regulatory DFS regions - * - * @NL80211_DFS_UNSET: Country has no DFS master region specified - * @NL80211_DFS_FCC: Country follows DFS master rules from FCC - * @NL80211_DFS_ETSI: Country follows DFS master rules from ETSI - * @NL80211_DFS_JP: Country follows DFS master rules from JP/MKK/Telec - */ -enum nl80211_dfs_regions { - NL80211_DFS_UNSET = 0, - NL80211_DFS_FCC = 1, - NL80211_DFS_ETSI = 2, - NL80211_DFS_JP = 3, -}; - -/** - * enum nl80211_user_reg_hint_type - type of user regulatory hint - * - * @NL80211_USER_REG_HINT_USER: a user sent the hint. This is always - * assumed if the attribute is not set. - * @NL80211_USER_REG_HINT_CELL_BASE: the hint comes from a cellular - * base station. Device drivers that have been tested to work - * properly to support this type of hint can enable these hints - * by setting the NL80211_FEATURE_CELL_BASE_REG_HINTS feature - * capability on the struct wiphy. The wireless core will - * ignore all cell base station hints until at least one device - * present has been registered with the wireless core that - * has listed NL80211_FEATURE_CELL_BASE_REG_HINTS as a - * supported feature. - * @NL80211_USER_REG_HINT_INDOOR: a user sent an hint indicating that the - * platform is operating in an indoor environment. - */ -enum nl80211_user_reg_hint_type { - NL80211_USER_REG_HINT_USER = 0, - NL80211_USER_REG_HINT_CELL_BASE = 1, - NL80211_USER_REG_HINT_INDOOR = 2, -}; - -/** - * enum nl80211_survey_info - survey information - * - * These attribute types are used with %NL80211_ATTR_SURVEY_INFO - * when getting information about a survey. - * - * @__NL80211_SURVEY_INFO_INVALID: attribute number 0 is reserved - * @NL80211_SURVEY_INFO_FREQUENCY: center frequency of channel - * @NL80211_SURVEY_INFO_NOISE: noise level of channel (u8, dBm) - * @NL80211_SURVEY_INFO_IN_USE: channel is currently being used - * @NL80211_SURVEY_INFO_TIME: amount of time (in ms) that the radio - * was turned on (on channel or globally) - * @NL80211_SURVEY_INFO_TIME_BUSY: amount of the time the primary - * channel was sensed busy (either due to activity or energy detect) - * @NL80211_SURVEY_INFO_TIME_EXT_BUSY: amount of time the extension - * channel was sensed busy - * @NL80211_SURVEY_INFO_TIME_RX: amount of time the radio spent - * receiving data (on channel or globally) - * @NL80211_SURVEY_INFO_TIME_TX: amount of time the radio spent - * transmitting data (on channel or globally) - * @NL80211_SURVEY_INFO_TIME_SCAN: time the radio spent for scan - * (on this channel or globally) - * @NL80211_SURVEY_INFO_PAD: attribute used for padding for 64-bit alignment - * @NL80211_SURVEY_INFO_MAX: highest survey info attribute number - * currently defined - * @__NL80211_SURVEY_INFO_AFTER_LAST: internal use - */ -enum nl80211_survey_info { - __NL80211_SURVEY_INFO_INVALID, - NL80211_SURVEY_INFO_FREQUENCY, - NL80211_SURVEY_INFO_NOISE, - NL80211_SURVEY_INFO_IN_USE, - NL80211_SURVEY_INFO_TIME, - NL80211_SURVEY_INFO_TIME_BUSY, - NL80211_SURVEY_INFO_TIME_EXT_BUSY, - NL80211_SURVEY_INFO_TIME_RX, - NL80211_SURVEY_INFO_TIME_TX, - NL80211_SURVEY_INFO_TIME_SCAN, - NL80211_SURVEY_INFO_PAD, - - /* keep last */ - __NL80211_SURVEY_INFO_AFTER_LAST, - NL80211_SURVEY_INFO_MAX = __NL80211_SURVEY_INFO_AFTER_LAST - 1 -}; - -/* keep old names for compatibility */ -#define NL80211_SURVEY_INFO_CHANNEL_TIME NL80211_SURVEY_INFO_TIME -#define NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY NL80211_SURVEY_INFO_TIME_BUSY -#define NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY NL80211_SURVEY_INFO_TIME_EXT_BUSY -#define NL80211_SURVEY_INFO_CHANNEL_TIME_RX NL80211_SURVEY_INFO_TIME_RX -#define NL80211_SURVEY_INFO_CHANNEL_TIME_TX NL80211_SURVEY_INFO_TIME_TX - -/** - * enum nl80211_mntr_flags - monitor configuration flags - * - * Monitor configuration flags. - * - * @__NL80211_MNTR_FLAG_INVALID: reserved - * - * @NL80211_MNTR_FLAG_FCSFAIL: pass frames with bad FCS - * @NL80211_MNTR_FLAG_PLCPFAIL: pass frames with bad PLCP - * @NL80211_MNTR_FLAG_CONTROL: pass control frames - * @NL80211_MNTR_FLAG_OTHER_BSS: disable BSSID filtering - * @NL80211_MNTR_FLAG_COOK_FRAMES: report frames after processing. - * overrides all other flags. - * @NL80211_MNTR_FLAG_ACTIVE: use the configured MAC address - * and ACK incoming unicast packets. - * - * @__NL80211_MNTR_FLAG_AFTER_LAST: internal use - * @NL80211_MNTR_FLAG_MAX: highest possible monitor flag - */ -enum nl80211_mntr_flags { - __NL80211_MNTR_FLAG_INVALID, - NL80211_MNTR_FLAG_FCSFAIL, - NL80211_MNTR_FLAG_PLCPFAIL, - NL80211_MNTR_FLAG_CONTROL, - NL80211_MNTR_FLAG_OTHER_BSS, - NL80211_MNTR_FLAG_COOK_FRAMES, - NL80211_MNTR_FLAG_ACTIVE, - - /* keep last */ - __NL80211_MNTR_FLAG_AFTER_LAST, - NL80211_MNTR_FLAG_MAX = __NL80211_MNTR_FLAG_AFTER_LAST - 1 -}; - -/** - * enum nl80211_mesh_power_mode - mesh power save modes - * - * @NL80211_MESH_POWER_UNKNOWN: The mesh power mode of the mesh STA is - * not known or has not been set yet. - * @NL80211_MESH_POWER_ACTIVE: Active mesh power mode. The mesh STA is - * in Awake state all the time. - * @NL80211_MESH_POWER_LIGHT_SLEEP: Light sleep mode. The mesh STA will - * alternate between Active and Doze states, but will wake up for - * neighbor's beacons. - * @NL80211_MESH_POWER_DEEP_SLEEP: Deep sleep mode. The mesh STA will - * alternate between Active and Doze states, but may not wake up - * for neighbor's beacons. - * - * @__NL80211_MESH_POWER_AFTER_LAST - internal use - * @NL80211_MESH_POWER_MAX - highest possible power save level - */ - -enum nl80211_mesh_power_mode { - NL80211_MESH_POWER_UNKNOWN, - NL80211_MESH_POWER_ACTIVE, - NL80211_MESH_POWER_LIGHT_SLEEP, - NL80211_MESH_POWER_DEEP_SLEEP, - - __NL80211_MESH_POWER_AFTER_LAST, - NL80211_MESH_POWER_MAX = __NL80211_MESH_POWER_AFTER_LAST - 1 -}; - -/** - * enum nl80211_meshconf_params - mesh configuration parameters - * - * Mesh configuration parameters. These can be changed while the mesh is - * active. - * - * @__NL80211_MESHCONF_INVALID: internal use - * - * @NL80211_MESHCONF_RETRY_TIMEOUT: specifies the initial retry timeout in - * millisecond units, used by the Peer Link Open message - * - * @NL80211_MESHCONF_CONFIRM_TIMEOUT: specifies the initial confirm timeout, in - * millisecond units, used by the peer link management to close a peer link - * - * @NL80211_MESHCONF_HOLDING_TIMEOUT: specifies the holding timeout, in - * millisecond units - * - * @NL80211_MESHCONF_MAX_PEER_LINKS: maximum number of peer links allowed - * on this mesh interface - * - * @NL80211_MESHCONF_MAX_RETRIES: specifies the maximum number of peer link - * open retries that can be sent to establish a new peer link instance in a - * mesh - * - * @NL80211_MESHCONF_TTL: specifies the value of TTL field set at a source mesh - * point. - * - * @NL80211_MESHCONF_AUTO_OPEN_PLINKS: whether we should automatically open - * peer links when we detect compatible mesh peers. Disabled if - * @NL80211_MESH_SETUP_USERSPACE_MPM or @NL80211_MESH_SETUP_USERSPACE_AMPE are - * set. - * - * @NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES: the number of action frames - * containing a PREQ that an MP can send to a particular destination (path - * target) - * - * @NL80211_MESHCONF_PATH_REFRESH_TIME: how frequently to refresh mesh paths - * (in milliseconds) - * - * @NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT: minimum length of time to wait - * until giving up on a path discovery (in milliseconds) - * - * @NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT: The time (in TUs) for which mesh - * points receiving a PREQ shall consider the forwarding information from - * the root to be valid. (TU = time unit) - * - * @NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL: The minimum interval of time (in - * TUs) during which an MP can send only one action frame containing a PREQ - * reference element - * - * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs) - * that it takes for an HWMP information element to propagate across the - * mesh - * - * @NL80211_MESHCONF_HWMP_ROOTMODE: whether root mode is enabled or not - * - * @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a - * source mesh point for path selection elements. - * - * @NL80211_MESHCONF_HWMP_RANN_INTERVAL: The interval of time (in TUs) between - * root announcements are transmitted. - * - * @NL80211_MESHCONF_GATE_ANNOUNCEMENTS: Advertise that this mesh station has - * access to a broader network beyond the MBSS. This is done via Root - * Announcement frames. - * - * @NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL: The minimum interval of time (in - * TUs) during which a mesh STA can send only one Action frame containing a - * PERR element. - * - * @NL80211_MESHCONF_FORWARDING: set Mesh STA as forwarding or non-forwarding - * or forwarding entity (default is TRUE - forwarding entity) - * - * @NL80211_MESHCONF_RSSI_THRESHOLD: RSSI threshold in dBm. This specifies the - * threshold for average signal strength of candidate station to establish - * a peer link. - * - * @NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR: maximum number of neighbors - * to synchronize to for 11s default synchronization method - * (see 11C.12.2.2) - * - * @NL80211_MESHCONF_HT_OPMODE: set mesh HT protection mode. - * - * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute - * - * @NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT: The time (in TUs) for - * which mesh STAs receiving a proactive PREQ shall consider the forwarding - * information to the root mesh STA to be valid. - * - * @NL80211_MESHCONF_HWMP_ROOT_INTERVAL: The interval of time (in TUs) between - * proactive PREQs are transmitted. - * - * @NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL: The minimum interval of time - * (in TUs) during which a mesh STA can send only one Action frame - * containing a PREQ element for root path confirmation. - * - * @NL80211_MESHCONF_POWER_MODE: Default mesh power mode for new peer links. - * type &enum nl80211_mesh_power_mode (u32) - * - * @NL80211_MESHCONF_AWAKE_WINDOW: awake window duration (in TUs) - * - * @NL80211_MESHCONF_PLINK_TIMEOUT: If no tx activity is seen from a STA we've - * established peering with for longer than this time (in seconds), then - * remove it from the STA's list of peers. You may set this to 0 to disable - * the removal of the STA. Default is 30 minutes. - * - * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use - */ -enum nl80211_meshconf_params { - __NL80211_MESHCONF_INVALID, - NL80211_MESHCONF_RETRY_TIMEOUT, - NL80211_MESHCONF_CONFIRM_TIMEOUT, - NL80211_MESHCONF_HOLDING_TIMEOUT, - NL80211_MESHCONF_MAX_PEER_LINKS, - NL80211_MESHCONF_MAX_RETRIES, - NL80211_MESHCONF_TTL, - NL80211_MESHCONF_AUTO_OPEN_PLINKS, - NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, - NL80211_MESHCONF_PATH_REFRESH_TIME, - NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT, - NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, - NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, - NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, - NL80211_MESHCONF_HWMP_ROOTMODE, - NL80211_MESHCONF_ELEMENT_TTL, - NL80211_MESHCONF_HWMP_RANN_INTERVAL, - NL80211_MESHCONF_GATE_ANNOUNCEMENTS, - NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, - NL80211_MESHCONF_FORWARDING, - NL80211_MESHCONF_RSSI_THRESHOLD, - NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR, - NL80211_MESHCONF_HT_OPMODE, - NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT, - NL80211_MESHCONF_HWMP_ROOT_INTERVAL, - NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL, - NL80211_MESHCONF_POWER_MODE, - NL80211_MESHCONF_AWAKE_WINDOW, - NL80211_MESHCONF_PLINK_TIMEOUT, - - /* keep last */ - __NL80211_MESHCONF_ATTR_AFTER_LAST, - NL80211_MESHCONF_ATTR_MAX = __NL80211_MESHCONF_ATTR_AFTER_LAST - 1 -}; - -/** - * enum nl80211_mesh_setup_params - mesh setup parameters - * - * Mesh setup parameters. These are used to start/join a mesh and cannot be - * changed while the mesh is active. - * - * @__NL80211_MESH_SETUP_INVALID: Internal use - * - * @NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: Enable this option to use a - * vendor specific path selection algorithm or disable it to use the - * default HWMP. - * - * @NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: Enable this option to use a - * vendor specific path metric or disable it to use the default Airtime - * metric. - * - * @NL80211_MESH_SETUP_IE: Information elements for this mesh, for instance, a - * robust security network ie, or a vendor specific information element - * that vendors will use to identify the path selection methods and - * metrics in use. - * - * @NL80211_MESH_SETUP_USERSPACE_AUTH: Enable this option if an authentication - * daemon will be authenticating mesh candidates. - * - * @NL80211_MESH_SETUP_USERSPACE_AMPE: Enable this option if an authentication - * daemon will be securing peer link frames. AMPE is a secured version of - * Mesh Peering Management (MPM) and is implemented with the assistance of - * a userspace daemon. When this flag is set, the kernel will send peer - * management frames to a userspace daemon that will implement AMPE - * functionality (security capabilities selection, key confirmation, and - * key management). When the flag is unset (default), the kernel can - * autonomously complete (unsecured) mesh peering without the need of a - * userspace daemon. - * - * @NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC: Enable this option to use a - * vendor specific synchronization method or disable it to use the default - * neighbor offset synchronization - * - * @NL80211_MESH_SETUP_USERSPACE_MPM: Enable this option if userspace will - * implement an MPM which handles peer allocation and state. - * - * @NL80211_MESH_SETUP_AUTH_PROTOCOL: Inform the kernel of the authentication - * method (u8, as defined in IEEE 8.4.2.100.6, e.g. 0x1 for SAE). - * Default is no authentication method required. - * - * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number - * - * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use - */ -enum nl80211_mesh_setup_params { - __NL80211_MESH_SETUP_INVALID, - NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL, - NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC, - NL80211_MESH_SETUP_IE, - NL80211_MESH_SETUP_USERSPACE_AUTH, - NL80211_MESH_SETUP_USERSPACE_AMPE, - NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC, - NL80211_MESH_SETUP_USERSPACE_MPM, - NL80211_MESH_SETUP_AUTH_PROTOCOL, - - /* keep last */ - __NL80211_MESH_SETUP_ATTR_AFTER_LAST, - NL80211_MESH_SETUP_ATTR_MAX = __NL80211_MESH_SETUP_ATTR_AFTER_LAST - 1 -}; - -/** - * enum nl80211_txq_attr - TX queue parameter attributes - * @__NL80211_TXQ_ATTR_INVALID: Attribute number 0 is reserved - * @NL80211_TXQ_ATTR_AC: AC identifier (NL80211_AC_*) - * @NL80211_TXQ_ATTR_TXOP: Maximum burst time in units of 32 usecs, 0 meaning - * disabled - * @NL80211_TXQ_ATTR_CWMIN: Minimum contention window [a value of the form - * 2^n-1 in the range 1..32767] - * @NL80211_TXQ_ATTR_CWMAX: Maximum contention window [a value of the form - * 2^n-1 in the range 1..32767] - * @NL80211_TXQ_ATTR_AIFS: Arbitration interframe space [0..255] - * @__NL80211_TXQ_ATTR_AFTER_LAST: Internal - * @NL80211_TXQ_ATTR_MAX: Maximum TXQ attribute number - */ -enum nl80211_txq_attr { - __NL80211_TXQ_ATTR_INVALID, - NL80211_TXQ_ATTR_AC, - NL80211_TXQ_ATTR_TXOP, - NL80211_TXQ_ATTR_CWMIN, - NL80211_TXQ_ATTR_CWMAX, - NL80211_TXQ_ATTR_AIFS, - - /* keep last */ - __NL80211_TXQ_ATTR_AFTER_LAST, - NL80211_TXQ_ATTR_MAX = __NL80211_TXQ_ATTR_AFTER_LAST - 1 -}; - -enum nl80211_ac { - NL80211_AC_VO, - NL80211_AC_VI, - NL80211_AC_BE, - NL80211_AC_BK, - NL80211_NUM_ACS -}; - -/* backward compat */ -#define NL80211_TXQ_ATTR_QUEUE NL80211_TXQ_ATTR_AC -#define NL80211_TXQ_Q_VO NL80211_AC_VO -#define NL80211_TXQ_Q_VI NL80211_AC_VI -#define NL80211_TXQ_Q_BE NL80211_AC_BE -#define NL80211_TXQ_Q_BK NL80211_AC_BK - -/** - * enum nl80211_channel_type - channel type - * @NL80211_CHAN_NO_HT: 20 MHz, non-HT channel - * @NL80211_CHAN_HT20: 20 MHz HT channel - * @NL80211_CHAN_HT40MINUS: HT40 channel, secondary channel - * below the control channel - * @NL80211_CHAN_HT40PLUS: HT40 channel, secondary channel - * above the control channel - */ -enum nl80211_channel_type { - NL80211_CHAN_NO_HT, - NL80211_CHAN_HT20, - NL80211_CHAN_HT40MINUS, - NL80211_CHAN_HT40PLUS -}; - -/** - * enum nl80211_chan_width - channel width definitions - * - * These values are used with the %NL80211_ATTR_CHANNEL_WIDTH - * attribute. - * - * @NL80211_CHAN_WIDTH_20_NOHT: 20 MHz, non-HT channel - * @NL80211_CHAN_WIDTH_20: 20 MHz HT channel - * @NL80211_CHAN_WIDTH_40: 40 MHz channel, the %NL80211_ATTR_CENTER_FREQ1 - * attribute must be provided as well - * @NL80211_CHAN_WIDTH_80: 80 MHz channel, the %NL80211_ATTR_CENTER_FREQ1 - * attribute must be provided as well - * @NL80211_CHAN_WIDTH_80P80: 80+80 MHz channel, the %NL80211_ATTR_CENTER_FREQ1 - * and %NL80211_ATTR_CENTER_FREQ2 attributes must be provided as well - * @NL80211_CHAN_WIDTH_160: 160 MHz channel, the %NL80211_ATTR_CENTER_FREQ1 - * attribute must be provided as well - * @NL80211_CHAN_WIDTH_5: 5 MHz OFDM channel - * @NL80211_CHAN_WIDTH_10: 10 MHz OFDM channel - */ -enum nl80211_chan_width { - NL80211_CHAN_WIDTH_20_NOHT, - NL80211_CHAN_WIDTH_20, - NL80211_CHAN_WIDTH_40, - NL80211_CHAN_WIDTH_80, - NL80211_CHAN_WIDTH_80P80, - NL80211_CHAN_WIDTH_160, - NL80211_CHAN_WIDTH_5, - NL80211_CHAN_WIDTH_10, -}; - -/** - * enum nl80211_bss_scan_width - control channel width for a BSS - * - * These values are used with the %NL80211_BSS_CHAN_WIDTH attribute. - * - * @NL80211_BSS_CHAN_WIDTH_20: control channel is 20 MHz wide or compatible - * @NL80211_BSS_CHAN_WIDTH_10: control channel is 10 MHz wide - * @NL80211_BSS_CHAN_WIDTH_5: control channel is 5 MHz wide - */ -enum nl80211_bss_scan_width { - NL80211_BSS_CHAN_WIDTH_20, - NL80211_BSS_CHAN_WIDTH_10, - NL80211_BSS_CHAN_WIDTH_5, -}; - -/** - * enum nl80211_bss - netlink attributes for a BSS - * - * @__NL80211_BSS_INVALID: invalid - * @NL80211_BSS_BSSID: BSSID of the BSS (6 octets) - * @NL80211_BSS_FREQUENCY: frequency in MHz (u32) - * @NL80211_BSS_TSF: TSF of the received probe response/beacon (u64) - * (if @NL80211_BSS_PRESP_DATA is present then this is known to be - * from a probe response, otherwise it may be from the same beacon - * that the NL80211_BSS_BEACON_TSF will be from) - * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16) - * @NL80211_BSS_CAPABILITY: capability field (CPU order, u16) - * @NL80211_BSS_INFORMATION_ELEMENTS: binary attribute containing the - * raw information elements from the probe response/beacon (bin); - * if the %NL80211_BSS_BEACON_IES attribute is present and the data is - * different then the IEs here are from a Probe Response frame; otherwise - * they are from a Beacon frame. - * However, if the driver does not indicate the source of the IEs, these - * IEs may be from either frame subtype. - * If present, the @NL80211_BSS_PRESP_DATA attribute indicates that the - * data here is known to be from a probe response, without any heuristics. - * @NL80211_BSS_SIGNAL_MBM: signal strength of probe response/beacon - * in mBm (100 * dBm) (s32) - * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon - * in unspecified units, scaled to 0..100 (u8) - * @NL80211_BSS_STATUS: status, if this BSS is "used" - * @NL80211_BSS_SEEN_MS_AGO: age of this BSS entry in ms - * @NL80211_BSS_BEACON_IES: binary attribute containing the raw information - * elements from a Beacon frame (bin); not present if no Beacon frame has - * yet been received - * @NL80211_BSS_CHAN_WIDTH: channel width of the control channel - * (u32, enum nl80211_bss_scan_width) - * @NL80211_BSS_BEACON_TSF: TSF of the last received beacon (u64) - * (not present if no beacon frame has been received yet) - * @NL80211_BSS_PRESP_DATA: the data in @NL80211_BSS_INFORMATION_ELEMENTS and - * @NL80211_BSS_TSF is known to be from a probe response (flag attribute) - * @NL80211_BSS_LAST_SEEN_BOOTTIME: CLOCK_BOOTTIME timestamp when this entry - * was last updated by a received frame. The value is expected to be - * accurate to about 10ms. (u64, nanoseconds) - * @NL80211_BSS_PAD: attribute used for padding for 64-bit alignment - * @NL80211_BSS_PARENT_TSF: the time at the start of reception of the first - * octet of the timestamp field of the last beacon/probe received for - * this BSS. The time is the TSF of the BSS specified by - * @NL80211_BSS_PARENT_BSSID. (u64). - * @NL80211_BSS_PARENT_BSSID: the BSS according to which @NL80211_BSS_PARENT_TSF - * is set. - * @__NL80211_BSS_AFTER_LAST: internal - * @NL80211_BSS_MAX: highest BSS attribute - */ -enum nl80211_bss { - __NL80211_BSS_INVALID, - NL80211_BSS_BSSID, - NL80211_BSS_FREQUENCY, - NL80211_BSS_TSF, - NL80211_BSS_BEACON_INTERVAL, - NL80211_BSS_CAPABILITY, - NL80211_BSS_INFORMATION_ELEMENTS, - NL80211_BSS_SIGNAL_MBM, - NL80211_BSS_SIGNAL_UNSPEC, - NL80211_BSS_STATUS, - NL80211_BSS_SEEN_MS_AGO, - NL80211_BSS_BEACON_IES, - NL80211_BSS_CHAN_WIDTH, - NL80211_BSS_BEACON_TSF, - NL80211_BSS_PRESP_DATA, - NL80211_BSS_LAST_SEEN_BOOTTIME, - NL80211_BSS_PAD, - NL80211_BSS_PARENT_TSF, - NL80211_BSS_PARENT_BSSID, - - /* keep last */ - __NL80211_BSS_AFTER_LAST, - NL80211_BSS_MAX = __NL80211_BSS_AFTER_LAST - 1 -}; - -/** - * enum nl80211_bss_status - BSS "status" - * @NL80211_BSS_STATUS_AUTHENTICATED: Authenticated with this BSS. - * Note that this is no longer used since cfg80211 no longer - * keeps track of whether or not authentication was done with - * a given BSS. - * @NL80211_BSS_STATUS_ASSOCIATED: Associated with this BSS. - * @NL80211_BSS_STATUS_IBSS_JOINED: Joined to this IBSS. - * - * The BSS status is a BSS attribute in scan dumps, which - * indicates the status the interface has wrt. this BSS. - */ -enum nl80211_bss_status { - NL80211_BSS_STATUS_AUTHENTICATED, - NL80211_BSS_STATUS_ASSOCIATED, - NL80211_BSS_STATUS_IBSS_JOINED, -}; - -/** - * enum nl80211_auth_type - AuthenticationType - * - * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication - * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) - * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) - * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) - * @NL80211_AUTHTYPE_SAE: Simultaneous authentication of equals - * @__NL80211_AUTHTYPE_NUM: internal - * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm - * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by - * trying multiple times); this is invalid in netlink -- leave out - * the attribute for this on CONNECT commands. - */ -enum nl80211_auth_type { - NL80211_AUTHTYPE_OPEN_SYSTEM, - NL80211_AUTHTYPE_SHARED_KEY, - NL80211_AUTHTYPE_FT, - NL80211_AUTHTYPE_NETWORK_EAP, - NL80211_AUTHTYPE_SAE, - - /* keep last */ - __NL80211_AUTHTYPE_NUM, - NL80211_AUTHTYPE_MAX = __NL80211_AUTHTYPE_NUM - 1, - NL80211_AUTHTYPE_AUTOMATIC -}; - -/** - * enum nl80211_key_type - Key Type - * @NL80211_KEYTYPE_GROUP: Group (broadcast/multicast) key - * @NL80211_KEYTYPE_PAIRWISE: Pairwise (unicast/individual) key - * @NL80211_KEYTYPE_PEERKEY: PeerKey (DLS) - * @NUM_NL80211_KEYTYPES: number of defined key types - */ -enum nl80211_key_type { - NL80211_KEYTYPE_GROUP, - NL80211_KEYTYPE_PAIRWISE, - NL80211_KEYTYPE_PEERKEY, - - NUM_NL80211_KEYTYPES -}; - -/** - * enum nl80211_mfp - Management frame protection state - * @NL80211_MFP_NO: Management frame protection not used - * @NL80211_MFP_REQUIRED: Management frame protection required - */ -enum nl80211_mfp { - NL80211_MFP_NO, - NL80211_MFP_REQUIRED, -}; - -enum nl80211_wpa_versions { - NL80211_WPA_VERSION_1 = 1 << 0, - NL80211_WPA_VERSION_2 = 1 << 1, -}; - -/** - * enum nl80211_key_default_types - key default types - * @__NL80211_KEY_DEFAULT_TYPE_INVALID: invalid - * @NL80211_KEY_DEFAULT_TYPE_UNICAST: key should be used as default - * unicast key - * @NL80211_KEY_DEFAULT_TYPE_MULTICAST: key should be used as default - * multicast key - * @NUM_NL80211_KEY_DEFAULT_TYPES: number of default types - */ -enum nl80211_key_default_types { - __NL80211_KEY_DEFAULT_TYPE_INVALID, - NL80211_KEY_DEFAULT_TYPE_UNICAST, - NL80211_KEY_DEFAULT_TYPE_MULTICAST, - - NUM_NL80211_KEY_DEFAULT_TYPES -}; - -/** - * enum nl80211_key_attributes - key attributes - * @__NL80211_KEY_INVALID: invalid - * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of - * 16 bytes encryption key followed by 8 bytes each for TX and RX MIC - * keys - * @NL80211_KEY_IDX: key ID (u8, 0-3) - * @NL80211_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11 - * section 7.3.2.25.1, e.g. 0x000FAC04) - * @NL80211_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and - * CCMP keys, each six bytes in little endian - * @NL80211_KEY_DEFAULT: flag indicating default key - * @NL80211_KEY_DEFAULT_MGMT: flag indicating default management key - * @NL80211_KEY_TYPE: the key type from enum nl80211_key_type, if not - * specified the default depends on whether a MAC address was - * given with the command using the key or not (u32) - * @NL80211_KEY_DEFAULT_TYPES: A nested attribute containing flags - * attributes, specifying what a key should be set as default as. - * See &enum nl80211_key_default_types. - * @__NL80211_KEY_AFTER_LAST: internal - * @NL80211_KEY_MAX: highest key attribute - */ -enum nl80211_key_attributes { - __NL80211_KEY_INVALID, - NL80211_KEY_DATA, - NL80211_KEY_IDX, - NL80211_KEY_CIPHER, - NL80211_KEY_SEQ, - NL80211_KEY_DEFAULT, - NL80211_KEY_DEFAULT_MGMT, - NL80211_KEY_TYPE, - NL80211_KEY_DEFAULT_TYPES, - - /* keep last */ - __NL80211_KEY_AFTER_LAST, - NL80211_KEY_MAX = __NL80211_KEY_AFTER_LAST - 1 -}; - -/** - * enum nl80211_tx_rate_attributes - TX rate set attributes - * @__NL80211_TXRATE_INVALID: invalid - * @NL80211_TXRATE_LEGACY: Legacy (non-MCS) rates allowed for TX rate selection - * in an array of rates as defined in IEEE 802.11 7.3.2.2 (u8 values with - * 1 = 500 kbps) but without the IE length restriction (at most - * %NL80211_MAX_SUPP_RATES in a single array). - * @NL80211_TXRATE_HT: HT (MCS) rates allowed for TX rate selection - * in an array of MCS numbers. - * @NL80211_TXRATE_VHT: VHT rates allowed for TX rate selection, - * see &struct nl80211_txrate_vht - * @NL80211_TXRATE_GI: configure GI, see &enum nl80211_txrate_gi - * @__NL80211_TXRATE_AFTER_LAST: internal - * @NL80211_TXRATE_MAX: highest TX rate attribute - */ -enum nl80211_tx_rate_attributes { - __NL80211_TXRATE_INVALID, - NL80211_TXRATE_LEGACY, - NL80211_TXRATE_HT, - NL80211_TXRATE_VHT, - NL80211_TXRATE_GI, - - /* keep last */ - __NL80211_TXRATE_AFTER_LAST, - NL80211_TXRATE_MAX = __NL80211_TXRATE_AFTER_LAST - 1 -}; - -#define NL80211_TXRATE_MCS NL80211_TXRATE_HT -#define NL80211_VHT_NSS_MAX 8 - -/** - * struct nl80211_txrate_vht - VHT MCS/NSS txrate bitmap - * @mcs: MCS bitmap table for each NSS (array index 0 for 1 stream, etc.) - */ -struct nl80211_txrate_vht { - __u16 mcs[NL80211_VHT_NSS_MAX]; -}; - -enum nl80211_txrate_gi { - NL80211_TXRATE_DEFAULT_GI, - NL80211_TXRATE_FORCE_SGI, - NL80211_TXRATE_FORCE_LGI, -}; - -/** - * enum nl80211_band - Frequency band - * @NL80211_BAND_2GHZ: 2.4 GHz ISM band - * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz) - * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz) - * @NUM_NL80211_BANDS: number of bands, avoid using this in userspace - * since newer kernel versions may support more bands - */ -enum nl80211_band { - NL80211_BAND_2GHZ, - NL80211_BAND_5GHZ, - NL80211_BAND_60GHZ, - - NUM_NL80211_BANDS, -}; - -/** - * enum nl80211_ps_state - powersave state - * @NL80211_PS_DISABLED: powersave is disabled - * @NL80211_PS_ENABLED: powersave is enabled - */ -enum nl80211_ps_state { - NL80211_PS_DISABLED, - NL80211_PS_ENABLED, -}; - -/** - * enum nl80211_attr_cqm - connection quality monitor attributes - * @__NL80211_ATTR_CQM_INVALID: invalid - * @NL80211_ATTR_CQM_RSSI_THOLD: RSSI threshold in dBm. This value specifies - * the threshold for the RSSI level at which an event will be sent. Zero - * to disable. - * @NL80211_ATTR_CQM_RSSI_HYST: RSSI hysteresis in dBm. This value specifies - * the minimum amount the RSSI level must change after an event before a - * new event may be issued (to reduce effects of RSSI oscillation). - * @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event - * @NL80211_ATTR_CQM_PKT_LOSS_EVENT: a u32 value indicating that this many - * consecutive packets were not acknowledged by the peer - * @NL80211_ATTR_CQM_TXE_RATE: TX error rate in %. Minimum % of TX failures - * during the given %NL80211_ATTR_CQM_TXE_INTVL before an - * %NL80211_CMD_NOTIFY_CQM with reported %NL80211_ATTR_CQM_TXE_RATE and - * %NL80211_ATTR_CQM_TXE_PKTS is generated. - * @NL80211_ATTR_CQM_TXE_PKTS: number of attempted packets in a given - * %NL80211_ATTR_CQM_TXE_INTVL before %NL80211_ATTR_CQM_TXE_RATE is - * checked. - * @NL80211_ATTR_CQM_TXE_INTVL: interval in seconds. Specifies the periodic - * interval in which %NL80211_ATTR_CQM_TXE_PKTS and - * %NL80211_ATTR_CQM_TXE_RATE must be satisfied before generating an - * %NL80211_CMD_NOTIFY_CQM. Set to 0 to turn off TX error reporting. - * @NL80211_ATTR_CQM_BEACON_LOSS_EVENT: flag attribute that's set in a beacon - * loss event - * @__NL80211_ATTR_CQM_AFTER_LAST: internal - * @NL80211_ATTR_CQM_MAX: highest key attribute - */ -enum nl80211_attr_cqm { - __NL80211_ATTR_CQM_INVALID, - NL80211_ATTR_CQM_RSSI_THOLD, - NL80211_ATTR_CQM_RSSI_HYST, - NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, - NL80211_ATTR_CQM_PKT_LOSS_EVENT, - NL80211_ATTR_CQM_TXE_RATE, - NL80211_ATTR_CQM_TXE_PKTS, - NL80211_ATTR_CQM_TXE_INTVL, - NL80211_ATTR_CQM_BEACON_LOSS_EVENT, - - /* keep last */ - __NL80211_ATTR_CQM_AFTER_LAST, - NL80211_ATTR_CQM_MAX = __NL80211_ATTR_CQM_AFTER_LAST - 1 -}; - -/** - * enum nl80211_cqm_rssi_threshold_event - RSSI threshold event - * @NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW: The RSSI level is lower than the - * configured threshold - * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: The RSSI is higher than the - * configured threshold - * @NL80211_CQM_RSSI_BEACON_LOSS_EVENT: (reserved, never sent) - */ -enum nl80211_cqm_rssi_threshold_event { - NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW, - NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH, - NL80211_CQM_RSSI_BEACON_LOSS_EVENT, -}; - - -/** - * enum nl80211_tx_power_setting - TX power adjustment - * @NL80211_TX_POWER_AUTOMATIC: automatically determine transmit power - * @NL80211_TX_POWER_LIMITED: limit TX power by the mBm parameter - * @NL80211_TX_POWER_FIXED: fix TX power to the mBm parameter - */ -enum nl80211_tx_power_setting { - NL80211_TX_POWER_AUTOMATIC, - NL80211_TX_POWER_LIMITED, - NL80211_TX_POWER_FIXED, -}; - -/** - * enum nl80211_packet_pattern_attr - packet pattern attribute - * @__NL80211_PKTPAT_INVALID: invalid number for nested attribute - * @NL80211_PKTPAT_PATTERN: the pattern, values where the mask has - * a zero bit are ignored - * @NL80211_PKTPAT_MASK: pattern mask, must be long enough to have - * a bit for each byte in the pattern. The lowest-order bit corresponds - * to the first byte of the pattern, but the bytes of the pattern are - * in a little-endian-like format, i.e. the 9th byte of the pattern - * corresponds to the lowest-order bit in the second byte of the mask. - * For example: The match 00:xx:00:00:xx:00:00:00:00:xx:xx:xx (where - * xx indicates "don't care") would be represented by a pattern of - * twelve zero bytes, and a mask of "0xed,0x01". - * Note that the pattern matching is done as though frames were not - * 802.11 frames but 802.3 frames, i.e. the frame is fully unpacked - * first (including SNAP header unpacking) and then matched. - * @NL80211_PKTPAT_OFFSET: packet offset, pattern is matched after - * these fixed number of bytes of received packet - * @NUM_NL80211_PKTPAT: number of attributes - * @MAX_NL80211_PKTPAT: max attribute number - */ -enum nl80211_packet_pattern_attr { - __NL80211_PKTPAT_INVALID, - NL80211_PKTPAT_MASK, - NL80211_PKTPAT_PATTERN, - NL80211_PKTPAT_OFFSET, - - NUM_NL80211_PKTPAT, - MAX_NL80211_PKTPAT = NUM_NL80211_PKTPAT - 1, -}; - -/** - * struct nl80211_pattern_support - packet pattern support information - * @max_patterns: maximum number of patterns supported - * @min_pattern_len: minimum length of each pattern - * @max_pattern_len: maximum length of each pattern - * @max_pkt_offset: maximum Rx packet offset - * - * This struct is carried in %NL80211_WOWLAN_TRIG_PKT_PATTERN when - * that is part of %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED or in - * %NL80211_ATTR_COALESCE_RULE_PKT_PATTERN when that is part of - * %NL80211_ATTR_COALESCE_RULE in the capability information given - * by the kernel to userspace. - */ -struct nl80211_pattern_support { - __u32 max_patterns; - __u32 min_pattern_len; - __u32 max_pattern_len; - __u32 max_pkt_offset; -} __attribute__((packed)); - -/* only for backward compatibility */ -#define __NL80211_WOWLAN_PKTPAT_INVALID __NL80211_PKTPAT_INVALID -#define NL80211_WOWLAN_PKTPAT_MASK NL80211_PKTPAT_MASK -#define NL80211_WOWLAN_PKTPAT_PATTERN NL80211_PKTPAT_PATTERN -#define NL80211_WOWLAN_PKTPAT_OFFSET NL80211_PKTPAT_OFFSET -#define NUM_NL80211_WOWLAN_PKTPAT NUM_NL80211_PKTPAT -#define MAX_NL80211_WOWLAN_PKTPAT MAX_NL80211_PKTPAT -#define nl80211_wowlan_pattern_support nl80211_pattern_support - -/** - * enum nl80211_wowlan_triggers - WoWLAN trigger definitions - * @__NL80211_WOWLAN_TRIG_INVALID: invalid number for nested attributes - * @NL80211_WOWLAN_TRIG_ANY: wake up on any activity, do not really put - * the chip into a special state -- works best with chips that have - * support for low-power operation already (flag) - * Note that this mode is incompatible with all of the others, if - * any others are even supported by the device. - * @NL80211_WOWLAN_TRIG_DISCONNECT: wake up on disconnect, the way disconnect - * is detected is implementation-specific (flag) - * @NL80211_WOWLAN_TRIG_MAGIC_PKT: wake up on magic packet (6x 0xff, followed - * by 16 repetitions of MAC addr, anywhere in payload) (flag) - * @NL80211_WOWLAN_TRIG_PKT_PATTERN: wake up on the specified packet patterns - * which are passed in an array of nested attributes, each nested attribute - * defining a with attributes from &struct nl80211_wowlan_trig_pkt_pattern. - * Each pattern defines a wakeup packet. Packet offset is associated with - * each pattern which is used while matching the pattern. The matching is - * done on the MSDU, i.e. as though the packet was an 802.3 packet, so the - * pattern matching is done after the packet is converted to the MSDU. - * - * In %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, it is a binary attribute - * carrying a &struct nl80211_pattern_support. - * - * When reporting wakeup. it is a u32 attribute containing the 0-based - * index of the pattern that caused the wakeup, in the patterns passed - * to the kernel when configuring. - * @NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED: Not a real trigger, and cannot be - * used when setting, used only to indicate that GTK rekeying is supported - * by the device (flag) - * @NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE: wake up on GTK rekey failure (if - * done by the device) (flag) - * @NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST: wake up on EAP Identity Request - * packet (flag) - * @NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE: wake up on 4-way handshake (flag) - * @NL80211_WOWLAN_TRIG_RFKILL_RELEASE: wake up when rfkill is released - * (on devices that have rfkill in the device) (flag) - * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211: For wakeup reporting only, contains - * the 802.11 packet that caused the wakeup, e.g. a deauth frame. The frame - * may be truncated, the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN - * attribute contains the original length. - * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN: Original length of the 802.11 - * packet, may be bigger than the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211 - * attribute if the packet was truncated somewhere. - * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023: For wakeup reporting only, contains the - * 802.11 packet that caused the wakeup, e.g. a magic packet. The frame may - * be truncated, the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN attribute - * contains the original length. - * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN: Original length of the 802.3 - * packet, may be bigger than the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023 - * attribute if the packet was truncated somewhere. - * @NL80211_WOWLAN_TRIG_TCP_CONNECTION: TCP connection wake, see DOC section - * "TCP connection wakeup" for more details. This is a nested attribute - * containing the exact information for establishing and keeping alive - * the TCP connection. - * @NL80211_WOWLAN_TRIG_TCP_WAKEUP_MATCH: For wakeup reporting only, the - * wakeup packet was received on the TCP connection - * @NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST: For wakeup reporting only, the - * TCP connection was lost or failed to be established - * @NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS: For wakeup reporting only, - * the TCP connection ran out of tokens to use for data to send to the - * service - * @NL80211_WOWLAN_TRIG_NET_DETECT: wake up when a configured network - * is detected. This is a nested attribute that contains the - * same attributes used with @NL80211_CMD_START_SCHED_SCAN. It - * specifies how the scan is performed (e.g. the interval, the - * channels to scan and the initial delay) as well as the scan - * results that will trigger a wake (i.e. the matchsets). This - * attribute is also sent in a response to - * @NL80211_CMD_GET_WIPHY, indicating the number of match sets - * supported by the driver (u32). - * @NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS: nested attribute - * containing an array with information about what triggered the - * wake up. If no elements are present in the array, it means - * that the information is not available. If more than one - * element is present, it means that more than one match - * occurred. - * Each element in the array is a nested attribute that contains - * one optional %NL80211_ATTR_SSID attribute and one optional - * %NL80211_ATTR_SCAN_FREQUENCIES attribute. At least one of - * these attributes must be present. If - * %NL80211_ATTR_SCAN_FREQUENCIES contains more than one - * frequency, it means that the match occurred in more than one - * channel. - * @NUM_NL80211_WOWLAN_TRIG: number of wake on wireless triggers - * @MAX_NL80211_WOWLAN_TRIG: highest wowlan trigger attribute number - * - * These nested attributes are used to configure the wakeup triggers and - * to report the wakeup reason(s). - */ -enum nl80211_wowlan_triggers { - __NL80211_WOWLAN_TRIG_INVALID, - NL80211_WOWLAN_TRIG_ANY, - NL80211_WOWLAN_TRIG_DISCONNECT, - NL80211_WOWLAN_TRIG_MAGIC_PKT, - NL80211_WOWLAN_TRIG_PKT_PATTERN, - NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED, - NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE, - NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST, - NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE, - NL80211_WOWLAN_TRIG_RFKILL_RELEASE, - NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211, - NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN, - NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023, - NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN, - NL80211_WOWLAN_TRIG_TCP_CONNECTION, - NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH, - NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST, - NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS, - NL80211_WOWLAN_TRIG_NET_DETECT, - NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS, - - /* keep last */ - NUM_NL80211_WOWLAN_TRIG, - MAX_NL80211_WOWLAN_TRIG = NUM_NL80211_WOWLAN_TRIG - 1 -}; - -/** - * DOC: TCP connection wakeup - * - * Some devices can establish a TCP connection in order to be woken up by a - * packet coming in from outside their network segment, or behind NAT. If - * configured, the device will establish a TCP connection to the given - * service, and periodically send data to that service. The first data - * packet is usually transmitted after SYN/ACK, also ACKing the SYN/ACK. - * The data packets can optionally include a (little endian) sequence - * number (in the TCP payload!) that is generated by the device, and, also - * optionally, a token from a list of tokens. This serves as a keep-alive - * with the service, and for NATed connections, etc. - * - * During this keep-alive period, the server doesn't send any data to the - * client. When receiving data, it is compared against the wakeup pattern - * (and mask) and if it matches, the host is woken up. Similarly, if the - * connection breaks or cannot be established to start with, the host is - * also woken up. - * - * Developer's note: ARP offload is required for this, otherwise TCP - * response packets might not go through correctly. - */ - -/** - * struct nl80211_wowlan_tcp_data_seq - WoWLAN TCP data sequence - * @start: starting value - * @offset: offset of sequence number in packet - * @len: length of the sequence value to write, 1 through 4 - * - * Note: don't confuse with the TCP sequence number(s), this is for the - * keepalive packet payload. The actual value is written into the packet - * in little endian. - */ -struct nl80211_wowlan_tcp_data_seq { - __u32 start, offset, len; -}; - -/** - * struct nl80211_wowlan_tcp_data_token - WoWLAN TCP data token config - * @offset: offset of token in packet - * @len: length of each token - * @token_stream: stream of data to be used for the tokens, the length must - * be a multiple of @len for this to make sense - */ -struct nl80211_wowlan_tcp_data_token { - __u32 offset, len; - __u8 token_stream[]; -}; - -/** - * struct nl80211_wowlan_tcp_data_token_feature - data token features - * @min_len: minimum token length - * @max_len: maximum token length - * @bufsize: total available token buffer size (max size of @token_stream) - */ -struct nl80211_wowlan_tcp_data_token_feature { - __u32 min_len, max_len, bufsize; -}; - -/** - * enum nl80211_wowlan_tcp_attrs - WoWLAN TCP connection parameters - * @__NL80211_WOWLAN_TCP_INVALID: invalid number for nested attributes - * @NL80211_WOWLAN_TCP_SRC_IPV4: source IPv4 address (in network byte order) - * @NL80211_WOWLAN_TCP_DST_IPV4: destination IPv4 address - * (in network byte order) - * @NL80211_WOWLAN_TCP_DST_MAC: destination MAC address, this is given because - * route lookup when configured might be invalid by the time we suspend, - * and doing a route lookup when suspending is no longer possible as it - * might require ARP querying. - * @NL80211_WOWLAN_TCP_SRC_PORT: source port (u16); optional, if not given a - * socket and port will be allocated - * @NL80211_WOWLAN_TCP_DST_PORT: destination port (u16) - * @NL80211_WOWLAN_TCP_DATA_PAYLOAD: data packet payload, at least one byte. - * For feature advertising, a u32 attribute holding the maximum length - * of the data payload. - * @NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ: data packet sequence configuration - * (if desired), a &struct nl80211_wowlan_tcp_data_seq. For feature - * advertising it is just a flag - * @NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN: data packet token configuration, - * see &struct nl80211_wowlan_tcp_data_token and for advertising see - * &struct nl80211_wowlan_tcp_data_token_feature. - * @NL80211_WOWLAN_TCP_DATA_INTERVAL: data interval in seconds, maximum - * interval in feature advertising (u32) - * @NL80211_WOWLAN_TCP_WAKE_PAYLOAD: wake packet payload, for advertising a - * u32 attribute holding the maximum length - * @NL80211_WOWLAN_TCP_WAKE_MASK: Wake packet payload mask, not used for - * feature advertising. The mask works like @NL80211_PKTPAT_MASK - * but on the TCP payload only. - * @NUM_NL80211_WOWLAN_TCP: number of TCP attributes - * @MAX_NL80211_WOWLAN_TCP: highest attribute number - */ -enum nl80211_wowlan_tcp_attrs { - __NL80211_WOWLAN_TCP_INVALID, - NL80211_WOWLAN_TCP_SRC_IPV4, - NL80211_WOWLAN_TCP_DST_IPV4, - NL80211_WOWLAN_TCP_DST_MAC, - NL80211_WOWLAN_TCP_SRC_PORT, - NL80211_WOWLAN_TCP_DST_PORT, - NL80211_WOWLAN_TCP_DATA_PAYLOAD, - NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ, - NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN, - NL80211_WOWLAN_TCP_DATA_INTERVAL, - NL80211_WOWLAN_TCP_WAKE_PAYLOAD, - NL80211_WOWLAN_TCP_WAKE_MASK, - - /* keep last */ - NUM_NL80211_WOWLAN_TCP, - MAX_NL80211_WOWLAN_TCP = NUM_NL80211_WOWLAN_TCP - 1 -}; - -/** - * struct nl80211_coalesce_rule_support - coalesce rule support information - * @max_rules: maximum number of rules supported - * @pat: packet pattern support information - * @max_delay: maximum supported coalescing delay in msecs - * - * This struct is carried in %NL80211_ATTR_COALESCE_RULE in the - * capability information given by the kernel to userspace. - */ -struct nl80211_coalesce_rule_support { - __u32 max_rules; - struct nl80211_pattern_support pat; - __u32 max_delay; -} __attribute__((packed)); - -/** - * enum nl80211_attr_coalesce_rule - coalesce rule attribute - * @__NL80211_COALESCE_RULE_INVALID: invalid number for nested attribute - * @NL80211_ATTR_COALESCE_RULE_DELAY: delay in msecs used for packet coalescing - * @NL80211_ATTR_COALESCE_RULE_CONDITION: condition for packet coalescence, - * see &enum nl80211_coalesce_condition. - * @NL80211_ATTR_COALESCE_RULE_PKT_PATTERN: packet offset, pattern is matched - * after these fixed number of bytes of received packet - * @NUM_NL80211_ATTR_COALESCE_RULE: number of attributes - * @NL80211_ATTR_COALESCE_RULE_MAX: max attribute number - */ -enum nl80211_attr_coalesce_rule { - __NL80211_COALESCE_RULE_INVALID, - NL80211_ATTR_COALESCE_RULE_DELAY, - NL80211_ATTR_COALESCE_RULE_CONDITION, - NL80211_ATTR_COALESCE_RULE_PKT_PATTERN, - - /* keep last */ - NUM_NL80211_ATTR_COALESCE_RULE, - NL80211_ATTR_COALESCE_RULE_MAX = NUM_NL80211_ATTR_COALESCE_RULE - 1 -}; - -/** - * enum nl80211_coalesce_condition - coalesce rule conditions - * @NL80211_COALESCE_CONDITION_MATCH: coalaesce Rx packets when patterns - * in a rule are matched. - * @NL80211_COALESCE_CONDITION_NO_MATCH: coalesce Rx packets when patterns - * in a rule are not matched. - */ -enum nl80211_coalesce_condition { - NL80211_COALESCE_CONDITION_MATCH, - NL80211_COALESCE_CONDITION_NO_MATCH -}; - -/** - * enum nl80211_iface_limit_attrs - limit attributes - * @NL80211_IFACE_LIMIT_UNSPEC: (reserved) - * @NL80211_IFACE_LIMIT_MAX: maximum number of interfaces that - * can be chosen from this set of interface types (u32) - * @NL80211_IFACE_LIMIT_TYPES: nested attribute containing a - * flag attribute for each interface type in this set - * @NUM_NL80211_IFACE_LIMIT: number of attributes - * @MAX_NL80211_IFACE_LIMIT: highest attribute number - */ -enum nl80211_iface_limit_attrs { - NL80211_IFACE_LIMIT_UNSPEC, - NL80211_IFACE_LIMIT_MAX, - NL80211_IFACE_LIMIT_TYPES, - - /* keep last */ - NUM_NL80211_IFACE_LIMIT, - MAX_NL80211_IFACE_LIMIT = NUM_NL80211_IFACE_LIMIT - 1 -}; - -/** - * enum nl80211_if_combination_attrs -- interface combination attributes - * - * @NL80211_IFACE_COMB_UNSPEC: (reserved) - * @NL80211_IFACE_COMB_LIMITS: Nested attributes containing the limits - * for given interface types, see &enum nl80211_iface_limit_attrs. - * @NL80211_IFACE_COMB_MAXNUM: u32 attribute giving the total number of - * interfaces that can be created in this group. This number doesn't - * apply to interfaces purely managed in software, which are listed - * in a separate attribute %NL80211_ATTR_INTERFACES_SOFTWARE. - * @NL80211_IFACE_COMB_STA_AP_BI_MATCH: flag attribute specifying that - * beacon intervals within this group must be all the same even for - * infrastructure and AP/GO combinations, i.e. the GO(s) must adopt - * the infrastructure network's beacon interval. - * @NL80211_IFACE_COMB_NUM_CHANNELS: u32 attribute specifying how many - * different channels may be used within this group. - * @NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS: u32 attribute containing the bitmap - * of supported channel widths for radar detection. - * @NL80211_IFACE_COMB_RADAR_DETECT_REGIONS: u32 attribute containing the bitmap - * of supported regulatory regions for radar detection. - * @NUM_NL80211_IFACE_COMB: number of attributes - * @MAX_NL80211_IFACE_COMB: highest attribute number - * - * Examples: - * limits = [ #{STA} <= 1, #{AP} <= 1 ], matching BI, channels = 1, max = 2 - * => allows an AP and a STA that must match BIs - * - * numbers = [ #{AP, P2P-GO} <= 8 ], channels = 1, max = 8 - * => allows 8 of AP/GO - * - * numbers = [ #{STA} <= 2 ], channels = 2, max = 2 - * => allows two STAs on different channels - * - * numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4 - * => allows a STA plus three P2P interfaces - * - * The list of these four possiblities could completely be contained - * within the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute to indicate - * that any of these groups must match. - * - * "Combinations" of just a single interface will not be listed here, - * a single interface of any valid interface type is assumed to always - * be possible by itself. This means that implicitly, for each valid - * interface type, the following group always exists: - * numbers = [ #{} <= 1 ], channels = 1, max = 1 - */ -enum nl80211_if_combination_attrs { - NL80211_IFACE_COMB_UNSPEC, - NL80211_IFACE_COMB_LIMITS, - NL80211_IFACE_COMB_MAXNUM, - NL80211_IFACE_COMB_STA_AP_BI_MATCH, - NL80211_IFACE_COMB_NUM_CHANNELS, - NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS, - NL80211_IFACE_COMB_RADAR_DETECT_REGIONS, - - /* keep last */ - NUM_NL80211_IFACE_COMB, - MAX_NL80211_IFACE_COMB = NUM_NL80211_IFACE_COMB - 1 -}; - - -/** - * enum nl80211_plink_state - state of a mesh peer link finite state machine - * - * @NL80211_PLINK_LISTEN: initial state, considered the implicit - * state of non existant mesh peer links - * @NL80211_PLINK_OPN_SNT: mesh plink open frame has been sent to - * this mesh peer - * @NL80211_PLINK_OPN_RCVD: mesh plink open frame has been received - * from this mesh peer - * @NL80211_PLINK_CNF_RCVD: mesh plink confirm frame has been - * received from this mesh peer - * @NL80211_PLINK_ESTAB: mesh peer link is established - * @NL80211_PLINK_HOLDING: mesh peer link is being closed or cancelled - * @NL80211_PLINK_BLOCKED: all frames transmitted from this mesh - * plink are discarded - * @NUM_NL80211_PLINK_STATES: number of peer link states - * @MAX_NL80211_PLINK_STATES: highest numerical value of plink states - */ -enum nl80211_plink_state { - NL80211_PLINK_LISTEN, - NL80211_PLINK_OPN_SNT, - NL80211_PLINK_OPN_RCVD, - NL80211_PLINK_CNF_RCVD, - NL80211_PLINK_ESTAB, - NL80211_PLINK_HOLDING, - NL80211_PLINK_BLOCKED, - - /* keep last */ - NUM_NL80211_PLINK_STATES, - MAX_NL80211_PLINK_STATES = NUM_NL80211_PLINK_STATES - 1 -}; - -/** - * enum nl80211_plink_action - actions to perform in mesh peers - * - * @NL80211_PLINK_ACTION_NO_ACTION: perform no action - * @NL80211_PLINK_ACTION_OPEN: start mesh peer link establishment - * @NL80211_PLINK_ACTION_BLOCK: block traffic from this mesh peer - * @NUM_NL80211_PLINK_ACTIONS: number of possible actions - */ -enum plink_actions { - NL80211_PLINK_ACTION_NO_ACTION, - NL80211_PLINK_ACTION_OPEN, - NL80211_PLINK_ACTION_BLOCK, - - NUM_NL80211_PLINK_ACTIONS, -}; - - -#define NL80211_KCK_LEN 16 -#define NL80211_KEK_LEN 16 -#define NL80211_REPLAY_CTR_LEN 8 - -/** - * enum nl80211_rekey_data - attributes for GTK rekey offload - * @__NL80211_REKEY_DATA_INVALID: invalid number for nested attributes - * @NL80211_REKEY_DATA_KEK: key encryption key (binary) - * @NL80211_REKEY_DATA_KCK: key confirmation key (binary) - * @NL80211_REKEY_DATA_REPLAY_CTR: replay counter (binary) - * @NUM_NL80211_REKEY_DATA: number of rekey attributes (internal) - * @MAX_NL80211_REKEY_DATA: highest rekey attribute (internal) - */ -enum nl80211_rekey_data { - __NL80211_REKEY_DATA_INVALID, - NL80211_REKEY_DATA_KEK, - NL80211_REKEY_DATA_KCK, - NL80211_REKEY_DATA_REPLAY_CTR, - - /* keep last */ - NUM_NL80211_REKEY_DATA, - MAX_NL80211_REKEY_DATA = NUM_NL80211_REKEY_DATA - 1 -}; - -/** - * enum nl80211_hidden_ssid - values for %NL80211_ATTR_HIDDEN_SSID - * @NL80211_HIDDEN_SSID_NOT_IN_USE: do not hide SSID (i.e., broadcast it in - * Beacon frames) - * @NL80211_HIDDEN_SSID_ZERO_LEN: hide SSID by using zero-length SSID element - * in Beacon frames - * @NL80211_HIDDEN_SSID_ZERO_CONTENTS: hide SSID by using correct length of SSID - * element in Beacon frames but zero out each byte in the SSID - */ -enum nl80211_hidden_ssid { - NL80211_HIDDEN_SSID_NOT_IN_USE, - NL80211_HIDDEN_SSID_ZERO_LEN, - NL80211_HIDDEN_SSID_ZERO_CONTENTS -}; - -/** - * enum nl80211_sta_wme_attr - station WME attributes - * @__NL80211_STA_WME_INVALID: invalid number for nested attribute - * @NL80211_STA_WME_UAPSD_QUEUES: bitmap of uapsd queues. the format - * is the same as the AC bitmap in the QoS info field. - * @NL80211_STA_WME_MAX_SP: max service period. the format is the same - * as the MAX_SP field in the QoS info field (but already shifted down). - * @__NL80211_STA_WME_AFTER_LAST: internal - * @NL80211_STA_WME_MAX: highest station WME attribute - */ -enum nl80211_sta_wme_attr { - __NL80211_STA_WME_INVALID, - NL80211_STA_WME_UAPSD_QUEUES, - NL80211_STA_WME_MAX_SP, - - /* keep last */ - __NL80211_STA_WME_AFTER_LAST, - NL80211_STA_WME_MAX = __NL80211_STA_WME_AFTER_LAST - 1 -}; - -/** - * enum nl80211_pmksa_candidate_attr - attributes for PMKSA caching candidates - * @__NL80211_PMKSA_CANDIDATE_INVALID: invalid number for nested attributes - * @NL80211_PMKSA_CANDIDATE_INDEX: candidate index (u32; the smaller, the higher - * priority) - * @NL80211_PMKSA_CANDIDATE_BSSID: candidate BSSID (6 octets) - * @NL80211_PMKSA_CANDIDATE_PREAUTH: RSN pre-authentication supported (flag) - * @NUM_NL80211_PMKSA_CANDIDATE: number of PMKSA caching candidate attributes - * (internal) - * @MAX_NL80211_PMKSA_CANDIDATE: highest PMKSA caching candidate attribute - * (internal) - */ -enum nl80211_pmksa_candidate_attr { - __NL80211_PMKSA_CANDIDATE_INVALID, - NL80211_PMKSA_CANDIDATE_INDEX, - NL80211_PMKSA_CANDIDATE_BSSID, - NL80211_PMKSA_CANDIDATE_PREAUTH, - - /* keep last */ - NUM_NL80211_PMKSA_CANDIDATE, - MAX_NL80211_PMKSA_CANDIDATE = NUM_NL80211_PMKSA_CANDIDATE - 1 -}; - -/** - * enum nl80211_tdls_operation - values for %NL80211_ATTR_TDLS_OPERATION - * @NL80211_TDLS_DISCOVERY_REQ: Send a TDLS discovery request - * @NL80211_TDLS_SETUP: Setup TDLS link - * @NL80211_TDLS_TEARDOWN: Teardown a TDLS link which is already established - * @NL80211_TDLS_ENABLE_LINK: Enable TDLS link - * @NL80211_TDLS_DISABLE_LINK: Disable TDLS link - */ -enum nl80211_tdls_operation { - NL80211_TDLS_DISCOVERY_REQ, - NL80211_TDLS_SETUP, - NL80211_TDLS_TEARDOWN, - NL80211_TDLS_ENABLE_LINK, - NL80211_TDLS_DISABLE_LINK, -}; - -/* - * enum nl80211_ap_sme_features - device-integrated AP features - * Reserved for future use, no bits are defined in - * NL80211_ATTR_DEVICE_AP_SME yet. -enum nl80211_ap_sme_features { -}; - */ - -/** - * enum nl80211_feature_flags - device/driver features - * @NL80211_FEATURE_SK_TX_STATUS: This driver supports reflecting back - * TX status to the socket error queue when requested with the - * socket option. - * @NL80211_FEATURE_HT_IBSS: This driver supports IBSS with HT datarates. - * @NL80211_FEATURE_INACTIVITY_TIMER: This driver takes care of freeing up - * the connected inactive stations in AP mode. - * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested - * to work properly to suppport receiving regulatory hints from - * cellular base stations. - * @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: (no longer available, only - * here to reserve the value for API/ABI compatibility) - * @NL80211_FEATURE_SAE: This driver supports simultaneous authentication of - * equals (SAE) with user space SME (NL80211_CMD_AUTHENTICATE) in station - * mode - * @NL80211_FEATURE_LOW_PRIORITY_SCAN: This driver supports low priority scan - * @NL80211_FEATURE_SCAN_FLUSH: Scan flush is supported - * @NL80211_FEATURE_AP_SCAN: Support scanning using an AP vif - * @NL80211_FEATURE_VIF_TXPOWER: The driver supports per-vif TX power setting - * @NL80211_FEATURE_NEED_OBSS_SCAN: The driver expects userspace to perform - * OBSS scans and generate 20/40 BSS coex reports. This flag is used only - * for drivers implementing the CONNECT API, for AUTH/ASSOC it is implied. - * @NL80211_FEATURE_P2P_GO_CTWIN: P2P GO implementation supports CT Window - * setting - * @NL80211_FEATURE_P2P_GO_OPPPS: P2P GO implementation supports opportunistic - * powersave - * @NL80211_FEATURE_FULL_AP_CLIENT_STATE: The driver supports full state - * transitions for AP clients. Without this flag (and if the driver - * doesn't have the AP SME in the device) the driver supports adding - * stations only when they're associated and adds them in associated - * state (to later be transitioned into authorized), with this flag - * they should be added before even sending the authentication reply - * and then transitioned into authenticated, associated and authorized - * states using station flags. - * Note that even for drivers that support this, the default is to add - * stations in authenticated/associated state, so to add unauthenticated - * stations the authenticated/associated bits have to be set in the mask. - * @NL80211_FEATURE_ADVERTISE_CHAN_LIMITS: cfg80211 advertises channel limits - * (HT40, VHT 80/160 MHz) if this flag is set - * @NL80211_FEATURE_USERSPACE_MPM: This driver supports a userspace Mesh - * Peering Management entity which may be implemented by registering for - * beacons or NL80211_CMD_NEW_PEER_CANDIDATE events. The mesh beacon is - * still generated by the driver. - * @NL80211_FEATURE_ACTIVE_MONITOR: This driver supports an active monitor - * interface. An active monitor interface behaves like a normal monitor - * interface, but gets added to the driver. It ensures that incoming - * unicast packets directed at the configured interface address get ACKed. - * @NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE: This driver supports dynamic - * channel bandwidth change (e.g., HT 20 <-> 40 MHz channel) during the - * lifetime of a BSS. - * @NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES: This device adds a DS Parameter - * Set IE to probe requests. - * @NL80211_FEATURE_WFA_TPC_IE_IN_PROBES: This device adds a WFA TPC Report IE - * to probe requests. - * @NL80211_FEATURE_QUIET: This device, in client mode, supports Quiet Period - * requests sent to it by an AP. - * @NL80211_FEATURE_TX_POWER_INSERTION: This device is capable of inserting the - * current tx power value into the TPC Report IE in the spectrum - * management TPC Report action frame, and in the Radio Measurement Link - * Measurement Report action frame. - * @NL80211_FEATURE_ACKTO_ESTIMATION: This driver supports dynamic ACK timeout - * estimation (dynack). %NL80211_ATTR_WIPHY_DYN_ACK flag attribute is used - * to enable dynack. - * @NL80211_FEATURE_STATIC_SMPS: Device supports static spatial - * multiplexing powersave, ie. can turn off all but one chain - * even on HT connections that should be using more chains. - * @NL80211_FEATURE_DYNAMIC_SMPS: Device supports dynamic spatial - * multiplexing powersave, ie. can turn off all but one chain - * and then wake the rest up as required after, for example, - * rts/cts handshake. - * @NL80211_FEATURE_SUPPORTS_WMM_ADMISSION: the device supports setting up WMM - * TSPEC sessions (TID aka TSID 0-7) with the %NL80211_CMD_ADD_TX_TS - * command. Standard IEEE 802.11 TSPEC setup is not yet supported, it - * needs to be able to handle Block-Ack agreements and other things. - * @NL80211_FEATURE_MAC_ON_CREATE: Device supports configuring - * the vif's MAC address upon creation. - * See 'macaddr' field in the vif_params (cfg80211.h). - * @NL80211_FEATURE_TDLS_CHANNEL_SWITCH: Driver supports channel switching when - * operating as a TDLS peer. - * @NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR: This device/driver supports using a - * random MAC address during scan (if the device is unassociated); the - * %NL80211_SCAN_FLAG_RANDOM_ADDR flag may be set for scans and the MAC - * address mask/value will be used. - * @NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR: This device/driver supports - * using a random MAC address for every scan iteration during scheduled - * scan (while not associated), the %NL80211_SCAN_FLAG_RANDOM_ADDR may - * be set for scheduled scan and the MAC address mask/value will be used. - * @NL80211_FEATURE_ND_RANDOM_MAC_ADDR: This device/driver supports using a - * random MAC address for every scan iteration during "net detect", i.e. - * scan in unassociated WoWLAN, the %NL80211_SCAN_FLAG_RANDOM_ADDR may - * be set for scheduled scan and the MAC address mask/value will be used. - */ -enum nl80211_feature_flags { - NL80211_FEATURE_SK_TX_STATUS = 1 << 0, - NL80211_FEATURE_HT_IBSS = 1 << 1, - NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2, - NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3, - NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 1 << 4, - NL80211_FEATURE_SAE = 1 << 5, - NL80211_FEATURE_LOW_PRIORITY_SCAN = 1 << 6, - NL80211_FEATURE_SCAN_FLUSH = 1 << 7, - NL80211_FEATURE_AP_SCAN = 1 << 8, - NL80211_FEATURE_VIF_TXPOWER = 1 << 9, - NL80211_FEATURE_NEED_OBSS_SCAN = 1 << 10, - NL80211_FEATURE_P2P_GO_CTWIN = 1 << 11, - NL80211_FEATURE_P2P_GO_OPPPS = 1 << 12, - /* bit 13 is reserved */ - NL80211_FEATURE_ADVERTISE_CHAN_LIMITS = 1 << 14, - NL80211_FEATURE_FULL_AP_CLIENT_STATE = 1 << 15, - NL80211_FEATURE_USERSPACE_MPM = 1 << 16, - NL80211_FEATURE_ACTIVE_MONITOR = 1 << 17, - NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE = 1 << 18, - NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES = 1 << 19, - NL80211_FEATURE_WFA_TPC_IE_IN_PROBES = 1 << 20, - NL80211_FEATURE_QUIET = 1 << 21, - NL80211_FEATURE_TX_POWER_INSERTION = 1 << 22, - NL80211_FEATURE_ACKTO_ESTIMATION = 1 << 23, - NL80211_FEATURE_STATIC_SMPS = 1 << 24, - NL80211_FEATURE_DYNAMIC_SMPS = 1 << 25, - NL80211_FEATURE_SUPPORTS_WMM_ADMISSION = 1 << 26, - NL80211_FEATURE_MAC_ON_CREATE = 1 << 27, - NL80211_FEATURE_TDLS_CHANNEL_SWITCH = 1 << 28, - NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR = 1 << 29, - NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR = 1 << 30, - NL80211_FEATURE_ND_RANDOM_MAC_ADDR = 1 << 31, -}; - -/** - * enum nl80211_ext_feature_index - bit index of extended features. - * @NL80211_EXT_FEATURE_VHT_IBSS: This driver supports IBSS with VHT datarates. - * @NL80211_EXT_FEATURE_RRM: This driver supports RRM. When featured, user can - * can request to use RRM (see %NL80211_ATTR_USE_RRM) with - * %NL80211_CMD_ASSOCIATE and %NL80211_CMD_CONNECT requests, which will set - * the ASSOC_REQ_USE_RRM flag in the association request even if - * NL80211_FEATURE_QUIET is not advertized. - * @NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER: This device supports MU-MIMO air - * sniffer which means that it can be configured to hear packets from - * certain groups which can be configured by the - * %NL80211_ATTR_MU_MIMO_GROUP_DATA attribute, - * or can be configured to follow a station by configuring the - * %NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR attribute. - * @NL80211_EXT_FEATURE_SCAN_START_TIME: This driver includes the actual - * time the scan started in scan results event. The time is the TSF of - * the BSS that the interface that requested the scan is connected to - * (if available). - * @NL80211_EXT_FEATURE_BSS_PARENT_TSF: Per BSS, this driver reports the - * time the last beacon/probe was received. The time is the TSF of the - * BSS that the interface that requested the scan is connected to - * (if available). - * @NL80211_EXT_FEATURE_SET_SCAN_DWELL: This driver supports configuration of - * channel dwell time. - * @NL80211_EXT_FEATURE_BEACON_RATE_LEGACY: Driver supports beacon rate - * configuration (AP/mesh), supporting a legacy (non HT/VHT) rate. - * @NL80211_EXT_FEATURE_BEACON_RATE_HT: Driver supports beacon rate - * configuration (AP/mesh) with HT rates. - * @NL80211_EXT_FEATURE_BEACON_RATE_VHT: Driver supports beacon rate - * configuration (AP/mesh) with VHT rates. - * - * @NUM_NL80211_EXT_FEATURES: number of extended features. - * @MAX_NL80211_EXT_FEATURES: highest extended feature index. - */ -enum nl80211_ext_feature_index { - NL80211_EXT_FEATURE_VHT_IBSS, - NL80211_EXT_FEATURE_RRM, - NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER, - NL80211_EXT_FEATURE_SCAN_START_TIME, - NL80211_EXT_FEATURE_BSS_PARENT_TSF, - NL80211_EXT_FEATURE_SET_SCAN_DWELL, - NL80211_EXT_FEATURE_BEACON_RATE_LEGACY, - NL80211_EXT_FEATURE_BEACON_RATE_HT, - NL80211_EXT_FEATURE_BEACON_RATE_VHT, - - /* add new features before the definition below */ - NUM_NL80211_EXT_FEATURES, - MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1 -}; - -/** - * enum nl80211_probe_resp_offload_support_attr - optional supported - * protocols for probe-response offloading by the driver/FW. - * To be used with the %NL80211_ATTR_PROBE_RESP_OFFLOAD attribute. - * Each enum value represents a bit in the bitmap of supported - * protocols. Typically a subset of probe-requests belonging to a - * supported protocol will be excluded from offload and uploaded - * to the host. - * - * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS: Support for WPS ver. 1 - * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2: Support for WPS ver. 2 - * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P: Support for P2P - * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U: Support for 802.11u - */ -enum nl80211_probe_resp_offload_support_attr { - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS = 1<<0, - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 = 1<<1, - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P = 1<<2, - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U = 1<<3, -}; - -/** - * enum nl80211_connect_failed_reason - connection request failed reasons - * @NL80211_CONN_FAIL_MAX_CLIENTS: Maximum number of clients that can be - * handled by the AP is reached. - * @NL80211_CONN_FAIL_BLOCKED_CLIENT: Connection request is rejected due to ACL. - */ -enum nl80211_connect_failed_reason { - NL80211_CONN_FAIL_MAX_CLIENTS, - NL80211_CONN_FAIL_BLOCKED_CLIENT, -}; - -/** - * enum nl80211_scan_flags - scan request control flags - * - * Scan request control flags are used to control the handling - * of NL80211_CMD_TRIGGER_SCAN and NL80211_CMD_START_SCHED_SCAN - * requests. - * - * @NL80211_SCAN_FLAG_LOW_PRIORITY: scan request has low priority - * @NL80211_SCAN_FLAG_FLUSH: flush cache before scanning - * @NL80211_SCAN_FLAG_AP: force a scan even if the interface is configured - * as AP and the beaconing has already been configured. This attribute is - * dangerous because will destroy stations performance as a lot of frames - * will be lost while scanning off-channel, therefore it must be used only - * when really needed - * @NL80211_SCAN_FLAG_RANDOM_ADDR: use a random MAC address for this scan (or - * for scheduled scan: a different one for every scan iteration). When the - * flag is set, depending on device capabilities the @NL80211_ATTR_MAC and - * @NL80211_ATTR_MAC_MASK attributes may also be given in which case only - * the masked bits will be preserved from the MAC address and the remainder - * randomised. If the attributes are not given full randomisation (46 bits, - * locally administered 1, multicast 0) is assumed. - * This flag must not be requested when the feature isn't supported, check - * the nl80211 feature flags for the device. - */ -enum nl80211_scan_flags { - NL80211_SCAN_FLAG_LOW_PRIORITY = 1<<0, - NL80211_SCAN_FLAG_FLUSH = 1<<1, - NL80211_SCAN_FLAG_AP = 1<<2, - NL80211_SCAN_FLAG_RANDOM_ADDR = 1<<3, -}; - -/** - * enum nl80211_acl_policy - access control policy - * - * Access control policy is applied on a MAC list set by - * %NL80211_CMD_START_AP and %NL80211_CMD_SET_MAC_ACL, to - * be used with %NL80211_ATTR_ACL_POLICY. - * - * @NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED: Deny stations which are - * listed in ACL, i.e. allow all the stations which are not listed - * in ACL to authenticate. - * @NL80211_ACL_POLICY_DENY_UNLESS_LISTED: Allow the stations which are listed - * in ACL, i.e. deny all the stations which are not listed in ACL. - */ -enum nl80211_acl_policy { - NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED, - NL80211_ACL_POLICY_DENY_UNLESS_LISTED, -}; - -/** - * enum nl80211_smps_mode - SMPS mode - * - * Requested SMPS mode (for AP mode) - * - * @NL80211_SMPS_OFF: SMPS off (use all antennas). - * @NL80211_SMPS_STATIC: static SMPS (use a single antenna) - * @NL80211_SMPS_DYNAMIC: dynamic smps (start with a single antenna and - * turn on other antennas after CTS/RTS). - */ -enum nl80211_smps_mode { - NL80211_SMPS_OFF, - NL80211_SMPS_STATIC, - NL80211_SMPS_DYNAMIC, - - __NL80211_SMPS_AFTER_LAST, - NL80211_SMPS_MAX = __NL80211_SMPS_AFTER_LAST - 1 -}; - -/** - * enum nl80211_radar_event - type of radar event for DFS operation - * - * Type of event to be used with NL80211_ATTR_RADAR_EVENT to inform userspace - * about detected radars or success of the channel available check (CAC) - * - * @NL80211_RADAR_DETECTED: A radar pattern has been detected. The channel is - * now unusable. - * @NL80211_RADAR_CAC_FINISHED: Channel Availability Check has been finished, - * the channel is now available. - * @NL80211_RADAR_CAC_ABORTED: Channel Availability Check has been aborted, no - * change to the channel status. - * @NL80211_RADAR_NOP_FINISHED: The Non-Occupancy Period for this channel is - * over, channel becomes usable. - */ -enum nl80211_radar_event { - NL80211_RADAR_DETECTED, - NL80211_RADAR_CAC_FINISHED, - NL80211_RADAR_CAC_ABORTED, - NL80211_RADAR_NOP_FINISHED, -}; - -/** - * enum nl80211_dfs_state - DFS states for channels - * - * Channel states used by the DFS code. - * - * @NL80211_DFS_USABLE: The channel can be used, but channel availability - * check (CAC) must be performed before using it for AP or IBSS. - * @NL80211_DFS_UNAVAILABLE: A radar has been detected on this channel, it - * is therefore marked as not available. - * @NL80211_DFS_AVAILABLE: The channel has been CAC checked and is available. - */ -enum nl80211_dfs_state { - NL80211_DFS_USABLE, - NL80211_DFS_UNAVAILABLE, - NL80211_DFS_AVAILABLE, -}; - -/** - * enum enum nl80211_protocol_features - nl80211 protocol features - * @NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP: nl80211 supports splitting - * wiphy dumps (if requested by the application with the attribute - * %NL80211_ATTR_SPLIT_WIPHY_DUMP. Also supported is filtering the - * wiphy dump by %NL80211_ATTR_WIPHY, %NL80211_ATTR_IFINDEX or - * %NL80211_ATTR_WDEV. - */ -enum nl80211_protocol_features { - NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP = 1 << 0, -}; - -/** - * enum nl80211_crit_proto_id - nl80211 critical protocol identifiers - * - * @NL80211_CRIT_PROTO_UNSPEC: protocol unspecified. - * @NL80211_CRIT_PROTO_DHCP: BOOTP or DHCPv6 protocol. - * @NL80211_CRIT_PROTO_EAPOL: EAPOL protocol. - * @NL80211_CRIT_PROTO_APIPA: APIPA protocol. - * @NUM_NL80211_CRIT_PROTO: must be kept last. - */ -enum nl80211_crit_proto_id { - NL80211_CRIT_PROTO_UNSPEC, - NL80211_CRIT_PROTO_DHCP, - NL80211_CRIT_PROTO_EAPOL, - NL80211_CRIT_PROTO_APIPA, - /* add other protocols before this one */ - NUM_NL80211_CRIT_PROTO -}; - -/* maximum duration for critical protocol measures */ -#define NL80211_CRIT_PROTO_MAX_DURATION 5000 /* msec */ - -/** - * enum nl80211_rxmgmt_flags - flags for received management frame. - * - * Used by cfg80211_rx_mgmt() - * - * @NL80211_RXMGMT_FLAG_ANSWERED: frame was answered by device/driver. - */ -enum nl80211_rxmgmt_flags { - NL80211_RXMGMT_FLAG_ANSWERED = 1 << 0, -}; - -/* - * If this flag is unset, the lower 24 bits are an OUI, if set - * a Linux nl80211 vendor ID is used (no such IDs are allocated - * yet, so that's not valid so far) - */ -#define NL80211_VENDOR_ID_IS_LINUX 0x80000000 - -/** - * struct nl80211_vendor_cmd_info - vendor command data - * @vendor_id: If the %NL80211_VENDOR_ID_IS_LINUX flag is clear, then the - * value is a 24-bit OUI; if it is set then a separately allocated ID - * may be used, but no such IDs are allocated yet. New IDs should be - * added to this file when needed. - * @subcmd: sub-command ID for the command - */ -struct nl80211_vendor_cmd_info { - __u32 vendor_id; - __u32 subcmd; -}; - -/** - * enum nl80211_tdls_peer_capability - TDLS peer flags. - * - * Used by tdls_mgmt() to determine which conditional elements need - * to be added to TDLS Setup frames. - * - * @NL80211_TDLS_PEER_HT: TDLS peer is HT capable. - * @NL80211_TDLS_PEER_VHT: TDLS peer is VHT capable. - * @NL80211_TDLS_PEER_WMM: TDLS peer is WMM capable. - */ -enum nl80211_tdls_peer_capability { - NL80211_TDLS_PEER_HT = 1<<0, - NL80211_TDLS_PEER_VHT = 1<<1, - NL80211_TDLS_PEER_WMM = 1<<2, -}; - -/** - * enum nl80211_sched_scan_plan - scanning plan for scheduled scan - * @__NL80211_SCHED_SCAN_PLAN_INVALID: attribute number 0 is reserved - * @NL80211_SCHED_SCAN_PLAN_INTERVAL: interval between scan iterations. In - * seconds (u32). - * @NL80211_SCHED_SCAN_PLAN_ITERATIONS: number of scan iterations in this - * scan plan (u32). The last scan plan must not specify this attribute - * because it will run infinitely. A value of zero is invalid as it will - * make the scan plan meaningless. - * @NL80211_SCHED_SCAN_PLAN_MAX: highest scheduled scan plan attribute number - * currently defined - * @__NL80211_SCHED_SCAN_PLAN_AFTER_LAST: internal use - */ -enum nl80211_sched_scan_plan { - __NL80211_SCHED_SCAN_PLAN_INVALID, - NL80211_SCHED_SCAN_PLAN_INTERVAL, - NL80211_SCHED_SCAN_PLAN_ITERATIONS, - - /* keep last */ - __NL80211_SCHED_SCAN_PLAN_AFTER_LAST, - NL80211_SCHED_SCAN_PLAN_MAX = - __NL80211_SCHED_SCAN_PLAN_AFTER_LAST - 1 -}; - -/** - * struct nl80211_bss_select_rssi_adjust - RSSI adjustment parameters. - * - * @band: band of BSS that must match for RSSI value adjustment. - * @delta: value used to adjust the RSSI value of matching BSS. - */ -struct nl80211_bss_select_rssi_adjust { - __u8 band; - __s8 delta; -} __attribute__((packed)); - -/** - * enum nl80211_bss_select_attr - attributes for bss selection. - * - * @__NL80211_BSS_SELECT_ATTR_INVALID: reserved. - * @NL80211_BSS_SELECT_ATTR_RSSI: Flag indicating only RSSI-based BSS selection - * is requested. - * @NL80211_BSS_SELECT_ATTR_BAND_PREF: attribute indicating BSS - * selection should be done such that the specified band is preferred. - * When there are multiple BSS-es in the preferred band, the driver - * shall use RSSI-based BSS selection as a second step. The value of - * this attribute is according to &enum nl80211_band (u32). - * @NL80211_BSS_SELECT_ATTR_RSSI_ADJUST: When present the RSSI level for - * BSS-es in the specified band is to be adjusted before doing - * RSSI-based BSS selection. The attribute value is a packed structure - * value as specified by &struct nl80211_bss_select_rssi_adjust. - * @NL80211_BSS_SELECT_ATTR_MAX: highest bss select attribute number. - * @__NL80211_BSS_SELECT_ATTR_AFTER_LAST: internal use. - * - * One and only one of these attributes are found within %NL80211_ATTR_BSS_SELECT - * for %NL80211_CMD_CONNECT. It specifies the required BSS selection behaviour - * which the driver shall use. - */ -enum nl80211_bss_select_attr { - __NL80211_BSS_SELECT_ATTR_INVALID, - NL80211_BSS_SELECT_ATTR_RSSI, - NL80211_BSS_SELECT_ATTR_BAND_PREF, - NL80211_BSS_SELECT_ATTR_RSSI_ADJUST, - - /* keep last */ - __NL80211_BSS_SELECT_ATTR_AFTER_LAST, - NL80211_BSS_SELECT_ATTR_MAX = __NL80211_BSS_SELECT_ATTR_AFTER_LAST - 1 -}; - -/** - * enum nl80211_nan_dual_band_conf - NAN dual band configuration - * - * Defines the NAN dual band mode of operation - * - * @NL80211_NAN_BAND_DEFAULT: device default mode - * @NL80211_NAN_BAND_2GHZ: 2.4GHz mode - * @NL80211_NAN_BAND_5GHZ: 5GHz mode - */ -enum nl80211_nan_dual_band_conf { - NL80211_NAN_BAND_DEFAULT = 1 << 0, - NL80211_NAN_BAND_2GHZ = 1 << 1, - NL80211_NAN_BAND_5GHZ = 1 << 2, -}; - -/** - * enum nl80211_nan_function_type - NAN function type - * - * Defines the function type of a NAN function - * - * @NL80211_NAN_FUNC_PUBLISH: function is publish - * @NL80211_NAN_FUNC_SUBSCRIBE: function is subscribe - * @NL80211_NAN_FUNC_FOLLOW_UP: function is follow-up - */ -enum nl80211_nan_function_type { - NL80211_NAN_FUNC_PUBLISH, - NL80211_NAN_FUNC_SUBSCRIBE, - NL80211_NAN_FUNC_FOLLOW_UP, - - /* keep last */ - __NL80211_NAN_FUNC_TYPE_AFTER_LAST, - NL80211_NAN_FUNC_MAX_TYPE = __NL80211_NAN_FUNC_TYPE_AFTER_LAST - 1, -}; - -/** - * enum nl80211_nan_publish_type - NAN publish tx type - * - * Defines how to send publish Service Discovery Frames - * - * @NL80211_NAN_SOLICITED_PUBLISH: publish function is solicited - * @NL80211_NAN_UNSOLICITED_PUBLISH: publish function is unsolicited - */ -enum nl80211_nan_publish_type { - NL80211_NAN_SOLICITED_PUBLISH = 1 << 0, - NL80211_NAN_UNSOLICITED_PUBLISH = 1 << 1, -}; - -/** - * enum nl80211_nan_func_term_reason - NAN functions termination reason - * - * Defines termination reasons of a NAN function - * - * @NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST: requested by user - * @NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED: timeout - * @NL80211_NAN_FUNC_TERM_REASON_ERROR: errored - */ -enum nl80211_nan_func_term_reason { - NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST, - NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED, - NL80211_NAN_FUNC_TERM_REASON_ERROR, -}; - -#define NL80211_NAN_FUNC_SERVICE_ID_LEN 6 -#define NL80211_NAN_FUNC_SERVICE_SPEC_INFO_MAX_LEN 0xff -#define NL80211_NAN_FUNC_SRF_MAX_LEN 0xff - -/** - * enum nl80211_nan_func_attributes - NAN function attributes - * @__NL80211_NAN_FUNC_INVALID: invalid - * @NL80211_NAN_FUNC_TYPE: &enum nl80211_nan_function_type (u8). - * @NL80211_NAN_FUNC_SERVICE_ID: 6 bytes of the service ID hash as - * specified in NAN spec. This is a binary attribute. - * @NL80211_NAN_FUNC_PUBLISH_TYPE: relevant if the function's type is - * publish. Defines the transmission type for the publish Service Discovery - * Frame, see &enum nl80211_nan_publish_type. Its type is u8. - * @NL80211_NAN_FUNC_PUBLISH_BCAST: relevant if the function is a solicited - * publish. Should the solicited publish Service Discovery Frame be sent to - * the NAN Broadcast address. This is a flag. - * @NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE: relevant if the function's type is - * subscribe. Is the subscribe active. This is a flag. - * @NL80211_NAN_FUNC_FOLLOW_UP_ID: relevant if the function's type is follow up. - * The instance ID for the follow up Service Discovery Frame. This is u8. - * @NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID: relevant if the function's type - * is follow up. This is a u8. - * The requestor instance ID for the follow up Service Discovery Frame. - * @NL80211_NAN_FUNC_FOLLOW_UP_DEST: the MAC address of the recipient of the - * follow up Service Discovery Frame. This is a binary attribute. - * @NL80211_NAN_FUNC_CLOSE_RANGE: is this function limited for devices in a - * close range. The range itself (RSSI) is defined by the device. - * This is a flag. - * @NL80211_NAN_FUNC_TTL: strictly positive number of DWs this function should - * stay active. If not present infinite TTL is assumed. This is a u32. - * @NL80211_NAN_FUNC_SERVICE_INFO: array of bytes describing the service - * specific info. This is a binary attribute. - * @NL80211_NAN_FUNC_SRF: Service Receive Filter. This is a nested attribute. - * See &enum nl80211_nan_srf_attributes. - * @NL80211_NAN_FUNC_RX_MATCH_FILTER: Receive Matching filter. This is a nested - * attribute. It is a list of binary values. - * @NL80211_NAN_FUNC_TX_MATCH_FILTER: Transmit Matching filter. This is a - * nested attribute. It is a list of binary values. - * @NL80211_NAN_FUNC_INSTANCE_ID: The instance ID of the function. - * Its type is u8 and it cannot be 0. - * @NL80211_NAN_FUNC_TERM_REASON: NAN function termination reason. - * See &enum nl80211_nan_func_term_reason. - * - * @NUM_NL80211_NAN_FUNC_ATTR: internal - * @NL80211_NAN_FUNC_ATTR_MAX: highest NAN function attribute - */ -enum nl80211_nan_func_attributes { - __NL80211_NAN_FUNC_INVALID, - NL80211_NAN_FUNC_TYPE, - NL80211_NAN_FUNC_SERVICE_ID, - NL80211_NAN_FUNC_PUBLISH_TYPE, - NL80211_NAN_FUNC_PUBLISH_BCAST, - NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE, - NL80211_NAN_FUNC_FOLLOW_UP_ID, - NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID, - NL80211_NAN_FUNC_FOLLOW_UP_DEST, - NL80211_NAN_FUNC_CLOSE_RANGE, - NL80211_NAN_FUNC_TTL, - NL80211_NAN_FUNC_SERVICE_INFO, - NL80211_NAN_FUNC_SRF, - NL80211_NAN_FUNC_RX_MATCH_FILTER, - NL80211_NAN_FUNC_TX_MATCH_FILTER, - NL80211_NAN_FUNC_INSTANCE_ID, - NL80211_NAN_FUNC_TERM_REASON, - - /* keep last */ - NUM_NL80211_NAN_FUNC_ATTR, - NL80211_NAN_FUNC_ATTR_MAX = NUM_NL80211_NAN_FUNC_ATTR - 1 -}; - -/** - * enum nl80211_nan_srf_attributes - NAN Service Response filter attributes - * @__NL80211_NAN_SRF_INVALID: invalid - * @NL80211_NAN_SRF_INCLUDE: present if the include bit of the SRF set. - * This is a flag. - * @NL80211_NAN_SRF_BF: Bloom Filter. Present if and only if - * &NL80211_NAN_SRF_MAC_ADDRS isn't present. This attribute is binary. - * @NL80211_NAN_SRF_BF_IDX: index of the Bloom Filter. Mandatory if - * &NL80211_NAN_SRF_BF is present. This is a u8. - * @NL80211_NAN_SRF_MAC_ADDRS: list of MAC addresses for the SRF. Present if - * and only if &NL80211_NAN_SRF_BF isn't present. This is a nested - * attribute. Each nested attribute is a MAC address. - * @NUM_NL80211_NAN_SRF_ATTR: internal - * @NL80211_NAN_SRF_ATTR_MAX: highest NAN SRF attribute - */ -enum nl80211_nan_srf_attributes { - __NL80211_NAN_SRF_INVALID, - NL80211_NAN_SRF_INCLUDE, - NL80211_NAN_SRF_BF, - NL80211_NAN_SRF_BF_IDX, - NL80211_NAN_SRF_MAC_ADDRS, - - /* keep last */ - NUM_NL80211_NAN_SRF_ATTR, - NL80211_NAN_SRF_ATTR_MAX = NUM_NL80211_NAN_SRF_ATTR - 1, -}; - -/** - * enum nl80211_nan_match_attributes - NAN match attributes - * @__NL80211_NAN_MATCH_INVALID: invalid - * @NL80211_NAN_MATCH_FUNC_LOCAL: the local function that had the - * match. This is a nested attribute. - * See &enum nl80211_nan_func_attributes. - * @NL80211_NAN_MATCH_FUNC_PEER: the peer function - * that caused the match. This is a nested attribute. - * See &enum nl80211_nan_func_attributes. - * - * @NUM_NL80211_NAN_MATCH_ATTR: internal - * @NL80211_NAN_MATCH_ATTR_MAX: highest NAN match attribute - */ -enum nl80211_nan_match_attributes { - __NL80211_NAN_MATCH_INVALID, - NL80211_NAN_MATCH_FUNC_LOCAL, - NL80211_NAN_MATCH_FUNC_PEER, - - /* keep last */ - NUM_NL80211_NAN_MATCH_ATTR, - NL80211_NAN_MATCH_ATTR_MAX = NUM_NL80211_NAN_MATCH_ATTR - 1 -}; - -#endif /* __LINUX_NL80211_H */ diff --git a/src/mesh-gdbus.c b/src/mesh-gdbus.c index 1ed034a..3ed6e4b 100644 --- a/src/mesh-gdbus.c +++ b/src/mesh-gdbus.c @@ -19,7 +19,7 @@ #include "mesh-gdbus.h" #include "mesh-request.h" -#include "nl80211.h" +#include static GDBusProxy *_gproxy_connman = NULL; static GDBusProxy *_gproxy_connman_mesh = NULL; diff --git a/src/mesh-netlink.c b/src/mesh-netlink.c index 9311fc3..1a6b70e 100644 --- a/src/mesh-netlink.c +++ b/src/mesh-netlink.c @@ -40,7 +40,8 @@ #include "mesh-netlink.h" #include "mesh-request.h" -#include "nl80211.h" +#include +//#include "nl80211.h" #define MESH_PARAM_HWMP_ROOTMODE "mesh_hwmp_rootmode" #define MESH_PARAM_GATE_ANNOUNCE "mesh_gate_announcements" @@ -514,7 +515,7 @@ static void mac_addr_n2a(char *mac_addr, unsigned char *arg) "%02X:%02X:%02X:%02X:%02X:%02X", arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]); } - +#if defined(NL80211_STA_INFO_CHAIN_SIGNAL) || defined(NL80211_STA_INFO_CHAIN_SIGNAL_AVG) static char *get_chain_signal(struct nlattr *attr_list) { struct nlattr *attr; @@ -541,6 +542,7 @@ static char *get_chain_signal(struct nlattr *attr_list) return buf; } +#endif /* NL80211_STA_INFO_CHAIN_SIGNAL || NL80211_STA_INFO_CHAIN_SIGNAL_AVG */ static int parse_bitrate(struct nlattr *bitrate_attr, char *buf, int buflen) { @@ -704,15 +706,34 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) [NL80211_STA_INFO_NONPEER_PM] = { .type = NLA_U32 }, [NL80211_STA_INFO_RX_BYTES64] = { .type = NLA_U64 }, [NL80211_STA_INFO_TX_BYTES64] = { .type = NLA_U64 }, +#ifdef NL80211_STA_INFO_CHAIN_SIGNAL [NL80211_STA_INFO_CHAIN_SIGNAL] = { .type = NLA_NESTED }, +#endif /* NL80211_STA_INFO_CHAIN_SIGNAL */ + +#ifdef NL80211_STA_INFO_CHAIN_SIGNAL_AVG [NL80211_STA_INFO_CHAIN_SIGNAL_AVG] = { .type = NLA_NESTED }, +#endif /* NL80211_STA_INFO_CHAIN_SIGNAL_AVG */ + +#ifdef NL80211_STA_INFO_RX_DROP_MISC [NL80211_STA_INFO_RX_DROP_MISC] = { .type = NLA_U64 }, +#endif /* NL80211_STA_INFO_RX_DROP_MISC */ + +#ifdef NL80211_STA_INFO_RX_DURATION [NL80211_STA_INFO_BEACON_RX] = { .type = NLA_U64 }, +#endif /* NL80211_STA_INFO_RX_DURATION */ + +#ifdef NL80211_STA_INFO_TID_STATS [NL80211_STA_INFO_TID_STATS] = { .type = NLA_NESTED }, +#endif /* NL80211_STA_INFO_TID_STATS */ + +#ifdef NL80211_STA_INFO_RX_DURATION [NL80211_STA_INFO_RX_DURATION] = { .type = NLA_U64 }, +#endif /* NL80211_STA_INFO_RX_DURATION */ }; char mac_addr[MAX_MAC_ADDR_LEN], dev[IF_NAMESIZE]; +#ifdef NL80211_STA_INFO_CHAIN_SIGNAL char *chain; +#endif /* NL80211_STA_INFO_CHAIN_SIGNAL */ char *attr_mac = NULL; mesh_nl_state *state = (mesh_nl_state *)arg; mesh_station_info_s *station_info = NULL; @@ -826,7 +847,7 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) } MESH_LOGD(" mesh plink:\t%s", state_name); } - +#ifdef NL80211_STA_INFO_CHAIN_SIGNAL /* RSSI Signal */ chain = get_chain_signal(sta_info[NL80211_STA_INFO_CHAIN_SIGNAL]); if (0 != sta_info[NL80211_STA_INFO_SIGNAL]) { @@ -834,7 +855,7 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) (int8_t)nla_get_u8(sta_info[NL80211_STA_INFO_SIGNAL]); MESH_LOGD(" signal: \t%d %sdBm", station_info->rssi, chain); } - +#endif /* NL80211_STA_INFO_CHAIN_SIGNAL */ /* TX Bitrate */ if (0 != sta_info[NL80211_STA_INFO_TX_BITRATE]) { char buf[100]; @@ -858,7 +879,7 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) nla_get_u32(sta_info[NL80211_STA_INFO_TX_FAILED]); MESH_LOGD(" tx failed:\t%u", station_info->tx_failed); } - +#ifdef NL80211_STA_INFO_CHAIN_SIGNAL_AVG /* Signal average */ chain = get_chain_signal(sta_info[NL80211_STA_INFO_CHAIN_SIGNAL_AVG]); if (0 != sta_info[NL80211_STA_INFO_SIGNAL_AVG]) { @@ -866,7 +887,7 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) (int8_t)nla_get_u8(sta_info[NL80211_STA_INFO_SIGNAL_AVG]); MESH_LOGD(" signal avg:\t%d %sdBm", station_info->rssi_avg, chain); } - +#endif /* NL80211_STA_INFO_CHAIN_SIGNAL_AVG */ if (0 != sta_info[NL80211_STA_INFO_RX_BITRATE]) { char buf[100]; station_info->rx_bitrate = @@ -995,31 +1016,37 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) MESH_LOGD(" mesh non-peer PS mode:\t"); print_power_mode(sta_info[NL80211_STA_INFO_NONPEER_PM]); } - +#ifdef NL80211_STA_INFO_RX_DROP_MISC if (0 != sta_info[NL80211_STA_INFO_RX_DROP_MISC]) { station_info->rx_drop_misc = (unsigned long long)nla_get_u64(sta_info[NL80211_STA_INFO_RX_DROP_MISC]); MESH_LOGD(" rx drop misc:\t%llu", station_info->rx_drop_misc); } +#endif /* NL80211_STA_INFO_RX_DROP_MISC */ +#ifdef NL80211_STA_INFO_BEACON_RX if (0 != sta_info[NL80211_STA_INFO_BEACON_RX]) { station_info->beacon_rx = (unsigned long long)nla_get_u64(sta_info[NL80211_STA_INFO_BEACON_RX]); MESH_LOGD(" beacon rx:\t%llu", station_info->beacon_rx); } +#endif /* NL80211_STA_INFO_BEACON_RX */ +#ifdef NL80211_STA_INFO_BEACON_SIGNAL_AVG if (0 != sta_info[NL80211_STA_INFO_BEACON_SIGNAL_AVG]) { station_info->beacon_signal_avg = nla_get_u8(sta_info[NL80211_STA_INFO_BEACON_SIGNAL_AVG]); MESH_LOGD(" beacon signal avg:\t%d dBm", station_info->beacon_signal_avg); } +#endif /* NL80211_STA_INFO_BEACON_SIGNAL_AVG */ +#ifdef NL80211_STA_INFO_RX_DURATION if (0 != sta_info[NL80211_STA_INFO_RX_DURATION]) { station_info->rx_duration = (unsigned long long)nla_get_u64(sta_info[NL80211_STA_INFO_RX_DURATION]); MESH_LOGD(" rx duration:\t%lld us", station_info->rx_duration); } - +#endif /* NL80211_STA_INFO_RX_DURATION */ MESH_LOGD(""); *(state->station_list) = g_list_prepend(*(state->station_list), station_info); -- 2.7.4 From f95a879e75e243340ee0868b8cc744b309900a31 Mon Sep 17 00:00:00 2001 From: saerome kim Date: Wed, 5 Jul 2017 20:40:23 +0900 Subject: [PATCH 13/16] Change daemon nane from meshd to wmeshd Signed-off-by: saerome kim --- CMakeLists.txt | 18 +- files/{mesh.sh.in => wmesh.sh.in} | 0 include/mesh-gdbus.h | 66 --- include/mesh-interface.h | 38 -- include/mesh-log.h | 58 -- include/mesh-request.h | 77 --- include/mesh-service-interface.h | 50 -- include/{mesh-bridge.h => wmesh-bridge.h} | 16 +- include/wmesh-gdbus.h | 66 +++ include/wmesh-interface.h | 38 ++ include/wmesh-log.h | 58 ++ include/{mesh-netlink.h => wmesh-netlink.h} | 18 +- .../{mesh-peer-monitor.h => wmesh-peer-monitor.h} | 20 +- include/wmesh-request.h | 85 +++ include/wmesh-service-interface.h | 58 ++ include/{mesh-service.h => wmesh-service.h} | 22 +- include/{mesh-softap.h => wmesh-softap.h} | 20 +- include/{mesh-util.h => wmesh-util.h} | 14 +- include/{mesh.h => wmesh.h} | 68 +-- introspection/gen.sh | 8 +- introspection/{manager.xml => wmanager.xml} | 2 +- introspection/{mesh.xml => wmesh.xml} | 2 +- packaging/dbus-meshd.conf | 64 --- packaging/dbus-wmeshd.conf | 64 +++ packaging/net.mesh.service | 6 - packaging/net.wmesh.service | 6 + packaging/{meshd.service => wmeshd.service} | 6 +- packaging/{meshd.spec => wmeshd.spec} | 42 +- src/mesh-request.c | 625 -------------------- src/{mesh-bridge.c => wmesh-bridge.c} | 100 ++-- src/{mesh-gdbus.c => wmesh-gdbus.c} | 598 +++++++++---------- src/{mesh-interface.c => wmesh-interface.c} | 142 ++--- src/{mesh-netlink.c => wmesh-netlink.c} | 500 ++++++++-------- src/{mesh-peer-monitor.c => wmesh-peer-monitor.c} | 106 ++-- src/wmesh-request.c | 625 ++++++++++++++++++++ ...rvice-interface.c => wmesh-service-interface.c} | 634 ++++++++++----------- src/{mesh-service.c => wmesh-service.c} | 32 +- src/{mesh-softap.c => wmesh-softap.c} | 142 ++--- src/{meshd.c => wmeshd.c} | 34 +- meshd.manifest => wmeshd.manifest | 0 40 files changed, 2285 insertions(+), 2243 deletions(-) rename files/{mesh.sh.in => wmesh.sh.in} (100%) delete mode 100644 include/mesh-gdbus.h delete mode 100644 include/mesh-interface.h delete mode 100644 include/mesh-log.h delete mode 100644 include/mesh-request.h delete mode 100644 include/mesh-service-interface.h rename include/{mesh-bridge.h => wmesh-bridge.h} (62%) create mode 100644 include/wmesh-gdbus.h create mode 100644 include/wmesh-interface.h create mode 100644 include/wmesh-log.h rename include/{mesh-netlink.h => wmesh-netlink.h} (60%) rename include/{mesh-peer-monitor.h => wmesh-peer-monitor.h} (72%) create mode 100644 include/wmesh-request.h create mode 100644 include/wmesh-service-interface.h rename include/{mesh-service.h => wmesh-service.h} (65%) rename include/{mesh-softap.h => wmesh-softap.h} (73%) rename include/{mesh-util.h => wmesh-util.h} (76%) rename include/{mesh.h => wmesh.h} (78%) rename introspection/{manager.xml => wmanager.xml} (91%) rename introspection/{mesh.xml => wmesh.xml} (96%) mode change 100755 => 100644 delete mode 100644 packaging/dbus-meshd.conf create mode 100644 packaging/dbus-wmeshd.conf delete mode 100644 packaging/net.mesh.service create mode 100644 packaging/net.wmesh.service rename packaging/{meshd.service => wmeshd.service} (63%) rename packaging/{meshd.spec => wmeshd.spec} (65%) delete mode 100644 src/mesh-request.c rename src/{mesh-bridge.c => wmesh-bridge.c} (67%) rename src/{mesh-gdbus.c => wmesh-gdbus.c} (59%) rename src/{mesh-interface.c => wmesh-interface.c} (67%) rename src/{mesh-netlink.c => wmesh-netlink.c} (76%) rename src/{mesh-peer-monitor.c => wmesh-peer-monitor.c} (65%) create mode 100644 src/wmesh-request.c rename src/{mesh-service-interface.c => wmesh-service-interface.c} (56%) rename src/{mesh-service.c => wmesh-service.c} (60%) rename src/{mesh-softap.c => wmesh-softap.c} (73%) rename src/{meshd.c => wmeshd.c} (69%) rename meshd.manifest => wmeshd.manifest (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cd0e85..6819b6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -PROJECT(meshd C) +PROJECT(wmeshd C) MESSAGE(===================================================================) MESSAGE(Building...meshd) @@ -42,13 +42,13 @@ SET(INTROSPECTION_PATH ${CMAKE_CURRENT_SOURCE_DIR}/introspection) ADD_CUSTOM_COMMAND( OUTPUT dbus COMMAND gdbus-codegen - --interface-prefix net.mesh. - --generate-c-code mesh-generated-code + --interface-prefix net.wmesh. + --generate-c-code wmesh-generated-code #--c-namespace mesh --c-generate-object-manager --generate-docbook generated-docs - ${INTROSPECTION_PATH}/mesh.xml - ${INTROSPECTION_PATH}/manager.xml + ${INTROSPECTION_PATH}/wmesh.xml + ${INTROSPECTION_PATH}/wmanager.xml COMMENT "Generating mesh GDBus .c/.h" ) ADD_CUSTOM_TARGET(GENERATED_DBUS_CODE DEPENDS dbus) @@ -59,8 +59,8 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) MESSAGE(" - Compiling...") FILE(GLOB DAEMON_SRCS *.c ${CMAKE_SOURCE_DIR}/src/*.c) -SET(DAEMON_SRCS ${DAEMON_SRCS} ${CMAKE_SOURCE_DIR}/mesh-generated-code.c) -SET_SOURCE_FILES_PROPERTIES(${CMAKE_SOURCE_DIR}/mesh-generated-code.c PROPERTIES GENERATED TRUE) +SET(DAEMON_SRCS ${DAEMON_SRCS} ${CMAKE_SOURCE_DIR}/wmesh-generated-code.c) +SET_SOURCE_FILES_PROPERTIES(${CMAKE_SOURCE_DIR}/wmesh-generated-code.c PROPERTIES GENERATED TRUE) INCLUDE_DIRECTORIES(${daemon_pkgs_INCLUDE_DIRS}) LINK_DIRECTORIES(${daemon_pkgs_LIBRARY_DIRS}) @@ -76,5 +76,5 @@ TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${daemon_pkgs_LIBRARIES}) INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin) MESSAGE(" - Copying...meshd") -CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/files/mesh.sh.in ${CMAKE_SOURCE_DIR}/files/mesh.sh @ONLY) -INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/mesh.sh DESTINATION ${SBIN_DIR}) +CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/files/wmesh.sh.in ${CMAKE_SOURCE_DIR}/files/wmesh.sh @ONLY) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/wmesh.sh DESTINATION ${SBIN_DIR}) diff --git a/files/mesh.sh.in b/files/wmesh.sh.in similarity index 100% rename from files/mesh.sh.in rename to files/wmesh.sh.in diff --git a/include/mesh-gdbus.h b/include/mesh-gdbus.h deleted file mode 100644 index d680bbb..0000000 --- a/include/mesh-gdbus.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ - -#ifndef __MESH_GDBUS_H__ -#define __MESH_GDBUS_H__ - -#include "mesh.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* DBus object paths of connman */ -#define CONNMAN_SERVER_NAME "net.connman" -#define CONNMAN_OBJECT_PATH "/" -#define CONNMAN_OBJECT_PATH_MESH "/net/connman/mesh" -#define CONNMAN_OBJECT_PATH_TECH_MESH "/net/connman/technology/mesh" - -/* DBus interfaces of connman */ -#define CONNMAN_INTERFACE_MANAGER "net.connman.Manager" -#define CONNMAN_INTERFACE_MESH "net.connman.Mesh" -#define CONNMAN_INTERFACE_TECH "net.connman.Technology" - -#define MESH_DBUS_PROXY_TIMEOUT ((9.5 + 2) * 1000) /**< default timeout for GDBus */ - -int meshd_dbus_start(mesh_service *service); -int meshd_dbus_stop(mesh_service *service); - -int mesh_gdbus_create_mesh_interface(mesh_service *service); -int mesh_gdbus_remove_mesh_interface(mesh_service *service); -int mesh_gdbus_mesh_scan(mesh_service *service); -int mesh_gdbus_mesh_specific_scan(mesh_service *service, gchar *mesh_id, - gint channel); -int mesh_gdbus_mesh_cancel_scan(mesh_service *service); -int mesh_gdbus_get_mesh_networks(mesh_service *service); -int mesh_gdbus_get_joined_mesh_network(mesh_service *service); -int mesh_gdbus_get_connected_peers(mesh_service *service); - -int mesh_gdbus_create_network(mesh_service *service, gchar *mesh_id, - gint channel, meshd_security_type_e sec); -int mesh_gdbus_set_passphrase(mesh_service *service, mesh_scan_result_s *info, - gchar *passphrase); -int mesh_gdbus_connect_network(mesh_service *service, mesh_scan_result_s *info); -int mesh_gdbus_disconnect_network(mesh_service *service, mesh_scan_result_s *info); -int mesh_gdbus_remove_network(mesh_service *service, mesh_scan_result_s *info); -int mesh_gdbus_enable_ethernet_interface(mesh_service *service, bool state); -int mesh_gdbus_set_mesh_gate(mesh_service *service); - -#ifdef __cplusplus -} -#endif - -#endif /** __MESH_GDBUS_H__ */ diff --git a/include/mesh-interface.h b/include/mesh-interface.h deleted file mode 100644 index 3ef8899..0000000 --- a/include/mesh-interface.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Network Configuration Module - * - * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. - * - * 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. - * - */ -#ifndef __MESH_INTERFACE_H__ -#define __MESH_INTERFACE_H__ - -typedef enum { - MESH_INTERFACE_UP = 1, /**< Interface up */ - MESH_INTERFACE_DOWN, /**< Interface down */ - MESH_INTERFACE_DO_NOTHING, /**< Do not handle up/down */ -} mesh_set_interface_type_e; - -int mesh_interface_set(const char* interface, const char* ip_addr, - mesh_set_interface_type_e type); -//int mesh_interface_set_mac_addr(const char* interface, const char* mac_addr); -int mesh_interface_initialize(mesh_interface_s *info); -int mesh_interface_check(const char* interface); -int mesh_interface_check_external_exists( - const char* external_interface, bool *state); -int mesh_interface_check_bridge_interface_exists(const char* bridge, const char* interface); -char* mesh_interface_get_address(const char* if_name); - -#endif /* __MESH_INTERFACE_H__ */ diff --git a/include/mesh-log.h b/include/mesh-log.h deleted file mode 100644 index 7563c02..0000000 --- a/include/mesh-log.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Network Configuration Module - * - * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. - * - * 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. - * - */ -#ifndef __MESH_LOG_H__ -#define __MESH_LOG_H__ - -#ifdef USE_DLOG -#include - -#undef LOG_TAG -#define LOG_TAG "MESH_MANAGER" - -#define MESH_LOGV(format, args...) LOGV(format, ##args) -#define MESH_LOGD(format, args...) LOGD(format, ##args) -#define MESH_LOGI(format, args...) LOGI(format, ##args) -#define MESH_LOGW(format, args...) LOGW(format, ##args) -#define MESH_LOGE(format, args...) LOGE(format, ##args) -#define MESH_LOGF(format, args...) LOGF(format, ##args) - -#define __MESH_LOG_FUNC_ENTER__ LOGD("Enter") -#define __MESH_LOG_FUNC_EXIT__ LOGD("Quit") - -#define MESH_SECLOGI(format, args...) SECURE_LOG(LOG_INFO, LOG_TAG, format, ##args) -#define MESH_SECLOGD(format, args...) SECURE_LOG(LOG_DEBUG, LOG_TAG, format, ##args) - -#else /* USE_DLOG */ - -#define MESH_LOGV(format, args...) -#define MESH_LOGD(format, args...) -#define MESH_LOGI(format, args...) -#define MESH_LOGW(format, args...) -#define MESH_LOGE(format, args...) -#define MESH_LOGF(format, args...) - -#define __MESH_LOG_FUNC_ENTER__ -#define __MESH_LOG_FUNC_EXIT__ - -#define MESH_SECLOGI(format, args...) -#define MESH_SECLOGD(format, args...) - -#endif /* USE_DLOG */ - -#endif /* __MESH_LOG_H__ */ diff --git a/include/mesh-request.h b/include/mesh-request.h deleted file mode 100644 index 8abcec7..0000000 --- a/include/mesh-request.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Network Configuration Module - * - * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. - * - * 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. - * - */ -#ifndef __MESH_REQUEST_H__ -#define __MESH_REQUEST_H__ - -/* Newly functions */ -int mesh_request_enable_network(mesh_service *service); -int mesh_request_disable_network(mesh_service *service); -int mesh_request_scan(mesh_service *service); -int mesh_request_specific_scan(mesh_service *service, gchar *mesh_id, - gint channel); -int mesh_request_cancel_scan(mesh_service *service); -int mesh_request_get_networks(mesh_service *service); -int mesh_request_get_joined_network(mesh_service *service); -int mesh_request_get_connected_peers(mesh_service *service); - -int mesh_request_create_mesh_network(mesh_service *service, gchar *mesh_id, - gint channel, meshd_security_type_e sec); -int mesh_request_connect_mesh_network(mesh_service *service, gchar *mesh_id, - gint channel, meshd_security_type_e sec, gchar *passphrase); -int mesh_request_disconnect_mesh_network(mesh_service *service, - gchar *mesh_id, gint channel, meshd_security_type_e sec); -int mesh_request_remove_mesh_network(mesh_service *service, - gchar *mesh_id, gint channel, meshd_security_type_e sec); - -int mesh_request_set_mesh_gate(const char* bridge_interface, - const char* mesh_interface, const char* external_interface); -int mesh_request_unset_mesh_gate(const char* bridge_interface, - const char* mesh_interface, const char* external_interface); - - -/* Bridge network */ -int mesh_request_add_bridge_interface(const char* bridge_interface, - const char* interface); -int mesh_request_remove_bridge_interface(const char* bridge_interface, - const char* interface); - -/* Soft AP */ -int mesh_request_set_softap_config(const char* softap_interface, - const char *ssid, const char* mode, int channel, int visibility, - int max_sta, int security, const char* passphrase); -int mesh_request_enable_softap( - const char* bridge_interface, const char* softap_interface); -int mesh_request_disable_softap( - const char* bridge_interface, const char* softap_interface); - -/* Mesh Station & path */ -int mesh_request_get_station_info(const char* mesh_interface, GList **station_list); -int mesh_request_get_mpath_info(const char* mesh_interface, GList **mpath_list); - -int mesh_request_register_event_handler(); -int mesh_request_unregister_event_handler(); - -/* Notifications */ -void mesh_notify_scan_done(); -void mesh_notify_connection_state(const char* mesh_id, const char* bssid, - int channel, meshd_security_type_e sec, meshd_connection_state_e state); -void mesh_notify_station_joined(const char* bssid); -void mesh_notify_station_left(const char* bssid); - -#endif /* __MESH_REQUEST_H__ */ diff --git a/include/mesh-service-interface.h b/include/mesh-service-interface.h deleted file mode 100644 index 9be19a1..0000000 --- a/include/mesh-service-interface.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Network Configuration Module - * - * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. - * - * 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. - * - */ -#ifndef __MESH_SERVICE_INTERFACE_H__ -#define __MESH_SERVICE_INTERFACE_H__ - -#include "mesh-generated-code.h" - -/**< Mesh D-BUS service*/ -#define MESH_DBUS_SERVICE "net.mesh" - -/**< Mesh D-BUS service path */ -#define MESH_DBUS_PATH "/net/mesh" - -#ifndef MESH_DBUS_INTERFACE -#define MESH_DBUS_INTERFACE "net.mesh" -//#warning "MESH_DBUS_INTERFACE is redefined" -#endif - -#ifndef MESH_DBUS_OBJPATH -#define MESH_DBUS_OBJPATH "/net/mesh" -//#warning "MESH_DBUS_OBJPATH is redefined" -#endif - -#ifndef MESH_DBUS_MANAGER_OBJPATH -#define MESH_DBUS_MANAGER_OBJPATH "/net/mesh/manager" -//#warning "MESH_DBUS_MANAGER_OBJPATH is redefined" -#endif - -NetMesh* meshd_dbus_get_object(); -int64_t meshd_dbus_generate_signal_number(); -gboolean meshd_service_interface_init(mesh_service *service); -void meshd_service_interface_deinit(mesh_service *service); - -#endif /* __MESH_SERVICE_INTERFACE_H__ */ diff --git a/include/mesh-bridge.h b/include/wmesh-bridge.h similarity index 62% rename from include/mesh-bridge.h rename to include/wmesh-bridge.h index 46ce577..e3a0391 100644 --- a/include/mesh-bridge.h +++ b/include/wmesh-bridge.h @@ -16,13 +16,13 @@ * limitations under the License. * */ -#ifndef __MESH_BRIDGE_H__ -#define __MESH_BRIDGE_H__ +#ifndef __WMESH_BRIDGE_H__ +#define __WMESH_BRIDGE_H__ -int mesh_bridge_create(const char* interface); -int mesh_bridge_remove(const char* interface); -int mesh_bridge_add_interface(const char* bridge_name, const char* interface); -int mesh_bridge_del_interface(const char* bridge_name, const char* interface); -int mesh_bridge_set_stp(const char* bridge_name, bool state); +int wmesh_bridge_create(const char* interface); +int wmesh_bridge_remove(const char* interface); +int wmesh_bridge_add_interface(const char* bridge_name, const char* interface); +int wmesh_bridge_del_interface(const char* bridge_name, const char* interface); +int wmesh_bridge_set_stp(const char* bridge_name, bool state); -#endif /* __MESH_BRIDGE_H__ */ +#endif /* __WMESH_BRIDGE_H__ */ diff --git a/include/wmesh-gdbus.h b/include/wmesh-gdbus.h new file mode 100644 index 0000000..caa00ec --- /dev/null +++ b/include/wmesh-gdbus.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved + * + * 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. + */ + +#ifndef __WMESH_GDBUS_H__ +#define __WMESH_GDBUS_H__ + +#include "wmesh.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DBus object paths of connman */ +#define CONNMAN_SERVER_NAME "net.connman" +#define CONNMAN_OBJECT_PATH "/" +#define CONNMAN_OBJECT_PATH_MESH "/net/connman/mesh" +#define CONNMAN_OBJECT_PATH_TECH_MESH "/net/connman/technology/mesh" + +/* DBus interfaces of connman */ +#define CONNMAN_INTERFACE_MANAGER "net.connman.Manager" +#define CONNMAN_INTERFACE_MESH "net.connman.Mesh" +#define CONNMAN_INTERFACE_TECH "net.connman.Technology" + +#define WMESH_DBUS_PROXY_TIMEOUT ((9.5 + 2) * 1000) /**< default timeout for GDBus */ + +int wmeshd_dbus_start(wmesh_service *service); +int wmeshd_dbus_stop(wmesh_service *service); + +int wmesh_gdbus_create_mesh_interface(wmesh_service *service); +int wmesh_gdbus_remove_mesh_interface(wmesh_service *service); +int wmesh_gdbus_mesh_scan(wmesh_service *service); +int wmesh_gdbus_mesh_specific_scan(wmesh_service *service, gchar *mesh_id, + gint channel); +int wmesh_gdbus_mesh_cancel_scan(wmesh_service *service); +int wmesh_gdbus_get_mesh_networks(wmesh_service *service); +int wmesh_gdbus_get_joined_mesh_network(wmesh_service *service); +int wmesh_gdbus_get_connected_peers(wmesh_service *service); + +int wmesh_gdbus_create_network(wmesh_service *service, gchar *mesh_id, + gint channel, wmeshd_security_type_e sec); +int wmesh_gdbus_set_passphrase(wmesh_service *service, wmesh_scan_result_s *info, + gchar *passphrase); +int wmesh_gdbus_connect_network(wmesh_service *service, wmesh_scan_result_s *info); +int wmesh_gdbus_disconnect_network(wmesh_service *service, wmesh_scan_result_s *info); +int wmesh_gdbus_remove_network(wmesh_service *service, wmesh_scan_result_s *info); +int wmesh_gdbus_enable_ethernet_interface(wmesh_service *service, bool state); +int wmesh_gdbus_set_mesh_gate(wmesh_service *service); + +#ifdef __cplusplus +} +#endif + +#endif /** __WMESH_GDBUS_H__ */ diff --git a/include/wmesh-interface.h b/include/wmesh-interface.h new file mode 100644 index 0000000..29bec0b --- /dev/null +++ b/include/wmesh-interface.h @@ -0,0 +1,38 @@ +/* + * Network Configuration Module + * + * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. + * + * 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. + * + */ +#ifndef __WMESH_INTERFACE_H__ +#define __WMESH_INTERFACE_H__ + +typedef enum { + WMESH_INTERFACE_UP = 1, /**< Interface up */ + WMESH_INTERFACE_DOWN, /**< Interface down */ + WMESH_INTERFACE_DO_NOTHING, /**< Do not handle up/down */ +} wmesh_set_interface_type_e; + +int wmesh_interface_set(const char* interface, const char* ip_addr, + wmesh_set_interface_type_e type); +//int wmesh_interface_set_mac_addr(const char* interface, const char* mac_addr); +int wmesh_interface_initialize(wmesh_interface_s *info); +int wmesh_interface_check(const char* interface); +int wmesh_interface_check_external_exists( + const char* external_interface, bool *state); +int wmesh_interface_check_bridge_interface_exists(const char* bridge, const char* interface); +char* wmesh_interface_get_address(const char* if_name); + +#endif /* __WMESH_INTERFACE_H__ */ diff --git a/include/wmesh-log.h b/include/wmesh-log.h new file mode 100644 index 0000000..474d8aa --- /dev/null +++ b/include/wmesh-log.h @@ -0,0 +1,58 @@ +/* + * Network Configuration Module + * + * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. + * + * 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. + * + */ +#ifndef __WMESH_LOG_H__ +#define __WMESH_LOG_H__ + +#ifdef USE_DLOG +#include + +#undef LOG_TAG +#define LOG_TAG "WMESH_MANAGER" + +#define WMESH_LOGV(format, args...) LOGV(format, ##args) +#define WMESH_LOGD(format, args...) LOGD(format, ##args) +#define WMESH_LOGI(format, args...) LOGI(format, ##args) +#define WMESH_LOGW(format, args...) LOGW(format, ##args) +#define WMESH_LOGE(format, args...) LOGE(format, ##args) +#define WMESH_LOGF(format, args...) LOGF(format, ##args) + +#define __WMESH_LOG_FUNC_ENTER__ LOGD("Enter") +#define __WMESH_LOG_FUNC_EXIT__ LOGD("Quit") + +#define WMESH_SECLOGI(format, args...) SECURE_LOG(LOG_INFO, LOG_TAG, format, ##args) +#define WMESH_SECLOGD(format, args...) SECURE_LOG(LOG_DEBUG, LOG_TAG, format, ##args) + +#else /* USE_DLOG */ + +#define WMESH_LOGV(format, args...) +#define WMESH_LOGD(format, args...) +#define WMESH_LOGI(format, args...) +#define WMESH_LOGW(format, args...) +#define WMESH_LOGE(format, args...) +#define WMESH_LOGF(format, args...) + +#define __WMESH_LOG_FUNC_ENTER__ +#define __WMESH_LOG_FUNC_EXIT__ + +#define WMESH_SECLOGI(format, args...) +#define WMESH_SECLOGD(format, args...) + +#endif /* USE_DLOG */ + +#endif /* __WMESH_LOG_H__ */ diff --git a/include/mesh-netlink.h b/include/wmesh-netlink.h similarity index 60% rename from include/mesh-netlink.h rename to include/wmesh-netlink.h index 2697e4e..0f756b0 100644 --- a/include/mesh-netlink.h +++ b/include/wmesh-netlink.h @@ -16,17 +16,17 @@ * limitations under the License. * */ -#ifndef __MESH_NETLINK_H__ -#define __MESH_NETLINK_H__ +#ifndef __WMESH_NETLINK_H__ +#define __WMESH_NETLINK_H__ -int mesh_netlink_set_mesh_parameter(const char* mesh_if_name, +int wmesh_netlink_set_mesh_parameter(const char* mesh_if_name, const char* param_name, unsigned int value); -int mesh_netlink_get_station_info(const char* mesh_if_name, GList **station_list); -int mesh_netlink_del_station_info(const char* mesh_if_name, char *peer); -int mesh_netlink_get_mpath_info(const char* mesh_if_name, GList **mpath_list); +int wmesh_netlink_get_station_info(const char* mesh_if_name, GList **station_list); +int wmesh_netlink_del_station_info(const char* mesh_if_name, char *peer); +int wmesh_netlink_get_mpath_info(const char* mesh_if_name, GList **mpath_list); -int mesh_netlink_register_event_handler(); -int mesh_netlink_unregister_event_handler(); +int wmesh_netlink_register_event_handler(); +int wmesh_netlink_unregister_event_handler(); -#endif /* __MESH_NETLINK_H__ */ +#endif /* __WMESH_NETLINK_H__ */ diff --git a/include/mesh-peer-monitor.h b/include/wmesh-peer-monitor.h similarity index 72% rename from include/mesh-peer-monitor.h rename to include/wmesh-peer-monitor.h index 982d281..ef3b4ce 100644 --- a/include/mesh-peer-monitor.h +++ b/include/wmesh-peer-monitor.h @@ -16,10 +16,20 @@ * limitations under the License. * */ -#ifndef __MESH_MONITOR_H__ -#define __MESH_MONITOR_H__ +#ifndef __WMESH_MONITOR_H__ +#define __WMESH_MONITOR_H__ -int mesh_start_monitor_service(void *pdata); -int mesh_stop_monitor_service(void *pdata); -#endif /* __MESH_MONITOR_H__ */ \ No newline at end of file +#ifdef __cplusplus +extern "C" { +#endif + +int wmesh_start_monitor_service(void *pdata); +int wmesh_stop_monitor_service(void *pdata); + + +#ifdef __cplusplus +} +#endif + +#endif /* __WMESH_MONITOR_H__ */ diff --git a/include/wmesh-request.h b/include/wmesh-request.h new file mode 100644 index 0000000..7375a8c --- /dev/null +++ b/include/wmesh-request.h @@ -0,0 +1,85 @@ +/* + * Network Configuration Module + * + * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. + * + * 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. + * + */ +#ifndef __WMESH_REQUEST_H__ +#define __WMESH_REQUEST_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Newly functions */ +int wmesh_request_enable_network(wmesh_service *service); +int wmesh_request_disable_network(wmesh_service *service); +int wmesh_request_scan(wmesh_service *service); +int wmesh_request_specific_scan(wmesh_service *service, gchar *mesh_id, + gint channel); +int wmesh_request_cancel_scan(wmesh_service *service); +int wmesh_request_get_networks(wmesh_service *service); +int wmesh_request_get_joined_network(wmesh_service *service); +int wmesh_request_get_connected_peers(wmesh_service *service); + +int wmesh_request_create_mesh_network(wmesh_service *service, gchar *mesh_id, + gint channel, wmeshd_security_type_e sec); +int wmesh_request_connect_mesh_network(wmesh_service *service, gchar *mesh_id, + gint channel, wmeshd_security_type_e sec, gchar *passphrase); +int wmesh_request_disconnect_mesh_network(wmesh_service *service, + gchar *mesh_id, gint channel, wmeshd_security_type_e sec); +int wmesh_request_remove_mesh_network(wmesh_service *service, + gchar *mesh_id, gint channel, wmeshd_security_type_e sec); + +int wmesh_request_set_mesh_gate(const char* bridge_interface, + const char* mesh_interface, const char* external_interface); +int wmesh_request_unset_mesh_gate(const char* bridge_interface, + const char* mesh_interface, const char* external_interface); + + +/* Bridge network */ +int wmesh_request_add_bridge_interface(const char* bridge_interface, + const char* interface); +int wmesh_request_remove_bridge_interface(const char* bridge_interface, + const char* interface); + +/* Soft AP */ +int wmesh_request_set_softap_config(const char* softap_interface, + const char *ssid, const char* mode, int channel, int visibility, + int max_sta, int security, const char* passphrase); +int wmesh_request_enable_softap( + const char* bridge_interface, const char* softap_interface); +int wmesh_request_disable_softap( + const char* bridge_interface, const char* softap_interface); + +/* Mesh Station & path */ +int wmesh_request_get_station_info(const char* mesh_interface, GList **station_list); +int wmesh_request_get_mpath_info(const char* mesh_interface, GList **mpath_list); + +int wmesh_request_register_event_handler(); +int wmesh_request_unregister_event_handler(); + +/* Notifications */ +void wmesh_notify_scan_done(); +void wmesh_notify_connection_state(const char* mesh_id, const char* bssid, + int channel, wmeshd_security_type_e sec, wmeshd_connection_state_e state); +void wmesh_notify_station_joined(const char* bssid); +void wmesh_notify_station_left(const char* bssid); + +#ifdef __cplusplus +} +#endif + +#endif /* __WMESH_REQUEST_H__ */ diff --git a/include/wmesh-service-interface.h b/include/wmesh-service-interface.h new file mode 100644 index 0000000..dcf83c7 --- /dev/null +++ b/include/wmesh-service-interface.h @@ -0,0 +1,58 @@ +/* + * Network Configuration Module + * + * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. + * + * 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. + * + */ +#ifndef __WMESH_SERVICE_INTERFACE_H__ +#define __WMESH_SERVICE_INTERFACE_H__ + +#include "wmesh-generated-code.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**< Mesh D-BUS service*/ +#define WMESH_DBUS_SERVICE "net.wmesh" + +/**< Mesh D-BUS service path */ +#define WMESH_DBUS_PATH "/net/wmesh" + +#ifndef WMESH_DBUS_INTERFACE +#define WMESH_DBUS_INTERFACE "net.wmesh" +//#warning "WMESH_DBUS_INTERFACE is redefined" +#endif + +#ifndef WMESH_DBUS_OBJPATH +#define WMESH_DBUS_OBJPATH "/net/wmesh" +//#warning "WMESH_DBUS_OBJPATH is redefined" +#endif + +#ifndef WMESH_DBUS_MANAGER_OBJPATH +#define WMESH_DBUS_MANAGER_OBJPATH "/net/wmesh/manager" +//#warning "WMESH_DBUS_MANAGER_OBJPATH is redefined" +#endif + +NetWmesh* wmeshd_dbus_get_object(); +int64_t wmeshd_dbus_generate_signal_number(); +gboolean wmeshd_service_interface_init(wmesh_service *service); +void wmeshd_service_interface_deinit(wmesh_service *service); + +#ifdef __cplusplus +} +#endif + +#endif /* __WMESH_SERVICE_INTERFACE_H__ */ diff --git a/include/mesh-service.h b/include/wmesh-service.h similarity index 65% rename from include/mesh-service.h rename to include/wmesh-service.h index a99eb2f..cc03768 100644 --- a/include/mesh-service.h +++ b/include/wmesh-service.h @@ -16,12 +16,20 @@ * limitations under the License. * */ -#ifndef __MESH_SERVICE_H__ -#define __MESH_SERVICE_H__ +#ifndef __WMESH_SERVICE_H__ +#define __WMESH_SERVICE_H__ -mesh_service *meshd_service_new(); -void meshd_service_free(mesh_service *service); -gboolean meshd_service_run(mesh_service *service); -gboolean meshd_service_exit(mesh_service *service); +#ifdef __cplusplus +extern "C" { +#endif - #endif /* __MESH_SERVICE_H__ */ \ No newline at end of file +wmesh_service *wmeshd_service_new(); +void wmeshd_service_free(wmesh_service *service); +gboolean wmeshd_service_run(wmesh_service *service); +gboolean wmeshd_service_exit(wmesh_service *service); + +#ifdef __cplusplus +} +#endif + + #endif /* __WMESH_SERVICE_H__ */ diff --git a/include/mesh-softap.h b/include/wmesh-softap.h similarity index 73% rename from include/mesh-softap.h rename to include/wmesh-softap.h index 8c42e7c..027b0ea 100644 --- a/include/mesh-softap.h +++ b/include/wmesh-softap.h @@ -16,13 +16,21 @@ * limitations under the License. * */ -#ifndef __MESH_SOFTAP_H__ -#define __MESH_SOFTAP_H__ +#ifndef __WMESH_SOFTAP_H__ +#define __WMESH_SOFTAP_H__ -int mesh_softap_set_configuration(const char* softap_interface, +#ifdef __cplusplus +extern "C" { +#endif + +int wmesh_softap_set_configuration(const char* softap_interface, const char *ssid, const char* mode, int channel, int visibility, int max_sta, int security, const char* passphrase); -int mesh_softap_enable_softap(); -int mesh_softap_disable_softap(); +int wmesh_softap_enable_softap(); +int wmesh_softap_disable_softap(); + +#ifdef __cplusplus +} +#endif - #endif /* __MESH_SOFTAP_H__ */ \ No newline at end of file + #endif /* __WMESH_SOFTAP_H__ */ diff --git a/include/mesh-util.h b/include/wmesh-util.h similarity index 76% rename from include/mesh-util.h rename to include/wmesh-util.h index 178690f..211c778 100644 --- a/include/mesh-util.h +++ b/include/wmesh-util.h @@ -16,25 +16,25 @@ * limitations under the License. * */ -#ifndef __MESH_UTIL_H__ -#define __MESH_UTIL_H__ +#ifndef __WMESH_UTIL_H__ +#define __WMESH_UTIL_H__ #include #define NOTUSED(var) (var = var) -#define meshd_check_null_ret_error(name, value, error) do { \ +#define wmeshd_check_null_ret_error(name, value, error) do { \ if (G_UNLIKELY(NULL == (value))) { \ - MESH_LOGE("%s is NULL", name); \ + WMESH_LOGE("%s is NULL", name); \ return error; \ } \ } while (FALSE) -#define meshd_check_null_ret(name, value) do { \ +#define wmeshd_check_null_ret(name, value) do { \ if (G_UNLIKELY(NULL == (value))) { \ - MESH_LOGE("%s is NULL", name); \ + WMESH_LOGE("%s is NULL", name); \ return; \ } \ } while (FALSE) -#endif /* __MESH_UTIL_H__ */ +#endif /* __WMESH_UTIL_H__ */ diff --git a/include/mesh.h b/include/wmesh.h similarity index 78% rename from include/mesh.h rename to include/wmesh.h index 2eef8e0..e79c9ac 100644 --- a/include/mesh.h +++ b/include/wmesh.h @@ -16,8 +16,8 @@ * limitations under the License. * */ -#ifndef __MESH_H__ -#define __MESH_H__ +#ifndef __WMESH_H__ +#define __WMESH_H__ #include #include @@ -25,29 +25,29 @@ /**< Internal error code with mesh daemon. It should be matched with API side */ typedef enum { - MESHD_ERROR_NONE = 0, /**< Successful */ - MESHD_ERROR_IO_ERROR, /**< I/O error */ - MESHD_ERROR_NO_DATA, /**< Data not exists */ - MESHD_ERROR_OUT_OF_MEMORY, /**< out of memory */ - MESHD_ERROR_OPERATION_FAILED, /**< operation failed */ - MESHD_ERROR_INVALID_PARAMETER, /**< Invalid parameter */ - MESHD_ERROR_ALREADY_REGISTERED, /**< Request already registered */ - MESHD_ERROR_IN_PROGRESS /**< operation is in progress */ + WMESHD_ERROR_NONE = 0, /**< Successful */ + WMESHD_ERROR_IO_ERROR, /**< I/O error */ + WMESHD_ERROR_NO_DATA, /**< Data not exists */ + WMESHD_ERROR_OUT_OF_MEMORY, /**< out of memory */ + WMESHD_ERROR_OPERATION_FAILED, /**< operation failed */ + WMESHD_ERROR_INVALID_PARAMETER, /**< Invalid parameter */ + WMESHD_ERROR_ALREADY_REGISTERED, /**< Request already registered */ + WMESHD_ERROR_IN_PROGRESS /**< operation is in progress */ } meshd_error_e; /**< Internal enum for connection state. It should be matched with API side */ typedef enum { - MESHD_CONNECTION_STATE_DISCONNECTED = 0, /**< Disconnected state */ - MESHD_CONNECTION_STATE_ASSOCIATION, /**< Association state */ - MESHD_CONNECTION_STATE_CONFIGURATION, /**< Configuration state */ - MESHD_CONNECTION_STATE_CONNECTED /**< Connected state */ -} meshd_connection_state_e; + WMESHD_CONNECTION_STATE_DISCONNECTED = 0, /**< Disconnected state */ + WMESHD_CONNECTION_STATE_ASSOCIATION, /**< Association state */ + WMESHD_CONNECTION_STATE_CONFIGURATION, /**< Configuration state */ + WMESHD_CONNECTION_STATE_CONNECTED /**< Connected state */ +} wmeshd_connection_state_e; /**< Internal enum for security type. It should be matched with API side */ typedef enum { - MESHD_SECURITY_NONE = 0, /**< No security */ - MESHD_SECURITY_SAE, /**< SAE */ -} meshd_security_type_e; + WMESHD_SECURITY_NONE = 0, /**< No security */ + WMESHD_SECURITY_SAE, /**< SAE */ +} wmeshd_security_type_e; /**< mesh interface information structure */ typedef struct { @@ -64,16 +64,16 @@ typedef struct { bool gate_announce; /**< Gate Announce Dnable/Disable */ int hwmp_root_mode; /**< HWMP Root Mode (0, 2,3 or 4) */ int stp; /**< Spanning Tree Protocol Enable/Disablel */ -} mesh_interface_s; +} wmesh_interface_s; /**< Saved mesh network list structure */ -typedef struct _mesh_network_info { +typedef struct _wmesh_network_info { char* mesh_id; /**< The mesh id */ char* bssid; /**< BSSID */ int channel; /**< Channel */ - meshd_security_type_e security; /**< Security type */ - meshd_connection_state_e state; /**< Connection state */ -} mesh_network_info_s; + wmeshd_security_type_e security; /**< Security type */ + wmeshd_connection_state_e state; /**< Connection state */ +} wmesh_network_info_s; /**< Mesh network scan result structure */ typedef struct { @@ -83,14 +83,14 @@ typedef struct { gint rssi; /**< RSSI */ gint channel; /**< Channel */ gint data_rate; /**< Data rate */ - meshd_security_type_e security; /**< Security type */ - meshd_connection_state_e state; /**< Connection state */ -} mesh_scan_result_s; + wmeshd_security_type_e security; /**< Security type */ + wmeshd_connection_state_e state; /**< Connection state */ +} wmesh_scan_result_s; /**< Mesh peer structure */ typedef struct { gchar *address; /**< MAC address of connected peer */ -} mesh_peer_info_s; +} wmesh_peer_info_s; /**< Connected mesh network station */ typedef struct { @@ -131,7 +131,7 @@ typedef struct { gboolean short_preamble; /**< short preamble */ gboolean short_slot_time; /**< short slot time supported ex) yes */ guint connected_time; /**< connected time : ex) 256 seconds */ -} mesh_station_info_s; +} wmesh_station_info_s; /**< Mesh path information structure */ typedef struct { @@ -145,11 +145,11 @@ typedef struct { guint discovery_timeout; /**< Discovery timeout */ guchar discovery_retries; /**< Discovery retries */ guchar flags; /**< Flags */ -} mesh_mpath_info_s; +} wmesh_mpath_info_s; /**< mesh service structure */ -typedef struct _mesh_service { +typedef struct _wmesh_service { GMainLoop *main_loop; /**< Service main-loop */ guint dbus_id; /**< D-Bus id */ guint activation_dbus_id; /**< D-Bus id for activation */ @@ -158,16 +158,16 @@ typedef struct _mesh_service { GCancellable *ca; /**< Cancellable object for D-Bus call (Daemon->other) */ GList *dbus_sub_ids; /**< The list of subscribed signals */ - mesh_interface_s *interface_info; /**< Name of network interfaces */ + wmesh_interface_s *interface_info; /**< Name of network interfaces */ gboolean mesh_activated; /**< Stored if mesh network is activated */ GList *scanned_mesh_network; /**< Scanned mesh network list */ GList *connected_mesh_peers; /**< Connected mesh peer list */ - mesh_network_info_s *joined_network; /**< Joined network info */ + wmesh_network_info_s *joined_network; /**< Joined network info */ GList *station_list; /**< Mesh station list */ GList *mpath_list; /**< MPath list */ int netlink_fd; /**< Netlink event socket file descriptor */ int monitor_timer; /**< Timer ID for peer monitoring service */ -} mesh_service; +} wmesh_service; - #endif /* __MESH_H__ */ + #endif /* __WMESH_H__ */ diff --git a/introspection/gen.sh b/introspection/gen.sh index b3af513..efe20e2 100755 --- a/introspection/gen.sh +++ b/introspection/gen.sh @@ -1,6 +1,6 @@ -gdbus-codegen --interface-prefix net.mesh. \ - --generate-c-code mesh-generated-code \ +gdbus-codegen --interface-prefix net.wmesh. \ + --generate-c-code wmesh-generated-code \ --c-generate-object-manager \ --generate-docbook generated-docs \ - mesh.xml \ - manager.xml + wmesh.xml \ + wmanager.xml diff --git a/introspection/manager.xml b/introspection/wmanager.xml similarity index 91% rename from introspection/manager.xml rename to introspection/wmanager.xml index f9b3d3b..09e4122 100644 --- a/introspection/manager.xml +++ b/introspection/wmanager.xml @@ -5,7 +5,7 @@ "http://standards.freedesktop.org/dbus/1.0/introspect.dtd"> - + diff --git a/introspection/mesh.xml b/introspection/wmesh.xml old mode 100755 new mode 100644 similarity index 96% rename from introspection/mesh.xml rename to introspection/wmesh.xml index 93f8947..7bd424f --- a/introspection/mesh.xml +++ b/introspection/wmesh.xml @@ -5,7 +5,7 @@ "http://standards.freedesktop.org/dbus/1.0/introspect.dtd"> - + diff --git a/packaging/dbus-meshd.conf b/packaging/dbus-meshd.conf deleted file mode 100644 index 084796b..0000000 --- a/packaging/dbus-meshd.conf +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packaging/dbus-wmeshd.conf b/packaging/dbus-wmeshd.conf new file mode 100644 index 0000000..9c98339 --- /dev/null +++ b/packaging/dbus-wmeshd.conf @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packaging/net.mesh.service b/packaging/net.mesh.service deleted file mode 100644 index 289f9e5..0000000 --- a/packaging/net.mesh.service +++ /dev/null @@ -1,6 +0,0 @@ -[D-BUS Service] -Name=net.mesh.manager - -Exec=/bin/false -User=root -SystemdService=meshd.service diff --git a/packaging/net.wmesh.service b/packaging/net.wmesh.service new file mode 100644 index 0000000..66cca50 --- /dev/null +++ b/packaging/net.wmesh.service @@ -0,0 +1,6 @@ +[D-BUS Service] +Name=net.wmesh.manager + +Exec=/bin/false +User=root +SystemdService=wmeshd.service diff --git a/packaging/meshd.service b/packaging/wmeshd.service similarity index 63% rename from packaging/meshd.service rename to packaging/wmeshd.service index b590802..461fb8a 100644 --- a/packaging/meshd.service +++ b/packaging/wmeshd.service @@ -1,12 +1,12 @@ [Unit] -Description=Mesh Network Manager service +Description=Wi-Fi Mesh Network Manager service Requires=dbus.socket After=dbus.socket [Service] Type=dbus -BusName=net.mesh.manager +BusName=net.wmesh.manager SmackProcessLabel=System -ExecStart=/usr/bin/meshd +ExecStart=/usr/bin/wmeshd CapabilityBoundingSet=~CAP_MAC_ADMIN CapabilityBoundingSet=~CAP_MAC_OVERRIDE diff --git a/packaging/meshd.spec b/packaging/wmeshd.spec similarity index 65% rename from packaging/meshd.spec rename to packaging/wmeshd.spec index 7596874..dcb2836 100644 --- a/packaging/meshd.spec +++ b/packaging/wmeshd.spec @@ -1,15 +1,15 @@ -%define CHECK_MESH_PRIVILEGE False +%define CHECK_WMESH_PRIVILEGE False -Name: meshd -Summary: mesh network daemon +Name: wmeshd +Summary: Wi-Fi mesh network daemon Version: 0.0.1 Release: 1 Group: Network & Connectivity/Wireless License: Apache-2.0 Source0: %{name}-%{version}.tar.gz -Source1: dbus-meshd.conf -Source2: net.mesh.service -Source3: meshd.service +Source1: dbus-wmeshd.conf +Source2: net.wmesh.service +Source3: wmeshd.service BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(gio-unix-2.0) @@ -25,7 +25,7 @@ Requires: net-tools Requires: toybox-symlinks-dhcp %description -Manager for handling mesh network +Manager for handling Wi-Fi mesh network %prep %setup -q @@ -33,8 +33,8 @@ chmod 644 %{SOURCE0} chmod 644 %{SOURCE1} chmod 644 %{SOURCE2} chmod 644 %{SOURCE3} -%if %{CHECK_MESH_PRIVILEGE} == "True" -cp -a %{SOURCE1} ./meshd.conf +%if %{CHECK_WMESH_PRIVILEGE} == "True" +cp -a %{SOURCE1} ./wmeshd.conf %endif cp -a %{SOURCE2} . cp -a %{SOURCE3} . @@ -56,29 +56,29 @@ rm -rf %{buildroot} %make_install -%if %{CHECK_MESH_PRIVILEGE} == "True" +%if %{CHECK_WMESH_PRIVILEGE} == "True" mkdir -p %{buildroot}%{_sysconfdir}/dbus-1/system.d -cp meshd.conf %{buildroot}%{_sysconfdir}/dbus-1/system.d/meshd.conf +cp wmeshd.conf %{buildroot}%{_sysconfdir}/dbus-1/system.d/wmeshd.conf %endif mkdir -p %{buildroot}%{_datadir}/dbus-1/system-services/ -cp net.mesh.service %{buildroot}%{_datadir}/dbus-1/system-services/net.mesh.service +cp net.wmesh.service %{buildroot}%{_datadir}/dbus-1/system-services/net.wmesh.service mkdir -p %{buildroot}%{_unitdir} -cp meshd.service %{buildroot}%{_unitdir}/meshd.service +cp wmeshd.service %{buildroot}%{_unitdir}/wmeshd.service %post -chmod 755 %{_sbindir}/mesh.sh +chmod 755 %{_sbindir}/wmesh.sh # For configuration files -mkdir -p %TZ_SYS_VAR/lib/mesh +mkdir -p %TZ_SYS_VAR/lib/wmesh %files -%manifest meshd.manifest +%manifest wmeshd.manifest %license LICENSE %defattr(-,root,root,-) -%caps(cap_net_raw,cap_net_admin=eip) %attr(750,system,system) %{_bindir}/meshd -%if %{CHECK_MESH_PRIVILEGE} == "True" -%config %{_sysconfdir}/dbus-1/system.d/meshd.conf +%caps(cap_net_raw,cap_net_admin=eip) %attr(750,system,system) %{_bindir}/wmeshd +%if %{CHECK_WMESH_PRIVILEGE} == "True" +%config %{_sysconfdir}/dbus-1/system.d/wmeshd.conf %endif %attr(644,root,root) %{_datadir}/dbus-1/system-services/* -%attr(644,root,root) %{_unitdir}/meshd.service -%attr(750,root,root) %{_sbindir}/mesh.sh +%attr(644,root,root) %{_unitdir}/wmeshd.service +%attr(750,root,root) %{_sbindir}/wmesh.sh diff --git a/src/mesh-request.c b/src/mesh-request.c deleted file mode 100644 index 63c1775..0000000 --- a/src/mesh-request.c +++ /dev/null @@ -1,625 +0,0 @@ -/* - * Network Configuration Module - * - * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. - * - * 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. - * - */ -#include - -#include -#include - -#include "mesh.h" -#include "mesh-log.h" -#include "mesh-util.h" -#include "mesh-service-interface.h" -#include "mesh-generated-code.h" - -#include "mesh-bridge.h" -#include "mesh-netlink.h" -#include "mesh-interface.h" -#include "mesh-request.h" -#include "mesh-softap.h" -#include "mesh-gdbus.h" - -int mesh_request_set_mesh_gate(const char* bridge_interface, - const char* mesh_interface, const char* external_interface) -{ - int ret = MESHD_ERROR_NONE; - bool state = FALSE; - - ret = mesh_interface_check_external_exists(external_interface, &state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to get external interface state !"); - return MESHD_ERROR_OPERATION_FAILED; - } - MESH_LOGD(" Ethernet cable state [%s]", - (state) ? "Connected" : "Disconnected"); - - /* Turn STP on */ - ret = mesh_bridge_set_stp(bridge_interface, TRUE); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to turn STP on !"); - return ret; - } - - /* Set mesh parameters */ - ret = mesh_netlink_set_mesh_parameter(mesh_interface, - "mesh_hwmp_rootmode", 4); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to set [mesh_hwmp_rootmode] : 4"); - - ret = mesh_netlink_set_mesh_parameter(mesh_interface, - "mesh_gate_announcements", 1); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to set [mesh_gate_announcements] : 1"); - - return MESHD_ERROR_NONE; -} - -int mesh_request_unset_mesh_gate(const char* bridge_interface, - const char* mesh_interface, const char* external_interface) -{ - int ret = MESHD_ERROR_NONE; - - NOTUSED(external_interface); - - /* Set mesh parameters */ - ret = mesh_netlink_set_mesh_parameter(mesh_interface, - "mesh_hwmp_rootmode", 0); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to set [mesh_hwmp_rootmode] : 0"); - - ret = mesh_netlink_set_mesh_parameter(mesh_interface, - "mesh_gate_announcements", 0); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to set [mesh_gate_announcements] : 0"); - - /* Turn STP off */ - ret = mesh_bridge_set_stp(bridge_interface, FALSE); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to turn STP off!"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_add_bridge_interface(const char* bridge_interface, - const char* interface) -{ - int ret = MESHD_ERROR_NONE; - - if (NULL == bridge_interface || NULL == interface) { - MESH_LOGE("Invalid parameters"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("Adding interface[%s] into bridge[%s]...", interface, bridge_interface); - - /* Add external interface into bridge */ - ret = mesh_bridge_add_interface(bridge_interface, interface); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to add interface !"); - return ret; - } - - /* Make external interface down */ - ret = mesh_interface_set(interface, NULL, MESH_INTERFACE_DOWN); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to change external interface state"); - return ret; - } - - /* Make external interface up with cleared IP */ - ret = mesh_interface_set(interface, "0.0.0.0", MESH_INTERFACE_UP); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to change external interface state"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_remove_bridge_interface(const char* bridge_interface, - const char* interface) -{ - int ret = MESHD_ERROR_NONE; - - if (NULL == bridge_interface || NULL == interface) { - MESH_LOGE("Invalid parameters"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("Removing interface[%s] from bridge[%s]...", interface, bridge_interface); - - ret = mesh_interface_check_bridge_interface_exists(bridge_interface, interface); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGD("Interface is not exist in bridge"); - return MESHD_ERROR_NONE; - } - - /* Remove external interface into bridge */ - ret = mesh_bridge_del_interface(bridge_interface, interface); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to remove interface !"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_set_softap_config(const char* softap_interface, - const char *ssid, const char* mode, int channel, int visibility, - int max_sta, int security, const char* passphrase) -{ - int ret = MESHD_ERROR_NONE; - - MESH_LOGD("Setting configuration for SoftAP"); - - ret = mesh_softap_set_configuration(softap_interface, ssid, mode, channel, - visibility, max_sta, security, passphrase); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to set Configuration for SoftAP"); - return ret; - } - - return ret; -} - -int mesh_request_enable_softap( - const char* bridge_interface, const char* softap_interface) -{ - int ret = MESHD_ERROR_NONE; - - MESH_LOGD("Request to turn SoftAP on"); - ret = mesh_softap_enable_softap(softap_interface); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to mesh_softap_enable_softap"); - return ret; - } - - /* Add softAP interface into bridge */ - ret = mesh_request_add_bridge_interface(bridge_interface, softap_interface); - if (MESHD_ERROR_NONE != ret) { - mesh_softap_disable_softap(); - return ret; - } - - return ret; -} - -int mesh_request_disable_softap( - const char* bridge_interface, const char* softap_interface) -{ - int ret = MESHD_ERROR_NONE; - - MESH_LOGD("Request to turn SoftAP off"); - ret = mesh_softap_disable_softap(); - - /* Remove softAP interface from bridge */ - ret = mesh_request_remove_bridge_interface(bridge_interface, softap_interface); - if (MESHD_ERROR_NONE != ret) - return ret; - - return ret; -} - -int mesh_request_get_station_info(const char* mesh_interface, GList **station_list) -{ - int ret = MESHD_ERROR_NONE; - - MESH_LOGD("Request to get station info"); - - /* Get station info */ - ret = mesh_netlink_get_station_info(mesh_interface, station_list); - if (MESHD_ERROR_NONE != ret) - return ret; - - return MESHD_ERROR_NONE; -} - -int mesh_request_get_mpath_info(const char* mesh_interface, GList **mpath_list) -{ - int ret = MESHD_ERROR_NONE; - - MESH_LOGD("Request to get mpath info"); - - /* Get MPath info */ - ret = mesh_netlink_get_mpath_info(mesh_interface, mpath_list); - if (MESHD_ERROR_NONE != ret) - return ret; - - return MESHD_ERROR_NONE; -} - -int mesh_request_register_event_handler() -{ - int ret = MESHD_ERROR_NONE; - - MESH_LOGD("Request to register mesh event handler"); - - /* Get MPath info */ - ret = mesh_netlink_register_event_handler(); - if (MESHD_ERROR_NONE != ret) - return ret; - - return MESHD_ERROR_NONE; -} - -int mesh_request_unregister_event_handler() -{ - int ret = MESHD_ERROR_NONE; - - MESH_LOGD("Request to unregister mesh event handler"); - - /* Get MPath info */ - ret = mesh_netlink_unregister_event_handler(); - if (MESHD_ERROR_NONE != ret) - return ret; - - return MESHD_ERROR_NONE; -} - -int mesh_request_enable_network(mesh_service *service) -{ - int ret; - mesh_interface_s *info = NULL; - - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Enable mesh network"); - - /* Check if mesh interface exists */ - info = service->interface_info; - ret = mesh_interface_check(info->mesh_interface); - if (MESHD_ERROR_NONE == ret) { - /* Interface already exists */ - return MESHD_ERROR_NONE; - } - - ret = mesh_gdbus_create_mesh_interface(service); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to create mesh network"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_disable_network(mesh_service *service) -{ - int ret; - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Disable mesh network"); - - ret = mesh_gdbus_remove_mesh_interface(service); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to disable mesh network"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_scan(mesh_service *service) -{ - int ret; - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Request scan for mesh network"); - - ret = mesh_gdbus_mesh_scan(service); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to request scan for mesh network"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_specific_scan(mesh_service *service, gchar *mesh_id, gint channel) -{ - int ret; - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Request specific scan for mesh network"); - - ret = mesh_gdbus_mesh_specific_scan(service, mesh_id, channel); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to request specific scan for mesh network"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_cancel_scan(mesh_service *service) -{ - int ret; - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Cancel scan for mesh network"); - - ret = mesh_gdbus_mesh_cancel_scan(service); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to cancel scan for mesh network"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_get_networks(mesh_service *service) -{ - int ret; - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Get mesh networks"); - - ret = mesh_gdbus_get_mesh_networks(service); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to get mesh networks !"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -static int _select_matched_network(GList *scanned_network, - const char *mesh_id, int mesh_channel, meshd_security_type_e sec, - mesh_scan_result_s **info) -{ - int ret = MESHD_ERROR_NONE; - GList *iter = NULL; - mesh_scan_result_s *item = NULL; - gboolean found = FALSE; - - meshd_check_null_ret_error("scanned_network", scanned_network, - MESHD_ERROR_INVALID_PARAMETER); - - iter = scanned_network; - while (iter != NULL) { - item = (mesh_scan_result_s*)iter->data; - - if (g_strcmp0(mesh_id, item->mesh_id) == 0) { - if (item->channel == mesh_channel && item->security == sec) { - *info = item; - found = TRUE; - break; - } - } - iter = g_list_next(iter); - } - - if (FALSE == found) - return MESHD_ERROR_NO_DATA; - - return ret; -} - -int mesh_request_get_joined_network(mesh_service *service) -{ - int ret; - - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Get joined mesh network"); - - ret = mesh_gdbus_get_joined_mesh_network(service); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to get joined mesh network"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_get_connected_peers(mesh_service *service) -{ - int ret; - - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Get connected mesh peers"); - - ret = mesh_gdbus_get_connected_peers(service); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to get connected mesh peers"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_create_mesh_network(mesh_service *service, gchar *mesh_id, - gint channel, meshd_security_type_e sec) -{ - int ret; - - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Create a new mesh network"); - - ret = mesh_gdbus_create_network(service, mesh_id, channel, sec); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to create mesh network"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_connect_mesh_network(mesh_service *service, gchar *mesh_id, - gint channel, meshd_security_type_e sec, gchar *passphrase) -{ - int ret; - mesh_scan_result_s *info = NULL; - - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Connect mesh network"); - - /* Get mesh_id and channel from saved network */ - ret = _select_matched_network(service->scanned_mesh_network, - mesh_id, channel, sec, &info); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to mesh_network_get_first_mesh_network"); - return ret; - } - - /* Set passphrase */ - if (MESHD_SECURITY_NONE != sec) { - if (NULL != passphrase) { - ret = mesh_gdbus_set_passphrase(service, info, passphrase); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to set passphrase for mesh network"); - return ret; - } - } else { - MESH_LOGE("Passphrase is required !"); - return MESHD_ERROR_INVALID_PARAMETER; - } - } - - ret = mesh_gdbus_connect_network(service, info); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to connect mesh network"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_disconnect_mesh_network(mesh_service *service, - gchar *mesh_id, gint channel, meshd_security_type_e sec) -{ - int ret; - mesh_scan_result_s *info = NULL; - - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Disconnect mesh network"); - - /* Get mesh_id and channel from saved network */ - ret = _select_matched_network(service->scanned_mesh_network, - mesh_id, channel, sec, &info); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to _select_matched_network"); - return ret; - } - - ret = mesh_gdbus_disconnect_network(service, info); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to disconnect mesh network"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -int mesh_request_remove_mesh_network(mesh_service *service, - gchar *mesh_id, gint channel, meshd_security_type_e sec) -{ - int ret; - mesh_scan_result_s *info = NULL; - - if (NULL == service) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; - } - - MESH_LOGD("[IPC] Remove mesh network"); - - /* Get mesh_id and channel from saved network */ - ret = _select_matched_network(service->scanned_mesh_network, - mesh_id, channel, sec, &info); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to _select_matched_network"); - return ret; - } - - ret = mesh_gdbus_remove_network(service, info); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to remove mesh network"); - return ret; - } - - return MESHD_ERROR_NONE; -} - -/* Notifications */ -void mesh_notify_scan_done() -{ - NetMesh *object = meshd_dbus_get_object(); - - net_mesh_emit_scan_done(object); -} - -void mesh_notify_connection_state(const char* mesh_id, const char* bssid, - int channel, meshd_security_type_e sec, meshd_connection_state_e state) -{ - NetMesh *object = meshd_dbus_get_object(); - - net_mesh_emit_connection_state(object, mesh_id, bssid, channel, (int)sec, (int)state); -} - -void mesh_notify_station_joined(const char* bssid) -{ - NetMesh *object = meshd_dbus_get_object(); - - net_mesh_emit_sta_joined(object, bssid); -} - -void mesh_notify_station_left(const char* bssid) -{ - NetMesh *object = meshd_dbus_get_object(); - - net_mesh_emit_sta_left(object, bssid); -} diff --git a/src/mesh-bridge.c b/src/wmesh-bridge.c similarity index 67% rename from src/mesh-bridge.c rename to src/wmesh-bridge.c index 45999cb..0a0cd56 100644 --- a/src/mesh-bridge.c +++ b/src/wmesh-bridge.c @@ -33,17 +33,17 @@ extern unsigned int if_nametoindex(const char *__ifname); -#include "mesh.h" -#include "mesh-log.h" -#include "mesh-util.h" -#include "mesh-service.h" -#include "mesh-bridge.h" +#include "wmesh.h" +#include "wmesh-log.h" +#include "wmesh-util.h" +#include "wmesh-service.h" +#include "wmesh-bridge.h" #define ERROR_MESSAGE_LENGTH 256 -int mesh_bridge_create(const char* bridge_name) +int wmesh_bridge_create(const char* bridge_name) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; int val = 0; int br_fd = 0; char bridge[IFNAMSIZ]; @@ -53,16 +53,16 @@ int mesh_bridge_create(const char* bridge_name) #endif if (NULL == bridge_name || strlen(bridge_name) > IFNAMSIZ) { - MESH_LOGE("Invalid parameter [%p]", bridge_name); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", bridge_name); + return WMESHD_ERROR_INVALID_PARAMETER; } br_fd = socket(AF_LOCAL, SOCK_STREAM, 0); if (br_fd < 0) { strerror_r(errno, str_error, ERROR_MESSAGE_LENGTH); - MESH_LOGD("Failed to open socket [%s(%d)]", str_error, errno); + WMESH_LOGD("Failed to open socket [%s(%d)]", str_error, errno); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } snprintf(bridge, IFNAMSIZ, "%s", bridge_name); @@ -73,9 +73,9 @@ int mesh_bridge_create(const char* bridge_name) #endif if (val < 0) { strerror_r(errno, str_error, ERROR_MESSAGE_LENGTH); - MESH_LOGD("Failed to create bridge [%s(%d)]", str_error, errno); + WMESH_LOGD("Failed to create bridge [%s(%d)]", str_error, errno); - ret = MESHD_ERROR_IO_ERROR; + ret = WMESHD_ERROR_IO_ERROR; } close(br_fd); @@ -83,9 +83,9 @@ int mesh_bridge_create(const char* bridge_name) return ret; } -int mesh_bridge_remove(const char* bridge_name) +int wmesh_bridge_remove(const char* bridge_name) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; int val = 0; int br_fd = 0; char bridge[IFNAMSIZ]; @@ -95,16 +95,16 @@ int mesh_bridge_remove(const char* bridge_name) #endif if (NULL == bridge_name || strlen(bridge_name) > IFNAMSIZ) { - MESH_LOGE("Invalid parameter [%p]", bridge_name); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", bridge_name); + return WMESHD_ERROR_INVALID_PARAMETER; } br_fd = socket(AF_LOCAL, SOCK_STREAM, 0); if (br_fd < 0) { strerror_r(errno, str_error, ERROR_MESSAGE_LENGTH); - MESH_LOGD("Failed to open socket [%s(%d)]", str_error, errno); + WMESH_LOGD("Failed to open socket [%s(%d)]", str_error, errno); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } snprintf(bridge, IFNAMSIZ, "%s", bridge_name); @@ -115,9 +115,9 @@ int mesh_bridge_remove(const char* bridge_name) #endif if (val < 0) { strerror_r(errno, str_error, ERROR_MESSAGE_LENGTH); - MESH_LOGD("Failed to remove bridge [%s(%d)]", str_error, errno); + WMESH_LOGD("Failed to remove bridge [%s(%d)]", str_error, errno); - ret = MESHD_ERROR_IO_ERROR; + ret = WMESHD_ERROR_IO_ERROR; } close(br_fd); @@ -125,9 +125,9 @@ int mesh_bridge_remove(const char* bridge_name) return ret; } -int mesh_bridge_add_interface(const char* bridge_name, const char* interface) +int wmesh_bridge_add_interface(const char* bridge_name, const char* interface) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; int val = 0; int br_fd = 0; @@ -140,21 +140,21 @@ int mesh_bridge_add_interface(const char* bridge_name, const char* interface) #endif if (NULL == bridge_name || strlen(bridge_name) > IFNAMSIZ) { - MESH_LOGE("Invalid parameter [%p]", bridge_name); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", bridge_name); + return WMESHD_ERROR_INVALID_PARAMETER; } if (NULL == interface || strlen(interface) > IFNAMSIZ) { - MESH_LOGE("Invalid parameter [%p]", interface); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", interface); + return WMESHD_ERROR_INVALID_PARAMETER; } br_fd = socket(AF_LOCAL, SOCK_STREAM, 0); if (br_fd < 0) { strerror_r(errno, str_error, ERROR_MESSAGE_LENGTH); - MESH_LOGD("Failed to open socket [%s(%d)]", str_error, errno); + WMESH_LOGD("Failed to open socket [%s(%d)]", str_error, errno); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } snprintf(ifr.ifr_name, IFNAMSIZ, "%s", bridge_name); @@ -167,10 +167,10 @@ int mesh_bridge_add_interface(const char* bridge_name, const char* interface) #endif if (val < 0) { strerror_r(errno, str_error, ERROR_MESSAGE_LENGTH); - MESH_LOGD("Failed to add interface [%s] into bridge [%s(%d)]", + WMESH_LOGD("Failed to add interface [%s] into bridge [%s(%d)]", interface, str_error, errno); - ret = MESHD_ERROR_IO_ERROR; + ret = WMESHD_ERROR_IO_ERROR; } close(br_fd); @@ -178,9 +178,9 @@ int mesh_bridge_add_interface(const char* bridge_name, const char* interface) return ret; } -int mesh_bridge_del_interface(const char* bridge_name, const char* interface) +int wmesh_bridge_del_interface(const char* bridge_name, const char* interface) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; int val = 0; int br_fd = 0; @@ -193,21 +193,21 @@ int mesh_bridge_del_interface(const char* bridge_name, const char* interface) #endif if (NULL == bridge_name || strlen(bridge_name) > IFNAMSIZ) { - MESH_LOGE("Invalid parameter [%p]", bridge_name); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", bridge_name); + return WMESHD_ERROR_INVALID_PARAMETER; } if (NULL == interface || strlen(interface) > IFNAMSIZ) { - MESH_LOGE("Invalid parameter [%p]", interface); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", interface); + return WMESHD_ERROR_INVALID_PARAMETER; } br_fd = socket(AF_LOCAL, SOCK_STREAM, 0); if (br_fd < 0) { strerror_r(errno, str_error, ERROR_MESSAGE_LENGTH); - MESH_LOGD("Failed to open socket [%s(%d)]", str_error, errno); + WMESH_LOGD("Failed to open socket [%s(%d)]", str_error, errno); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } snprintf(ifr.ifr_name, IFNAMSIZ, "%s", bridge_name); @@ -220,10 +220,10 @@ int mesh_bridge_del_interface(const char* bridge_name, const char* interface) #endif if (val < 0) { strerror_r(errno, str_error, ERROR_MESSAGE_LENGTH); - MESH_LOGD("Failed to delete interface [%s] from bridge [%s(%d)]", + WMESH_LOGD("Failed to delete interface [%s] from bridge [%s(%d)]", interface, str_error, errno); - ret = MESHD_ERROR_IO_ERROR; + ret = WMESHD_ERROR_IO_ERROR; } close(br_fd); @@ -231,9 +231,9 @@ int mesh_bridge_del_interface(const char* bridge_name, const char* interface) return ret; } -int mesh_bridge_set_stp(const char* bridge_name, bool state) +int wmesh_bridge_set_stp(const char* bridge_name, bool state) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; int val = 0; int br_fd = 0; char str_error[ERROR_MESSAGE_LENGTH]; @@ -244,16 +244,16 @@ int mesh_bridge_set_stp(const char* bridge_name, bool state) stp_state, 0, 0 }; if (NULL == bridge_name || strlen(bridge_name) > IFNAMSIZ) { - MESH_LOGE("Invalid parameter [%p]", bridge_name); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", bridge_name); + return WMESHD_ERROR_INVALID_PARAMETER; } br_fd = socket(AF_LOCAL, SOCK_STREAM, 0); if (br_fd < 0) { strerror_r(errno, str_error, ERROR_MESSAGE_LENGTH); - MESH_LOGD("Failed to open socket [%s(%d)]", str_error, errno); + WMESH_LOGD("Failed to open socket [%s(%d)]", str_error, errno); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } strncpy(ifr.ifr_name, bridge_name, IFNAMSIZ); @@ -262,10 +262,10 @@ int mesh_bridge_set_stp(const char* bridge_name, bool state) val = ioctl(br_fd, SIOCDEVPRIVATE, &ifr); if (val < 0) { strerror_r(errno, str_error, ERROR_MESSAGE_LENGTH); - MESH_LOGE("Failed to set bridge[%s] stp state", bridge_name); - MESH_LOGE(" %s(%d)", str_error, errno); + WMESH_LOGE("Failed to set bridge[%s] stp state", bridge_name); + WMESH_LOGE(" %s(%d)", str_error, errno); - ret = MESHD_ERROR_IO_ERROR; + ret = WMESHD_ERROR_IO_ERROR; } close(br_fd); diff --git a/src/mesh-gdbus.c b/src/wmesh-gdbus.c similarity index 59% rename from src/mesh-gdbus.c rename to src/wmesh-gdbus.c index 3ed6e4b..27cd58b 100644 --- a/src/mesh-gdbus.c +++ b/src/wmesh-gdbus.c @@ -14,10 +14,10 @@ * limitations under the License. */ -#include "mesh-log.h" -#include "mesh-util.h" -#include "mesh-gdbus.h" -#include "mesh-request.h" +#include "wmesh-log.h" +#include "wmesh-util.h" +#include "wmesh-gdbus.h" +#include "wmesh-request.h" #include @@ -26,9 +26,9 @@ static GDBusProxy *_gproxy_connman_mesh = NULL; static GDBusProxy *_gproxy_connman_technology = NULL; static GDBusProxy *_gproxy_connman_ethernet = NULL; -static int _meshd_close_gdbus_call(mesh_service *service); -static int _mesh_gdbus_get_mesh_network_property(mesh_service *service, - const gchar* object_path, mesh_network_info_s *result); +static int _wmeshd_close_gdbus_call(wmesh_service *service); +static int _wmesh_gdbus_get_mesh_network_property(wmesh_service *service, + const gchar* object_path, wmesh_network_info_s *result); static int __channel_to_frequency(int channel, enum nl80211_band band) { @@ -72,10 +72,10 @@ static int __frequency_to_channel(int freq) return 0; } -static GDBusProxy *_proxy_get_connman(mesh_service *service) +static GDBusProxy *_proxy_get_connman(wmesh_service *service) { GDBusProxy *proxy = NULL; - meshd_check_null_ret_error("service", service, NULL); + wmeshd_check_null_ret_error("service", service, NULL); if (NULL == _gproxy_connman) { proxy = g_dbus_proxy_new_sync(service->connection, @@ -90,10 +90,10 @@ static GDBusProxy *_proxy_get_connman(mesh_service *service) return proxy; } -static GDBusProxy *_proxy_get_connman_mesh(mesh_service *service) +static GDBusProxy *_proxy_get_connman_mesh(wmesh_service *service) { GDBusProxy *proxy = NULL; - meshd_check_null_ret_error("service", service, NULL); + wmeshd_check_null_ret_error("service", service, NULL); if (NULL == _gproxy_connman_mesh) { proxy = g_dbus_proxy_new_sync(service->connection, @@ -108,10 +108,10 @@ static GDBusProxy *_proxy_get_connman_mesh(mesh_service *service) return proxy; } -static GDBusProxy *_proxy_get_connman_ethernet(mesh_service *service) +static GDBusProxy *_proxy_get_connman_ethernet(wmesh_service *service) { GDBusProxy *proxy = NULL; - meshd_check_null_ret_error("service", service, NULL); + wmeshd_check_null_ret_error("service", service, NULL); if (NULL == _gproxy_connman_ethernet) { proxy = g_dbus_proxy_new_sync(service->connection, @@ -126,10 +126,10 @@ static GDBusProxy *_proxy_get_connman_ethernet(mesh_service *service) return proxy; } -static GDBusProxy *_proxy_get_connman_technology(mesh_service *service) +static GDBusProxy *_proxy_get_connman_technology(wmesh_service *service) { GDBusProxy *proxy = NULL; - meshd_check_null_ret_error("service", service, NULL); + wmeshd_check_null_ret_error("service", service, NULL); if (NULL == _gproxy_connman_technology) { proxy = g_dbus_proxy_new_sync(service->connection, @@ -149,121 +149,121 @@ static void _dbus_name_owner_notify(GObject *object, GParamSpec *pspec, { GDBusProxy *proxy = G_DBUS_PROXY(object); gchar *name_owner = g_dbus_proxy_get_name_owner(proxy); - mesh_service *service = (mesh_service*)user_data; + wmesh_service *service = (wmesh_service*)user_data; NOTUSED(pspec); if (NULL == name_owner) { - MESH_LOGE("name_owner is not exists !"); - _meshd_close_gdbus_call(service); + WMESH_LOGE("name_owner is not exists !"); + _wmeshd_close_gdbus_call(service); } g_free(name_owner); } -static int _meshd_create_gdbus_call(mesh_service *service) +static int _wmeshd_create_gdbus_call(wmesh_service *service) { int id; GError *error = NULL; if (NULL == service) - return MESHD_ERROR_INVALID_PARAMETER; + return WMESHD_ERROR_INVALID_PARAMETER; if (NULL != service->connection) - return MESHD_ERROR_ALREADY_REGISTERED; + return WMESHD_ERROR_ALREADY_REGISTERED; service->connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); if (service->connection == NULL) { if (error != NULL) { - MESH_LOGE("Failed to connect to the D-BUS daemon [%s]", error->message); + WMESH_LOGE("Failed to connect to the D-BUS daemon [%s]", error->message); g_error_free(error); } - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } id = g_signal_connect(service->connection, "notify::g-name-owner", G_CALLBACK(_dbus_name_owner_notify), service); if (0 == id) { - MESH_LOGE("g_signal_connect() Fail"); + WMESH_LOGE("g_signal_connect() Fail"); g_object_unref(service->connection); service->connection = NULL; - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -static int _meshd_close_gdbus_call(mesh_service *service) +static int _wmeshd_close_gdbus_call(wmesh_service *service) { /* CHECK: is connection ref count required? */ g_object_unref(service->connection); service->connection = NULL; - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -static void _meshd_signal_handler(GDBusConnection *connection, +static void _wmeshd_signal_handler(GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { - mesh_service *service = (mesh_service*)user_data; - mesh_network_info_s network_info = { 0, 0, 0, 0, 0 }; - int ret = MESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service*)user_data; + wmesh_network_info_s network_info = { 0, 0, 0, 0, 0 }; + int ret = WMESHD_ERROR_NONE; - meshd_check_null_ret("user_data", user_data); + wmeshd_check_null_ret("user_data", user_data); NOTUSED(connection); NOTUSED(sender_name); NOTUSED(interface_name); - MESH_LOGD("signal received = %s", signal_name); + WMESH_LOGD("signal received = %s", signal_name); if (0 == g_strcmp0(signal_name, "ScanDone")) { /* TODO: Handle event */ - mesh_notify_scan_done(); + wmesh_notify_scan_done(); } else if (0 == g_strcmp0(signal_name, "PropertyChanged")) { const gchar* var = NULL; gchar* key = NULL; GVariant *variant = NULL; - meshd_connection_state_e state = MESHD_CONNECTION_STATE_DISCONNECTED; + wmeshd_connection_state_e state = WMESHD_CONNECTION_STATE_DISCONNECTED; if (NULL == parameters) { - MESH_LOGE("Unexpected parameter"); + WMESH_LOGE("Unexpected parameter"); return; } g_variant_get(parameters, "(sv)", &key, &variant); if (NULL == variant) { - MESH_LOGE("Invalid variant"); + WMESH_LOGE("Invalid variant"); return; } /* State [???] */ var = g_variant_get_string(variant, NULL); - MESH_LOGD(" %s [%s]", key, var); - MESH_LOGD(" %s", object_path); + WMESH_LOGD(" %s [%s]", key, var); + WMESH_LOGD(" %s", object_path); - ret = _mesh_gdbus_get_mesh_network_property(service, object_path, &network_info); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Cannot get valid network property !"); + ret = _wmesh_gdbus_get_mesh_network_property(service, object_path, &network_info); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Cannot get valid network property !"); if (g_strcmp0("association", var) == 0) { /* Joined mesh network */ - state = MESHD_CONNECTION_STATE_ASSOCIATION; + state = WMESHD_CONNECTION_STATE_ASSOCIATION; } else if (g_strcmp0("configuration", var) == 0) { /* Trying to get IP address */ - state = MESHD_CONNECTION_STATE_CONFIGURATION; + state = WMESHD_CONNECTION_STATE_CONFIGURATION; } else if (g_strcmp0("ready", var) == 0 || g_strcmp0("online", var) == 0) { /* IP address is obtained */ - state = MESHD_CONNECTION_STATE_CONNECTED; + state = WMESHD_CONNECTION_STATE_CONNECTED; } else if (g_strcmp0("disconnect", var) == 0 || g_strcmp0("failure", var) == 0) { - state = MESHD_CONNECTION_STATE_DISCONNECTED; + state = WMESHD_CONNECTION_STATE_DISCONNECTED; } else { - MESH_LOGE(" Unhandled state !"); + WMESH_LOGE(" Unhandled state !"); g_free(network_info.mesh_id); g_free(network_info.bssid); return; } - mesh_notify_connection_state(network_info.mesh_id, network_info.bssid, + wmesh_notify_connection_state(network_info.mesh_id, network_info.bssid, network_info.channel, network_info.security, state); g_free(network_info.mesh_id); @@ -271,23 +271,23 @@ static void _meshd_signal_handler(GDBusConnection *connection, } } -static void _meshd_subscribe_event(mesh_service *service) +static void _wmeshd_subscribe_event(wmesh_service *service) { unsigned int id = 0; - meshd_check_null_ret("service", service); + wmeshd_check_null_ret("service", service); id = g_dbus_connection_signal_subscribe( (GDBusConnection *)service->connection, CONNMAN_SERVER_NAME, CONNMAN_INTERFACE_MANAGER, "ScanDone", "/", NULL, - G_DBUS_CALL_FLAGS_NONE, _meshd_signal_handler, service, NULL); + G_DBUS_CALL_FLAGS_NONE, _wmeshd_signal_handler, service, NULL); if (0 == id) { - MESH_LOGE("g_dbus_connection_signal_subscribe(ScanDone) Fail(%d)", errno); + WMESH_LOGE("g_dbus_connection_signal_subscribe(ScanDone) Fail(%d)", errno); return; } service->dbus_sub_ids = g_list_append(service->dbus_sub_ids, GUINT_TO_POINTER(id)); - MESH_LOGD("[Signal subscribe] : ScanDone (%d)", id); + WMESH_LOGD("[Signal subscribe] : ScanDone (%d)", id); /* To monitor mesh profiles */ id = g_dbus_connection_signal_subscribe( @@ -297,13 +297,13 @@ static void _meshd_subscribe_event(mesh_service *service) "PropertyChanged", NULL, /* Path */ NULL, - G_DBUS_CALL_FLAGS_NONE, _meshd_signal_handler, service, NULL); + G_DBUS_CALL_FLAGS_NONE, _wmeshd_signal_handler, service, NULL); if (0 == id) { - MESH_LOGE("g_dbus_connection_signal_subscribe(ScanDone) Fail(%d)", errno); + WMESH_LOGE("g_dbus_connection_signal_subscribe(ScanDone) Fail(%d)", errno); return; } service->dbus_sub_ids = g_list_append(service->dbus_sub_ids, GUINT_TO_POINTER(id)); - MESH_LOGD("[Signal subscribe] : PropertyChanged (%d)", id); + WMESH_LOGD("[Signal subscribe] : PropertyChanged (%d)", id); /* End of subscription */ } @@ -311,16 +311,16 @@ static void _meshd_subscribe_event(mesh_service *service) static void _on_unsubscribe_ids(gpointer data, gpointer user_data) { unsigned int id = GPOINTER_TO_UINT(data); - mesh_service *service = (mesh_service*)user_data; + wmesh_service *service = (wmesh_service*)user_data; - MESH_LOGD("[Signal unsubscribe] : %d", id); + WMESH_LOGD("[Signal unsubscribe] : %d", id); g_dbus_connection_signal_unsubscribe( (GDBusConnection *)service->connection, id); } -static void _meshd_unsubscribe_event(mesh_service *service) +static void _wmeshd_unsubscribe_event(wmesh_service *service) { - meshd_check_null_ret("service", service); + wmeshd_check_null_ret("service", service); g_list_foreach(service->dbus_sub_ids, _on_unsubscribe_ids, service); @@ -328,56 +328,56 @@ static void _meshd_unsubscribe_event(mesh_service *service) service->dbus_sub_ids = NULL; } -int meshd_dbus_start(mesh_service *service) +int wmeshd_dbus_start(wmesh_service *service) { int rv; - rv = _meshd_create_gdbus_call(service); - if (MESHD_ERROR_NONE != rv) + rv = _wmeshd_create_gdbus_call(service); + if (WMESHD_ERROR_NONE != rv) return rv; service->ca = g_cancellable_new(); /* Create all required proxies here */ _gproxy_connman = _proxy_get_connman(service); - meshd_check_null_ret_error("_gproxy_connman", _gproxy_connman, - MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("_gproxy_connman", _gproxy_connman, + WMESHD_ERROR_IO_ERROR); g_dbus_proxy_set_default_timeout( - G_DBUS_PROXY(_gproxy_connman), MESH_DBUS_PROXY_TIMEOUT); + G_DBUS_PROXY(_gproxy_connman), WMESH_DBUS_PROXY_TIMEOUT); _gproxy_connman_mesh = _proxy_get_connman_mesh(service); - meshd_check_null_ret_error("_gproxy_connman_mesh", _gproxy_connman_mesh, - MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("_gproxy_connman_mesh", _gproxy_connman_mesh, + WMESHD_ERROR_IO_ERROR); g_dbus_proxy_set_default_timeout( - G_DBUS_PROXY(_gproxy_connman_mesh), MESH_DBUS_PROXY_TIMEOUT); + G_DBUS_PROXY(_gproxy_connman_mesh), WMESH_DBUS_PROXY_TIMEOUT); _gproxy_connman_technology = _proxy_get_connman_technology(service); - meshd_check_null_ret_error("_gproxy_connman_technology", _gproxy_connman_technology, - MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("_gproxy_connman_technology", _gproxy_connman_technology, + WMESHD_ERROR_IO_ERROR); g_dbus_proxy_set_default_timeout( - G_DBUS_PROXY(_gproxy_connman_technology), MESH_DBUS_PROXY_TIMEOUT); + G_DBUS_PROXY(_gproxy_connman_technology), WMESH_DBUS_PROXY_TIMEOUT); _gproxy_connman_ethernet = _proxy_get_connman_ethernet(service); - meshd_check_null_ret_error("_gproxy_connman_ethernet", _gproxy_connman_ethernet, - MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("_gproxy_connman_ethernet", _gproxy_connman_ethernet, + WMESHD_ERROR_IO_ERROR); g_dbus_proxy_set_default_timeout( - G_DBUS_PROXY(_gproxy_connman_ethernet), MESH_DBUS_PROXY_TIMEOUT); + G_DBUS_PROXY(_gproxy_connman_ethernet), WMESH_DBUS_PROXY_TIMEOUT); /* Subscribe events */ - _meshd_subscribe_event(service); + _wmeshd_subscribe_event(service); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int meshd_dbus_stop(mesh_service *service) +int wmeshd_dbus_stop(wmesh_service *service) { int rv; if (NULL == service) - return MESHD_ERROR_INVALID_PARAMETER; + return WMESHD_ERROR_INVALID_PARAMETER; /* Unsubscribe events */ - _meshd_unsubscribe_event(service); + _wmeshd_unsubscribe_event(service); /* Unref all proxies here */ if (_gproxy_connman) { @@ -397,24 +397,24 @@ int meshd_dbus_stop(mesh_service *service) g_object_unref(service->ca); service->ca = NULL; - rv = _meshd_close_gdbus_call(service); + rv = _wmeshd_close_gdbus_call(service); return rv; } -int mesh_gdbus_create_mesh_interface(mesh_service *service) +int wmesh_gdbus_create_mesh_interface(wmesh_service *service) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; GVariant *variant = NULL; GError *error = NULL; GVariant *var_dict = NULL; GVariantDict dict; - mesh_interface_s *info = NULL; + wmesh_interface_s *info = NULL; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("_gproxy_connman_technology", - _gproxy_connman_technology, MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("_gproxy_connman_technology", + _gproxy_connman_technology, WMESHD_ERROR_IO_ERROR); info = service->interface_info; @@ -429,34 +429,34 @@ int mesh_gdbus_create_mesh_interface(mesh_service *service) G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [MeshInterfaceAdd]"); + WMESH_LOGD("Successfully requested. [MeshInterfaceAdd]"); } else if (error) { - ret = MESHD_ERROR_IO_ERROR; - MESH_LOGE("Failed DBus call [%s]", error->message); + ret = WMESHD_ERROR_IO_ERROR; + WMESH_LOGE("Failed DBus call [%s]", error->message); /* Interface not exists */ if (g_strrstr(error->message, "No such device")) - ret = MESHD_ERROR_INVALID_PARAMETER; + ret = WMESHD_ERROR_INVALID_PARAMETER; g_error_free(error); } return ret; } -int mesh_gdbus_remove_mesh_interface(mesh_service *service) +int wmesh_gdbus_remove_mesh_interface(wmesh_service *service) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; GVariant *variant = NULL; GError *error = NULL; GVariant *var_dict = NULL; GVariantDict dict; - mesh_interface_s *info = NULL; + wmesh_interface_s *info = NULL; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("_gproxy_connman_technology", - _gproxy_connman_technology, MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("_gproxy_connman_technology", + _gproxy_connman_technology, WMESHD_ERROR_IO_ERROR); info = service->interface_info; @@ -469,39 +469,39 @@ int mesh_gdbus_remove_mesh_interface(mesh_service *service) G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [MeshInterfaceRemove]"); + WMESH_LOGD("Successfully requested. [MeshInterfaceRemove]"); } else if (error) { - ret = MESHD_ERROR_IO_ERROR; - MESH_LOGE("Failed DBus call [%s]", error->message); + ret = WMESHD_ERROR_IO_ERROR; + WMESH_LOGE("Failed DBus call [%s]", error->message); /* Interface not exists (Not created yet) */ if (g_strrstr(error->message, "No such device")) - ret = MESHD_ERROR_NONE; + ret = WMESHD_ERROR_NONE; g_error_free(error); } return ret; } -int mesh_gdbus_mesh_scan(mesh_service *service) +int wmesh_gdbus_mesh_scan(wmesh_service *service) { - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("_gproxy_connman_technology", - _gproxy_connman_technology, MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("_gproxy_connman_technology", + _gproxy_connman_technology, WMESHD_ERROR_IO_ERROR); g_dbus_proxy_call(_gproxy_connman_technology, "Scan", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL); - MESH_LOGD("Successfully requested. [Scan]"); + WMESH_LOGD("Successfully requested. [Scan]"); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_gdbus_mesh_specific_scan(mesh_service *service, gchar *mesh_id, gint channel) +int wmesh_gdbus_mesh_specific_scan(wmesh_service *service, gchar *mesh_id, gint channel) { GVariant *variant = NULL; GError *error = NULL; @@ -511,11 +511,11 @@ int mesh_gdbus_mesh_specific_scan(mesh_service *service, gchar *mesh_id, gint ch enum nl80211_band band = (channel <= 14) ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ; gushort freq = __channel_to_frequency(channel, band); - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("_gproxy_connman_technology", - _gproxy_connman_technology, MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("_gproxy_connman_technology", + _gproxy_connman_technology, WMESHD_ERROR_IO_ERROR); g_variant_dict_init(&dict, NULL); g_variant_dict_insert(&dict, "Name", "s", mesh_id); @@ -527,29 +527,29 @@ int mesh_gdbus_mesh_specific_scan(mesh_service *service, gchar *mesh_id, gint ch G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [MeshSpecificScan]"); + WMESH_LOGD("Successfully requested. [MeshSpecificScan]"); } else if (error) { - MESH_LOGE("Failed DBus call [%s]", error->message); + WMESH_LOGE("Failed DBus call [%s]", error->message); g_error_free(error); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_gdbus_mesh_cancel_scan(mesh_service *service) +int wmesh_gdbus_mesh_cancel_scan(wmesh_service *service) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; GVariant *variant = NULL; GError *error = NULL; GVariant *var_dict = NULL; GVariantDict dict; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("_gproxy_connman_technology", - _gproxy_connman_technology, MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("_gproxy_connman_technology", + _gproxy_connman_technology, WMESHD_ERROR_IO_ERROR); g_variant_dict_init(&dict, NULL); var_dict = g_variant_dict_end(&dict); @@ -559,14 +559,14 @@ int mesh_gdbus_mesh_cancel_scan(mesh_service *service) G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [AbortScan]"); + WMESH_LOGD("Successfully requested. [AbortScan]"); } else if (error) { - ret = MESHD_ERROR_IO_ERROR; - MESH_LOGE("Failed DBus call [%s]", error->message); + ret = WMESHD_ERROR_IO_ERROR; + WMESH_LOGE("Failed DBus call [%s]", error->message); /* Scan is not in progress */ if (g_strrstr(error->message, "Already exists")) - ret = MESHD_ERROR_NONE; + ret = WMESHD_ERROR_NONE; g_error_free(error); } @@ -576,7 +576,7 @@ int mesh_gdbus_mesh_cancel_scan(mesh_service *service) static void _on_scan_result_destroy(gpointer data) { - mesh_scan_result_s *scan_item = (mesh_scan_result_s *)data; + wmesh_scan_result_s *scan_item = (wmesh_scan_result_s *)data; if (scan_item) { g_free(scan_item->mesh_id); @@ -588,14 +588,14 @@ static void _on_scan_result_destroy(gpointer data) static void _on_peer_info_destroy(gpointer data) { - mesh_peer_info_s *peer = (mesh_peer_info_s *)data; + wmesh_peer_info_s *peer = (wmesh_peer_info_s *)data; if (peer) g_free(peer->address); g_free(peer); } -static void _get_joined_network(mesh_service *service, GVariant *variant) +static void _get_joined_network(wmesh_service *service, GVariant *variant) { GVariantIter *peer = NULL; GVariantIter *property = NULL; @@ -608,20 +608,20 @@ static void _get_joined_network(mesh_service *service, GVariant *variant) g_variant_get(variant, "(a(oa{sv}))", &peer); while ((child = g_variant_iter_next_value(peer))) { - mesh_network_info_s *joined_info = NULL; + wmesh_network_info_s *joined_info = NULL; gboolean valid_state = TRUE; g_variant_get(child, "(oa{sv})", &obj_path, &property); - MESH_LOGD(" Object: [%s]", obj_path); + WMESH_LOGD(" Object: [%s]", obj_path); if (NULL == obj_path) { - MESH_LOGE("Null object"); + WMESH_LOGE("Null object"); continue; } /* Create an information structure for joined network */ - joined_info = g_try_new0(mesh_network_info_s, 1); + joined_info = g_try_new0(wmesh_network_info_s, 1); if (NULL == joined_info) { - MESH_LOGE("Failed to allocate !"); + WMESH_LOGE("Failed to allocate !"); return; } @@ -634,7 +634,7 @@ static void _get_joined_network(mesh_service *service, GVariant *variant) joined_info->bssid = g_strdup(buf); } else if (strcasecmp(key, "State") == 0) { buf = g_variant_get_string(val, &len); - MESH_LOGD(" State : %s", buf); + WMESH_LOGD(" State : %s", buf); /* Skip ignorable state */ if (g_strcmp0(buf, "idle") == 0 @@ -643,18 +643,18 @@ static void _get_joined_network(mesh_service *service, GVariant *variant) valid_state = FALSE; break; } else if (g_strcmp0(buf, "association") == 0) { - joined_info->state = MESHD_CONNECTION_STATE_ASSOCIATION; + joined_info->state = WMESHD_CONNECTION_STATE_ASSOCIATION; } else if (g_strcmp0(buf, "configuration") == 0) { - joined_info->state = MESHD_CONNECTION_STATE_CONFIGURATION; + joined_info->state = WMESHD_CONNECTION_STATE_CONFIGURATION; } else if (g_strcmp0(buf, "ready") == 0 || g_strcmp0(buf, "online") == 0) { - joined_info->state = MESHD_CONNECTION_STATE_CONNECTED; + joined_info->state = WMESHD_CONNECTION_STATE_CONNECTED; } } else if (strcasecmp(key, "Security") == 0) { buf = g_variant_get_string(val, &len); if (g_strcmp0("sae", buf) == 0) - joined_info->security = MESHD_SECURITY_SAE; + joined_info->security = WMESHD_SECURITY_SAE; else - joined_info->security = MESHD_SECURITY_NONE; + joined_info->security = WMESHD_SECURITY_NONE; } else if (strcasecmp(key, "Frequency") == 0) { joined_info->channel = __frequency_to_channel(g_variant_get_uint16(val)); } @@ -667,11 +667,11 @@ static void _get_joined_network(mesh_service *service, GVariant *variant) continue; } - MESH_LOGD(" Mesh ID : %s", joined_info->mesh_id); - MESH_LOGD(" BSSID : %s", joined_info->bssid); - MESH_LOGD(" Channel : %d", joined_info->channel); - MESH_LOGD(" Security : %s", - (MESHD_SECURITY_SAE == joined_info->security) ? "SAE" : "NONE"); + WMESH_LOGD(" Mesh ID : %s", joined_info->mesh_id); + WMESH_LOGD(" BSSID : %s", joined_info->bssid); + WMESH_LOGD(" Channel : %d", joined_info->channel); + WMESH_LOGD(" Security : %s", + (WMESHD_SECURITY_SAE == joined_info->security) ? "SAE" : "NONE"); service->joined_network = joined_info; g_variant_iter_free(property); @@ -682,7 +682,7 @@ static void _get_joined_network(mesh_service *service, GVariant *variant) g_variant_iter_free(peer); } -static void _get_mesh_peers(mesh_service *service, GVariant *variant) +static void _get_mesh_peers(wmesh_service *service, GVariant *variant) { GVariantIter *peer = NULL; GVariantIter *property = NULL; @@ -694,63 +694,63 @@ static void _get_mesh_peers(mesh_service *service, GVariant *variant) g_variant_get(variant, "(a(oa{sv}))", &peer); while ((child = g_variant_iter_next_value(peer))) { - mesh_scan_result_s *scan_info = NULL; + wmesh_scan_result_s *scan_info = NULL; - scan_info = g_try_new0(mesh_scan_result_s, 1); + scan_info = g_try_new0(wmesh_scan_result_s, 1); if (NULL == scan_info) { - MESH_LOGE("Failed to allocate !"); + WMESH_LOGE("Failed to allocate !"); return; } g_variant_get(child, "(oa{sv})", &obj_path, &property); if (NULL == obj_path) { - MESH_LOGE("Null object"); + WMESH_LOGE("Null object"); g_free(scan_info); continue; } - MESH_LOGD(" Obj path : [%s]", obj_path); + WMESH_LOGD(" Obj path : [%s]", obj_path); scan_info->object_path = g_strdup(obj_path); while (g_variant_iter_loop(property, "{sv}", &key, &val)) { if (strcasecmp(key, "Name") == 0) { const char *buf = g_variant_get_string(val, &len); scan_info->mesh_id = g_strdup(buf); - MESH_LOGD(" Mesh ID : %s", scan_info->mesh_id); + WMESH_LOGD(" Mesh ID : %s", scan_info->mesh_id); } else if (strcasecmp(key, "BSSID") == 0) { const char *buf = g_variant_get_string(val, &len); scan_info->bssid = g_strdup(buf); - MESH_LOGD(" BSSID : %s", scan_info->bssid); + WMESH_LOGD(" BSSID : %s", scan_info->bssid); } else if (strcasecmp(key, "State") == 0) { const char *buf = g_variant_get_string(val, &len); - MESH_LOGD(" State : %s", buf); + WMESH_LOGD(" State : %s", buf); if (g_strcmp0(buf, "idle") == 0 || g_strcmp0(buf, "disconnect") == 0 || g_strcmp0(buf, "failure") == 0) { - scan_info->state = MESHD_CONNECTION_STATE_DISCONNECTED; + scan_info->state = WMESHD_CONNECTION_STATE_DISCONNECTED; } else if (g_strcmp0(buf, "association") == 0) { - scan_info->state = MESHD_CONNECTION_STATE_ASSOCIATION; + scan_info->state = WMESHD_CONNECTION_STATE_ASSOCIATION; } else if (g_strcmp0(buf, "configuration") == 0) { - scan_info->state = MESHD_CONNECTION_STATE_CONFIGURATION; + scan_info->state = WMESHD_CONNECTION_STATE_CONFIGURATION; } else if (g_strcmp0(buf, "ready") == 0 || g_strcmp0(buf, "online") == 0) { - scan_info->state = MESHD_CONNECTION_STATE_CONNECTED; + scan_info->state = WMESHD_CONNECTION_STATE_CONNECTED; } } else if (strcasecmp(key, "Security") == 0) { const char *buf = g_variant_get_string(val, &len); - MESH_LOGD(" Security : %s", buf); + WMESH_LOGD(" Security : %s", buf); if (g_strcmp0("sae", buf) == 0) - scan_info->security = MESHD_SECURITY_SAE; + scan_info->security = WMESHD_SECURITY_SAE; else - scan_info->security = MESHD_SECURITY_NONE; + scan_info->security = WMESHD_SECURITY_NONE; } else if (strcasecmp(key, "Frequency") == 0) { scan_info->channel = __frequency_to_channel(g_variant_get_uint16(val)); - MESH_LOGD(" Channel : %d", scan_info->channel); + WMESH_LOGD(" Channel : %d", scan_info->channel); } else if (strcasecmp(key, "Favorite") == 0) { const char *buf = g_variant_get_string(val, &len); - MESH_LOGD(" Favorite : %s", buf); + WMESH_LOGD(" Favorite : %s", buf); } else if (strcasecmp(key, "Strength") == 0) { scan_info->rssi = (gint)g_variant_get_byte(val); - MESH_LOGD(" RSSI : %d", scan_info->rssi); + WMESH_LOGD(" RSSI : %d", scan_info->rssi); } } /* Last element */ @@ -762,7 +762,7 @@ static void _get_mesh_peers(mesh_service *service, GVariant *variant) g_variant_iter_free(peer); } -static void _get_connected_mesh_peers(mesh_service *service, GVariant *variant) +static void _get_connected_mesh_peers(wmesh_service *service, GVariant *variant) { GVariantIter *peer = NULL; GVariant *val = NULL; @@ -772,11 +772,11 @@ static void _get_connected_mesh_peers(mesh_service *service, GVariant *variant) g_variant_get(variant, "(a(a{sv}))", &peer); while ((child = g_variant_iter_next_value(peer))) { - mesh_peer_info_s *peer_info = NULL; + wmesh_peer_info_s *peer_info = NULL; - peer_info = g_try_new0(mesh_peer_info_s, 1); + peer_info = g_try_new0(wmesh_peer_info_s, 1); if (NULL == peer_info) { - MESH_LOGE("Failed to allocate !"); + WMESH_LOGE("Failed to allocate !"); return; } @@ -786,10 +786,10 @@ static void _get_connected_mesh_peers(mesh_service *service, GVariant *variant) if (NULL != val) { const char *buf = g_variant_get_string(val, &len); peer_info->address = g_strdup(buf); - MESH_LOGD(" Address : %s", peer_info->address); + WMESH_LOGD(" Address : %s", peer_info->address); g_variant_unref(val); } else { - MESH_LOGE("Unable to get address !"); + WMESH_LOGE("Unable to get address !"); g_free(peer_info); continue; } @@ -800,23 +800,23 @@ static void _get_connected_mesh_peers(mesh_service *service, GVariant *variant) g_variant_iter_free(peer); } -int mesh_gdbus_get_mesh_networks(mesh_service *service) +int wmesh_gdbus_get_mesh_networks(wmesh_service *service) { GVariant *variant = NULL; GError *error = NULL; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("_gproxy_connman", - _gproxy_connman, MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("_gproxy_connman", + _gproxy_connman, WMESHD_ERROR_IO_ERROR); variant = g_dbus_proxy_call_sync(_gproxy_connman, "GetMeshPeers", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [GetMeshPeers]"); + WMESH_LOGD("Successfully requested. [GetMeshPeers]"); if (service->scanned_mesh_network) { g_list_free_full(service->scanned_mesh_network, _on_scan_result_destroy); @@ -829,31 +829,31 @@ int mesh_gdbus_get_mesh_networks(mesh_service *service) service->scanned_mesh_network = g_list_reverse(service->scanned_mesh_network); } else if (error) { - MESH_LOGE("Failed DBus call [%s]", error->message); + WMESH_LOGE("Failed DBus call [%s]", error->message); g_error_free(error); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_gdbus_get_joined_mesh_network(mesh_service *service) +int wmesh_gdbus_get_joined_mesh_network(wmesh_service *service) { GVariant *variant = NULL; GError *error = NULL; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("_gproxy_connman", - _gproxy_connman, MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("_gproxy_connman", + _gproxy_connman, WMESHD_ERROR_IO_ERROR); variant = g_dbus_proxy_call_sync(_gproxy_connman, "GetMeshPeers", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [GetMeshPeers]"); + WMESH_LOGD("Successfully requested. [GetMeshPeers]"); if (service->joined_network) { g_free(service->joined_network->mesh_id); @@ -864,31 +864,31 @@ int mesh_gdbus_get_joined_mesh_network(mesh_service *service) _get_joined_network(service, variant); } else if (error) { - MESH_LOGE("Failed DBus call [%s]", error->message); + WMESH_LOGE("Failed DBus call [%s]", error->message); g_error_free(error); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_gdbus_get_connected_peers(mesh_service *service) +int wmesh_gdbus_get_connected_peers(wmesh_service *service) { GVariant *variant = NULL; GError *error = NULL; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("_gproxy_connman", - _gproxy_connman, MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("_gproxy_connman", + _gproxy_connman, WMESHD_ERROR_IO_ERROR); variant = g_dbus_proxy_call_sync(_gproxy_connman, "GetConnectedMeshPeers", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [GetConnectedMeshPeers]"); + WMESH_LOGD("Successfully requested. [GetConnectedMeshPeers]"); if (service->connected_mesh_peers) { g_list_free_full(service->connected_mesh_peers, _on_peer_info_destroy); @@ -901,22 +901,22 @@ int mesh_gdbus_get_connected_peers(mesh_service *service) service->connected_mesh_peers = g_list_reverse(service->connected_mesh_peers); } else if (error) { - MESH_LOGE("Failed DBus call [%s]", error->message); + WMESH_LOGE("Failed DBus call [%s]", error->message); g_error_free(error); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -static void _get_mesh_property(GVariant *variant, mesh_network_info_s *result) +static void _get_mesh_property(GVariant *variant, wmesh_network_info_s *result) { GVariantIter *property = NULL; gchar *key = NULL; GVariant *val = NULL; gsize len = 0; - MESH_LOGD("Type [%s]", g_variant_get_type_string(variant)); + WMESH_LOGD("Type [%s]", g_variant_get_type_string(variant)); g_variant_get(variant, "(a{sv})", &property); @@ -924,57 +924,57 @@ static void _get_mesh_property(GVariant *variant, mesh_network_info_s *result) if (strcasecmp(key, "Name") == 0) { const char *buf = g_variant_get_string(val, &len); result->mesh_id = g_strdup(buf); - MESH_LOGD(" Mesh ID : %s", result->mesh_id); + WMESH_LOGD(" Mesh ID : %s", result->mesh_id); } else if (strcasecmp(key, "BSSID") == 0) { const char *buf = g_variant_get_string(val, &len); result->bssid = g_strdup(buf); - MESH_LOGD(" BSSID : %s", result->bssid); + WMESH_LOGD(" BSSID : %s", result->bssid); } else if (strcasecmp(key, "State") == 0) { const char *buf = g_variant_get_string(val, &len); - MESH_LOGD(" State : %s", buf); + WMESH_LOGD(" State : %s", buf); if (g_strcmp0(buf, "idle") == 0 || g_strcmp0(buf, "disconnect") == 0 || g_strcmp0(buf, "failure") == 0) { - result->state = MESHD_CONNECTION_STATE_DISCONNECTED; + result->state = WMESHD_CONNECTION_STATE_DISCONNECTED; } else if (g_strcmp0(buf, "association") == 0) { - result->state = MESHD_CONNECTION_STATE_ASSOCIATION; + result->state = WMESHD_CONNECTION_STATE_ASSOCIATION; } else if (g_strcmp0(buf, "configuration") == 0) { - result->state = MESHD_CONNECTION_STATE_CONFIGURATION; + result->state = WMESHD_CONNECTION_STATE_CONFIGURATION; } else if (g_strcmp0(buf, "ready") == 0 || g_strcmp0(buf, "online") == 0) { - result->state = MESHD_CONNECTION_STATE_CONNECTED; + result->state = WMESHD_CONNECTION_STATE_CONNECTED; } } else if (strcasecmp(key, "Security") == 0) { const char *buf = g_variant_get_string(val, &len); - MESH_LOGD(" Security : %s", buf); + WMESH_LOGD(" Security : %s", buf); if (g_strcmp0("sae", buf) == 0) - result->security = MESHD_SECURITY_SAE; + result->security = WMESHD_SECURITY_SAE; else - result->security = MESHD_SECURITY_NONE; + result->security = WMESHD_SECURITY_NONE; } else if (strcasecmp(key, "Frequency") == 0) { result->channel = __frequency_to_channel(g_variant_get_uint16(val)); - MESH_LOGD(" Channel : %d", result->channel); + WMESH_LOGD(" Channel : %d", result->channel); } else if (strcasecmp(key, "Favorite") == 0) { const char *buf = g_variant_get_string(val, &len); - MESH_LOGD(" Favorite : %s", buf); + WMESH_LOGD(" Favorite : %s", buf); } else if (strcasecmp(key, "Strength") == 0) { gint rssi = (gint)g_variant_get_byte(val); - MESH_LOGD(" RSSI : %d", rssi); + WMESH_LOGD(" RSSI : %d", rssi); } } g_variant_iter_free(property); } -static int _mesh_gdbus_get_mesh_network_property(mesh_service *service, - const gchar* object_path, mesh_network_info_s *result) +static int _wmesh_gdbus_get_mesh_network_property(wmesh_service *service, + const gchar* object_path, wmesh_network_info_s *result) { GVariant *variant = NULL; GError *error = NULL; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("result", result, MESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("result", result, WMESHD_ERROR_INVALID_PARAMETER); variant = g_dbus_connection_call_sync(service->connection, CONNMAN_SERVER_NAME, @@ -985,36 +985,36 @@ static int _mesh_gdbus_get_mesh_network_property(mesh_service *service, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [GetProperties]"); + WMESH_LOGD("Successfully requested. [GetProperties]"); /* Get properties */ _get_mesh_property(variant, result); } else if (error) { LOGE("Failed DBus call [%s]", error->message); g_error_free(error); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_gdbus_create_network(mesh_service *service, gchar *mesh_id, - gint channel, meshd_security_type_e sec) +int wmesh_gdbus_create_network(wmesh_service *service, gchar *mesh_id, + gint channel, wmeshd_security_type_e sec) { GVariant *variant = NULL; GError *error = NULL; GVariant *var_dict = NULL; GVariantBuilder builder; - const gchar* security = (MESHD_SECURITY_SAE == sec) ? "sae" : "none"; + const gchar* security = (WMESHD_SECURITY_SAE == sec) ? "sae" : "none"; enum nl80211_band band = (channel <= 14) ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ; gushort freq = __channel_to_frequency(channel, band); - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("_gproxy_connman_technology", - _gproxy_connman_technology, MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("_gproxy_connman_technology", + _gproxy_connman_technology, WMESHD_ERROR_IO_ERROR); g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}")); g_variant_builder_open(&builder, G_VARIANT_TYPE("a{sv}")); @@ -1043,23 +1043,23 @@ int mesh_gdbus_create_network(mesh_service *service, gchar *mesh_id, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [MeshCreateNetwork]"); + WMESH_LOGD("Successfully requested. [MeshCreateNetwork]"); } else if (error) { - MESH_LOGE("Failed DBus call [%s]", error->message); + WMESH_LOGE("Failed DBus call [%s]", error->message); g_error_free(error); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_gdbus_set_passphrase(mesh_service *service, mesh_scan_result_s *info, gchar *passphrase) +int wmesh_gdbus_set_passphrase(wmesh_service *service, wmesh_scan_result_s *info, gchar *passphrase) { GVariant *variant = NULL; GError *error = NULL; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("passphrase", passphrase, MESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("passphrase", passphrase, WMESHD_ERROR_INVALID_PARAMETER); variant = g_dbus_connection_call_sync(service->connection, CONNMAN_SERVER_NAME, @@ -1071,21 +1071,21 @@ int mesh_gdbus_set_passphrase(mesh_service *service, mesh_scan_result_s *info, g G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [SetProperty]"); + WMESH_LOGD("Successfully requested. [SetProperty]"); } else if (error) { LOGE("Failed DBus call [%s]", error->message); g_error_free(error); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } #if 0 static void on_response_connect_network(GObject *source_object, GAsyncResult *res, gpointer user_data) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; GError *error = NULL; GVariant *variant = NULL; @@ -1094,29 +1094,29 @@ static void on_response_connect_network(GObject *source_object, variant = g_dbus_connection_call_finish( G_DBUS_CONNECTION(source_object), res, &error); if (variant) { - MESH_LOGD("Successfully requested. [Connect]"); + WMESH_LOGD("Successfully requested. [Connect]"); /* TODO: Unregister property change event */ } else if (error) { - ret = MESHD_ERROR_IO_ERROR; + ret = WMESHD_ERROR_IO_ERROR; LOGE("Failed DBus call [%s]", error->message); if (g_strrstr(error->message, "Already exists")) - ret = MESHD_ERROR_ALREADY_REGISTERED; + ret = WMESHD_ERROR_ALREADY_REGISTERED; else if (g_strrstr(error->message, "In progress")) - ret = MESHD_ERROR_IN_PROGRESS; + ret = WMESHD_ERROR_IN_PROGRESS; else - ret = MESHD_ERROR_IO_ERROR; + ret = WMESHD_ERROR_IO_ERROR; g_error_free(error); } } #endif -int mesh_gdbus_connect_network(mesh_service *service, mesh_scan_result_s *info) +int wmesh_gdbus_connect_network(wmesh_service *service, wmesh_scan_result_s *info) { - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("info", info, MESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("info", info, WMESHD_ERROR_INVALID_PARAMETER); g_dbus_connection_call(service->connection, CONNMAN_SERVER_NAME, @@ -1128,18 +1128,18 @@ int mesh_gdbus_connect_network(mesh_service *service, mesh_scan_result_s *info) -1, NULL, /* G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED */ NULL, NULL); - MESH_LOGD("Successfully requested. [Connect]"); + WMESH_LOGD("Successfully requested. [Connect]"); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_gdbus_disconnect_network(mesh_service *service, mesh_scan_result_s *info) +int wmesh_gdbus_disconnect_network(wmesh_service *service, wmesh_scan_result_s *info) { GVariant *variant = NULL; GError *error = NULL; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("info", info, MESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("info", info, WMESHD_ERROR_INVALID_PARAMETER); variant = g_dbus_connection_call_sync(service->connection, CONNMAN_SERVER_NAME, @@ -1150,23 +1150,23 @@ int mesh_gdbus_disconnect_network(mesh_service *service, mesh_scan_result_s *inf G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [Disconnect]"); + WMESH_LOGD("Successfully requested. [Disconnect]"); } else if (error) { LOGE("Failed DBus call [%s]", error->message); g_error_free(error); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_gdbus_remove_network(mesh_service *service, mesh_scan_result_s *info) +int wmesh_gdbus_remove_network(wmesh_service *service, wmesh_scan_result_s *info) { GVariant *variant = NULL; GError *error = NULL; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("info", info, MESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("info", info, WMESHD_ERROR_INVALID_PARAMETER); variant = g_dbus_connection_call_sync(service->connection, CONNMAN_SERVER_NAME, @@ -1177,66 +1177,66 @@ int mesh_gdbus_remove_network(mesh_service *service, mesh_scan_result_s *info) G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [Remove]"); + WMESH_LOGD("Successfully requested. [Remove]"); } else if (error) { LOGE("Failed DBus call [%s]", error->message); g_error_free(error); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_gdbus_enable_ethernet_interface(mesh_service *service, bool state) +int wmesh_gdbus_enable_ethernet_interface(wmesh_service *service, bool state) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; GVariant *variant = NULL; GError *error = NULL; - mesh_interface_s *info = NULL; + wmesh_interface_s *info = NULL; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("_gproxy_connman_technology", - _gproxy_connman_technology, MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("_gproxy_connman_technology", + _gproxy_connman_technology, WMESHD_ERROR_IO_ERROR); info = service->interface_info; - meshd_check_null_ret_error("info", info, MESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("info", info, WMESHD_ERROR_INVALID_PARAMETER); variant = g_dbus_proxy_call_sync(_gproxy_connman_ethernet, "SetProperty", g_variant_new("(sv)", "Powered", g_variant_new_boolean(state)), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [Powered]"); + WMESH_LOGD("Successfully requested. [Powered]"); } else if (error) { - ret = MESHD_ERROR_IO_ERROR; - MESH_LOGE("Failed DBus call [%s]", error->message); + ret = WMESHD_ERROR_IO_ERROR; + WMESH_LOGE("Failed DBus call [%s]", error->message); /* Interface not exists (Not created yet) */ if (g_strrstr(error->message, "No such device")) - ret = MESHD_ERROR_NONE; + ret = WMESHD_ERROR_NONE; g_error_free(error); } return ret; } -int mesh_gdbus_set_mesh_gate(mesh_service *service) +int wmesh_gdbus_set_mesh_gate(wmesh_service *service) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; GVariant *variant = NULL; GError *error = NULL; GVariant *var_dict = NULL; GVariantDict dict; - mesh_interface_s *info = NULL; + wmesh_interface_s *info = NULL; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("connection", service->connection, - MESHD_ERROR_INVALID_PARAMETER); - meshd_check_null_ret_error("_gproxy_connman_technology", - _gproxy_connman_technology, MESHD_ERROR_IO_ERROR); + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("connection", service->connection, + WMESHD_ERROR_INVALID_PARAMETER); + wmeshd_check_null_ret_error("_gproxy_connman_technology", + _gproxy_connman_technology, WMESHD_ERROR_IO_ERROR); info = service->interface_info; @@ -1251,14 +1251,14 @@ int mesh_gdbus_set_mesh_gate(mesh_service *service) G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (variant) { - MESH_LOGD("Successfully requested. [SetMeshGate]"); + WMESH_LOGD("Successfully requested. [SetMeshGate]"); } else if (error) { - ret = MESHD_ERROR_IO_ERROR; - MESH_LOGE("Failed DBus call [%s]", error->message); + ret = WMESHD_ERROR_IO_ERROR; + WMESH_LOGE("Failed DBus call [%s]", error->message); /* Interface not exists */ if (g_strrstr(error->message, "No such device")) - ret = MESHD_ERROR_INVALID_PARAMETER; + ret = WMESHD_ERROR_INVALID_PARAMETER; g_error_free(error); } diff --git a/src/mesh-interface.c b/src/wmesh-interface.c similarity index 67% rename from src/mesh-interface.c rename to src/wmesh-interface.c index 03f1cf7..58df328 100644 --- a/src/mesh-interface.c +++ b/src/wmesh-interface.c @@ -30,11 +30,11 @@ #include -#include "mesh.h" -#include "mesh-log.h" -#include "mesh-util.h" -#include "mesh-service.h" -#include "mesh-interface.h" +#include "wmesh.h" +#include "wmesh-log.h" +#include "wmesh-util.h" +#include "wmesh-service.h" +#include "wmesh-interface.h" #define IPV4_MAX_LENGTH 16 #define BUF_LENGTH 256 @@ -50,8 +50,8 @@ typedef enum { ETHERNET_CABLE_ATTACHED } cable_state_e; -int mesh_interface_set(const char *interface, const char* ip_addr, - mesh_set_interface_type_e type) +int wmesh_interface_set(const char *interface, const char* ip_addr, + wmesh_set_interface_type_e type) { int sock = 0; struct ifreq ifr; @@ -61,17 +61,17 @@ int mesh_interface_set(const char *interface, const char* ip_addr, char buf[BUF_LENGTH] = {0,}; if (interface == NULL) { - MESH_LOGE("Invalid interface name !"); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid interface name !"); + return WMESHD_ERROR_INVALID_PARAMETER; } sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { - MESH_LOGE("Cannot open network interface socket"); - return MESHD_ERROR_IO_ERROR; + WMESH_LOGE("Cannot open network interface socket"); + return WMESHD_ERROR_IO_ERROR; } - MESH_LOGD("Initialize interface [%s]...", interface); + WMESH_LOGD("Initialize interface [%s]...", interface); snprintf(ifr.ifr_name, IFNAMSIZ, "%s", interface); /* Set IP Address */ @@ -82,11 +82,11 @@ int mesh_interface_set(const char *interface, const char* ip_addr, sai.sin_port = 0; snprintf(ip, IPV4_MAX_LENGTH, "%s", ip_addr); - MESH_LOGD("Setting IP address: [%s]\n", ip); + WMESH_LOGD("Setting IP address: [%s]\n", ip); if (!inet_aton(ip, &sai.sin_addr)) { - MESH_LOGE("Failed to convert ip address"); + WMESH_LOGE("Failed to convert ip address"); close(sock); - return MESHD_ERROR_OPERATION_FAILED; + return WMESHD_ERROR_OPERATION_FAILED; } memcpy(&ifr.ifr_addr, &sai, sizeof(sai)); @@ -94,7 +94,7 @@ int mesh_interface_set(const char *interface, const char* ip_addr, ret = ioctl(sock, SIOCSIFADDR, &ifr); if (ret < 0) { (void) strerror_r(errno, buf, BUF_LENGTH); - MESH_LOGE("Failed to set IP[%s] for interface[%s] : %s", + WMESH_LOGE("Failed to set IP[%s] for interface[%s] : %s", ip, ifr.ifr_name, buf); } } @@ -102,32 +102,32 @@ int mesh_interface_set(const char *interface, const char* ip_addr, /* Get status flag */ if (ioctl(sock, SIOCGIFFLAGS, &ifr) == -1) { (void) strerror_r(errno, buf, BUF_LENGTH); - MESH_LOGE("Failed to get interface[%s] status : %s", + WMESH_LOGE("Failed to get interface[%s] status : %s", ifr.ifr_name, buf); } snprintf(ifr.ifr_name, IFNAMSIZ, "%s", interface); /* Set status flag */ - if (MESH_INTERFACE_UP == type) { + if (WMESH_INTERFACE_UP == type) { ifr.ifr_flags |= (IFF_UP); if (ioctl(sock, SIOCSIFFLAGS, &ifr) == -1) { (void) strerror_r(errno, buf, BUF_LENGTH); - MESH_LOGE("Failed to change interface[%s] status UP : %s", + WMESH_LOGE("Failed to change interface[%s] status UP : %s", ifr.ifr_name, buf); } - } else if (MESH_INTERFACE_DOWN == type) { + } else if (WMESH_INTERFACE_DOWN == type) { ifr.ifr_flags &= (~IFF_UP); if (ioctl(sock, SIOCSIFFLAGS, &ifr) == -1) { (void) strerror_r(errno, buf, BUF_LENGTH); - MESH_LOGE("Failed to change interface[%s] status DOWN : %s", + WMESH_LOGE("Failed to change interface[%s] status DOWN : %s", ifr.ifr_name, buf); } } else { - MESH_LOGD("Do not change up/down status"); + WMESH_LOGD("Do not change up/down status"); } close(sock); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } #if 0 @@ -148,7 +148,7 @@ static char* _get_interface_exists_in_seq(const char* prefix) /* This name is exists. use it */ snprintf(buf, sizeof(buf), "%s%d", prefix, i); res = g_strdup(buf); - MESH_LOGD(" use [%s]", res); + WMESH_LOGD(" use [%s]", res); break; } } @@ -173,7 +173,7 @@ static char* _get_interface_not_exists_in_seq(const char* prefix) /* This name is not exists. use it */ snprintf(buf, sizeof(buf), "%s%d", prefix, i); res = g_strdup(buf); - MESH_LOGD(" use [%s]", res); + WMESH_LOGD(" use [%s]", res); break; } } @@ -223,7 +223,7 @@ static bool _check_bridge_interface_exists(const char* bridge, const char* if_na return false; } -char* mesh_interface_get_address(const char* if_name) +char* wmesh_interface_get_address(const char* if_name) { FILE *pf; char buf[32] = { 0, }; @@ -233,7 +233,7 @@ char* mesh_interface_get_address(const char* if_name) pf = fopen(buf, "r"); if (NULL != pf) { fgets(buf, 31, pf); - MESH_LOGD("Interface[%s] address[%s]", if_name, buf); + WMESH_LOGD("Interface[%s] address[%s]", if_name, buf); if (strlen(buf) > 0) result = g_strdup(buf); @@ -244,42 +244,42 @@ char* mesh_interface_get_address(const char* if_name) return result; } -int mesh_interface_initialize(mesh_interface_s *info) +int wmesh_interface_initialize(wmesh_interface_s *info) { if (NULL == info) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; } info->bridge_interface = g_strdup(MESH_DEFAULT_BRIDGE_INTERFACE); if (NULL == info->bridge_interface) { - MESH_LOGE("Failed to get bridge interface !"); - return MESHD_ERROR_OPERATION_FAILED; + WMESH_LOGE("Failed to get bridge interface !"); + return WMESHD_ERROR_OPERATION_FAILED; } info->base_interface = g_strdup(MESH_DEFAULT_BASE_INTERFACE); if (NULL == info->bridge_interface) { - MESH_LOGE("Failed to get base interface !"); - return MESHD_ERROR_OPERATION_FAILED; + WMESH_LOGE("Failed to get base interface !"); + return WMESHD_ERROR_OPERATION_FAILED; } info->mesh_interface = g_strdup(MESH_DEFAULT_MESH_INTERFACE); if (NULL == info->bridge_interface) { - MESH_LOGE("Failed to get mesh interface !"); - return MESHD_ERROR_OPERATION_FAILED; + WMESH_LOGE("Failed to get mesh interface !"); + return WMESHD_ERROR_OPERATION_FAILED; } info->softap_interface = g_strdup(MESH_DEFAULT_SOFTAP_INTERFACE); info->external_interface = g_strdup(MESH_DEFAULT_EXTERNAL_INTERFACE); - MESH_LOGD("Interface configuration for mesh network :"); - MESH_LOGD(" Base : [%s]", info->base_interface); - MESH_LOGD(" Mesh : [%s]", info->mesh_interface); - MESH_LOGD(" Bridge : [%s]", info->bridge_interface); - MESH_LOGD(" SoftAP : [%s]", info->softap_interface); - MESH_LOGD(" External: [%s]", info->external_interface); + WMESH_LOGD("Interface configuration for mesh network :"); + WMESH_LOGD(" Base : [%s]", info->base_interface); + WMESH_LOGD(" Mesh : [%s]", info->mesh_interface); + WMESH_LOGD(" Bridge : [%s]", info->bridge_interface); + WMESH_LOGD(" SoftAP : [%s]", info->softap_interface); + WMESH_LOGD(" External: [%s]", info->external_interface); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } static int _check_ethernet_cable_plugin_status(const char* interface, @@ -296,60 +296,60 @@ static int _check_ethernet_cable_plugin_status(const char* interface, if (0 == access(file_path, F_OK)) { fd = fopen(file_path, "r"); if (fd == NULL) { - MESH_LOGE("Error! Could not open /sys/class/net/%s/carrier file", + WMESH_LOGE("Error! Could not open /sys/class/net/%s/carrier file", interface); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } } else { - MESH_LOGE("Error! Could not access /sys/class/net/%s/carrier file", + WMESH_LOGE("Error! Could not access /sys/class/net/%s/carrier file", interface); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } errno = 0; rv = fscanf(fd, "%d", &ret); if (rv < 0) { strerror_r(errno, error_buf, 256); - MESH_LOGE("Error! Failed to read from file, rv:[%d], error:[%s]", + WMESH_LOGE("Error! Failed to read from file, rv:[%d], error:[%s]", rv, error_buf); fclose(fd); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } if (ret == 1) { - MESH_LOGD("/sys/class/net/%s/carrier : [%d]", interface, ret); + WMESH_LOGD("/sys/class/net/%s/carrier : [%d]", interface, ret); *status = ETHERNET_CABLE_ATTACHED; } else if (ret == 0) { - MESH_LOGD("/sys/class/net/%s/carrier : [%d]", interface, ret); + WMESH_LOGD("/sys/class/net/%s/carrier : [%d]", interface, ret); *status = ETHERNET_CABLE_DETACHED; } fclose(fd); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_interface_check_external_exists(const char* external_interface, bool *state) +int wmesh_interface_check_external_exists(const char* external_interface, bool *state) { /* TODO: Current logic checks only ethernet interface. This logic should consider wireless interface if can */ - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; cable_state_e cable_state = ETHERNET_CABLE_DETACHED; if (NULL == external_interface || NULL == state) - return MESHD_ERROR_INVALID_PARAMETER; + return WMESHD_ERROR_INVALID_PARAMETER; bool ex = _check_interface_exists(external_interface); if (FALSE == ex) { - MESH_LOGE("External interface[%s] was not found.", external_interface); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("External interface[%s] was not found.", external_interface); + return WMESHD_ERROR_INVALID_PARAMETER; } /* If external interface seems Ethernet, check cable state */ if (g_str_has_prefix(external_interface, "eth")) { ret = _check_ethernet_cable_plugin_status(external_interface, &cable_state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to get Ethernet cable state"); - return MESHD_ERROR_OPERATION_FAILED; + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to get Ethernet cable state"); + return WMESHD_ERROR_OPERATION_FAILED; } } @@ -357,39 +357,39 @@ int mesh_interface_check_external_exists(const char* external_interface, bool *s if (ETHERNET_CABLE_ATTACHED == cable_state) *state = TRUE; - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_interface_check(const char* interface) +int wmesh_interface_check(const char* interface) { bool ex = FALSE; if (NULL == interface || strlen(interface) == 0) - return MESHD_ERROR_INVALID_PARAMETER; + return WMESHD_ERROR_INVALID_PARAMETER; ex = _check_interface_exists(interface); if (FALSE == ex) { - MESH_LOGE("Interface[%s] was not found.", interface); - return MESHD_ERROR_NO_DATA; + WMESH_LOGE("Interface[%s] was not found.", interface); + return WMESHD_ERROR_NO_DATA; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_interface_check_bridge_interface_exists(const char* bridge, const char* interface) +int wmesh_interface_check_bridge_interface_exists(const char* bridge, const char* interface) { bool ex = FALSE; if (NULL == bridge || NULL == interface || strlen(bridge) == 0 || strlen(interface) == 0) - return MESHD_ERROR_INVALID_PARAMETER; + return WMESHD_ERROR_INVALID_PARAMETER; ex = _check_bridge_interface_exists(bridge, interface); if (FALSE == ex) { - MESH_LOGE("Interface[%s] was not found.", interface); - return MESHD_ERROR_NO_DATA; + WMESH_LOGE("Interface[%s] was not found.", interface); + return WMESHD_ERROR_NO_DATA; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } diff --git a/src/mesh-netlink.c b/src/wmesh-netlink.c similarity index 76% rename from src/mesh-netlink.c rename to src/wmesh-netlink.c index 1a6b70e..24c3cfb 100644 --- a/src/mesh-netlink.c +++ b/src/wmesh-netlink.c @@ -34,11 +34,11 @@ #include #include -#include "mesh.h" -#include "mesh-log.h" -#include "mesh-util.h" -#include "mesh-netlink.h" -#include "mesh-request.h" +#include "wmesh.h" +#include "wmesh-log.h" +#include "wmesh-util.h" +#include "wmesh-netlink.h" +#include "wmesh-request.h" #include //#include "nl80211.h" @@ -90,17 +90,17 @@ static mesh_nl_state *event_state = NULL; static int __initialize_nl80211(mesh_nl_state *state) { - int err = MESHD_ERROR_NONE; + int err = WMESHD_ERROR_NONE; state->nl_socket = nl_socket_alloc(); if (!state->nl_socket) { - MESH_LOGE("Failed to allocate netlink socket."); - return MESHD_ERROR_OUT_OF_MEMORY; + WMESH_LOGE("Failed to allocate netlink socket."); + return WMESHD_ERROR_OUT_OF_MEMORY; } if (genl_connect(state->nl_socket)) { - MESH_LOGE("Failed to connect to generic netlink."); - err = MESHD_ERROR_OPERATION_FAILED; + WMESH_LOGE("Failed to connect to generic netlink."); + err = WMESHD_ERROR_OPERATION_FAILED; goto DESTROY; } @@ -108,8 +108,8 @@ static int __initialize_nl80211(mesh_nl_state *state) state->nl80211_id = genl_ctrl_resolve(state->nl_socket, "nl80211"); if (state->nl80211_id < 0) { - MESH_LOGE("nl80211 not found."); - err = MESHD_ERROR_NO_DATA; + WMESH_LOGE("nl80211 not found."); + err = WMESHD_ERROR_NO_DATA; goto DESTROY; } @@ -137,18 +137,18 @@ static int __get_device_index_from_string(const char* if_name, int *index) int device_index = 0; if (NULL == if_name) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; } device_index = if_nametoindex(if_name); if (device_index == 0) { - MESH_LOGE("No interface index found [%s]", if_name); - return MESHD_ERROR_NO_DATA; + WMESH_LOGE("No interface index found [%s]", if_name); + return WMESHD_ERROR_NO_DATA; } *index = device_index; - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } static int error_handler(struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg) @@ -162,8 +162,8 @@ static int error_handler(struct sockaddr_nl *nla, struct nlmsgerr *err, void *ar state->error_occured = TRUE; strerror_r(err->error, buf, 255); - MESH_LOGD("error_handler"); - MESH_LOGE(" %s (%d)", buf, err->error); + WMESH_LOGD("error_handler"); + WMESH_LOGE(" %s (%d)", buf, err->error); return NL_STOP; } @@ -174,7 +174,7 @@ static int finish_handler(struct nl_msg *msg, void *arg) state->callback_state = MESH_NL_CALLBACK_FINISHED; - MESH_LOGD("finish_handler"); + WMESH_LOGD("finish_handler"); NOTUSED(msg); return NL_SKIP; @@ -186,7 +186,7 @@ static int ack_handler(struct nl_msg *msg, void *arg) state->callback_state = MESH_NL_CALLBACK_FINISHED; - MESH_LOGD("ack_handler"); + WMESH_LOGD("ack_handler"); NOTUSED(msg); return NL_STOP; @@ -199,7 +199,7 @@ static int ack_simple_handler(struct nl_msg *msg, void *arg) (void) msg; *ret = 0; - MESH_LOGD("ack_simple_handler"); + WMESH_LOGD("ack_simple_handler"); return NL_STOP; } @@ -212,7 +212,7 @@ static int family_handler(struct nl_msg *msg, void *arg) struct nlattr *mcast_group; int rem_mcast_group; - MESH_LOGD("family_handler"); + WMESH_LOGD("family_handler"); nla_parse(tb, CTRL_ATTR_MAX, genlmsg_attrdata(gnlh, 0), @@ -236,7 +236,7 @@ static int family_handler(struct nl_msg *msg, void *arg) continue; group->id = nla_get_u32(tb_mcast_group[CTRL_ATTR_MCAST_GRP_ID]); - MESH_LOGD("mcast group id [%d]", group->id); + WMESH_LOGD("mcast group id [%d]", group->id); break; } @@ -273,7 +273,7 @@ static int __nl_get_multicast_id(struct nl_sock *sock, const char *family, const ret = nl_send_auto(sock, msg); if (ret < 0) { - MESH_LOGE("Failed to nl_send_auto"); + WMESH_LOGE("Failed to nl_send_auto"); goto out; } @@ -288,7 +288,7 @@ static int __nl_get_multicast_id(struct nl_sock *sock, const char *family, const if (ret == 0) ret = group_args.id; - MESH_LOGD("mcid : [%d]", ret); + WMESH_LOGD("mcid : [%d]", ret); nla_put_failure: out: @@ -306,14 +306,14 @@ static int __prepare_listen_events(mesh_nl_state *state) /* Configuration multicast group */ mcid = __nl_get_multicast_id(state->nl_socket, "nl80211", "config"); if (mcid < 0) { - MESH_LOGE("Failed to get nl80211 config"); + WMESH_LOGE("Failed to get nl80211 config"); return mcid; } - MESH_LOGD("Mesh multicast id (config): [%d]", mcid); + WMESH_LOGD("Mesh multicast id (config): [%d]", mcid); ret = nl_socket_add_membership(state->nl_socket, mcid); if (ret) { - MESH_LOGE("Failed to nl_socket_add_membership"); + WMESH_LOGE("Failed to nl_socket_add_membership"); return ret; } @@ -322,43 +322,43 @@ static int __prepare_listen_events(mesh_nl_state *state) if (mcid >= 0) { ret = nl_socket_add_membership(state->nl_socket, mcid); if (ret) { - MESH_LOGE("Failed to nl_socket_add_membership"); + WMESH_LOGE("Failed to nl_socket_add_membership"); return ret; } } - MESH_LOGD("Mesh multicast id (scan): [%d]", mcid); + WMESH_LOGD("Mesh multicast id (scan): [%d]", mcid); /* Regulatory multicast group */ mcid = __nl_get_multicast_id(state->nl_socket, "nl80211", "regulatory"); if (mcid >= 0) { ret = nl_socket_add_membership(state->nl_socket, mcid); if (ret) { - MESH_LOGE("Failed to nl_socket_add_membership"); + WMESH_LOGE("Failed to nl_socket_add_membership"); return ret; } } - MESH_LOGD("Mesh multicast id (regulatory): [%d]", mcid); + WMESH_LOGD("Mesh multicast id (regulatory): [%d]", mcid); /* MLME multicast group */ mcid = __nl_get_multicast_id(state->nl_socket, "nl80211", "mlme"); if (mcid >= 0) { ret = nl_socket_add_membership(state->nl_socket, mcid); if (ret) { - MESH_LOGE("Failed to nl_socket_add_membership"); + WMESH_LOGE("Failed to nl_socket_add_membership"); return ret; } } - MESH_LOGD("Mesh multicast id (mlme): [%d]", mcid); + WMESH_LOGD("Mesh multicast id (mlme): [%d]", mcid); mcid = __nl_get_multicast_id(state->nl_socket, "nl80211", "vendor"); if (mcid >= 0) { ret = nl_socket_add_membership(state->nl_socket, mcid); if (ret) { - MESH_LOGE("Failed to nl_socket_add_membership"); + WMESH_LOGE("Failed to nl_socket_add_membership"); return ret; } } - MESH_LOGD("Mesh multicast id (vendor): [%d]", mcid); + WMESH_LOGD("Mesh multicast id (vendor): [%d]", mcid); return 0; } @@ -387,22 +387,22 @@ static int valid_handler(struct nl_msg *msg, void *arg) { struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg)); mesh_nl_state *state = (mesh_nl_state *)arg; - MESH_LOGD("valid_handler"); + WMESH_LOGD("valid_handler"); if (gnlh->cmd == NL80211_CMD_SCAN_ABORTED) { - MESH_LOGD(" Got NL80211_CMD_SCAN_ABORTED."); + WMESH_LOGD(" Got NL80211_CMD_SCAN_ABORTED."); state->callback_state = MESH_NL_CALLBACK_FINISHED; /* Notify scan done status */ - mesh_notify_scan_done(); + wmesh_notify_scan_done(); } else if (gnlh->cmd == NL80211_CMD_NEW_SCAN_RESULTS) { - MESH_LOGD(" Got NL80211_CMD_NEW_SCAN_RESULTS."); + WMESH_LOGD(" Got NL80211_CMD_NEW_SCAN_RESULTS."); state->callback_state = MESH_NL_CALLBACK_FINISHED; /* Notify scan done status */ - mesh_notify_scan_done(); + wmesh_notify_scan_done(); } else { - MESH_LOGD(" Got [%d]", gnlh->cmd); + WMESH_LOGD(" Got [%d]", gnlh->cmd); } return NL_SKIP; @@ -432,31 +432,31 @@ static void __clean_netlink_message(mesh_nl_state *state) state->s_cb = NULL; state->msg = NULL; - MESH_LOGD("message and callback cleaned"); + WMESH_LOGD("message and callback cleaned"); } static int __initialize_netlink_message(mesh_nl_state *state) { - int err = MESHD_ERROR_NONE; + int err = WMESHD_ERROR_NONE; if (NULL == state) { - MESH_LOGE("Invalid parameter !"); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter !"); + return WMESHD_ERROR_INVALID_PARAMETER; } /* Create netlink message */ state->msg = nlmsg_alloc(); if (NULL == state->msg) { - MESH_LOGE("Failed to allocate netlink message"); - return MESHD_ERROR_OUT_OF_MEMORY; + WMESH_LOGE("Failed to allocate netlink message"); + return WMESHD_ERROR_OUT_OF_MEMORY; } /* NL_CB_DEFAULT */ state->cb = nl_cb_alloc(NL_CB_DEFAULT); state->s_cb = nl_cb_alloc(NL_CB_DEFAULT); if (!state->cb) { - MESH_LOGE("Failed to allocate netlink callback"); - err = MESHD_ERROR_OUT_OF_MEMORY; + WMESH_LOGE("Failed to allocate netlink callback"); + err = WMESHD_ERROR_OUT_OF_MEMORY; goto DESTROY; } @@ -469,9 +469,9 @@ static int __initialize_netlink_message(mesh_nl_state *state) nl_cb_set(state->cb, NL_CB_ACK, NL_CB_CUSTOM, ack_handler, state); nl_cb_set(state->cb, NL_CB_VALID, NL_CB_CUSTOM, valid_handler, state); - MESH_LOGD("netlink socket initialized"); + WMESH_LOGD("netlink socket initialized"); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; DESTROY: __clean_netlink_message(state); @@ -488,10 +488,10 @@ static gboolean _on_socket_event_io_received(GIOChannel *source, NOTUSED(source); NOTUSED(condition); - MESH_LOGD("[Event] I/O received"); + WMESH_LOGD("[Event] I/O received"); while (nl_recvmsgs_report(state->nl_socket, state->cb) > 0) - MESH_LOGD(" count [%02d]", ++test); + WMESH_LOGD(" count [%02d]", ++test); /* Do not remove I/O source */ return TRUE; @@ -598,7 +598,7 @@ static int parse_bitrate(struct nlattr *bitrate_attr, char *buf, int buflen) return rate; } -static void parse_bss_param(struct nlattr *bss_param_attr, mesh_station_info_s *station_info) +static void parse_bss_param(struct nlattr *bss_param_attr, wmesh_station_info_s *station_info) { struct nlattr *bss_param_info[NL80211_STA_BSS_PARAM_MAX + 1], *info; static struct nla_policy bss_poilcy[NL80211_STA_BSS_PARAM_MAX + 1] = { @@ -610,48 +610,48 @@ static void parse_bss_param(struct nlattr *bss_param_attr, mesh_station_info_s * }; if (nla_parse_nested(bss_param_info, NL80211_STA_BSS_PARAM_MAX, bss_param_attr, bss_poilcy)) - MESH_LOGE("failed to parse nested bss param attributes!"); + WMESH_LOGE("failed to parse nested bss param attributes!"); info = bss_param_info[NL80211_STA_BSS_PARAM_DTIM_PERIOD]; if (info) { station_info->dtim_period = nla_get_u8(info); - MESH_LOGD(" DTIM period:\t%u", station_info->dtim_period); + WMESH_LOGD(" DTIM period:\t%u", station_info->dtim_period); } info = bss_param_info[NL80211_STA_BSS_PARAM_BEACON_INTERVAL]; if (info) { station_info->beacon_interval = nla_get_u16(info); - MESH_LOGD(" beacon interval:%u", station_info->beacon_interval); + WMESH_LOGD(" beacon interval:%u", station_info->beacon_interval); } info = bss_param_info[NL80211_STA_BSS_PARAM_CTS_PROT]; if (info) { - MESH_LOGD(" CTS protection:"); + WMESH_LOGD(" CTS protection:"); if (nla_get_u16(info)) { - MESH_LOGD(" yes"); + WMESH_LOGD(" yes"); station_info->cts_protection = TRUE; } else { - MESH_LOGD(" no"); + WMESH_LOGD(" no"); station_info->cts_protection = FALSE; } } info = bss_param_info[NL80211_STA_BSS_PARAM_SHORT_PREAMBLE]; if (info) { - MESH_LOGD(" short preamble:"); + WMESH_LOGD(" short preamble:"); if (nla_get_u16(info)) { - MESH_LOGD(" yes"); + WMESH_LOGD(" yes"); station_info->short_preamble = TRUE; } else { - MESH_LOGD(" no"); + WMESH_LOGD(" no"); station_info->short_preamble = FALSE; } } info = bss_param_info[NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME]; if (info) { - MESH_LOGD(" short slot time:"); + WMESH_LOGD(" short slot time:"); if (nla_get_u16(info)) { - MESH_LOGD(" yes"); + WMESH_LOGD(" yes"); station_info->short_slot_time = TRUE; } else { - MESH_LOGD(" no"); + WMESH_LOGD(" no"); station_info->short_slot_time = FALSE; } } @@ -663,16 +663,16 @@ static void print_power_mode(struct nlattr *a) switch (pm) { case NL80211_MESH_POWER_ACTIVE: - MESH_LOGD("ACTIVE"); + WMESH_LOGD("ACTIVE"); break; case NL80211_MESH_POWER_LIGHT_SLEEP: - MESH_LOGD("LIGHT SLEEP"); + WMESH_LOGD("LIGHT SLEEP"); break; case NL80211_MESH_POWER_DEEP_SLEEP: - MESH_LOGD("DEEP SLEEP"); + WMESH_LOGD("DEEP SLEEP"); break; default: - MESH_LOGD("UNKNOWN"); + WMESH_LOGD("UNKNOWN"); break; } } @@ -736,26 +736,26 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) #endif /* NL80211_STA_INFO_CHAIN_SIGNAL */ char *attr_mac = NULL; mesh_nl_state *state = (mesh_nl_state *)arg; - mesh_station_info_s *station_info = NULL; + wmesh_station_info_s *station_info = NULL; nla_parse(attr_info, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL); if (!attr_info[NL80211_ATTR_STA_INFO]) { - MESH_LOGE("[Station] missing station stats !"); + WMESH_LOGE("[Station] missing station stats !"); return NL_SKIP; } if (nla_parse_nested(sta_info, NL80211_STA_INFO_MAX, attr_info[NL80211_ATTR_STA_INFO], stats_policy)) { - MESH_LOGE("[Station] Failed to parse nested attributes!"); + WMESH_LOGE("[Station] Failed to parse nested attributes!"); return NL_SKIP; } /* Allocation */ - station_info = g_try_new0(mesh_station_info_s, 1); + station_info = g_try_new0(wmesh_station_info_s, 1); if (NULL == station_info) { - MESH_LOGE("Failed to allocate station info !"); + WMESH_LOGE("Failed to allocate station info !"); return NL_SKIP; } @@ -766,52 +766,52 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) attr_mac[3], attr_mac[4], attr_mac[5]); if_indextoname(nla_get_u32(attr_info[NL80211_ATTR_IFINDEX]), dev); station_info->bssid = g_strdup(mac_addr); - MESH_LOGD("Station %s [dev %s]", station_info->bssid, dev); + WMESH_LOGD("Station %s [dev %s]", station_info->bssid, dev); /* Inactive time */ if (0 != sta_info[NL80211_STA_INFO_INACTIVE_TIME]) { station_info->inactive_time = nla_get_u32(sta_info[NL80211_STA_INFO_INACTIVE_TIME]); - MESH_LOGE(" inactive time:\t%u ms", station_info->inactive_time); + WMESH_LOGE(" inactive time:\t%u ms", station_info->inactive_time); } /* RX Bytes */ if (0 != sta_info[NL80211_STA_INFO_RX_BYTES]) { station_info->rx_bytes = nla_get_u32(sta_info[NL80211_STA_INFO_RX_BYTES]); - MESH_LOGD(" rx bytes:\t%u", station_info->rx_bytes); + WMESH_LOGD(" rx bytes:\t%u", station_info->rx_bytes); } else if (0 != sta_info[NL80211_STA_INFO_RX_BYTES64]) { station_info->rx_bytes = (unsigned long long)nla_get_u64(sta_info[NL80211_STA_INFO_RX_BYTES64]); - MESH_LOGE(" rx bytes:\t%llu", station_info->rx_bytes); + WMESH_LOGE(" rx bytes:\t%llu", station_info->rx_bytes); } /* RX Packets */ if (0 != sta_info[NL80211_STA_INFO_RX_PACKETS]) { station_info->rx_packets = nla_get_u32(sta_info[NL80211_STA_INFO_RX_PACKETS]); - MESH_LOGD(" rx packets:\t%u", station_info->rx_packets); + WMESH_LOGD(" rx packets:\t%u", station_info->rx_packets); } /* TX Bytes */ if (0 != sta_info[NL80211_STA_INFO_TX_BYTES]) { station_info->tx_bytes = nla_get_u32(sta_info[NL80211_STA_INFO_TX_BYTES]); - MESH_LOGD(" tx bytes:\t%u", station_info->tx_bytes); + WMESH_LOGD(" tx bytes:\t%u", station_info->tx_bytes); } else if (0 != sta_info[NL80211_STA_INFO_TX_BYTES64]) { station_info->tx_bytes = (unsigned long long)nla_get_u64(sta_info[NL80211_STA_INFO_TX_BYTES64]); - MESH_LOGD(" tx bytes:\t%llu", station_info->rx_packets); + WMESH_LOGD(" tx bytes:\t%llu", station_info->rx_packets); } /* LLID, PLID */ if (0 != sta_info[NL80211_STA_INFO_LLID]) { station_info->llid = nla_get_u16(sta_info[NL80211_STA_INFO_LLID]); - MESH_LOGD(" mesh llid:\t%d", station_info->llid); + WMESH_LOGD(" mesh llid:\t%d", station_info->llid); } if (0 != sta_info[NL80211_STA_INFO_PLID]) { station_info->llid = nla_get_u16(sta_info[NL80211_STA_INFO_PLID]); - MESH_LOGD(" mesh plid:\t%d", station_info->plid); + WMESH_LOGD(" mesh plid:\t%d", station_info->plid); } /* Plink state */ @@ -845,7 +845,7 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) snprintf(state_name, 10, "%s", "UNKNOWN"); break; } - MESH_LOGD(" mesh plink:\t%s", state_name); + WMESH_LOGD(" mesh plink:\t%s", state_name); } #ifdef NL80211_STA_INFO_CHAIN_SIGNAL /* RSSI Signal */ @@ -853,7 +853,7 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) if (0 != sta_info[NL80211_STA_INFO_SIGNAL]) { station_info->rssi = (int8_t)nla_get_u8(sta_info[NL80211_STA_INFO_SIGNAL]); - MESH_LOGD(" signal: \t%d %sdBm", station_info->rssi, chain); + WMESH_LOGD(" signal: \t%d %sdBm", station_info->rssi, chain); } #endif /* NL80211_STA_INFO_CHAIN_SIGNAL */ /* TX Bitrate */ @@ -861,23 +861,23 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) char buf[100]; station_info->tx_bitrate = parse_bitrate(sta_info[NL80211_STA_INFO_TX_BITRATE], buf, sizeof(buf)); - MESH_LOGD(" tx bitrate:\t%s", buf); + WMESH_LOGD(" tx bitrate:\t%s", buf); } if (0 != sta_info[NL80211_STA_INFO_TX_PACKETS]) { station_info->tx_packets = nla_get_u32(sta_info[NL80211_STA_INFO_TX_PACKETS]); - MESH_LOGD(" tx packets:\t%u", station_info->tx_packets); + WMESH_LOGD(" tx packets:\t%u", station_info->tx_packets); } if (0 != sta_info[NL80211_STA_INFO_TX_RETRIES]) { station_info->tx_retries = nla_get_u32(sta_info[NL80211_STA_INFO_TX_RETRIES]); - MESH_LOGD(" tx retries:\t%u", station_info->tx_retries); + WMESH_LOGD(" tx retries:\t%u", station_info->tx_retries); } if (0 != sta_info[NL80211_STA_INFO_TX_FAILED]) { station_info->tx_failed = nla_get_u32(sta_info[NL80211_STA_INFO_TX_FAILED]); - MESH_LOGD(" tx failed:\t%u", station_info->tx_failed); + WMESH_LOGD(" tx failed:\t%u", station_info->tx_failed); } #ifdef NL80211_STA_INFO_CHAIN_SIGNAL_AVG /* Signal average */ @@ -885,14 +885,14 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) if (0 != sta_info[NL80211_STA_INFO_SIGNAL_AVG]) { station_info->rssi_avg = (int8_t)nla_get_u8(sta_info[NL80211_STA_INFO_SIGNAL_AVG]); - MESH_LOGD(" signal avg:\t%d %sdBm", station_info->rssi_avg, chain); + WMESH_LOGD(" signal avg:\t%d %sdBm", station_info->rssi_avg, chain); } #endif /* NL80211_STA_INFO_CHAIN_SIGNAL_AVG */ if (0 != sta_info[NL80211_STA_INFO_RX_BITRATE]) { char buf[100]; station_info->rx_bitrate = parse_bitrate(sta_info[NL80211_STA_INFO_RX_BITRATE], buf, sizeof(buf)); - MESH_LOGD(" rx bitrate:\t%s", buf); + WMESH_LOGD(" rx bitrate:\t%s", buf); } if (0 != sta_info[NL80211_STA_INFO_BSS_PARAM]) @@ -901,7 +901,7 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) if (0 != sta_info[NL80211_STA_INFO_CONNECTED_TIME]) { station_info->connected_time = nla_get_u32(sta_info[NL80211_STA_INFO_CONNECTED_TIME]); - MESH_LOGD(" connected time:\t%u seconds", station_info->connected_time); + WMESH_LOGD(" connected time:\t%u seconds", station_info->connected_time); } if (0 != sta_info[NL80211_STA_INFO_STA_FLAGS]) { @@ -909,78 +909,78 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) nla_data(sta_info[NL80211_STA_INFO_STA_FLAGS]); if (sta_flags->mask & BIT(NL80211_STA_FLAG_AUTHORIZED)) { - MESH_LOGD(" authorized:"); + WMESH_LOGD(" authorized:"); if (sta_flags->set & BIT(NL80211_STA_FLAG_AUTHORIZED)) { - MESH_LOGD(" yes"); + WMESH_LOGD(" yes"); station_info->authorized = TRUE; } else { - MESH_LOGD(" no"); + WMESH_LOGD(" no"); station_info->authorized = FALSE; } } if (sta_flags->mask & BIT(NL80211_STA_FLAG_AUTHENTICATED)) { - MESH_LOGD(" authenticated:"); + WMESH_LOGD(" authenticated:"); if (sta_flags->set & BIT(NL80211_STA_FLAG_AUTHENTICATED)) { - MESH_LOGD(" yes"); + WMESH_LOGD(" yes"); station_info->authenticated = TRUE; } else { - MESH_LOGD(" no"); + WMESH_LOGD(" no"); station_info->authenticated = FALSE; } } if (sta_flags->mask & BIT(NL80211_STA_FLAG_ASSOCIATED)) { - MESH_LOGD(" associated:"); + WMESH_LOGD(" associated:"); if (sta_flags->set & BIT(NL80211_STA_FLAG_ASSOCIATED)) { - MESH_LOGD(" yes"); + WMESH_LOGD(" yes"); station_info->associated = TRUE; } else { - MESH_LOGD(" no"); + WMESH_LOGD(" no"); station_info->associated = FALSE; } } if (sta_flags->mask & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE)) { - MESH_LOGD(" preamble:"); + WMESH_LOGD(" preamble:"); if (sta_flags->set & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE)) { - MESH_LOGD(" short"); + WMESH_LOGD(" short"); station_info->preamble = TRUE; } else { - MESH_LOGD(" long"); + WMESH_LOGD(" long"); station_info->preamble = FALSE; } } if (sta_flags->mask & BIT(NL80211_STA_FLAG_WME)) { - MESH_LOGD(" WMM/WME:"); + WMESH_LOGD(" WMM/WME:"); if (sta_flags->set & BIT(NL80211_STA_FLAG_WME)) { - MESH_LOGD(" yes"); + WMESH_LOGD(" yes"); station_info->wme = TRUE; } else { - MESH_LOGD(" no"); + WMESH_LOGD(" no"); station_info->wme = FALSE; } } if (sta_flags->mask & BIT(NL80211_STA_FLAG_MFP)) { - MESH_LOGD(" MFP:"); + WMESH_LOGD(" MFP:"); if (sta_flags->set & BIT(NL80211_STA_FLAG_MFP)) { - MESH_LOGD(" yes"); + WMESH_LOGD(" yes"); station_info->mfp = TRUE; } else { - MESH_LOGD(" no"); + WMESH_LOGD(" no"); station_info->mfp = FALSE; } } if (sta_flags->mask & BIT(NL80211_STA_FLAG_TDLS_PEER)) { - MESH_LOGD(" TDLS peer:"); + WMESH_LOGD(" TDLS peer:"); if (sta_flags->set & BIT(NL80211_STA_FLAG_TDLS_PEER)) { - MESH_LOGD(" yes"); + WMESH_LOGD(" yes"); station_info->tdls_peer = TRUE; } else { - MESH_LOGD(" no"); + WMESH_LOGD(" no"); station_info->tdls_peer = FALSE; } } @@ -989,38 +989,38 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) if (0 != sta_info[NL80211_STA_INFO_BEACON_LOSS]) { station_info->beacon_loss = nla_get_u32(sta_info[NL80211_STA_INFO_BEACON_LOSS]); - MESH_LOGD(" beacon loss:\t%u", station_info->beacon_loss); + WMESH_LOGD(" beacon loss:\t%u", station_info->beacon_loss); } if (0 != sta_info[NL80211_STA_INFO_T_OFFSET]) { station_info->t_offset = (unsigned long long)nla_get_u64(sta_info[NL80211_STA_INFO_T_OFFSET]); - MESH_LOGD(" Toffset:\t%llu us", station_info->t_offset); + WMESH_LOGD(" Toffset:\t%llu us", station_info->t_offset); } if (0 != sta_info[NL80211_STA_INFO_LOCAL_PM]) { station_info->local_ps_mode = nla_get_u32(sta_info[NL80211_STA_INFO_LOCAL_PM]); - MESH_LOGD(" mesh local PS mode:\t"); + WMESH_LOGD(" mesh local PS mode:\t"); print_power_mode(sta_info[NL80211_STA_INFO_LOCAL_PM]); } if (0 != sta_info[NL80211_STA_INFO_PEER_PM]) { station_info->peer_ps_mode = nla_get_u32(sta_info[NL80211_STA_INFO_PEER_PM]); - MESH_LOGD(" mesh peer PS mode:\t"); + WMESH_LOGD(" mesh peer PS mode:\t"); print_power_mode(sta_info[NL80211_STA_INFO_PEER_PM]); } if (0 != sta_info[NL80211_STA_INFO_NONPEER_PM]) { station_info->non_peer_ps_mode = nla_get_u32(sta_info[NL80211_STA_INFO_NONPEER_PM]); - MESH_LOGD(" mesh non-peer PS mode:\t"); + WMESH_LOGD(" mesh non-peer PS mode:\t"); print_power_mode(sta_info[NL80211_STA_INFO_NONPEER_PM]); } #ifdef NL80211_STA_INFO_RX_DROP_MISC if (0 != sta_info[NL80211_STA_INFO_RX_DROP_MISC]) { station_info->rx_drop_misc = (unsigned long long)nla_get_u64(sta_info[NL80211_STA_INFO_RX_DROP_MISC]); - MESH_LOGD(" rx drop misc:\t%llu", station_info->rx_drop_misc); + WMESH_LOGD(" rx drop misc:\t%llu", station_info->rx_drop_misc); } #endif /* NL80211_STA_INFO_RX_DROP_MISC */ @@ -1028,7 +1028,7 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) if (0 != sta_info[NL80211_STA_INFO_BEACON_RX]) { station_info->beacon_rx = (unsigned long long)nla_get_u64(sta_info[NL80211_STA_INFO_BEACON_RX]); - MESH_LOGD(" beacon rx:\t%llu", station_info->beacon_rx); + WMESH_LOGD(" beacon rx:\t%llu", station_info->beacon_rx); } #endif /* NL80211_STA_INFO_BEACON_RX */ @@ -1036,7 +1036,7 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) if (0 != sta_info[NL80211_STA_INFO_BEACON_SIGNAL_AVG]) { station_info->beacon_signal_avg = nla_get_u8(sta_info[NL80211_STA_INFO_BEACON_SIGNAL_AVG]); - MESH_LOGD(" beacon signal avg:\t%d dBm", station_info->beacon_signal_avg); + WMESH_LOGD(" beacon signal avg:\t%d dBm", station_info->beacon_signal_avg); } #endif /* NL80211_STA_INFO_BEACON_SIGNAL_AVG */ @@ -1044,10 +1044,10 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) if (0 != sta_info[NL80211_STA_INFO_RX_DURATION]) { station_info->rx_duration = (unsigned long long)nla_get_u64(sta_info[NL80211_STA_INFO_RX_DURATION]); - MESH_LOGD(" rx duration:\t%lld us", station_info->rx_duration); + WMESH_LOGD(" rx duration:\t%lld us", station_info->rx_duration); } #endif /* NL80211_STA_INFO_RX_DURATION */ - MESH_LOGD(""); + WMESH_LOGD(""); *(state->station_list) = g_list_prepend(*(state->station_list), station_info); return NL_SKIP; @@ -1070,7 +1070,7 @@ static int _on_receive_mpath_info(struct nl_msg *msg, void *arg) }; mesh_nl_state *state = (mesh_nl_state *)arg; - mesh_mpath_info_s *mpath_info = NULL; + wmesh_mpath_info_s *mpath_info = NULL; nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL); @@ -1082,66 +1082,66 @@ static int _on_receive_mpath_info(struct nl_msg *msg, void *arg) */ if (!tb[NL80211_ATTR_MPATH_INFO]) { - MESH_LOGE("missing mesh path info!"); + WMESH_LOGE("missing mesh path info!"); return NL_SKIP; } if (nla_parse_nested(pinfo, NL80211_MPATH_INFO_MAX, tb[NL80211_ATTR_MPATH_INFO], mpath_policy)) { - MESH_LOGE("failed to parse nested attributes!"); + WMESH_LOGE("failed to parse nested attributes!"); return NL_SKIP; } - mpath_info = g_try_new0(mesh_mpath_info_s, 1); + mpath_info = g_try_new0(wmesh_mpath_info_s, 1); if (NULL == mpath_info) { - MESH_LOGE("Failed to allocate mesh path info !"); + WMESH_LOGE("Failed to allocate mesh path info !"); return NL_SKIP; } mac_addr_n2a(dst, nla_data(tb[NL80211_ATTR_MAC])); mpath_info->dest_addr = g_strdup(dst); - MESH_LOGD("Destination Address : %s", mpath_info->dest_addr); + WMESH_LOGD("Destination Address : %s", mpath_info->dest_addr); mac_addr_n2a(next_hop, nla_data(tb[NL80211_ATTR_MPATH_NEXT_HOP])); mpath_info->next_hop = g_strdup(next_hop); - MESH_LOGD("Next hop Address : %s", mpath_info->next_hop); + WMESH_LOGD("Next hop Address : %s", mpath_info->next_hop); if_indextoname(nla_get_u32(tb[NL80211_ATTR_IFINDEX]), dev); mpath_info->interface = g_strdup(dev); - MESH_LOGD("Interface : %s", mpath_info->interface); + WMESH_LOGD("Interface : %s", mpath_info->interface); if (pinfo[NL80211_MPATH_INFO_SN]) { mpath_info->sn = nla_get_u32(pinfo[NL80211_MPATH_INFO_SN]); - MESH_LOGD("SN : %u", mpath_info->sn); + WMESH_LOGD("SN : %u", mpath_info->sn); } if (pinfo[NL80211_MPATH_INFO_METRIC]) { mpath_info->metric = nla_get_u32(pinfo[NL80211_MPATH_INFO_METRIC]); - MESH_LOGD("Metric : %u", mpath_info->metric); + WMESH_LOGD("Metric : %u", mpath_info->metric); } if (pinfo[NL80211_MPATH_INFO_FRAME_QLEN]) { mpath_info->qlen = nla_get_u32(pinfo[NL80211_MPATH_INFO_FRAME_QLEN]); - MESH_LOGD("QLEN : %u", mpath_info->qlen); + WMESH_LOGD("QLEN : %u", mpath_info->qlen); } if (pinfo[NL80211_MPATH_INFO_EXPTIME]) { mpath_info->exptime = nla_get_u32(pinfo[NL80211_MPATH_INFO_EXPTIME]); - MESH_LOGD("ExpTime : %u", mpath_info->exptime); + WMESH_LOGD("ExpTime : %u", mpath_info->exptime); } if (pinfo[NL80211_MPATH_INFO_DISCOVERY_TIMEOUT]) { mpath_info->discovery_timeout = nla_get_u32(pinfo[NL80211_MPATH_INFO_DISCOVERY_TIMEOUT]); - MESH_LOGD("Discovery Timeout : %u", mpath_info->discovery_timeout); + WMESH_LOGD("Discovery Timeout : %u", mpath_info->discovery_timeout); } if (pinfo[NL80211_MPATH_INFO_DISCOVERY_RETRIES]) { mpath_info->discovery_retries = nla_get_u8(pinfo[NL80211_MPATH_INFO_DISCOVERY_RETRIES]); - MESH_LOGD("Discovery Retries : %u", mpath_info->discovery_retries); + WMESH_LOGD("Discovery Retries : %u", mpath_info->discovery_retries); } if (pinfo[NL80211_MPATH_INFO_FLAGS]) { mpath_info->flags = nla_get_u8(pinfo[NL80211_MPATH_INFO_FLAGS]); - MESH_LOGD("Flags : 0x%x", mpath_info->flags); + WMESH_LOGD("Flags : 0x%x", mpath_info->flags); } - MESH_LOGD(""); + WMESH_LOGD(""); *(state->mpath_list) = g_list_prepend(*(state->mpath_list), mpath_info); return NL_SKIP; @@ -1160,32 +1160,32 @@ static int _on_receive_mesh_event(struct nl_msg *msg, void *arg) if (tb[NL80211_ATTR_IFINDEX]) { if_indextoname(nla_get_u32(tb[NL80211_ATTR_IFINDEX]), ifname); - MESH_LOGD("%s: ", ifname); + WMESH_LOGD("%s: ", ifname); } switch (gnlh->cmd) { case NL80211_CMD_NEW_STATION: mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC])); - MESH_LOGD("[%s] new station [%s]", ifname, macbuf); + WMESH_LOGD("[%s] new station [%s]", ifname, macbuf); break; case NL80211_CMD_DEL_STATION: mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC])); - MESH_LOGD("[%s] del station [%s]", ifname, macbuf); + WMESH_LOGD("[%s] del station [%s]", ifname, macbuf); break; case NL80211_CMD_NEW_MPATH: mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC])); - MESH_LOGD("[%s] new mpath [%s]", ifname, macbuf); + WMESH_LOGD("[%s] new mpath [%s]", ifname, macbuf); - mesh_notify_station_joined((const char*)macbuf); + wmesh_notify_station_joined((const char*)macbuf); break; case NL80211_CMD_DEL_MPATH: mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC])); - MESH_LOGD("[%s] del mpath [%s]", ifname, macbuf); + WMESH_LOGD("[%s] del mpath [%s]", ifname, macbuf); - mesh_notify_station_left((const char*)macbuf); + wmesh_notify_station_left((const char*)macbuf); break; default: - MESH_LOGD("event [%d] is not handled", gnlh->cmd); + WMESH_LOGD("event [%d] is not handled", gnlh->cmd); break; } @@ -1207,20 +1207,20 @@ static int _send_nl_set_mesh_parameter(const char* mesh_if_name, }; struct nlattr *container; - int err = MESHD_ERROR_NONE; + int err = WMESHD_ERROR_NONE; int device_index = 0; int ret; int test = 0; ret = __initialize_nl80211(&state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to initialize nl80211"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to initialize nl80211"); return ret; } ret = __initialize_netlink_message(&state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to initialize netlink message"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to initialize netlink message"); goto DESTROY; } @@ -1230,8 +1230,8 @@ static int _send_nl_set_mesh_parameter(const char* mesh_if_name, /* Add attributes into message */ ret = __get_device_index_from_string(mesh_if_name, &device_index); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to get mesh device index"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to get mesh device index"); err = ret; goto DESTROY; } @@ -1239,21 +1239,21 @@ static int _send_nl_set_mesh_parameter(const char* mesh_if_name, container = nla_nest_start(state.msg, NL80211_ATTR_MESH_PARAMS); if (!container) { - MESH_LOGE("Failed to initialize netlink message"); + WMESH_LOGE("Failed to initialize netlink message"); goto DESTROY; } /* Logic need to be changed if additional parameter is required */ if (g_strcmp0(MESH_PARAM_HWMP_ROOTMODE, param_name) == 0) { - MESH_LOGD(" [mesh_hwmp_rootmode] : [%d]", value); + WMESH_LOGD(" [mesh_hwmp_rootmode] : [%d]", value); NLA_PUT_U8(state.msg, NL80211_MESHCONF_HWMP_ROOTMODE, (uint8_t)value); } else if (g_strcmp0(MESH_PARAM_GATE_ANNOUNCE, param_name) == 0) { - MESH_LOGD(" [mesh_gate_announcements] : [%d]", value); + WMESH_LOGD(" [mesh_gate_announcements] : [%d]", value); NLA_PUT_U8(state.msg, NL80211_MESHCONF_GATE_ANNOUNCEMENTS, (uint8_t)value); } else { - MESH_LOGE("Parameter [%s] is not required !", param_name); + WMESH_LOGE("Parameter [%s] is not required !", param_name); nla_nest_end(state.msg, container); goto DESTROY; } @@ -1262,16 +1262,16 @@ static int _send_nl_set_mesh_parameter(const char* mesh_if_name, /* Send message into kernel */ ret = nl_send_auto(state.nl_socket, state.msg); if (ret < 0) { - MESH_LOGE("Failed to nl_send_auto() [%s](%d)", + WMESH_LOGE("Failed to nl_send_auto() [%s](%d)", nl_geterror(ret), ret); - err = MESHD_ERROR_OPERATION_FAILED; + err = WMESHD_ERROR_OPERATION_FAILED; goto DESTROY; } /* sync response */ state.callback_state = MESH_NL_CALLBACK_TRYING; while (state.callback_state == MESH_NL_CALLBACK_TRYING) { - MESH_LOGD(" count [%02d]", ++test); + WMESH_LOGD(" count [%02d]", ++test); nl_recvmsgs(state.nl_socket, state.cb); } @@ -1282,11 +1282,11 @@ DESTROY: return err; nla_put_failure: - MESH_LOGE("Failed to message build"); + WMESH_LOGE("Failed to message build"); __clean_netlink_message(&state); __clean_nl80211(&state); - return MESHD_ERROR_OPERATION_FAILED; + return WMESHD_ERROR_OPERATION_FAILED; } static int _send_nl_get_station_info(const char* if_name, GList **station_list) @@ -1301,20 +1301,20 @@ static int _send_nl_get_station_info(const char* if_name, GList **station_list) .s_cb = NULL, .station_list = station_list }; - int err = MESHD_ERROR_NONE; + int err = WMESHD_ERROR_NONE; int device_index = 0; int ret; int test = 0; ret = __initialize_nl80211(&state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to initialize nl80211"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to initialize nl80211"); return ret; } ret = __initialize_netlink_message(&state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to initialize netlink message"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to initialize netlink message"); goto DESTROY; } @@ -1323,10 +1323,10 @@ static int _send_nl_get_station_info(const char* if_name, GList **station_list) NLM_F_DUMP, NL80211_CMD_GET_STATION, 0); /* Add attributes into message */ - MESH_LOGD("Dump station list with interface [%s]", if_name); + WMESH_LOGD("Dump station list with interface [%s]", if_name); ret = __get_device_index_from_string(if_name, &device_index); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to get mesh interface device index"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to get mesh interface device index"); err = ret; goto DESTROY; } @@ -1339,19 +1339,19 @@ static int _send_nl_get_station_info(const char* if_name, GList **station_list) /* Send message into kernel */ ret = nl_send_auto(state.nl_socket, state.msg); if (ret < 0) { - MESH_LOGE("Failed to nl_send_auto() [%s](%d)", + WMESH_LOGE("Failed to nl_send_auto() [%s](%d)", nl_geterror(ret), ret); - err = MESHD_ERROR_OPERATION_FAILED; + err = WMESHD_ERROR_OPERATION_FAILED; goto DESTROY; } /* sync response */ state.callback_state = MESH_NL_CALLBACK_TRYING; while (state.callback_state == MESH_NL_CALLBACK_TRYING) { - MESH_LOGD(" count [%02d]", ++test); + WMESH_LOGD(" count [%02d]", ++test); nl_recvmsgs(state.nl_socket, state.cb); } - MESH_LOGD("Finished"); + WMESH_LOGD("Finished"); DESTROY: __clean_netlink_message(&state); @@ -1360,11 +1360,11 @@ DESTROY: return err; nla_put_failure: - MESH_LOGE("Failed to message build"); + WMESH_LOGE("Failed to message build"); __clean_netlink_message(&state); __clean_nl80211(&state); - return MESHD_ERROR_OPERATION_FAILED; + return WMESHD_ERROR_OPERATION_FAILED; } static int _send_nl_del_station_info(const char* if_name, char* peer) @@ -1379,19 +1379,19 @@ static int _send_nl_del_station_info(const char* if_name, char* peer) .s_cb = NULL, .station_list = NULL, }; - int err = MESHD_ERROR_NONE; + int err = WMESHD_ERROR_NONE; int device_index = 0; int ret; ret = __initialize_nl80211(&state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to initialize nl80211"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to initialize nl80211"); return ret; } ret = __initialize_netlink_message(&state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to initialize netlink message"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to initialize netlink message"); goto DESTROY; } @@ -1400,10 +1400,10 @@ static int _send_nl_del_station_info(const char* if_name, char* peer) NLM_F_DUMP, NL80211_CMD_DEL_STATION, 0); /* Add attributes into message */ - MESH_LOGD("Delete a station [%s] with interface [%s]", peer, if_name); + WMESH_LOGD("Delete a station [%s] with interface [%s]", peer, if_name); ret = __get_device_index_from_string(if_name, &device_index); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to get mesh interface device index"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to get mesh interface device index"); err = ret; goto DESTROY; } @@ -1413,9 +1413,9 @@ static int _send_nl_del_station_info(const char* if_name, char* peer) /* Send message into kernel */ ret = nl_send_auto(state.nl_socket, state.msg); if (ret < 0) { - MESH_LOGE("Failed to nl_send_auto() [%s](%d)", + WMESH_LOGE("Failed to nl_send_auto() [%s](%d)", nl_geterror(ret), ret); - err = MESHD_ERROR_OPERATION_FAILED; + err = WMESHD_ERROR_OPERATION_FAILED; goto DESTROY; } @@ -1426,11 +1426,11 @@ DESTROY: return err; nla_put_failure: - MESH_LOGE("Failed to message build"); + WMESH_LOGE("Failed to message build"); __clean_netlink_message(&state); __clean_nl80211(&state); - return MESHD_ERROR_OPERATION_FAILED; + return WMESHD_ERROR_OPERATION_FAILED; } static int _send_nl_get_mpath_info(const char* if_name, GList **mpath_list) @@ -1445,20 +1445,20 @@ static int _send_nl_get_mpath_info(const char* if_name, GList **mpath_list) .s_cb = NULL, .mpath_list = mpath_list }; - int err = MESHD_ERROR_NONE; + int err = WMESHD_ERROR_NONE; int device_index = 0; int ret; int test = 0; ret = __initialize_nl80211(&state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to initialize nl80211"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to initialize nl80211"); return ret; } ret = __initialize_netlink_message(&state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to initialize netlink message"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to initialize netlink message"); goto DESTROY; } @@ -1467,10 +1467,10 @@ static int _send_nl_get_mpath_info(const char* if_name, GList **mpath_list) NLM_F_DUMP, NL80211_CMD_GET_MPATH, 0); /* Add attributes into message */ - MESH_LOGD("Dump station list with interface [%s]", if_name); + WMESH_LOGD("Dump station list with interface [%s]", if_name); ret = __get_device_index_from_string(if_name, &device_index); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to get mesh interface device index"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to get mesh interface device index"); err = ret; goto DESTROY; } @@ -1483,19 +1483,19 @@ static int _send_nl_get_mpath_info(const char* if_name, GList **mpath_list) /* Send message into kernel */ ret = nl_send_auto(state.nl_socket, state.msg); if (ret < 0) { - MESH_LOGE("Failed to nl_send_auto() [%s](%d)", + WMESH_LOGE("Failed to nl_send_auto() [%s](%d)", nl_geterror(ret), ret); - err = MESHD_ERROR_OPERATION_FAILED; + err = WMESHD_ERROR_OPERATION_FAILED; goto DESTROY; } /* sync response */ state.callback_state = MESH_NL_CALLBACK_TRYING; while (state.callback_state == MESH_NL_CALLBACK_TRYING) { - MESH_LOGD(" count [%02d]", ++test); + WMESH_LOGD(" count [%02d]", ++test); nl_recvmsgs(state.nl_socket, state.cb); } - MESH_LOGD("Finished"); + WMESH_LOGD("Finished"); DESTROY: __clean_netlink_message(&state); @@ -1504,42 +1504,42 @@ DESTROY: return err; nla_put_failure: - MESH_LOGE("Failed to message build"); + WMESH_LOGE("Failed to message build"); __clean_netlink_message(&state); __clean_nl80211(&state); - return MESHD_ERROR_OPERATION_FAILED; + return WMESHD_ERROR_OPERATION_FAILED; } static int _send_nl_register_event_handler() { - int err = MESHD_ERROR_NONE; + int err = WMESHD_ERROR_NONE; int ret; GIOChannel *recv_channel = NULL; if (event_state) { - MESH_LOGE("Already event handler registered !"); - return MESHD_ERROR_IN_PROGRESS; + WMESH_LOGE("Already event handler registered !"); + return WMESHD_ERROR_IN_PROGRESS; } event_state = _create_mesh_nl_state(""); ret = __initialize_nl80211(event_state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to initialize nl80211"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to initialize nl80211"); return ret; } /* Subscribe multicast group should be proceed before scanning */ ret = __prepare_listen_events(event_state); if (ret) { - MESH_LOGE("__prepare_listen_events : [%d]", ret); + WMESH_LOGE("__prepare_listen_events : [%d]", ret); goto DESTROY; } ret = __initialize_netlink_message(event_state); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to initialize netlink message"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to initialize netlink message"); goto DESTROY; } @@ -1552,12 +1552,12 @@ static int _send_nl_register_event_handler() /* No sequence checking for multicast messages. */ nl_cb_set(event_state->cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL); - MESH_LOGD("Register event handler"); + WMESH_LOGD("Register event handler"); /* Change socket type to non-blocking */ ret = nl_socket_set_nonblocking(event_state->nl_socket); if (ret < 0) - MESH_LOGE("Failed to non-blocking socket [%s](%d)", nl_geterror(ret), ret); + WMESH_LOGE("Failed to non-blocking socket [%s](%d)", nl_geterror(ret), ret); /* Register I/O callback to wait asynchronously */ if (FALSE == event_state->error_occured) { @@ -1566,12 +1566,12 @@ static int _send_nl_register_event_handler() (G_IO_IN | G_IO_ERR), _on_socket_event_io_received, event_state); g_io_channel_unref(recv_channel); } else { - MESH_LOGE("Error responded. Failed to register event callback !!"); + WMESH_LOGE("Error responded. Failed to register event callback !!"); goto DESTROY; } /* Resource should be free on I/O callback */ - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; DESTROY: __clean_netlink_message(event_state); @@ -1581,95 +1581,95 @@ DESTROY: return err; } -int mesh_netlink_set_mesh_parameter(const char* mesh_if_name, +int wmesh_netlink_set_mesh_parameter(const char* mesh_if_name, const char* param_name, unsigned int value) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; if (NULL == mesh_if_name || strlen(mesh_if_name) > IFNAMSIZ) { - MESH_LOGE("Invalid parameter [%p]", mesh_if_name); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", mesh_if_name); + return WMESHD_ERROR_INVALID_PARAMETER; } - MESH_LOGD("Set mesh[%s] param [%s] value [%d]", + WMESH_LOGD("Set mesh[%s] param [%s] value [%d]", mesh_if_name, param_name, value); ret = _send_nl_set_mesh_parameter(mesh_if_name, param_name, value); return ret; } -int mesh_netlink_get_station_info(const char* mesh_if_name, GList **station_list) +int wmesh_netlink_get_station_info(const char* mesh_if_name, GList **station_list) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; if (NULL == mesh_if_name || strlen(mesh_if_name) > IFNAMSIZ) { - MESH_LOGE("Invalid parameter [%p]", mesh_if_name); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", mesh_if_name); + return WMESHD_ERROR_INVALID_PARAMETER; } if (NULL == station_list) { - MESH_LOGE("Invalid parameter [%p]", station_list); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", station_list); + return WMESHD_ERROR_INVALID_PARAMETER; } - MESH_LOGD("Get connected stations"); + WMESH_LOGD("Get connected stations"); ret = _send_nl_get_station_info(mesh_if_name, station_list); return ret; } -int mesh_netlink_del_station_info(const char* mesh_if_name, char *peer) +int wmesh_netlink_del_station_info(const char* mesh_if_name, char *peer) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; if (NULL == mesh_if_name || strlen(mesh_if_name) > IFNAMSIZ) { - MESH_LOGE("Invalid parameter [%p]", mesh_if_name); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", mesh_if_name); + return WMESHD_ERROR_INVALID_PARAMETER; } if (NULL == peer) { - MESH_LOGE("Invalid parameter [%p]", peer); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", peer); + return WMESHD_ERROR_INVALID_PARAMETER; } - MESH_LOGD("Del connected station : [%s]", peer); + WMESH_LOGD("Del connected station : [%s]", peer); ret = _send_nl_del_station_info(mesh_if_name, peer); return ret; } -int mesh_netlink_get_mpath_info(const char* mesh_if_name, GList **mpath_list) +int wmesh_netlink_get_mpath_info(const char* mesh_if_name, GList **mpath_list) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; if (NULL == mesh_if_name || strlen(mesh_if_name) > IFNAMSIZ) { - MESH_LOGE("Invalid parameter [%p]", mesh_if_name); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", mesh_if_name); + return WMESHD_ERROR_INVALID_PARAMETER; } if (NULL == mpath_list) { - MESH_LOGE("Invalid parameter [%p]", mpath_list); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter [%p]", mpath_list); + return WMESHD_ERROR_INVALID_PARAMETER; } - MESH_LOGD("Get current mpath info"); + WMESH_LOGD("Get current mpath info"); ret = _send_nl_get_mpath_info(mesh_if_name, mpath_list); return ret; } -int mesh_netlink_register_event_handler() +int wmesh_netlink_register_event_handler() { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; - MESH_LOGD("Register mesh event handler"); + WMESH_LOGD("Register mesh event handler"); ret = _send_nl_register_event_handler(); return ret; } -int mesh_netlink_unregister_event_handler() +int wmesh_netlink_unregister_event_handler() { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; - MESH_LOGD("Unregister mesh event handler"); + WMESH_LOGD("Unregister mesh event handler"); _on_remove_event_io_handler(); diff --git a/src/mesh-peer-monitor.c b/src/wmesh-peer-monitor.c similarity index 65% rename from src/mesh-peer-monitor.c rename to src/wmesh-peer-monitor.c index 4369ba2..367584f 100644 --- a/src/mesh-peer-monitor.c +++ b/src/wmesh-peer-monitor.c @@ -18,21 +18,21 @@ */ #include -#include "mesh.h" -#include "mesh-log.h" -#include "mesh-util.h" -#include "mesh-gdbus.h" -#include "mesh-request.h" -#include "mesh-netlink.h" -#include "mesh-interface.h" -#include "mesh-peer-monitor.h" +#include "wmesh.h" +#include "wmesh-log.h" +#include "wmesh-util.h" +#include "wmesh-gdbus.h" +#include "wmesh-request.h" +#include "wmesh-netlink.h" +#include "wmesh-interface.h" +#include "wmesh-peer-monitor.h" #define MESH_MONITORING_TIME 5 #define MESH_MAXIMUM_BEACON_LOST_COUNT 10 static void _on_station_list_destroy(gpointer data) { - mesh_station_info_s *info = (mesh_station_info_s*)data; + wmesh_station_info_s *info = (wmesh_station_info_s*)data; if (info) { g_free(info->bssid); @@ -42,7 +42,7 @@ static void _on_station_list_destroy(gpointer data) #if 0 static void _on_mpath_list_destroy(gpointer data) { - mesh_mpath_info_s *info = (mesh_mpath_info_s*)data; + wmesh_mpath_info_s *info = (wmesh_mpath_info_s*)data; if (info) { g_free(info->dest_addr); @@ -56,47 +56,47 @@ static void _on_mpath_list_destroy(gpointer data) static int _get_station_info(void *pdata) { int is_new; - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; GList *iter = NULL; GList *sta_list = NULL; GList *cmp_iter = NULL; - mesh_service *service = (mesh_service *)pdata; - mesh_interface_s *info = service->interface_info; + wmesh_service *service = (wmesh_service *)pdata; + wmesh_interface_s *info = service->interface_info; - ret = mesh_request_get_station_info(info->mesh_interface, &sta_list); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to mesh_request_get_station_info"); + ret = wmesh_request_get_station_info(info->mesh_interface, &sta_list); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to wmesh_request_get_station_info"); return ret; } iter = service->station_list; while (iter) { - mesh_station_info_s *item = (mesh_station_info_s*)iter->data; - MESH_LOGD("[%s]", item->bssid); + wmesh_station_info_s *item = (wmesh_station_info_s*)iter->data; + WMESH_LOGD("[%s]", item->bssid); iter = g_list_next(iter); } iter = sta_list; while (iter) { - mesh_station_info_s *item = (mesh_station_info_s*)iter->data; + wmesh_station_info_s *item = (wmesh_station_info_s*)iter->data; /* Found this in th existing station infomation list. */ if (item->inactive_time > item->beacon_interval * MESH_MAXIMUM_BEACON_LOST_COUNT) { /* Remove this node from station list in kernel */ - mesh_netlink_del_station_info(info->mesh_interface, item->bssid); + wmesh_netlink_del_station_info(info->mesh_interface, item->bssid); /* Remove current linked list */ iter = g_list_remove(iter, item); /* Send existing node disjoined */ - MESH_LOGE("[%s] disjoined", item->bssid); + WMESH_LOGE("[%s] disjoined", item->bssid); } is_new = TRUE; cmp_iter = service->station_list; while (cmp_iter) { - mesh_station_info_s *cmp_item = (mesh_station_info_s*)cmp_iter->data; + wmesh_station_info_s *cmp_item = (wmesh_station_info_s*)cmp_iter->data; if (0 == strncmp(item->bssid, cmp_item->bssid, sizeof("11:22:33:44:55:66"))) { is_new = FALSE; break; @@ -106,7 +106,7 @@ static int _get_station_info(void *pdata) if (is_new) { /* Send new station joined event */ - MESH_LOGE("[%s] joined", item->bssid); + WMESH_LOGE("[%s] joined", item->bssid); } iter = g_list_next(iter); @@ -119,8 +119,8 @@ static int _get_station_info(void *pdata) iter = service->station_list; while (iter) { - mesh_station_info_s *item2 = (mesh_station_info_s*)iter->data; - MESH_LOGE("[%s]", item2->bssid); + wmesh_station_info_s *item2 = (wmesh_station_info_s*)iter->data; + WMESH_LOGE("[%s]", item2->bssid); iter = g_list_next(iter); } @@ -129,20 +129,20 @@ static int _get_station_info(void *pdata) #if 0 static gboolean _get_mpath_info(void *pdata) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; GVariantBuilder builder; GVariant* mpath_data; GList *iter = NULL; - mesh_service *service = (mesh_service *)pdata; - mesh_interface_s *info = service->interface_info; + wmesh_service *service = (wmesh_service *)pdata; + wmesh_interface_s *info = service->interface_info; /* Clear mesh path list */ g_list_free_full(service->mpath_list, _on_mpath_list_destroy); service->mpath_list = NULL; - ret = mesh_request_get_mpath_info(info->mesh_interface, &service->mpath_list); - if (MESHD_ERROR_NONE == ret) { + ret = wmesh_request_get_mpath_info(info->mesh_interface, &service->mpath_list); + if (WMESHD_ERROR_NONE == ret) { /* * Example) sh-3.2# iw mesh0 mpath dump * DEST ADDR NEXT HOP IFACE SN METRIC QLEN EXPTIME DTIM DRET FLAGS @@ -153,7 +153,7 @@ static gboolean _get_mpath_info(void *pdata) iter = service->mpath_list; while (iter != NULL) { - mesh_mpath_info_s *item = (mesh_mpath_info_s*)iter->data; + wmesh_mpath_info_s *item = (wmesh_mpath_info_s*)iter->data; g_variant_builder_open(&builder, G_VARIANT_TYPE_VARDICT); g_variant_builder_add(&builder, "{sv}", "DEST_ADDR", @@ -184,7 +184,7 @@ static gboolean _get_mpath_info(void *pdata) mpath_data = g_variant_builder_end(&builder); g_object_unref(mpath_data); } else - MESH_LOGE("Failed to mesh_request_get_mpath_info"); + WMESH_LOGE("Failed to wmesh_request_get_mpath_info"); return ret; } @@ -193,32 +193,32 @@ static gboolean _on_mesh_monitor_cb(gpointer pdata) { int ret; bool state; - mesh_service *service = (mesh_service *)pdata; + wmesh_service *service = (wmesh_service *)pdata; if (service) { - mesh_interface_s *info = service->interface_info; + wmesh_interface_s *info = service->interface_info; if (info) { /* Exceptionally, checking external interface processes here. */ - ret = mesh_interface_check_external_exists(info->external_interface, &state); - MESH_LOGD("Status : %d %d %d", ret, info->can_be_gate, state); - if (MESHD_ERROR_NONE == ret) { + ret = wmesh_interface_check_external_exists(info->external_interface, &state); + WMESH_LOGD("Status : %d %d %d", ret, info->can_be_gate, state); + if (WMESHD_ERROR_NONE == ret) { if (info->can_be_gate != state) { - mesh_gdbus_enable_ethernet_interface(service, state); + wmesh_gdbus_enable_ethernet_interface(service, state); #if 0 /* Detect external network state (i.e. Ethernet) and decide to make gate enabled */ if (state) - mesh_request_set_mesh_gate(info->bridge_interface, + wmesh_request_set_mesh_gate(info->bridge_interface, info->mesh_interface, info->external_interface); else - mesh_request_unset_mesh_gate(info->bridge_interface, + wmesh_request_unset_mesh_gate(info->bridge_interface, info->mesh_interface, info->external_interface); #endif - MESH_LOGD("External interface state has been changed : [%d]", state); + WMESH_LOGD("External interface state has been changed : [%d]", state); info->can_be_gate = state; } } else { /* In error case, we call enable etheret again for OdroidU3 */ - mesh_gdbus_enable_ethernet_interface(service, true); + wmesh_gdbus_enable_ethernet_interface(service, true); } #if 0 _get_mpath_info(service); @@ -230,33 +230,33 @@ static gboolean _on_mesh_monitor_cb(gpointer pdata) return G_SOURCE_CONTINUE; } -int mesh_start_monitor_service(void *pdata) +int wmesh_start_monitor_service(void *pdata) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)pdata; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)pdata; + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); if (service->monitor_timer) - mesh_stop_monitor_service(pdata); + wmesh_stop_monitor_service(pdata); service->monitor_timer = g_timeout_add_seconds(MESH_MONITORING_TIME, _on_mesh_monitor_cb, service); - MESH_LOGD("Peer Monitoring Service Started"); + WMESH_LOGD("Peer Monitoring Service Started"); return ret; } -int mesh_stop_monitor_service(void *pdata) +int wmesh_stop_monitor_service(void *pdata) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)pdata; - meshd_check_null_ret_error("service", service, MESHD_ERROR_INVALID_PARAMETER); + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)pdata; + wmeshd_check_null_ret_error("service", service, WMESHD_ERROR_INVALID_PARAMETER); if (service->monitor_timer) { g_source_remove(service->monitor_timer); service->monitor_timer = 0; } - MESH_LOGD("Peer Monitoring Service Stopped"); + WMESH_LOGD("Peer Monitoring Service Stopped"); return ret; } diff --git a/src/wmesh-request.c b/src/wmesh-request.c new file mode 100644 index 0000000..1b774c7 --- /dev/null +++ b/src/wmesh-request.c @@ -0,0 +1,625 @@ +/* + * Network Configuration Module + * + * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved. + * + * 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. + * + */ +#include + +#include +#include + +#include "wmesh.h" +#include "wmesh-log.h" +#include "wmesh-util.h" +#include "wmesh-service-interface.h" +#include "wmesh-generated-code.h" + +#include "wmesh-bridge.h" +#include "wmesh-netlink.h" +#include "wmesh-interface.h" +#include "wmesh-request.h" +#include "wmesh-softap.h" +#include "wmesh-gdbus.h" + +int wmesh_request_set_mesh_gate(const char* bridge_interface, + const char* mesh_interface, const char* external_interface) +{ + int ret = WMESHD_ERROR_NONE; + bool state = FALSE; + + ret = wmesh_interface_check_external_exists(external_interface, &state); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to get external interface state !"); + return WMESHD_ERROR_OPERATION_FAILED; + } + WMESH_LOGD(" Ethernet cable state [%s]", + (state) ? "Connected" : "Disconnected"); + + /* Turn STP on */ + ret = wmesh_bridge_set_stp(bridge_interface, TRUE); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to turn STP on !"); + return ret; + } + + /* Set mesh parameters */ + ret = wmesh_netlink_set_mesh_parameter(mesh_interface, + "mesh_hwmp_rootmode", 4); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to set [mesh_hwmp_rootmode] : 4"); + + ret = wmesh_netlink_set_mesh_parameter(mesh_interface, + "mesh_gate_announcements", 1); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to set [mesh_gate_announcements] : 1"); + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_unset_mesh_gate(const char* bridge_interface, + const char* mesh_interface, const char* external_interface) +{ + int ret = WMESHD_ERROR_NONE; + + NOTUSED(external_interface); + + /* Set mesh parameters */ + ret = wmesh_netlink_set_mesh_parameter(mesh_interface, + "mesh_hwmp_rootmode", 0); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to set [mesh_hwmp_rootmode] : 0"); + + ret = wmesh_netlink_set_mesh_parameter(mesh_interface, + "mesh_gate_announcements", 0); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to set [mesh_gate_announcements] : 0"); + + /* Turn STP off */ + ret = wmesh_bridge_set_stp(bridge_interface, FALSE); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to turn STP off!"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_add_bridge_interface(const char* bridge_interface, + const char* interface) +{ + int ret = WMESHD_ERROR_NONE; + + if (NULL == bridge_interface || NULL == interface) { + WMESH_LOGE("Invalid parameters"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("Adding interface[%s] into bridge[%s]...", interface, bridge_interface); + + /* Add external interface into bridge */ + ret = wmesh_bridge_add_interface(bridge_interface, interface); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to add interface !"); + return ret; + } + + /* Make external interface down */ + ret = wmesh_interface_set(interface, NULL, WMESH_INTERFACE_DOWN); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to change external interface state"); + return ret; + } + + /* Make external interface up with cleared IP */ + ret = wmesh_interface_set(interface, "0.0.0.0", WMESH_INTERFACE_UP); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to change external interface state"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_remove_bridge_interface(const char* bridge_interface, + const char* interface) +{ + int ret = WMESHD_ERROR_NONE; + + if (NULL == bridge_interface || NULL == interface) { + WMESH_LOGE("Invalid parameters"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("Removing interface[%s] from bridge[%s]...", interface, bridge_interface); + + ret = wmesh_interface_check_bridge_interface_exists(bridge_interface, interface); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGD("Interface is not exist in bridge"); + return WMESHD_ERROR_NONE; + } + + /* Remove external interface into bridge */ + ret = wmesh_bridge_del_interface(bridge_interface, interface); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to remove interface !"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_set_softap_config(const char* softap_interface, + const char *ssid, const char* mode, int channel, int visibility, + int max_sta, int security, const char* passphrase) +{ + int ret = WMESHD_ERROR_NONE; + + WMESH_LOGD("Setting configuration for SoftAP"); + + ret = wmesh_softap_set_configuration(softap_interface, ssid, mode, channel, + visibility, max_sta, security, passphrase); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to set Configuration for SoftAP"); + return ret; + } + + return ret; +} + +int wmesh_request_enable_softap( + const char* bridge_interface, const char* softap_interface) +{ + int ret = WMESHD_ERROR_NONE; + + WMESH_LOGD("Request to turn SoftAP on"); + ret = wmesh_softap_enable_softap(softap_interface); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to wmesh_softap_enable_softap"); + return ret; + } + + /* Add softAP interface into bridge */ + ret = wmesh_request_add_bridge_interface(bridge_interface, softap_interface); + if (WMESHD_ERROR_NONE != ret) { + wmesh_softap_disable_softap(); + return ret; + } + + return ret; +} + +int wmesh_request_disable_softap( + const char* bridge_interface, const char* softap_interface) +{ + int ret = WMESHD_ERROR_NONE; + + WMESH_LOGD("Request to turn SoftAP off"); + ret = wmesh_softap_disable_softap(); + + /* Remove softAP interface from bridge */ + ret = wmesh_request_remove_bridge_interface(bridge_interface, softap_interface); + if (WMESHD_ERROR_NONE != ret) + return ret; + + return ret; +} + +int wmesh_request_get_station_info(const char* mesh_interface, GList **station_list) +{ + int ret = WMESHD_ERROR_NONE; + + WMESH_LOGD("Request to get station info"); + + /* Get station info */ + ret = wmesh_netlink_get_station_info(mesh_interface, station_list); + if (WMESHD_ERROR_NONE != ret) + return ret; + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_get_mpath_info(const char* mesh_interface, GList **mpath_list) +{ + int ret = WMESHD_ERROR_NONE; + + WMESH_LOGD("Request to get mpath info"); + + /* Get MPath info */ + ret = wmesh_netlink_get_mpath_info(mesh_interface, mpath_list); + if (WMESHD_ERROR_NONE != ret) + return ret; + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_register_event_handler() +{ + int ret = WMESHD_ERROR_NONE; + + WMESH_LOGD("Request to register mesh event handler"); + + /* Get MPath info */ + ret = wmesh_netlink_register_event_handler(); + if (WMESHD_ERROR_NONE != ret) + return ret; + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_unregister_event_handler() +{ + int ret = WMESHD_ERROR_NONE; + + WMESH_LOGD("Request to unregister mesh event handler"); + + /* Get MPath info */ + ret = wmesh_netlink_unregister_event_handler(); + if (WMESHD_ERROR_NONE != ret) + return ret; + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_enable_network(wmesh_service *service) +{ + int ret; + wmesh_interface_s *info = NULL; + + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Enable mesh network"); + + /* Check if mesh interface exists */ + info = service->interface_info; + ret = wmesh_interface_check(info->mesh_interface); + if (WMESHD_ERROR_NONE == ret) { + /* Interface already exists */ + return WMESHD_ERROR_NONE; + } + + ret = wmesh_gdbus_create_mesh_interface(service); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to create mesh network"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_disable_network(wmesh_service *service) +{ + int ret; + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Disable mesh network"); + + ret = wmesh_gdbus_remove_mesh_interface(service); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to disable mesh network"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_scan(wmesh_service *service) +{ + int ret; + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Request scan for mesh network"); + + ret = wmesh_gdbus_mesh_scan(service); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to request scan for mesh network"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_specific_scan(wmesh_service *service, gchar *mesh_id, gint channel) +{ + int ret; + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Request specific scan for mesh network"); + + ret = wmesh_gdbus_mesh_specific_scan(service, mesh_id, channel); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to request specific scan for mesh network"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_cancel_scan(wmesh_service *service) +{ + int ret; + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Cancel scan for mesh network"); + + ret = wmesh_gdbus_mesh_cancel_scan(service); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to cancel scan for mesh network"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_get_networks(wmesh_service *service) +{ + int ret; + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Get mesh networks"); + + ret = wmesh_gdbus_get_mesh_networks(service); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to get mesh networks !"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +static int _select_matched_network(GList *scanned_network, + const char *mesh_id, int mesh_channel, wmeshd_security_type_e sec, + wmesh_scan_result_s **info) +{ + int ret = WMESHD_ERROR_NONE; + GList *iter = NULL; + wmesh_scan_result_s *item = NULL; + gboolean found = FALSE; + + wmeshd_check_null_ret_error("scanned_network", scanned_network, + WMESHD_ERROR_INVALID_PARAMETER); + + iter = scanned_network; + while (iter != NULL) { + item = (wmesh_scan_result_s*)iter->data; + + if (g_strcmp0(mesh_id, item->mesh_id) == 0) { + if (item->channel == mesh_channel && item->security == sec) { + *info = item; + found = TRUE; + break; + } + } + iter = g_list_next(iter); + } + + if (FALSE == found) + return WMESHD_ERROR_NO_DATA; + + return ret; +} + +int wmesh_request_get_joined_network(wmesh_service *service) +{ + int ret; + + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Get joined mesh network"); + + ret = wmesh_gdbus_get_joined_mesh_network(service); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to get joined mesh network"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_get_connected_peers(wmesh_service *service) +{ + int ret; + + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Get connected mesh peers"); + + ret = wmesh_gdbus_get_connected_peers(service); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to get connected mesh peers"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_create_mesh_network(wmesh_service *service, gchar *mesh_id, + gint channel, wmeshd_security_type_e sec) +{ + int ret; + + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Create a new mesh network"); + + ret = wmesh_gdbus_create_network(service, mesh_id, channel, sec); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to create mesh network"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_connect_mesh_network(wmesh_service *service, gchar *mesh_id, + gint channel, wmeshd_security_type_e sec, gchar *passphrase) +{ + int ret; + wmesh_scan_result_s *info = NULL; + + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Connect mesh network"); + + /* Get mesh_id and channel from saved network */ + ret = _select_matched_network(service->scanned_mesh_network, + mesh_id, channel, sec, &info); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to mesh_network_get_first_mesh_network"); + return ret; + } + + /* Set passphrase */ + if (WMESHD_SECURITY_NONE != sec) { + if (NULL != passphrase) { + ret = wmesh_gdbus_set_passphrase(service, info, passphrase); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to set passphrase for mesh network"); + return ret; + } + } else { + WMESH_LOGE("Passphrase is required !"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + } + + ret = wmesh_gdbus_connect_network(service, info); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to connect mesh network"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_disconnect_mesh_network(wmesh_service *service, + gchar *mesh_id, gint channel, wmeshd_security_type_e sec) +{ + int ret; + wmesh_scan_result_s *info = NULL; + + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Disconnect mesh network"); + + /* Get mesh_id and channel from saved network */ + ret = _select_matched_network(service->scanned_mesh_network, + mesh_id, channel, sec, &info); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to _select_matched_network"); + return ret; + } + + ret = wmesh_gdbus_disconnect_network(service, info); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to disconnect mesh network"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +int wmesh_request_remove_mesh_network(wmesh_service *service, + gchar *mesh_id, gint channel, wmeshd_security_type_e sec) +{ + int ret; + wmesh_scan_result_s *info = NULL; + + if (NULL == service) { + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; + } + + WMESH_LOGD("[IPC] Remove mesh network"); + + /* Get mesh_id and channel from saved network */ + ret = _select_matched_network(service->scanned_mesh_network, + mesh_id, channel, sec, &info); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to _select_matched_network"); + return ret; + } + + ret = wmesh_gdbus_remove_network(service, info); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to remove mesh network"); + return ret; + } + + return WMESHD_ERROR_NONE; +} + +/* Notifications */ +void wmesh_notify_scan_done() +{ + NetWmesh *object = wmeshd_dbus_get_object(); + + net_wmesh_emit_scan_done(object); +} + +void wmesh_notify_connection_state(const char* mesh_id, const char* bssid, + int channel, wmeshd_security_type_e sec, wmeshd_connection_state_e state) +{ + NetWmesh *object = wmeshd_dbus_get_object(); + + net_wmesh_emit_connection_state(object, mesh_id, bssid, channel, (int)sec, (int)state); +} + +void wmesh_notify_station_joined(const char* bssid) +{ + NetWmesh *object = wmeshd_dbus_get_object(); + + net_wmesh_emit_sta_joined(object, bssid); +} + +void wmesh_notify_station_left(const char* bssid) +{ + NetWmesh *object = wmeshd_dbus_get_object(); + + net_wmesh_emit_sta_left(object, bssid); +} diff --git a/src/mesh-service-interface.c b/src/wmesh-service-interface.c similarity index 56% rename from src/mesh-service-interface.c rename to src/wmesh-service-interface.c index e272cdf..2252949 100644 --- a/src/mesh-service-interface.c +++ b/src/wmesh-service-interface.c @@ -23,19 +23,19 @@ #include #include -#include "mesh.h" -#include "mesh-log.h" -#include "mesh-util.h" -#include "mesh-gdbus.h" -#include "mesh-service.h" -#include "mesh-peer-monitor.h" -#include "mesh-service-interface.h" -#include "mesh-generated-code.h" - -#include "mesh-request.h" -#include "mesh-interface.h" - -static NetMesh *meshd_dbus_object; +#include "wmesh.h" +#include "wmesh-log.h" +#include "wmesh-util.h" +#include "wmesh-gdbus.h" +#include "wmesh-service.h" +#include "wmesh-peer-monitor.h" +#include "wmesh-service-interface.h" +#include "wmesh-generated-code.h" + +#include "wmesh-request.h" +#include "wmesh-interface.h" + +static NetWmesh *meshd_dbus_object; static Manager *meshd_activator_dbus_object; /* global list to care resource handle for each client */ @@ -74,23 +74,23 @@ static const char* wifi_error_to_string(wifi_manager_error_e err) } } -NetMesh* meshd_dbus_get_object() +NetWmesh* wmeshd_dbus_get_object() { return meshd_dbus_object; } -int64_t meshd_dbus_generate_signal_number() +int64_t wmeshd_dbus_generate_signal_number() { static int64_t i = 0; return i++; } -static int _meshd_dbus_client_list_cleanup(GList *client_list) +static int _wmeshd_dbus_client_list_cleanup(GList *client_list) { meshd_dbus_client_s *client; - meshd_check_null_ret_error("client_list", client_list, FALSE); + wmeshd_check_null_ret_error("client_list", client_list, FALSE); client = client_list->data; @@ -99,23 +99,23 @@ static int _meshd_dbus_client_list_cleanup(GList *client_list) free(client); g_list_free(client_list); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -static int _meshd_dbus_client_list_compare_bus_name(const void *a, const void *b) +static int _wmeshd_dbus_client_list_compare_bus_name(const void *a, const void *b) { const meshd_dbus_client_s *client = a; return g_strcmp0(client->bus_name, b); } -static inline GList* _meshd_dbus_client_list_find_client(const gchar *owner) +static inline GList* _wmeshd_dbus_client_list_find_client(const gchar *owner) { return g_list_find_custom(meshd_dbus_client_list, owner, - _meshd_dbus_client_list_compare_bus_name); + _wmeshd_dbus_client_list_compare_bus_name); } -static void _meshd_dbus_name_owner_changed_cb(GDBusConnection *conn, +static void _wmeshd_dbus_name_owner_changed_cb(GDBusConnection *conn, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, @@ -138,22 +138,22 @@ static void _meshd_dbus_name_owner_changed_cb(GDBusConnection *conn, if (0 == strlen(new_owner)) { g_mutex_lock(&meshd_dbus_client_list_mutex); - client = _meshd_dbus_client_list_find_client(old_owner); + client = _wmeshd_dbus_client_list_find_client(old_owner); if (client) { /* found bus name in our bus list */ - MESH_LOGD("bus(%s) stopped", old_owner); + WMESH_LOGD("bus(%s) stopped", old_owner); meshd_dbus_client_list = g_list_remove_link(meshd_dbus_client_list, client); } g_mutex_unlock(&meshd_dbus_client_list_mutex); if (client) { - ret = _meshd_dbus_client_list_cleanup(client); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("_meshd_dbus_client_list_cleanup() Fail(%d)", ret); + ret = _wmeshd_dbus_client_list_cleanup(client); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("_wmeshd_dbus_client_list_cleanup() Fail(%d)", ret); } } } -static int _meshd_dbus_subscribe_name_owner_changed(GDBusConnection *conn) +static int _wmeshd_dbus_subscribe_name_owner_changed(GDBusConnection *conn) { unsigned int id; @@ -164,24 +164,24 @@ static int _meshd_dbus_subscribe_name_owner_changed(GDBusConnection *conn) "/org/freedesktop/DBus", /* path */ NULL, /* arg0 */ G_DBUS_SIGNAL_FLAGS_NONE, - _meshd_dbus_name_owner_changed_cb, + _wmeshd_dbus_name_owner_changed_cb, NULL, NULL); if (0 == id) { - MESH_LOGE("g_dbus_connection_signal_subscribe() Fail"); - return MESHD_ERROR_IO_ERROR; + WMESH_LOGE("g_dbus_connection_signal_subscribe() Fail"); + return WMESHD_ERROR_IO_ERROR; } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -static gboolean _meshd_dbus_handle_enable(Manager *object, +static gboolean _wmeshd_dbus_handle_enable(Manager *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; wifi_manager_h wifi_handle = NULL; bool wifi_activated = false; @@ -189,21 +189,21 @@ static gboolean _meshd_dbus_handle_enable(Manager *object, /* Initialize Wi-Fi driver */ ret = wifi_manager_initialize(&wifi_handle); if (WIFI_MANAGER_ERROR_NONE != ret) - MESH_LOGE("Failed to get wifi manager handle ! [%s(%X)]", + WMESH_LOGE("Failed to get wifi manager handle ! [%s(%X)]", wifi_error_to_string(ret), ret); wifi_manager_is_activated(wifi_handle, &wifi_activated); if (false == wifi_activated) { ret = wifi_manager_activate(wifi_handle, NULL, NULL); if (WIFI_MANAGER_ERROR_NONE != ret) - MESH_LOGE("Failed to activate wifi ! [%s(%X)]", + WMESH_LOGE("Failed to activate wifi ! [%s(%X)]", wifi_error_to_string(ret), ret); } wifi_manager_deinitialize(wifi_handle); if (service->mesh_activated) { /* Already activated */ - manager_complete_enable(object, invocation, MESHD_ERROR_NONE); + manager_complete_enable(object, invocation, WMESHD_ERROR_NONE); goto FINISH; } @@ -211,111 +211,111 @@ static gboolean _meshd_dbus_handle_enable(Manager *object, manager_complete_enable(object, invocation, ret); service->mesh_activated = TRUE; - meshd_check_null_ret_error("info", info, FALSE); + wmeshd_check_null_ret_error("info", info, FALSE); /* Register event handler first */ - ret = mesh_request_register_event_handler(); - if (MESHD_ERROR_IN_PROGRESS == ret) { - MESH_LOGE("Currently set netlink event handler !! [%d]", ret); - ret = MESHD_ERROR_NONE; - } else if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to register mesh event handler !! [%d]", ret); + ret = wmesh_request_register_event_handler(); + if (WMESHD_ERROR_IN_PROGRESS == ret) { + WMESH_LOGE("Currently set netlink event handler !! [%d]", ret); + ret = WMESHD_ERROR_NONE; + } else if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to register mesh event handler !! [%d]", ret); } - ret = mesh_interface_initialize(service->interface_info); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to mesh_interface_initialize [%d]", ret); + ret = wmesh_interface_initialize(service->interface_info); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to wmesh_interface_initialize [%d]", ret); goto FINISH; } FINISH: - net_mesh_emit_mesh_enabled(meshd_dbus_get_object(), ret); + net_wmesh_emit_mesh_enabled(wmeshd_dbus_get_object(), ret); return TRUE; } -static gboolean _meshd_dbus_handle_disable(Manager *object, +static gboolean _wmeshd_dbus_handle_disable(Manager *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; - meshd_check_null_ret_error("info", info, FALSE); + wmeshd_check_null_ret_error("info", info, FALSE); /* Make response first */ manager_complete_disable(object, invocation, ret); - ret = mesh_request_unregister_event_handler(); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to unregister mesh event handler !! [%d]", ret); + ret = wmesh_request_unregister_event_handler(); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to unregister mesh event handler !! [%d]", ret); /* Terminate daemon */ - meshd_service_exit(service); + wmeshd_service_exit(service); return TRUE; } -static gboolean _meshd_dbus_handle_scan(NetMesh *object, +static gboolean _wmeshd_dbus_handle_scan(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; - meshd_check_null_ret_error("info", info, FALSE); + wmeshd_check_null_ret_error("info", info, FALSE); - ret = mesh_request_scan(service); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_scan !"); + ret = wmesh_request_scan(service); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_request_scan !"); - net_mesh_complete_scan(object, invocation, ret); + net_wmesh_complete_scan(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_specific_scan(NetMesh *object, +static gboolean _wmeshd_dbus_handle_specific_scan(NetWmesh *object, GDBusMethodInvocation *invocation, gchar *mesh_id, gint channel, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; - meshd_check_null_ret_error("info", info, FALSE); + wmeshd_check_null_ret_error("info", info, FALSE); - ret = mesh_request_specific_scan(service, mesh_id, channel); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_specific_scan !"); + ret = wmesh_request_specific_scan(service, mesh_id, channel); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_request_specific_scan !"); - net_mesh_complete_specific_scan(object, invocation, ret); + net_wmesh_complete_specific_scan(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_cancel_scan(NetMesh *object, +static gboolean _wmeshd_dbus_handle_cancel_scan(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; - ret = mesh_request_cancel_scan(service); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_cancel_scan"); + ret = wmesh_request_cancel_scan(service); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_request_cancel_scan"); - net_mesh_complete_cancel_scan(object, invocation, ret); + net_wmesh_complete_cancel_scan(object, invocation, ret); return TRUE; } static void _on_scan_result_destroy(gpointer data) { - mesh_scan_result_s *scan_item = (mesh_scan_result_s *)data; + wmesh_scan_result_s *scan_item = (wmesh_scan_result_s *)data; if (scan_item) { g_free(scan_item->mesh_id); @@ -327,7 +327,7 @@ static void _on_scan_result_destroy(gpointer data) static void _on_peer_info_destroy(gpointer data) { - mesh_peer_info_s *peer = (mesh_peer_info_s *)data; + wmesh_peer_info_s *peer = (wmesh_peer_info_s *)data; if (peer) g_free(peer->address); g_free(peer); @@ -335,7 +335,7 @@ static void _on_peer_info_destroy(gpointer data) static void _on_station_list_destroy(gpointer data) { - mesh_station_info_s *info = (mesh_station_info_s*)data; + wmesh_station_info_s *info = (wmesh_station_info_s*)data; if (info) { g_free(info->bssid); @@ -345,7 +345,7 @@ static void _on_station_list_destroy(gpointer data) static void _on_mpath_list_destroy(gpointer data) { - mesh_mpath_info_s *info = (mesh_mpath_info_s*)data; + wmesh_mpath_info_s *info = (wmesh_mpath_info_s*)data; if (info) { g_free(info->dest_addr); @@ -355,30 +355,30 @@ static void _on_mpath_list_destroy(gpointer data) } } -static gboolean _meshd_dbus_handle_get_found_mesh_networks(NetMesh *object, +static gboolean _wmeshd_dbus_handle_get_found_mesh_networks(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; GVariantBuilder builder; GVariant* networks; GList *iter = NULL; - mesh_scan_result_s *scan_item = NULL; + wmesh_scan_result_s *scan_item = NULL; - MESH_LOGD("Request to get scanned mesh network list"); + WMESH_LOGD("Request to get scanned mesh network list"); - ret = mesh_request_get_networks(service); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_get_networks"); + ret = wmesh_request_get_networks(service); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_request_get_networks"); g_variant_builder_init(&builder, G_VARIANT_TYPE("aa{sv}")); /* scanned_mesh_network would be filled above request */ iter = service->scanned_mesh_network; while (iter != NULL) { - scan_item = (mesh_scan_result_s*)iter->data; + scan_item = (wmesh_scan_result_s*)iter->data; g_variant_builder_open(&builder, G_VARIANT_TYPE_VARDICT); g_variant_builder_add(&builder, "{sv}", "mesh_id", @@ -402,128 +402,128 @@ static gboolean _meshd_dbus_handle_get_found_mesh_networks(NetMesh *object, networks = g_variant_builder_end(&builder); - net_mesh_complete_get_found_mesh_networks(object, invocation, networks, ret); + net_wmesh_complete_get_found_mesh_networks(object, invocation, networks, ret); return TRUE; } -static gboolean _meshd_dbus_handle_enable_mesh(NetMesh *object, +static gboolean _wmeshd_dbus_handle_enable_mesh(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; /* It handles creating virtual network and bridge */ - ret = mesh_request_enable_network(service); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_enable_network [%d]", ret); + ret = wmesh_request_enable_network(service); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_request_enable_network [%d]", ret); - mesh_start_monitor_service(service); + wmesh_start_monitor_service(service); - net_mesh_complete_enable_mesh(object, invocation, ret); + net_wmesh_complete_enable_mesh(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_disable_mesh(NetMesh *object, +static gboolean _wmeshd_dbus_handle_disable_mesh(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; - meshd_check_null_ret_error("info", info, FALSE); + wmeshd_check_null_ret_error("info", info, FALSE); if (FALSE == service->mesh_activated) { - MESH_LOGD("Mesh network is not activated yet"); - ret = MESHD_ERROR_OPERATION_FAILED; - net_mesh_complete_disable_mesh(object, invocation, ret); + WMESH_LOGD("Mesh network is not activated yet"); + ret = WMESHD_ERROR_OPERATION_FAILED; + net_wmesh_complete_disable_mesh(object, invocation, ret); return TRUE; } - ret = mesh_request_disable_network(service); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to disable mesh network !"); + ret = wmesh_request_disable_network(service); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to disable mesh network !"); /* Stop Mesh Node Monitoring Service */ - mesh_stop_monitor_service(service); + wmesh_stop_monitor_service(service); /* Make response */ - net_mesh_complete_disable_mesh(object, invocation, ret); + net_wmesh_complete_disable_mesh(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_is_joined(NetMesh *object, +static gboolean _wmeshd_dbus_handle_is_joined(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; gboolean state = FALSE; - mesh_service *service = (mesh_service *)user_data; + wmesh_service *service = (wmesh_service *)user_data; - ret = mesh_request_get_joined_network(service); - if (MESHD_ERROR_NONE == ret) { + ret = wmesh_request_get_joined_network(service); + if (WMESHD_ERROR_NONE == ret) { if (service->joined_network) state = TRUE; } - net_mesh_complete_is_joined(object, invocation, state, ret); + net_wmesh_complete_is_joined(object, invocation, state, ret); return TRUE; } -static gboolean _meshd_dbus_handle_get_joined_mesh_network(NetMesh *object, +static gboolean _wmeshd_dbus_handle_get_joined_mesh_network(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_network_info_s *joined = NULL; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_network_info_s *joined = NULL; - ret = mesh_request_get_joined_network(service); - if (MESHD_ERROR_NONE == ret) { + ret = wmesh_request_get_joined_network(service); + if (WMESHD_ERROR_NONE == ret) { joined = service->joined_network; if (joined) { - net_mesh_complete_get_joined_mesh_network(object, invocation, + net_wmesh_complete_get_joined_mesh_network(object, invocation, joined->mesh_id, joined->bssid, joined->channel, (int)joined->security, joined->state, ret); } else { - net_mesh_complete_get_joined_mesh_network(object, invocation, - "", "", 0, 0, 0, MESHD_ERROR_NO_DATA); + net_wmesh_complete_get_joined_mesh_network(object, invocation, + "", "", 0, 0, 0, WMESHD_ERROR_NO_DATA); } } else { - net_mesh_complete_get_joined_mesh_network(object, invocation, + net_wmesh_complete_get_joined_mesh_network(object, invocation, "", "", 0, 0, 0, ret); } return TRUE; } -static gboolean _meshd_dbus_handle_get_connected_peers(NetMesh *object, +static gboolean _wmeshd_dbus_handle_get_connected_peers(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; GVariantBuilder builder; GVariant* peer_list; GList *iter = NULL; - mesh_peer_info_s *peer = NULL; + wmesh_peer_info_s *peer = NULL; - MESH_LOGD("Request to get connected peers"); + WMESH_LOGD("Request to get connected peers"); - ret = mesh_request_get_connected_peers(service); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_get_connected_peers"); + ret = wmesh_request_get_connected_peers(service); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_request_get_connected_peers"); g_variant_builder_init(&builder, G_VARIANT_TYPE("aa{sv}")); iter = service->connected_mesh_peers; while (iter != NULL) { - peer = (mesh_peer_info_s*)iter->data; + peer = (wmesh_peer_info_s*)iter->data; g_variant_builder_open(&builder, G_VARIANT_TYPE_VARDICT); g_variant_builder_add(&builder, "{sv}", "Address", @@ -535,206 +535,206 @@ static gboolean _meshd_dbus_handle_get_connected_peers(NetMesh *object, peer_list = g_variant_builder_end(&builder); - net_mesh_complete_get_connected_peers(object, invocation, peer_list, ret); + net_wmesh_complete_get_connected_peers(object, invocation, peer_list, ret); return TRUE; } -static gboolean _meshd_dbus_handle_set_gate(NetMesh *object, +static gboolean _wmeshd_dbus_handle_set_gate(NetWmesh *object, GDBusMethodInvocation *invocation, gint16 gate_announce, guint hwmp_root_mode, gboolean stp, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; - MESH_LOGD("gate_announce = %d", gate_announce); - MESH_LOGD("HWMP_Root_Mode = %d", hwmp_root_mode); - MESH_LOGD("STP = %d", stp); + WMESH_LOGD("gate_announce = %d", gate_announce); + WMESH_LOGD("HWMP_Root_Mode = %d", hwmp_root_mode); + WMESH_LOGD("STP = %d", stp); info->gate_announce = gate_announce; info->hwmp_root_mode = hwmp_root_mode; info->stp = stp; /* Set STP and gate_announce for connmand */ - ret = mesh_gdbus_set_mesh_gate(service); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_gdbus_set_mesh_gate [%d]", ret); + ret = wmesh_gdbus_set_mesh_gate(service); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_gdbus_set_mesh_gate [%d]", ret); /* Set STP and gate_announce right now */ - ret = mesh_request_set_mesh_gate(info->bridge_interface, + ret = wmesh_request_set_mesh_gate(info->bridge_interface, info->mesh_interface, info->external_interface); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_gdbus_set_mesh_gate [%d]", ret); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_gdbus_set_mesh_gate [%d]", ret); - net_mesh_complete_set_gate(object, invocation, ret); + net_wmesh_complete_set_gate(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_unset_gate(NetMesh *object, +static gboolean _wmeshd_dbus_handle_unset_gate(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; info->gate_announce = 0; info->hwmp_root_mode = 0; info->stp = 0; /* Set STP and gate_announce for connmand */ - ret = mesh_gdbus_set_mesh_gate(service); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_gdbus_set_mesh_gate [%d]", ret); + ret = wmesh_gdbus_set_mesh_gate(service); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_gdbus_set_mesh_gate [%d]", ret); /* Unset STP and Gate Annouce right now */ - ret = mesh_request_unset_mesh_gate(info->bridge_interface, + ret = wmesh_request_unset_mesh_gate(info->bridge_interface, info->mesh_interface, info->external_interface); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_unset_mesh_gate [%d]", ret); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_request_unset_mesh_gate [%d]", ret); - net_mesh_complete_unset_gate(object, invocation, ret); + net_wmesh_complete_unset_gate(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_set_softap(NetMesh *object, +static gboolean _wmeshd_dbus_handle_set_softap(NetWmesh *object, GDBusMethodInvocation *invocation, gchar *ssid, gchar *passphrase, gchar *mode, gint channel, gint visibility, gint max_sta, gint security, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; - MESH_LOGD("SSID : %s", ssid); - MESH_LOGD("mode : %s", mode); - MESH_LOGD("channel : %d", channel); - MESH_LOGD("visibility: %d", visibility); - MESH_LOGD("max_sta : %d", max_sta); - MESH_LOGD("security : %d", security); + WMESH_LOGD("SSID : %s", ssid); + WMESH_LOGD("mode : %s", mode); + WMESH_LOGD("channel : %d", channel); + WMESH_LOGD("visibility: %d", visibility); + WMESH_LOGD("max_sta : %d", max_sta); + WMESH_LOGD("security : %d", security); /* Save softAP information */ - ret = mesh_request_set_softap_config(info->softap_interface, + ret = wmesh_request_set_softap_config(info->softap_interface, ssid, mode, channel, visibility, max_sta, security, passphrase); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_set_softap_config [%d]", ret); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_request_set_softap_config [%d]", ret); - net_mesh_complete_set_softap(object, invocation, ret); + net_wmesh_complete_set_softap(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_enable_softap(NetMesh *object, +static gboolean _wmeshd_dbus_handle_enable_softap(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; /* Check softAP interface and execute it */ - ret = mesh_request_enable_softap(info->bridge_interface, info->softap_interface); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_enable_softap [%d]", ret); + ret = wmesh_request_enable_softap(info->bridge_interface, info->softap_interface); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_request_enable_softap [%d]", ret); - net_mesh_complete_enable_softap(object, invocation, ret); + net_wmesh_complete_enable_softap(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_disable_softap(NetMesh *object, +static gboolean _wmeshd_dbus_handle_disable_softap(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; /* Destroy softAP */ - ret = mesh_request_disable_softap(info->bridge_interface, info->softap_interface); - if (MESHD_ERROR_NONE != ret) - MESH_LOGE("Failed to mesh_request_disable_softap [%d]", ret); + ret = wmesh_request_disable_softap(info->bridge_interface, info->softap_interface); + if (WMESHD_ERROR_NONE != ret) + WMESH_LOGE("Failed to wmesh_request_disable_softap [%d]", ret); - net_mesh_complete_disable_softap(object, invocation, ret); + net_wmesh_complete_disable_softap(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_create_mesh_network(NetMesh *object, +static gboolean _wmeshd_dbus_handle_create_mesh_network(NetWmesh *object, GDBusMethodInvocation *invocation, gchar *mesh_id, gint channel, gint security, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - meshd_security_type_e sec = (1 == security) ? MESHD_SECURITY_SAE : MESHD_SECURITY_NONE; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmeshd_security_type_e sec = (1 == security) ? WMESHD_SECURITY_SAE : WMESHD_SECURITY_NONE; - ret = mesh_request_create_mesh_network(service, mesh_id, channel, sec); + ret = wmesh_request_create_mesh_network(service, mesh_id, channel, sec); - net_mesh_complete_create_mesh_network(object, invocation, ret); + net_wmesh_complete_create_mesh_network(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_connect_mesh_network(NetMesh *object, +static gboolean _wmeshd_dbus_handle_connect_mesh_network(NetWmesh *object, GDBusMethodInvocation *invocation, gchar *mesh_id, gint channel, gint security, gchar *passphrase, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - meshd_security_type_e sec = (1 == security) ? MESHD_SECURITY_SAE : MESHD_SECURITY_NONE; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmeshd_security_type_e sec = (1 == security) ? WMESHD_SECURITY_SAE : WMESHD_SECURITY_NONE; - ret = mesh_request_connect_mesh_network(service, mesh_id, channel, sec, passphrase); + ret = wmesh_request_connect_mesh_network(service, mesh_id, channel, sec, passphrase); - net_mesh_complete_connect_mesh_network(object, invocation, ret); + net_wmesh_complete_connect_mesh_network(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_disconnect_mesh_network(NetMesh *object, +static gboolean _wmeshd_dbus_handle_disconnect_mesh_network(NetWmesh *object, GDBusMethodInvocation *invocation, gchar *mesh_id, gint channel, gint security, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - meshd_security_type_e sec = (1 == security) ? MESHD_SECURITY_SAE : MESHD_SECURITY_NONE; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmeshd_security_type_e sec = (1 == security) ? WMESHD_SECURITY_SAE : WMESHD_SECURITY_NONE; - ret = mesh_request_disconnect_mesh_network(service, mesh_id, channel, sec); + ret = wmesh_request_disconnect_mesh_network(service, mesh_id, channel, sec); - net_mesh_complete_disconnect_mesh_network(object, invocation, ret); + net_wmesh_complete_disconnect_mesh_network(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_forget_mesh_network(NetMesh *object, +static gboolean _wmeshd_dbus_handle_forget_mesh_network(NetWmesh *object, GDBusMethodInvocation *invocation, gchar *mesh_id, gint channel, gint security, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - meshd_security_type_e sec = (1 == security) ? MESHD_SECURITY_SAE : MESHD_SECURITY_NONE; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmeshd_security_type_e sec = (1 == security) ? WMESHD_SECURITY_SAE : WMESHD_SECURITY_NONE; - ret = mesh_request_remove_mesh_network(service, mesh_id, channel, sec); + ret = wmesh_request_remove_mesh_network(service, mesh_id, channel, sec); - net_mesh_complete_forget_mesh_network(object, invocation, ret); + net_wmesh_complete_forget_mesh_network(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_set_interfaces(NetMesh *object, +static gboolean _wmeshd_dbus_handle_set_interfaces(NetWmesh *object, GDBusMethodInvocation *invocation, gchar *mesh, gchar *gate, gchar *softap, gpointer user_data) { - int ret = MESHD_ERROR_NONE; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + int ret = WMESHD_ERROR_NONE; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; g_free(info->mesh_interface); info->mesh_interface = g_strdup(mesh); @@ -745,39 +745,39 @@ static gboolean _meshd_dbus_handle_set_interfaces(NetMesh *object, g_free(info->softap_interface); info->softap_interface = g_strdup(softap); - MESH_LOGD("Interface configuration for mesh network :"); - MESH_LOGD(" Base : [%s]", info->base_interface); - MESH_LOGD(" Mesh : [%s]", info->mesh_interface); - MESH_LOGD(" Bridge : [%s]", info->bridge_interface); - MESH_LOGD(" SoftAP : [%s]", info->softap_interface); - MESH_LOGD(" External: [%s]", info->external_interface); + WMESH_LOGD("Interface configuration for mesh network :"); + WMESH_LOGD(" Base : [%s]", info->base_interface); + WMESH_LOGD(" Mesh : [%s]", info->mesh_interface); + WMESH_LOGD(" Bridge : [%s]", info->bridge_interface); + WMESH_LOGD(" SoftAP : [%s]", info->softap_interface); + WMESH_LOGD(" External: [%s]", info->external_interface); - net_mesh_complete_set_interfaces(object, invocation, ret); + net_wmesh_complete_set_interfaces(object, invocation, ret); return TRUE; } -static gboolean _meshd_dbus_handle_get_station_info(NetMesh *object, +static gboolean _wmeshd_dbus_handle_get_station_info(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; GVariantBuilder builder; GVariant* station; GList *iter = NULL; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; /* Clear mesh station list */ g_list_free_full(service->station_list, _on_station_list_destroy); service->station_list = NULL; - ret = mesh_request_get_station_info( + ret = wmesh_request_get_station_info( info->mesh_interface, &service->station_list); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to mesh_request_get_station_info"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to wmesh_request_get_station_info"); g_dbus_method_invocation_return_error(invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "Request Failed"); @@ -820,7 +820,7 @@ static gboolean _meshd_dbus_handle_get_station_info(NetMesh *object, iter = service->station_list; while (iter != NULL) { - mesh_station_info_s *item = (mesh_station_info_s*)iter->data; + wmesh_station_info_s *item = (wmesh_station_info_s*)iter->data; g_variant_builder_open(&builder, G_VARIANT_TYPE_VARDICT); g_variant_builder_add(&builder, "{sv}", "bssid", @@ -891,7 +891,7 @@ static gboolean _meshd_dbus_handle_get_station_info(NetMesh *object, } station = g_variant_builder_end(&builder); - net_mesh_complete_get_station_info(object, invocation, station, ret); + net_wmesh_complete_get_station_info(object, invocation, station, ret); g_object_unref(station); } @@ -899,26 +899,26 @@ static gboolean _meshd_dbus_handle_get_station_info(NetMesh *object, return TRUE; } -static gboolean _meshd_dbus_handle_get_mpath_info(NetMesh *object, +static gboolean _wmeshd_dbus_handle_get_mpath_info(NetWmesh *object, GDBusMethodInvocation *invocation, gpointer user_data) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; GVariantBuilder builder; GVariant* mpath_data; GList *iter = NULL; - mesh_service *service = (mesh_service *)user_data; - mesh_interface_s *info = service->interface_info; + wmesh_service *service = (wmesh_service *)user_data; + wmesh_interface_s *info = service->interface_info; /* Clear mesh path list */ g_list_free_full(service->mpath_list, _on_mpath_list_destroy); service->mpath_list = NULL; - ret = mesh_request_get_mpath_info( + ret = wmesh_request_get_mpath_info( info->mesh_interface, &service->mpath_list); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("Failed to mesh_request_get_mpath_info"); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("Failed to wmesh_request_get_mpath_info"); g_dbus_method_invocation_return_error(invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "Request Failed"); @@ -933,7 +933,7 @@ static gboolean _meshd_dbus_handle_get_mpath_info(NetMesh *object, iter = service->mpath_list; while (iter != NULL) { - mesh_mpath_info_s *item = (mesh_mpath_info_s*)iter->data; + wmesh_mpath_info_s *item = (wmesh_mpath_info_s*)iter->data; g_variant_builder_open(&builder, G_VARIANT_TYPE_VARDICT); g_variant_builder_add(&builder, "{sv}", "DEST_ADDR", @@ -962,7 +962,7 @@ static gboolean _meshd_dbus_handle_get_mpath_info(NetMesh *object, } mpath_data = g_variant_builder_end(&builder); - net_mesh_complete_get_mpath_info(object, invocation, mpath_data, ret); + net_wmesh_complete_get_mpath_info(object, invocation, mpath_data, ret); g_object_unref(mpath_data); } @@ -970,149 +970,149 @@ static gboolean _meshd_dbus_handle_get_mpath_info(NetMesh *object, return TRUE; } -static void _meshd_dbus_on_activator_bus_acquired(GDBusConnection *conn, +static void _wmeshd_dbus_on_activator_bus_acquired(GDBusConnection *conn, const gchar *name, gpointer user_data) { gboolean ret; GError *error = NULL; - mesh_service *service = (mesh_service *)user_data; + wmesh_service *service = (wmesh_service *)user_data; NOTUSED(name); meshd_activator_dbus_object = manager_skeleton_new(); if (NULL == meshd_activator_dbus_object) { - MESH_LOGE("manager_skeleton_new() Fail"); + WMESH_LOGE("manager_skeleton_new() Fail"); return; } g_signal_connect(meshd_activator_dbus_object, "handle-enable", - G_CALLBACK(_meshd_dbus_handle_enable), service); + G_CALLBACK(_wmeshd_dbus_handle_enable), service); g_signal_connect(meshd_activator_dbus_object, "handle-disable", - G_CALLBACK(_meshd_dbus_handle_disable), service); + G_CALLBACK(_wmeshd_dbus_handle_disable), service); ret = g_dbus_interface_skeleton_export( G_DBUS_INTERFACE_SKELETON(meshd_activator_dbus_object), - conn, MESH_DBUS_MANAGER_OBJPATH, &error); + conn, WMESH_DBUS_MANAGER_OBJPATH, &error); if (FALSE == ret) { - MESH_LOGE("g_dbus_interface_skeleton_export() Fail(%s)", error->message); + WMESH_LOGE("g_dbus_interface_skeleton_export() Fail(%s)", error->message); g_error_free(error); } } -static void _meshd_dbus_on_bus_acquired(GDBusConnection *conn, const gchar *name, +static void _wmeshd_dbus_on_bus_acquired(GDBusConnection *conn, const gchar *name, gpointer user_data) { gboolean ret; GError *error = NULL; - mesh_service *service = (mesh_service *)user_data; + wmesh_service *service = (wmesh_service *)user_data; NOTUSED(name); - meshd_dbus_object = net_mesh_skeleton_new(); + meshd_dbus_object = net_wmesh_skeleton_new(); if (NULL == meshd_dbus_object) { - MESH_LOGE("net_mesh_skeleton_new() Fail"); + WMESH_LOGE("net_wmesh_skeleton_new() Fail"); return; } g_signal_connect(meshd_dbus_object, "handle-scan", - G_CALLBACK(_meshd_dbus_handle_scan), service); + G_CALLBACK(_wmeshd_dbus_handle_scan), service); g_signal_connect(meshd_dbus_object, "handle-specific-scan", - G_CALLBACK(_meshd_dbus_handle_specific_scan), service); + G_CALLBACK(_wmeshd_dbus_handle_specific_scan), service); g_signal_connect(meshd_dbus_object, "handle-cancel-scan", - G_CALLBACK(_meshd_dbus_handle_cancel_scan), service); + G_CALLBACK(_wmeshd_dbus_handle_cancel_scan), service); g_signal_connect(meshd_dbus_object, "handle-get-found-mesh-networks", - G_CALLBACK(_meshd_dbus_handle_get_found_mesh_networks), service); + G_CALLBACK(_wmeshd_dbus_handle_get_found_mesh_networks), service); g_signal_connect(meshd_dbus_object, "handle-enable-mesh", - G_CALLBACK(_meshd_dbus_handle_enable_mesh), service); + G_CALLBACK(_wmeshd_dbus_handle_enable_mesh), service); g_signal_connect(meshd_dbus_object, "handle-disable-mesh", - G_CALLBACK(_meshd_dbus_handle_disable_mesh), service); + G_CALLBACK(_wmeshd_dbus_handle_disable_mesh), service); g_signal_connect(meshd_dbus_object, "handle-is-joined", - G_CALLBACK(_meshd_dbus_handle_is_joined), service); + G_CALLBACK(_wmeshd_dbus_handle_is_joined), service); g_signal_connect(meshd_dbus_object, "handle-get-joined-mesh-network", - G_CALLBACK(_meshd_dbus_handle_get_joined_mesh_network), service); + G_CALLBACK(_wmeshd_dbus_handle_get_joined_mesh_network), service); g_signal_connect(meshd_dbus_object, "handle-get-connected-peers", - G_CALLBACK(_meshd_dbus_handle_get_connected_peers), service); + G_CALLBACK(_wmeshd_dbus_handle_get_connected_peers), service); g_signal_connect(meshd_dbus_object, "handle-set-gate", - G_CALLBACK(_meshd_dbus_handle_set_gate), service); + G_CALLBACK(_wmeshd_dbus_handle_set_gate), service); g_signal_connect(meshd_dbus_object, "handle-unset-gate", - G_CALLBACK(_meshd_dbus_handle_unset_gate), service); + G_CALLBACK(_wmeshd_dbus_handle_unset_gate), service); g_signal_connect(meshd_dbus_object, "handle-set-softap", - G_CALLBACK(_meshd_dbus_handle_set_softap), service); + G_CALLBACK(_wmeshd_dbus_handle_set_softap), service); g_signal_connect(meshd_dbus_object, "handle-enable-softap", - G_CALLBACK(_meshd_dbus_handle_enable_softap), service); + G_CALLBACK(_wmeshd_dbus_handle_enable_softap), service); g_signal_connect(meshd_dbus_object, "handle-disable-softap", - G_CALLBACK(_meshd_dbus_handle_disable_softap), service); + G_CALLBACK(_wmeshd_dbus_handle_disable_softap), service); g_signal_connect(meshd_dbus_object, "handle-create-mesh-network", - G_CALLBACK(_meshd_dbus_handle_create_mesh_network), service); + G_CALLBACK(_wmeshd_dbus_handle_create_mesh_network), service); g_signal_connect(meshd_dbus_object, "handle-connect-mesh-network", - G_CALLBACK(_meshd_dbus_handle_connect_mesh_network), service); + G_CALLBACK(_wmeshd_dbus_handle_connect_mesh_network), service); g_signal_connect(meshd_dbus_object, "handle-disconnect-mesh-network", - G_CALLBACK(_meshd_dbus_handle_disconnect_mesh_network), service); + G_CALLBACK(_wmeshd_dbus_handle_disconnect_mesh_network), service); g_signal_connect(meshd_dbus_object, "handle-forget-mesh-network", - G_CALLBACK(_meshd_dbus_handle_forget_mesh_network), service); + G_CALLBACK(_wmeshd_dbus_handle_forget_mesh_network), service); g_signal_connect(meshd_dbus_object, "handle-set-interfaces", - G_CALLBACK(_meshd_dbus_handle_set_interfaces), service); + G_CALLBACK(_wmeshd_dbus_handle_set_interfaces), service); g_signal_connect(meshd_dbus_object, "handle-get-station-info", - G_CALLBACK(_meshd_dbus_handle_get_station_info), service); + G_CALLBACK(_wmeshd_dbus_handle_get_station_info), service); g_signal_connect(meshd_dbus_object, "handle-get-mpath-info", - G_CALLBACK(_meshd_dbus_handle_get_mpath_info), service); + G_CALLBACK(_wmeshd_dbus_handle_get_mpath_info), service); ret = g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(meshd_dbus_object), - conn, MESH_DBUS_OBJPATH, &error); + conn, WMESH_DBUS_OBJPATH, &error); if (FALSE == ret) { - MESH_LOGE("g_dbus_interface_skeleton_export() Fail(%s)", error->message); + WMESH_LOGE("g_dbus_interface_skeleton_export() Fail(%s)", error->message); g_error_free(error); } - ret = _meshd_dbus_subscribe_name_owner_changed(conn); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("_meshd_dbus_subscribe_name_owner_changed() Fail(%d)", ret); + ret = _wmeshd_dbus_subscribe_name_owner_changed(conn); + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("_wmeshd_dbus_subscribe_name_owner_changed() Fail(%d)", ret); return; } } -static void _meshd_dbus_on_name_lost(GDBusConnection *conn, const gchar *name, +static void _wmeshd_dbus_on_name_lost(GDBusConnection *conn, const gchar *name, gpointer user_data) { NOTUSED(conn); NOTUSED(user_data); - MESH_LOGD("Lost the name %s", name); + WMESH_LOGD("Lost the name %s", name); } -static void _meshd_dbus_on_name_acquired(GDBusConnection *conn, const gchar *name, +static void _wmeshd_dbus_on_name_acquired(GDBusConnection *conn, const gchar *name, gpointer user_data) { NOTUSED(conn); NOTUSED(user_data); - MESH_LOGD("Acquired the name %s", name); + WMESH_LOGD("Acquired the name %s", name); } -static gboolean _meshd_dbus_interface_init(mesh_service *service) +static gboolean _wmeshd_dbus_interface_init(wmesh_service *service) { guint id; guint activation_dbus_id; - meshd_check_null_ret_error("service", service, FALSE); + wmeshd_check_null_ret_error("service", service, FALSE); id = g_bus_own_name(G_BUS_TYPE_SYSTEM, - MESH_DBUS_INTERFACE, + WMESH_DBUS_INTERFACE, G_BUS_NAME_OWNER_FLAGS_REPLACE, - _meshd_dbus_on_bus_acquired, - _meshd_dbus_on_name_acquired, - _meshd_dbus_on_name_lost, + _wmeshd_dbus_on_bus_acquired, + _wmeshd_dbus_on_name_acquired, + _wmeshd_dbus_on_name_lost, service, NULL); if (0 == id) { - MESH_LOGE("g_bus_own_name() Fail"); + WMESH_LOGE("g_bus_own_name() Fail"); return FALSE; } /* Get D-Bus owner to activate mesh service daemon */ activation_dbus_id = g_bus_own_name(G_BUS_TYPE_SYSTEM, - MESH_DBUS_INTERFACE".manager", + WMESH_DBUS_INTERFACE".manager", G_BUS_NAME_OWNER_FLAGS_REPLACE, - _meshd_dbus_on_activator_bus_acquired, + _wmeshd_dbus_on_activator_bus_acquired, NULL, NULL, service, @@ -1120,28 +1120,28 @@ static gboolean _meshd_dbus_interface_init(mesh_service *service) service->dbus_id = id; service->activation_dbus_id = activation_dbus_id; - service->interface_info = g_new0(mesh_interface_s, 1); + service->interface_info = g_new0(wmesh_interface_s, 1); service->scanned_mesh_network = NULL; /* Initialize DBus sendor logic */ - meshd_dbus_start(service); + wmeshd_dbus_start(service); return TRUE; } -static void _meshd_dbus_deinit(mesh_service *service) +static void _wmeshd_dbus_deinit(wmesh_service *service) { - mesh_interface_s *info = NULL; - meshd_check_null_ret("service", service); + wmesh_interface_s *info = NULL; + wmeshd_check_null_ret("service", service); /* De-Initialize DBus sendor logic */ - meshd_dbus_stop(service); + wmeshd_dbus_stop(service); g_bus_unown_name(service->dbus_id); g_bus_unown_name(service->activation_dbus_id); info = service->interface_info; - meshd_check_null_ret("info", info); + wmeshd_check_null_ret("info", info); if (info->bridge_interface) g_free(info->bridge_interface); if (info->base_interface) @@ -1185,15 +1185,15 @@ static void _meshd_dbus_deinit(mesh_service *service) } /**< Mesh service interface initialization */ -gboolean meshd_service_interface_init(mesh_service *service) +gboolean wmeshd_service_interface_init(wmesh_service *service) { guint ret; - meshd_check_null_ret_error("service", service, FALSE); + wmeshd_check_null_ret_error("service", service, FALSE); /* Initialize dbus interface */ - ret = _meshd_dbus_interface_init(service); + ret = _wmeshd_dbus_interface_init(service); if (FALSE == ret) { - MESH_LOGE("_meshd_dbus_interface_init failed!!!"); + WMESH_LOGE("_wmeshd_dbus_interface_init failed!!!"); return FALSE; } @@ -1201,10 +1201,10 @@ gboolean meshd_service_interface_init(mesh_service *service) } /**< Mesh service interface de-initialization */ -void meshd_service_interface_deinit(mesh_service *service) +void wmeshd_service_interface_deinit(wmesh_service *service) { - meshd_check_null_ret("service", service); + wmeshd_check_null_ret("service", service); /* De-initialize dbus interface */ - _meshd_dbus_deinit(service); + _wmeshd_dbus_deinit(service); } diff --git a/src/mesh-service.c b/src/wmesh-service.c similarity index 60% rename from src/mesh-service.c rename to src/wmesh-service.c index 8ca577b..84262e6 100644 --- a/src/mesh-service.c +++ b/src/wmesh-service.c @@ -18,21 +18,21 @@ */ #include -#include "mesh.h" -#include "mesh-log.h" -#include "mesh-util.h" -#include "mesh-service.h" +#include "wmesh.h" +#include "wmesh-log.h" +#include "wmesh-util.h" +#include "wmesh-service.h" -mesh_service *meshd_service_new() +wmesh_service *wmeshd_service_new() { - mesh_service *service; + wmesh_service *service; - service = g_malloc0(sizeof(struct _mesh_service)); + service = g_malloc0(sizeof(struct _wmesh_service)); /* Create g-main loop */ service->main_loop = g_main_loop_new(NULL, FALSE); if (G_UNLIKELY(NULL == service->main_loop)) { - MESH_LOGE("g-main loop creation failed!!!"); + WMESH_LOGE("g-main loop creation failed!!!"); g_free(service); return NULL; } @@ -40,9 +40,9 @@ mesh_service *meshd_service_new() return service; } -void meshd_service_free(mesh_service *service) +void wmeshd_service_free(wmesh_service *service) { - meshd_check_null_ret("service", service); + wmeshd_check_null_ret("service", service); /* Unref 'g-main loop' */ if (service->main_loop) @@ -51,20 +51,20 @@ void meshd_service_free(mesh_service *service) g_free(service); } -gboolean meshd_service_run(mesh_service *service) +gboolean wmeshd_service_run(wmesh_service *service) { - meshd_check_null_ret_error("service", service, FALSE); - meshd_check_null_ret_error("service->main_loop", service->main_loop, FALSE); + wmeshd_check_null_ret_error("service", service, FALSE); + wmeshd_check_null_ret_error("service->main_loop", service->main_loop, FALSE); g_main_loop_run(service->main_loop); return TRUE; } -gboolean meshd_service_exit(mesh_service *service) +gboolean wmeshd_service_exit(wmesh_service *service) { - meshd_check_null_ret_error("service", service, FALSE); - meshd_check_null_ret_error("service->main_loop", service->main_loop, FALSE); + wmeshd_check_null_ret_error("service", service, FALSE); + wmeshd_check_null_ret_error("service->main_loop", service->main_loop, FALSE); g_main_loop_quit(service->main_loop); diff --git a/src/mesh-softap.c b/src/wmesh-softap.c similarity index 73% rename from src/mesh-softap.c rename to src/wmesh-softap.c index 678f432..f4f86a1 100644 --- a/src/mesh-softap.c +++ b/src/wmesh-softap.c @@ -34,11 +34,11 @@ #include #include -#include "mesh.h" -#include "mesh-log.h" -#include "mesh-util.h" -#include "mesh-service.h" -#include "mesh-softap.h" +#include "wmesh.h" +#include "wmesh-log.h" +#include "wmesh-util.h" +#include "wmesh-service.h" +#include "wmesh-softap.h" #define MOBILE_AP_WIFI_KEY_MAX_LEN 64 /**< Maximum length of wifi hash key */ @@ -84,15 +84,15 @@ static int __get_psk_hexascii(const char *pass, const unsigned char *salt, if (pass == NULL || salt == NULL || psk == NULL || psk_len < (SHA256_DIGEST_LENGTH * 2 + 1)) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; } if (!PKCS5_PBKDF2_HMAC_SHA1(pass, strlen(pass), salt, strlen((const char *)salt), PSK_ITERATION_COUNT, sizeof(buf), buf)) { - MESH_LOGE("Getting psk is failed"); - return MESHD_ERROR_OPERATION_FAILED; + WMESH_LOGE("Getting psk is failed"); + return WMESHD_ERROR_OPERATION_FAILED; } for (i = 0; i < SHA256_DIGEST_LENGTH; i++) { @@ -104,7 +104,7 @@ static int __get_psk_hexascii(const char *pass, const unsigned char *salt, } psk[i << 1] = '\0'; - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } static int __config_hostapd(const char *softap_interface, const char *ssid, @@ -151,10 +151,10 @@ static int __config_hostapd(const char *softap_interface, const char *ssid, if (security != NULL && g_strcmp0(security, "wpa2-psk") == 0) { ret = __get_psk_hexascii(passphrase, (const unsigned char *)ssid, key, sizeof(key)); - if (ret != MESHD_ERROR_NONE) { + if (ret != WMESHD_ERROR_NONE) { g_free(conf); - MESH_LOGE("hex conversion failed"); - return MESHD_ERROR_OPERATION_FAILED; + WMESH_LOGE("hex conversion failed"); + return WMESHD_ERROR_OPERATION_FAILED; } snprintf(buf, sizeof(buf), "wpa=2\nrsn_pairwise=CCMP\nwpa_psk=%s\n", key); @@ -163,14 +163,14 @@ static int __config_hostapd(const char *softap_interface, const char *ssid, conf = g_strconcat(old_conf, buf, NULL); g_free(old_conf); } else { - MESH_LOGD("Open connection [%s]", security); + WMESH_LOGD("Open connection [%s]", security); } fp = fopen(HOSTAPD_MESH_CONF_FILE, "w"); if (NULL == fp) { - MESH_LOGE("Could not create the file."); + WMESH_LOGE("Could not create the file."); g_free(conf); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } if (conf) { @@ -179,7 +179,7 @@ static int __config_hostapd(const char *softap_interface, const char *ssid, } fclose(fp); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } static int __open_hostapd_intf(const char* softap_interface, int *fd, @@ -192,14 +192,14 @@ static int __open_hostapd_intf(const char* softap_interface, int *fd, struct stat stat_buf; if (fd == NULL || intf == NULL) { - MESH_LOGE("fd is NULL"); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("fd is NULL"); + return WMESHD_ERROR_INVALID_PARAMETER; } *fd = socket(PF_UNIX, SOCK_DGRAM, 0); if (*fd < 0) { - MESH_LOGE("socket is failed"); - return MESHD_ERROR_OPERATION_FAILED; + WMESH_LOGE("socket is failed"); + return WMESHD_ERROR_OPERATION_FAILED; } src.sun_family = AF_UNIX; @@ -209,11 +209,11 @@ static int __open_hostapd_intf(const char* softap_interface, int *fd, unlink(src.sun_path); if (bind(*fd, (struct sockaddr *)&src, sizeof(src)) < 0) { - MESH_LOGE("bind is failed"); + WMESH_LOGE("bind is failed"); close(*fd); *fd = -1; unlink(src.sun_path); - return MESHD_ERROR_OPERATION_FAILED; + return WMESHD_ERROR_OPERATION_FAILED; } snprintf(ctrl_intf, sizeof(ctrl_intf), "%s/%s", @@ -226,31 +226,31 @@ static int __open_hostapd_intf(const char* softap_interface, int *fd, goto FAIL; usleep(HOSTAPD_RETRY_DELAY); } - MESH_LOGD("Successfully open interface[%s] to hostapd", intf); + WMESH_LOGD("Successfully open interface[%s] to hostapd", intf); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; FAIL: - MESH_LOGE("Cannot make connection to hostapd"); + WMESH_LOGE("Cannot make connection to hostapd"); close(*fd); *fd = -1; unlink(src.sun_path); - return MESHD_ERROR_OPERATION_FAILED; + return WMESHD_ERROR_OPERATION_FAILED; } static int __close_hostapd_intf(int *fd) { if (fd == NULL) { - MESH_LOGE("fd is NULL"); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("fd is NULL"); + return WMESHD_ERROR_INVALID_PARAMETER; } if (*fd > 0) close(*fd); *fd = -1; - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } static int __get_pid_of_hostapd(pid_t *pid) @@ -266,29 +266,29 @@ static int __get_pid_of_hostapd(pid_t *pid) if (0 == access(file_path, F_OK)) { fd = fopen(file_path, "r"); if (fd == NULL) { - MESH_LOGE("Error! Could not open pid file"); - return MESHD_ERROR_IO_ERROR; + WMESH_LOGE("Error! Could not open pid file"); + return WMESHD_ERROR_IO_ERROR; } } else { - MESH_LOGE("Error! Could not access pid file"); - return MESHD_ERROR_IO_ERROR; + WMESH_LOGE("Error! Could not access pid file"); + return WMESHD_ERROR_IO_ERROR; } errno = 0; rv = fscanf(fd, "%d", &ret); if (rv < 0) { strerror_r(errno, error_buf, 256); - MESH_LOGE("Error! Failed to read from file, rv:[%d], error:[%s]", + WMESH_LOGE("Error! Failed to read from file, rv:[%d], error:[%s]", rv, error_buf); fclose(fd); - return MESHD_ERROR_IO_ERROR; + return WMESHD_ERROR_IO_ERROR; } *pid = (pid_t)ret; - MESH_LOGD(" PID: [%d]", ret); + WMESH_LOGD(" PID: [%d]", ret); fclose(fd); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } static int __terminate_hostapd() @@ -298,41 +298,41 @@ static int __terminate_hostapd() /* Get pid */ ret = __get_pid_of_hostapd(&hostapd_pid); - if (MESHD_ERROR_NONE != ret) { - MESH_LOGE("There is no hostapd"); - return MESHD_ERROR_NONE; + if (WMESHD_ERROR_NONE != ret) { + WMESH_LOGE("There is no hostapd"); + return WMESHD_ERROR_NONE; } if (hostapd_pid == 0) { - MESH_LOGE("There is no hostapd"); - return MESHD_ERROR_NONE; + WMESH_LOGE("There is no hostapd"); + return WMESHD_ERROR_NONE; } ret = __close_hostapd_intf(&hostapd_ctrl_fd); - if (ret != MESHD_ERROR_NONE) - MESH_LOGE("__close_hostapd_intf is failed"); + if (ret != WMESHD_ERROR_NONE) + WMESH_LOGE("__close_hostapd_intf is failed"); kill(hostapd_pid, SIGTERM); - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } static int __execute_hostapd() { pid_t pid = 0; int status; - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; ret = __get_pid_of_hostapd(&pid); if (0 != pid) { - MESH_LOGE("hostapd is running already"); - return MESHD_ERROR_NONE; + WMESH_LOGE("hostapd is running already"); + return WMESHD_ERROR_NONE; } pid = fork(); if (pid < 0) { - MESH_LOGE("fork failed"); - return MESHD_ERROR_IO_ERROR; + WMESH_LOGE("fork failed"); + return WMESHD_ERROR_IO_ERROR; } if (pid == 0) { @@ -342,25 +342,25 @@ static int __execute_hostapd() "-P", HOSTAPD_PID_FILE, "-ddd", "-B", (char *)NULL)) { - MESH_LOGE("execl failed"); + WMESH_LOGE("execl failed"); } - MESH_LOGE("Should not get here!"); + WMESH_LOGE("Should not get here!"); exit(1); } else { /* Reap child */ waitpid(pid, &status, 0); - MESH_LOGD(" child [%d] reaped with status(%d)", pid, status); + WMESH_LOGD(" child [%d] reaped with status(%d)", pid, status); } - return MESHD_ERROR_NONE; + return WMESHD_ERROR_NONE; } -int mesh_softap_set_configuration(const char* softap_interface, +int wmesh_softap_set_configuration(const char* softap_interface, const char *ssid, const char* mode, int channel, int visibility, int max_sta, int security, const char* passphrase) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; const char *sec = (security == 0) ? NULL : "wpa2-psk"; int mac_filter = 0; @@ -370,39 +370,39 @@ int mesh_softap_set_configuration(const char* softap_interface, return ret; } -int mesh_softap_enable_softap(const char* softap_interface) +int wmesh_softap_enable_softap(const char* softap_interface) { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; if (NULL == softap_interface) { - MESH_LOGE("Invalid parameter"); - return MESHD_ERROR_INVALID_PARAMETER; + WMESH_LOGE("Invalid parameter"); + return WMESHD_ERROR_INVALID_PARAMETER; } ret = __execute_hostapd(); - if (ret != MESHD_ERROR_NONE) { - MESH_LOGE("__execute_hostapd is failed"); - return MESHD_ERROR_OPERATION_FAILED; + if (ret != WMESHD_ERROR_NONE) { + WMESH_LOGE("__execute_hostapd is failed"); + return WMESHD_ERROR_OPERATION_FAILED; } ret = __open_hostapd_intf(softap_interface, &hostapd_ctrl_fd, MH_CTRL_INTF); - if (ret != MESHD_ERROR_NONE) { - MESH_LOGE("__open_hostapd_intf is failed"); + if (ret != WMESHD_ERROR_NONE) { + WMESH_LOGE("__open_hostapd_intf is failed"); __terminate_hostapd(); } return ret; } -int mesh_softap_disable_softap() +int wmesh_softap_disable_softap() { - int ret = MESHD_ERROR_NONE; + int ret = WMESHD_ERROR_NONE; ret = __terminate_hostapd(); - if (ret != MESHD_ERROR_NONE) { - MESH_LOGE("__execute_hostapd is failed"); - return MESHD_ERROR_OPERATION_FAILED; + if (ret != WMESHD_ERROR_NONE) { + WMESH_LOGE("__execute_hostapd is failed"); + return WMESHD_ERROR_OPERATION_FAILED; } return ret; diff --git a/src/meshd.c b/src/wmeshd.c similarity index 69% rename from src/meshd.c rename to src/wmeshd.c index b671892..33b88b3 100644 --- a/src/meshd.c +++ b/src/wmeshd.c @@ -23,22 +23,22 @@ #include -#include "mesh.h" -#include "mesh-log.h" -#include "mesh-util.h" -#include "mesh-service.h" -#include "mesh-service-interface.h" +#include "wmesh.h" +#include "wmesh-log.h" +#include "wmesh-util.h" +#include "wmesh-service.h" +#include "wmesh-service-interface.h" /**< mesh service */ -mesh_service *meshsvc; +wmesh_service *meshsvc; int main(int argc, char *argv[]) { - mesh_service *service = NULL; + wmesh_service *service = NULL; int ret_code = 0; gboolean ret; - __MESH_LOG_FUNC_ENTER__; + __WMESH_LOG_FUNC_ENTER__; #if !GLIB_CHECK_VERSION(2, 32, 0) if (!g_thread_supported()) @@ -51,32 +51,32 @@ int main(int argc, char *argv[]) NOTUSED(argc); NOTUSED(argv); - MESH_LOGI("service mainloop start"); + WMESH_LOGI("service mainloop start"); /* Create mesh service */ - meshsvc = service = meshd_service_new(); + meshsvc = service = wmeshd_service_new(); /* Initialize mesh service interface layer */ - ret = meshd_service_interface_init(service); + ret = wmeshd_service_interface_init(service); if (G_UNLIKELY(FALSE == ret)) { - MESH_LOGE("meshd_service_interface_init failed!"); + WMESH_LOGE("wmeshd_service_interface_init failed!"); goto END; } /* Run mesh service */ - ret = meshd_service_run(service); + ret = wmeshd_service_run(service); if (G_UNLIKELY(FALSE == ret)) { - MESH_LOGE("Run service failed!"); + WMESH_LOGE("Run service failed!"); ret_code = EXIT_FAILURE; } END: /* Free mesh service */ - meshd_service_interface_deinit(service); - meshd_service_free(service); + wmeshd_service_interface_deinit(service); + wmeshd_service_free(service); meshsvc = NULL; - __MESH_LOG_FUNC_EXIT__; + __WMESH_LOG_FUNC_EXIT__; return 0; } diff --git a/meshd.manifest b/wmeshd.manifest similarity index 100% rename from meshd.manifest rename to wmeshd.manifest -- 2.7.4 From bba5a173b240b315ec25e79aa75dc0be30944036 Mon Sep 17 00:00:00 2001 From: saerome kim Date: Fri, 7 Jul 2017 18:13:16 +0900 Subject: [PATCH 14/16] Change spec file name Signed-off-by: saerome kim --- packaging/{wmeshd.spec => wifi-mesh-manager.spec} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename packaging/{wmeshd.spec => wifi-mesh-manager.spec} (98%) diff --git a/packaging/wmeshd.spec b/packaging/wifi-mesh-manager.spec similarity index 98% rename from packaging/wmeshd.spec rename to packaging/wifi-mesh-manager.spec index dcb2836..5bf70b6 100644 --- a/packaging/wmeshd.spec +++ b/packaging/wifi-mesh-manager.spec @@ -1,6 +1,6 @@ %define CHECK_WMESH_PRIVILEGE False -Name: wmeshd +Name: wifi-mesh-manager Summary: Wi-Fi mesh network daemon Version: 0.0.1 Release: 1 -- 2.7.4 From 3eff2759b32998f655d1cf1b28521cb2e7c273ca Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Wed, 9 Aug 2017 13:41:57 +0900 Subject: [PATCH 15/16] [SECSFV-23] Change uid/gid to network_fw Change-Id: Id0d20049720559123efbf87e7530f892f9b587ab Signed-off-by: saerome.kim --- packaging/net.wmesh.service | 3 ++- packaging/wmeshd.service | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packaging/net.wmesh.service b/packaging/net.wmesh.service index 66cca50..654f139 100644 --- a/packaging/net.wmesh.service +++ b/packaging/net.wmesh.service @@ -2,5 +2,6 @@ Name=net.wmesh.manager Exec=/bin/false -User=root +User=network_fw +Group=network_fw SystemdService=wmeshd.service diff --git a/packaging/wmeshd.service b/packaging/wmeshd.service index 461fb8a..0420c87 100644 --- a/packaging/wmeshd.service +++ b/packaging/wmeshd.service @@ -5,6 +5,8 @@ After=dbus.socket [Service] Type=dbus +User=network_fw +Group=network_fw BusName=net.wmesh.manager SmackProcessLabel=System ExecStart=/usr/bin/wmeshd -- 2.7.4 From 064f8d4c8e1642a87964c068ba82890b9d8566c5 Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Thu, 10 Aug 2017 09:41:37 +0900 Subject: [PATCH 16/16] [SECSFV-23] Make systemd set wmeshd capabilities Change-Id: Ib006de6493a6d6375dc9b4540aa3e926717d1876 Signed-off-by: saerome.kim --- packaging/wifi-mesh-manager.spec | 3 ++- packaging/wmeshd.service | 2 ++ src/wmesh-softap.c | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packaging/wifi-mesh-manager.spec b/packaging/wifi-mesh-manager.spec index 5bf70b6..71201de 100644 --- a/packaging/wifi-mesh-manager.spec +++ b/packaging/wifi-mesh-manager.spec @@ -70,12 +70,13 @@ chmod 755 %{_sbindir}/wmesh.sh # For configuration files mkdir -p %TZ_SYS_VAR/lib/wmesh +chown network_fw:network_fw %TZ_SYS_VAR/lib/wmesh %files %manifest wmeshd.manifest %license LICENSE %defattr(-,root,root,-) -%caps(cap_net_raw,cap_net_admin=eip) %attr(750,system,system) %{_bindir}/wmeshd +%caps(cap_net_raw,cap_net_admin=ei) %attr(750,network_fw,network_fw) %{_bindir}/wmeshd %if %{CHECK_WMESH_PRIVILEGE} == "True" %config %{_sysconfdir}/dbus-1/system.d/wmeshd.conf %endif diff --git a/packaging/wmeshd.service b/packaging/wmeshd.service index 0420c87..85015d3 100644 --- a/packaging/wmeshd.service +++ b/packaging/wmeshd.service @@ -12,3 +12,5 @@ SmackProcessLabel=System ExecStart=/usr/bin/wmeshd CapabilityBoundingSet=~CAP_MAC_ADMIN CapabilityBoundingSet=~CAP_MAC_OVERRIDE +Capabilities=cap_net_admin,cap_net_raw=i +SecureBits=keep-caps diff --git a/src/wmesh-softap.c b/src/wmesh-softap.c index f4f86a1..726e63f 100644 --- a/src/wmesh-softap.c +++ b/src/wmesh-softap.c @@ -59,7 +59,7 @@ #define HOSTAPD_BIN "/usr/sbin/hostapd" #define HOSTAPD_DEBUG_FILE "/var/log/mesh_hostapd.log" #define HOSTAPD_ENTROPY_FILE tzplatform_mkpath(TZ_SYS_VAR, "/lib/misc/hostapd.bin") -#define HOSTAPD_MESH_CONF_FILE tzplatform_mkpath(TZ_SYS_VAR, "/lib/mesh/mesh_hostapd.conf") +#define HOSTAPD_MESH_CONF_FILE tzplatform_mkpath(TZ_SYS_VAR, "/lib/wmesh/mesh_hostapd.conf") #define HOSTAPD_CTRL_INTF_DIR tzplatform_mkpath(TZ_SYS_RUN, "/hostapd") #define HOSTAPD_PID_FILE tzplatform_mkpath(TZ_SYS_RUN, "/.mesh_hostapd.pid") #define HOSTAPD_ALLOWED_LIST tzplatform_mkpath(TZ_SYS_VAR, "/lib/hostapd/hostapd.accept") @@ -168,7 +168,7 @@ static int __config_hostapd(const char *softap_interface, const char *ssid, fp = fopen(HOSTAPD_MESH_CONF_FILE, "w"); if (NULL == fp) { - WMESH_LOGE("Could not create the file."); + WMESH_LOGE("Could not create the file [%s].", HOSTAPD_MESH_CONF_FILE); g_free(conf); return WMESHD_ERROR_IO_ERROR; } -- 2.7.4