From patchwork Tue Jun 23 17:39:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brian Norris X-Patchwork-Id: 1315399 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2001:8b0:10b:1231::1; helo=merlin.infradead.org; envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=merlin.20170209 header.b=miy4LC7p; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.a=rsa-sha256 header.s=google header.b=hIXmeptG; dkim-atps=neutral Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49rtpK0c3Mz9sSn for ; Wed, 24 Jun 2020 03:40:09 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=aANgsjHAcNDT0iKmPw3sXtBcBi8w8z+9KgmM/PQtT/U=; b=miy4LC7puNE04riY1WKkMB05LA x9URWS2dqk36rrA/uJfXykEGGZQwFeQMoiwxtumeOMYLh2KbNJxPhOVewTjAMoUab+ZZ4/OtFV1YN DjE4N1uZB6+Goq7i2EpK50ri2i19KETn1WMMAxs63LZDmC2BaEN9G6GbKIc490Vj2by1SQWAym0jF twTr+b6PJnmJFJv6dt93AgrYwyYZlSuosKhW4vqlk06k+uY1T9oWhKaD+DaiZCCAC1mTDEn3zXd+H 0FdxP+kWk7NLtGfv4AGSeofdB9EZVjM1H0wtQHV4mgxQ9EkbpSFqIHKmbggPxQ6qo8pG63KdeLI+z mSGvIifA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jnmtN-000588-OG; Tue, 23 Jun 2020 17:39:29 +0000 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jnmtD-00053V-4t for hostap@lists.infradead.org; Tue, 23 Jun 2020 17:39:20 +0000 Received: by mail-pl1-x641.google.com with SMTP id g17so229650plq.12 for ; Tue, 23 Jun 2020 10:39:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=nW6FlPVYWk/fm+U5/mww3NklLeNupOkYOIXOp8V07OY=; b=hIXmeptGuutxHilZ6P8IuVUS0Gl8FkFYUqvMzZLJS+MYhOBM01022YwLA1jHevgzuA TZKuvSDSdZ3WxOa4dhONUw8pPrK1ynoFVFHTs/94o24428f2xOs3rY4VvYpyYPAu7fw7 Hlshhtz9a8cBhN0HEs6052l9xXn9xoetpAYdY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=nW6FlPVYWk/fm+U5/mww3NklLeNupOkYOIXOp8V07OY=; b=Hsarf501nJwF6goEaRJCaekiNazV497KwXvfglib0VaPJ0ooPph3XzWsk1k3/xO+23 aHm61LOBJQK7RqV86Ckwf+ZJHbImI/T5HZ4Q/cM9UNyaWOVMbEmVLfZoLRuEOw0bGcPQ ZrstJRTZ5tbnn7crZzaCcC+jLFdFftmmnSOUi6cOFQCvEGZXJnAMMORgUnc2tsJQ6QxF Y+c4zuAd77WvTfxkYjS8qnARO+ky4CMHHJoGkNKIZtN5qZOQmMamSheoTNN7cCM+GQPw WL0vB3eA5f8RlhJDHUc5EJzuIQzOKF5/CT/Ga7TAfK/iUpGe+U8LaVD9lpNybQ/yF7fs /ORQ== X-Gm-Message-State: AOAM533Bkw4lxegQ20brWt9NtyYYQSbg/MqPptsvSfKvPNQ7dVH1mOlt zpQwxfFHzGw/j1FSgBUYvG6JP1CEU34= X-Google-Smtp-Source: ABdhPJy1V6mRrisIu7abMz19kgonhGYgEbiFIGIPri//Qmr5gvr0GppM1sMMyUPXZSP/UlDvCbWm7w== X-Received: by 2002:a17:90a:c258:: with SMTP id d24mr24399681pjx.137.1592933956587; Tue, 23 Jun 2020 10:39:16 -0700 (PDT) Received: from smtp.gmail.com ([2620:15c:202:1:534:b7c0:a63c:460c]) by smtp.gmail.com with ESMTPSA id b24sm17086689pfo.112.2020.06.23.10.39.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jun 2020 10:39:15 -0700 (PDT) From: Brian Norris To: hostap@lists.infradead.org Subject: [PATCH v2] DBus: Add "Roam" command support Date: Tue, 23 Jun 2020 10:39:02 -0700 Message-Id: <20200623173902.148076-1-briannorris@chromium.org> X-Mailer: git-send-email 2.27.0.111.gc72c7da667-goog MIME-Version: 1.0 X-Spam-Note: CRM114 invocation failed X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:641 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: hostap@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Brian Norris Sender: "Hostap" Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Add D-Bus interface for ROAM command, imitating the existing wpa_cli command. Chromium OS has been carrying a form of this patch for a very long time. I've cleaned it up a bit and documented it. Signed-off-by: Brian Norris --- v2: document "Target BSS not found" error case doc/dbus.doxygen | 18 +++++++++ wpa_supplicant/dbus/dbus_new.c | 8 ++++ wpa_supplicant/dbus/dbus_new_handlers.c | 53 +++++++++++++++++++++++++ wpa_supplicant/dbus/dbus_new_handlers.h | 3 ++ 4 files changed, 82 insertions(+) diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen index a2e5de26227b..0944b0e247ce 100644 --- a/doc/dbus.doxygen +++ b/doc/dbus.doxygen @@ -322,6 +322,24 @@ fi.w1.wpa_supplicant1.CreateInterface. +
  • +

    Roam ( s : addr ) --> nothing

    +

    Initiate a roam to another BSS within the current ESS.

    +

    Possible errors

    +
    +
    fi.w1.wpa_supplicant1.InvalidArgs
    +
    Missing address argument.
    +
    fi.w1.wpa_supplicant1.InvalidArgs
    +
    Invalid hardware address format.
    +
    fi.w1.wpa_supplicant1.InvalidArgs
    +
    Target BSS not found.
    +
    fi.w1.wpa_supplicant1.NotConnected
    +
    Interface is not connected to any network.
    +
    fi.w1.wpa_supplicant1.UnknownError
    +
    Scan processing was not included in the build.
    +
    +
  • +
  • AddBlob ( s : name, ay : data ) --> nothing

    Adds a blob to the interface.

    diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c index 793a881efb0e..f50ec41ba17d 100644 --- a/wpa_supplicant/dbus/dbus_new.c +++ b/wpa_supplicant/dbus/dbus_new.c @@ -3212,6 +3212,14 @@ static const struct wpa_dbus_method_desc wpas_dbus_interface_methods[] = { END_ARGS } }, + { "Roam", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) &wpas_dbus_handler_roam, + { + { "addr", "s", ARG_IN }, + END_ARGS + } + }, + #ifndef CONFIG_NO_CONFIG_BLOBS { "AddBlob", WPAS_DBUS_NEW_IFACE_INTERFACE, (WPADBusMethodHandler) wpas_dbus_handler_add_blob, diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c index d1f9607c602d..0431ba35c54f 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.c +++ b/wpa_supplicant/dbus/dbus_new_handlers.c @@ -1889,6 +1889,59 @@ out: } +/** + * wpas_dbus_handler_roam - Send ROAM command to wpa_supplicant + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL on success or dbus error on failure + * + * Handler function for "Roam" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_roam(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ +#ifdef CONFIG_NO_SCAN_PROCESSING + return wpas_dbus_error_unknown_error( + message, "scan processing not included"); +#else /* CONFIG_NO_SCAN_PROCESSING */ + u8 bssid[ETH_ALEN]; + struct wpa_bss *bss; + struct wpa_ssid *ssid = wpa_s->current_ssid; + char *addr; + + if (!dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &addr, + DBUS_TYPE_INVALID)) { + return wpas_dbus_error_invalid_args(message, NULL); + } + + if (hwaddr_aton(addr, bssid)) { + return wpas_dbus_error_invalid_args( + message, "Invalid hardware address format"); + } + + wpa_printf(MSG_DEBUG, "dbus: ROAM " MACSTR, MAC2STR(bssid)); + + if (!ssid) { + return dbus_message_new_error( + message, WPAS_DBUS_ERROR_NOT_CONNECTED, + "This interface is not connected"); + } + + bss = wpa_bss_get(wpa_s, bssid, ssid->ssid, ssid->ssid_len); + if (!bss) { + wpa_printf(MSG_DEBUG, "dbus: ROAM: Target BSS not found"); + return wpas_dbus_error_invalid_args( + message, "Target BSS not found"); + } + + wpa_s->reassociate = 1; + wpa_supplicant_connect(wpa_s, bss, ssid); + + return NULL; +#endif /* CONFIG_NO_SCAN_PROCESSING */ +} + + /** * wpas_dbus_handler_network_reply - Reply to a NetworkRequest signal * @message: Pointer to incoming dbus message diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h index afa26efed675..d5f21fc1483d 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.h +++ b/wpa_supplicant/dbus/dbus_new_handlers.h @@ -117,6 +117,9 @@ DBusMessage * wpas_dbus_handler_select_network(DBusMessage *message, DBusMessage * wpas_dbus_handler_network_reply(DBusMessage *message, struct wpa_supplicant *wpa_s); +DBusMessage * wpas_dbus_handler_roam(DBusMessage *message, + struct wpa_supplicant *wpa_s); + DBusMessage * wpas_dbus_handler_add_blob(DBusMessage *message, struct wpa_supplicant *wpa_s);