return ret;
}
+int wmesh_gdbus_mesh_remove_peer(wmesh_service *service, char *peer)
+{
+ GVariant *variant = NULL;
+ GError *error = NULL;
+ int ret = WMESHD_ERROR_NONE;
+
+ 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, "MeshRemovePeer",
+ g_variant_new("(s)", peer), G_DBUS_CALL_FLAGS_NONE, 1, NULL,
+ &error);
+ if (variant) {
+ WMESH_LOGD("Successfully requested. [MeshRemovePeer]");
+ } else if (error) {
+ 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 = WMESHD_ERROR_INVALID_PARAMETER;
+ g_error_free(error);
+ }
+
+ return ret;
+}
+
return WMESHD_ERROR_OPERATION_FAILED;
}
-static int _send_nl_del_station_info(const char* if_name, char* peer)
-{
- mesh_nl_state state = {
- .nl80211_id = -1,
- .callback_state = MESH_NL_CALLBACK_FINISHED,
- .event_source = 0,
- .nl_socket = NULL,
- .msg = NULL,
- .cb = NULL,
- .s_cb = NULL,
- .station_list = NULL,
- };
- int err = WMESHD_ERROR_NONE;
- int device_index = 0;
- int ret;
-
- ret = __initialize_nl80211(&state);
- if (WMESHD_ERROR_NONE != ret) {
- WMESH_LOGE("Failed to initialize nl80211");
- return ret;
- }
-
- ret = __initialize_netlink_message(&state);
- if (WMESHD_ERROR_NONE != ret) {
- WMESH_LOGE("Failed to initialize netlink message");
- goto DESTROY;
- }
-
- /* Set command into message */
- genlmsg_put(state.msg, 0, 0, state.nl80211_id, 0,
- NLM_F_DUMP, NL80211_CMD_DEL_STATION, 0);
-
- /* Add attributes into message */
- WMESH_LOGD("Delete a station [%s] with interface [%s]", peer, if_name);
- ret = __get_device_index_from_string(if_name, &device_index);
- if (WMESHD_ERROR_NONE != ret) {
- WMESH_LOGE("Failed to get mesh interface device index");
- err = ret;
- goto DESTROY;
- }
- NLA_PUT_U32(state.msg, NL80211_ATTR_IFINDEX, device_index);
- NLA_PUT(state.msg, NL80211_ATTR_MAC, ETH_ALEN, peer);
-
- /* Send message into kernel */
- ret = nl_send_auto(state.nl_socket, state.msg);
- if (ret < 0) {
- WMESH_LOGE("Failed to nl_send_auto() [%s](%d)",
- nl_geterror(ret), ret);
- err = WMESHD_ERROR_OPERATION_FAILED;
- goto DESTROY;
- }
-
-DESTROY:
- __clean_netlink_message(&state);
- __clean_nl80211(&state);
-
- return err;
-
-nla_put_failure:
- WMESH_LOGE("Failed to message build");
- __clean_netlink_message(&state);
- __clean_nl80211(&state);
-
- return WMESHD_ERROR_OPERATION_FAILED;
-}
-
static int _send_nl_get_mpath_info(const char* if_name, GList **mpath_list)
{
mesh_nl_state state = {
return ret;
}
-int wmesh_netlink_del_station_info(const char* mesh_if_name, char *peer)
-{
- int ret = WMESHD_ERROR_NONE;
-
- if (NULL == mesh_if_name || strlen(mesh_if_name) > IFNAMSIZ) {
- WMESH_LOGE("Invalid parameter [%p]", mesh_if_name);
- return WMESHD_ERROR_INVALID_PARAMETER;
- }
- if (NULL == peer) {
- WMESH_LOGE("Invalid parameter [%p]", peer);
- return WMESHD_ERROR_INVALID_PARAMETER;
- }
-
- WMESH_LOGD("Del connected station : [%s]", peer);
- ret = _send_nl_del_station_info(mesh_if_name, peer);
-
- return ret;
-}
-
int wmesh_netlink_get_mpath_info(const char* mesh_if_name, GList **mpath_list)
{
int ret = WMESHD_ERROR_NONE;