On Wed, 2016-10-19 at 21:12 +0000, Stéphane Boucher wrote:
> Solved.
> 
> Dbus-monitor did not tell the full story (at least not the way I
> invoked it).  When I finally got to run NetworkManager in gdb, using
> g_variant_print() revealed that I wasn't quite sending the right
> Settings, type-wise.

Ah, interesting.  Note that you don't actually need to set any
dictionary entries if you aren't going to put anything in them.  So you
don't need to specify addresses, routes, or addresses.  You also don't
actually need to set the 'security' parameter either (as of NM 1.0?)
since NM will infer that automatically if you pass a 'wireless-
securitry' setting.

Dan

> The fix ends up being:
> --- qtdbus_test.cpp.orig2016-10-19 16:28:37.026305491 -0400
> +++ qtdbus_test.cpp2016-10-19 16:27:43.354350306 -0400
> @@ -39,9 +39,9 @@
>  oConn["connection"]["autoconnect"] = QVariant(false);
>  oConn["connection"]["type"] = QString("802-11-wireless");
>  oConn["ipv4"]["method"] = QString("shared");
> -oConn["ipv4"]["addresses"] = QList<QVariant>();
> -oConn["ipv4"]["dns"] = QList<QVariant>();
> -oConn["ipv4"]["routes"] = QList<QVariant>();
> +oConn["ipv4"]["addresses"] =
> QVariant::fromValue(QList<QList<uint>>());
> +oConn["ipv4"]["dns"] = QVariant::fromValue(QList<uint>());
> +oConn["ipv4"]["routes"] = QVariant::fromValue(QList<QList<uint>>());
>  oConn["802-11-wireless-security"]["wep-key-type"] =
> QVariant((unsigned)1);
>  oConn["802-11-wireless-security"]["wep-key0"] =
> QString("87c77b7552");
>  oConn["802-11-wireless-security"]["key-mgmt"] = QString("none");
> 
> 
> STÉPHANE BOUCHER
> Consultant software
> 
> 
> D-BOX Technologies Inc. | A. 2172 de la Province, Longueuil, QC J4G
> 1R7 CANADA | T. 450-442-3003 | D. | W. d-box.com
> 
> -----Message d'origine-----
> De : networkmanager-list [mailto:networkmanager-list-boun...@gnome.or
> g] De la part de Stéphane Boucher
> Envoyé : October 19, 2016 1:35 PM
> À : Dan Williams <d...@redhat.com>; networkmanager-list@gnome.org
> Objet : RE: Problem activating hotspot
> 
> 
> Any suggestions?
> 
> I've been trying to build/run a debug version of NetworkManager (but
> without success so far - my own build does not detect the wifi
> device...) :-(
> 
> 
> STÉPHANE BOUCHER
> Consultant software
> 
> 
> D-BOX Technologies Inc. | A. 2172 de la Province, Longueuil, QC J4G
> 1R7 CANADA | T. 450-442-3003 | D. | W. d-box.com
> 
> -----Message d'origine-----
> De : Stéphane Boucher
> Envoyé : October 18, 2016 4:17 PM
> À : Stéphane Boucher <sbouc...@d-box.com>; Dan Williams <dcbw@redhat.
> com>; networkmanager-list@gnome.org
> Objet : RE: Problem activating hotspot
> 
> 
> Let's see if I finally tamed the outlook beast... :-(
> 
> 
> Simplified code.
> 
> --snip--snip--
> #if 0
> ++ -g -std=c++11 -fPIC -o qtdbus_test qtdbus_test.cpp $(pkg-config --
> cflags --libs Qt5DBus)
> exec ./qtdbus_test
> #endif
> 
> #include <iostream>
> #include <QtDBus/QtDBus>
> #define NM_DBUS_SERVICE "org.freedesktop.NetworkManager"
> #define NM_DBUS_PATH "/org/freedesktop/NetworkManager"
> 
> typedef QMap<QString, QMap<QString, QVariant>> Connection;
> 
> Q_DECLARE_METATYPE(Connection);
> 
> int main (int argc, char **argv)
> {
> QCoreApplication app(argc, argv);
> qDBusRegisterMetaType<Connection>();
> QDBusConnection oSysbus = QDBusConnection::systemBus();
> QDBusInterface oNmI(NM_DBUS_SERVICE, NM_DBUS_PATH, NM_DBUS_SERVICE,
> oSysbus);
> 
> QDBusObjectPath
> oDeviceP("/org/freedesktop/NetworkManager/Devices/0");
> std::string sMode("adhoc");
> std::string sSsid("toaster");
> 
> QDBusObjectPath oAccessPointP("/");
> QDBusInterface oDeviceI(NM_DBUS_SERVICE, oDeviceP.path(),
> "org.freedesktop.NetworkManager.Device.Wireless", oSysbus);
> 
> ::Connection oConn;
> oConn["802-11-wireless"]["mode"] = QString::fromStdString(sMode);
> oConn["802-11-wireless"]["ssid"] = QByteArray::fromStdString(sSsid);
> oConn["802-11-wireless"]["security"] = QString("802-11-wireless-
> security");
> 
> QByteArray addr; addr[0] = 0xa0; addr[1] = 0x21; addr[2] = 0xb7;
> addr[3] = 0x4a; addr[4] = 0x9b; addr[5] = 0x80;
> oConn["802-11-wireless"]["mac-address"] = addr;
> //oDeviceI.property("HwAddress");
> oConn["connection"]["id"] = QString("Hotspot");
> oConn["connection"]["autoconnect"] = QVariant(false);
> oConn["connection"]["type"] = QString("802-11-wireless");
> oConn["ipv4"]["method"] = QString("shared");
> oConn["ipv4"]["addresses"] = QList<QVariant>();
> oConn["ipv4"]["dns"] = QList<QVariant>();
> oConn["ipv4"]["routes"] = QList<QVariant>();
> oConn["802-11-wireless-security"]["wep-key-type"] =
> QVariant((unsigned)1);
> oConn["802-11-wireless-security"]["wep-key0"] =
> QString("87c77b7552");
> oConn["802-11-wireless-security"]["key-mgmt"] = QString("none");
> 
> QDBusReply<QDBusObjectPath> oResult =
> oNmI.call("AddAndActivateConnection",
> QVariant::fromValue(oConn),
> QVariant::fromValue(oDeviceP),
> QVariant::fromValue(oAccessPointP));
> 
> if (! oResult.isValid()) {
> std::cout << "err: " << __LINE__ << " " <<
> oResult.error().message().toStdString() << std::endl;
> } else {
> std::cout << "AddAndActiveConnection-> " <<
> oResult.value().path().toStdString() << std::endl;
> exit(0);
> }
> exit (1);
> }
> --snip--snip--
> 
> 
> STÉPHANE BOUCHER
> Consultant software
> 
> 
> D-BOX Technologies Inc. | A. 2172 de la Province, Longueuil, QC J4G
> 1R7 CANADA | T. 450-442-3003 | D. | W. d-box.com
> 
> 
> STÉPHANE BOUCHER
> Consultant software
> 
> 
> D-BOX Technologies Inc. | A. 2172 de la Province, Longueuil, QC J4G
> 1R7 CANADA | T. 450-442-3003 | D. | W. d-box.com
> 
> -----Message d'origine-----
> De : networkmanager-list [mailto:networkmanager-list-boun...@gnome.or
> g] De la part de Stéphane Boucher Envoyé : October 18, 2016 2:13 PM À
> : Dan Williams <d...@redhat.com>; networkmanager-list@gnome.org Objet
> : RE: Problem activating hotspot
> 
> 
> (Apologies for the top post... blame it on outlook)
> 
> I added lines starting with # to indicate which call failed, and
> which succeeded.
> 
> I'll try to get a code snippet.
> 
> signal time=1476802044.025068 sender=org.freedesktop.DBus ->
> destination=:1.224 serial=2 path=/org/freedesktop/DBus;
> interface=org.freedesktop.DBus; member=NameAcquired
>    string ":1.224"
> signal time=1476802044.025104 sender=org.freedesktop.DBus ->
> destination=:1.224 serial=4 path=/org/freedesktop/DBus;
> interface=org.freedesktop.DBus; member=NameLost
>    string ":1.224"
> method call time=1476802047.121780 sender=:1.225 ->
> destination=org.freedesktop.NetworkManager serial=5
> path=/org/freedesktop/NetworkManager;
> interface=org.freedesktop.NetworkManager; member=GetAllDevices #
> FIRST CALL (my app) - THIS FAILED method call time=1476802047.132799
> sender=:1.225 -> destination=org.freedesktop.NetworkManager serial=15
> path=/org/freedesktop/NetworkManager;
> interface=org.freedesktop.NetworkManager;
> member=AddAndActivateConnection
>    array [
>       dict entry(
>          string "802-11-wireless"
>          array [
>             dict entry(
>                string "mac-address"
>                variant                   array of bytes [
>                      a0 21 b7 4a 9b 80
>                   ]
>             )
>             dict entry(
>                string "mode"
>                variant                   string "adhoc"
>             )
>             dict entry(
>                string "security"
>                variant                   string "802-11-wireless-
> security"
>             )
>             dict entry(
>                string "ssid"
>                variant                   array of bytes "toaster"
>             )
>          ]
>       )
>       dict entry(
>          string "802-11-wireless-security"
>          array [
>             dict entry(
>                string "key-mgmt"
>                variant                   string "none"
>             )
>             dict entry(
>                string "wep-key-type"
>                variant                   uint32 1
>             )
>             dict entry(
>                string "wep-key0"
>                variant                   string "87c77b7552"
>             )
>          ]
>       )
>       dict entry(
>          string "connection"
>          array [
>             dict entry(
>                string "autoconnect"
>                variant                   boolean false
>             )
>             dict entry(
>                string "id"
>                variant                   string "Hotspot"
>             )
>             dict entry(
>                string "type"
>                variant                   string "802-11-wireless"
>             )
>          ]
>       )
>       dict entry(
>          string "ipv4"
>          array [
>             dict entry(
>                string "addresses"
>                variant                   array [
>                   ]
>             )
>             dict entry(
>                string "dns"
>                variant                   array [
>                   ]
>             )
>             dict entry(
>                string "method"
>                variant                   string "shared"
>             )
>             dict entry(
>                string "routes"
>                variant                   array [
>                   ]
>             )
>          ]
>       )
>    ]
>    object path "/org/freedesktop/NetworkManager/Devices/0"
>    object path "/"
> method call time=1476802047.211788 sender=:1.226 ->
> destination=:1.207 serial=240 path=/org/freedesktop/NetworkManager;
> interface=org.freedesktop.NetworkManager; member=GetPermissions
> method call time=1476802047.288394 sender=:1.227 ->
> destination=:1.207 serial=240 path=/org/freedesktop/NetworkManager;
> interface=org.freedesktop.NetworkManager; member=GetPermissions
> method call time=1476802056.956319 sender=:1.228 ->
> destination=org.freedesktop.NetworkManager serial=322
> path=/org/freedesktop/NetworkManager;
> interface=org.freedesktop.NetworkManager; member=GetPermissions #
> SECOND CALL (gnome applet) - THIS WORKED method call
> time=1476802062.780997 sender=:1.228 ->
> destination=org.freedesktop.NetworkManager serial=337
> path=/org/freedesktop/NetworkManager;
> interface=org.freedesktop.NetworkManager;
> member=AddAndActivateConnection
>    array [
>       dict entry(
>          string "802-11-wireless"
>          array [
>             dict entry(
>                string "security"
>                variant                   string "802-11-wireless-
> security"
>             )
>             dict entry(
>                string "ssid"
>                variant                   array of bytes "toaster"
>             )
>             dict entry(
>                string "mode"
>                variant                   string "adhoc"
>             )
>             dict entry(
>                string "mac-address"
>                variant                   array of bytes [
>                      a0 21 b7 4a 9b 80
>                   ]
>             )
>          ]
>       )
>       dict entry(
>          string "connection"
>          array [
>             dict entry(
>                string "id"
>                variant                   string "Hotspot"
>             )
>             dict entry(
>                string "autoconnect"
>                variant                   boolean false
>             )
>             dict entry(
>                string "type"
>                variant                   string "802-11-wireless"
>             )
>          ]
>       )
>       dict entry(
>          string "ipv4"
>          array [
>             dict entry(
>                string "addresses"
>                variant                   array [
>                   ]
>             )
>             dict entry(
>                string "dns"
>                variant                   array [
>                   ]
>             )
>             dict entry(
>                string "method"
>                variant                   string "shared"
>             )
>             dict entry(
>                string "routes"
>                variant                   array [
>                   ]
>             )
>          ]
>       )
>       dict entry(
>          string "802-11-wireless-security"
>          array [
>             dict entry(
>                string "wep-key-type"
>                variant                   uint32 1
>             )
>             dict entry(
>                string "wep-key0"
>                variant                   string "68a7ff97a0"
>             )
>             dict entry(
>                string "key-mgmt"
>                variant                   string "none"
>             )
>          ]
>       )
>    ]
>    object path "/org/freedesktop/NetworkManager/Devices/0"
>    object path "/"
> 
> 
> STÉPHANE BOUCHER
> Consultant software
> 
> 
> D-BOX Technologies Inc. | A. 2172 de la Province, Longueuil, QC J4G
> 1R7 CANADA | T. 450-442-3003 | D. | W. d-box.com
> 
> 
> AVIS : Ce courriel contient des renseignements confidentiels. Si vous
> n'êtes pas le véritable destinataire, la diffusion ou l'usage de ce
> courriel, des renseignements qu'il contient ou des documents qui lui
> sont joints pourrait être illégal. Il est donc strictement interdit
> de les diffuser ou de les utiliser. Si vous avez reçu ce courriel par
> erreur, nous vous saurions gré d’en aviser l'expéditeur immédiatement
> et de le supprimer sans le lire, l'imprimer, le sauvegarder ou le
> diffuser. Nous vous remercions de votre aimable collaboration.
> 
> NOTICE: This e-mail contains confidential information. If you are not
> the intended recipient, any disclosure or other use of this e-mail or
> the information contained herein or attached hereto may be unlawful
> and is strictly prohibited. If you have received this e-mail in
> error, please notify the sender immediately and delete this e-mail
> without reading, printing, copying or forwarding it to anyone. Thank
> you for your kind cooperation.
> -----Message d'origine-----
> De : Dan Williams [mailto:d...@redhat.com] Envoyé : October 18, 2016
> 2:00 PM À : Stéphane Boucher <sbouc...@d-box.com>; networkmanager-lis
> t...@gnome.org Objet : Re: Problem activating hotspot
> 
> On Tue, 2016-10-18 at 15:26 +0000, Stéphane Boucher wrote:
> > 
> > I’m on Ubuntu 16.04.1.
> > 
> > I’m using QDBus to interact with NetworkManager.
> > 
> > At the time I do all of the following, there’s no existing
> > /org/freedesktop/NetworkManager/Settings/?? For the Hotspot.
> > 
> > When I call AddAndActivateConnection, I get the error: “A
> > 'wireless'
> > setting is required if no AP path was given.”
> 
> This would indicate the partial connection dict you're sending to
> NetworkManager as part of the AddAndActivateConnection call doesn't
> have all the required properties.
> 
> What NM needs here is either the object path to an existing AP that
> it can pull the SSID and security settings from, or you need to
> specify those manually (which you must do here because you're doing a
> hotspot).
>  Apparently it's not getting that from the D-Bus method call, or
> there's a bug in the code...
> 
> Can you share sanitized/condensed code that shows how you're calling
> AddAndActivate?
> 
> _______________________________________________
> networkmanager-list mailing list
> networkmanager-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/networkmanager-list
> 
> 
> _______________________________________________
> networkmanager-list mailing list
> networkmanager-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/networkmanager-list
_______________________________________________
networkmanager-list mailing list
networkmanager-list@gnome.org
https://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to