Re: How to get the D-bus path of the settings of a connection ?
On Tue, 2014-04-15 at 11:44 +0200, Manuel Yguel wrote: Thanks a lot Dan, your explanations were very clear. Thank to you I got a running example doing creation, connection, disconnection and deletion of the settings. I attached the code I wrote. It is not completely mature yet since it mixes c++ and C. But I intend to put some orthodoxy in it later. I have an other question, I have seen that the connection called Test of my is still visible in the list of scanned networks displayed by the network-manager-applet. I thought first that it was because the list was not updated but it seems not to be the case. Worse: I am able to click on it and it looks like it tries to activate it, however I think it does not work. Is this a problem related to the applet or did I miss to remove something when managing the adhoc connection ? Is the stale connection still visible in nmcli dev wifi list output? Is it also still visible in the iwlist wlan0 scan output? Dan Manuel On 04/10/2014 05:52 PM, Dan Williams wrote: On Thu, 2014-04-10 at 14:44 +0200, Manuel Yguel wrote: I have successfully created and deleted adhoc networks from the glib API thanks to Dan help. However my test program suffers from one problem: the network connection configurations get stored in the network manager memory and pollute the user interface. Thus I try to call org.freedesktop.NetworkManager.Settings.Connection.Delete for a certain NMConnection object without any success so far. I can see in the D-bus (with qdbusviewer) the configuration for a single network connection and I am able to call the Delete method on it (because I can see it appears when the setting configuration is recorded). However I do not know how to get the number (x) in the path that appears at org/freedesktop/NetworkManager/Settings/x in order to create a proxy for that Settings.Connection object and call the Delete method on it later. First I would like to know if there is a way to get the path of the object storing the org.freedesktop.NetworkManager.Settings.Connection from the glib API ? When you add the connection to NetworkManager originally, NM will return to you the object path that you can use to work with the Connection object later. With the libnm-glib API, when you call: gboolean nm_remote_settings_add_connection (NMRemoteSettings *settings, NMConnection *connection, NMRemoteSettingsAddConnectionFunc callback, gpointer user_data); callback is called when the add is completed, and your callback has the prototype of: typedef void (*NMRemoteSettingsAddConnectionFunc) (NMRemoteSettings *settings, NMRemoteConnection *connection, GError *error, gpointer user_data); The NMRemoteConnection object (a subclass of NMConnection) represents the actual connection known by NM. You can throw away the NMConnection that you handed to nm_remote_settings_add_connection(), it is unchanged by the call. The NMRemoteConnection is the live object, which you can keep around and use later with functions like: void nm_remote_connection_delete (NMRemoteConnection *connection, NMRemoteConnectionResultFunc callback, gpointer user_data); I was first thinking that it may be a NMSettingConnection object. I was able to access it but I was only able to get the uuid or the human name of the connection. I also tried the nm_connection_get_path on the NMConnection object but I get a NULL string. I am quite stuck now and any help would be much appreciated. I think the issue is that you might still be using the NMConnection that you built up to send to NM with the add_connection() call. That object isn't consumed by add_connection(), but serves as a template and can be disposed after calling add_connection(). The NMRemoteConnection is what you want to use. I've committed some more documentation to libnm-glib's NMRemoteSettings object which describes this and hopefully helps you out. http://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=2200687b0f92d553dc79e54b672069b2b704203d There are also some examples here, the ones you're interested in have libnm-glib in the name: http://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/examples/C/glib Let us know if you have further questions! Dan ___ networkmanager-list mailing list networkmanager-list@gnome.org https://mail.gnome.org/mailman/listinfo/networkmanager-list ___ networkmanager-list mailing list
Re: How to get the D-bus path of the settings of a connection ?
Thanks a lot Dan, your explanations were very clear. Thank to you I got a running example doing creation, connection, disconnection and deletion of the settings. I attached the code I wrote. It is not completely mature yet since it mixes c++ and C. But I intend to put some orthodoxy in it later. I have an other question, I have seen that the connection called Test of my is still visible in the list of scanned networks displayed by the network-manager-applet. I thought first that it was because the list was not updated but it seems not to be the case. Worse: I am able to click on it and it looks like it tries to activate it, however I think it does not work. Is this a problem related to the applet or did I miss to remove something when managing the adhoc connection ? Manuel On 04/10/2014 05:52 PM, Dan Williams wrote: On Thu, 2014-04-10 at 14:44 +0200, Manuel Yguel wrote: I have successfully created and deleted adhoc networks from the glib API thanks to Dan help. However my test program suffers from one problem: the network connection configurations get stored in the network manager memory and pollute the user interface. Thus I try to call org.freedesktop.NetworkManager.Settings.Connection.Delete for a certain NMConnection object without any success so far. I can see in the D-bus (with qdbusviewer) the configuration for a single network connection and I am able to call the Delete method on it (because I can see it appears when the setting configuration is recorded). However I do not know how to get the number (x) in the path that appears at org/freedesktop/NetworkManager/Settings/x in order to create a proxy for that Settings.Connection object and call the Delete method on it later. First I would like to know if there is a way to get the path of the object storing the org.freedesktop.NetworkManager.Settings.Connection from the glib API ? When you add the connection to NetworkManager originally, NM will return to you the object path that you can use to work with the Connection object later. With the libnm-glib API, when you call: gboolean nm_remote_settings_add_connection (NMRemoteSettings *settings, NMConnection *connection, NMRemoteSettingsAddConnectionFunc callback, gpointer user_data); callback is called when the add is completed, and your callback has the prototype of: typedef void (*NMRemoteSettingsAddConnectionFunc) (NMRemoteSettings *settings, NMRemoteConnection *connection, GError *error, gpointer user_data); The NMRemoteConnection object (a subclass of NMConnection) represents the actual connection known by NM. You can throw away the NMConnection that you handed to nm_remote_settings_add_connection(), it is unchanged by the call. The NMRemoteConnection is the live object, which you can keep around and use later with functions like: void nm_remote_connection_delete (NMRemoteConnection *connection, NMRemoteConnectionResultFunc callback, gpointer user_data); I was first thinking that it may be a NMSettingConnection object. I was able to access it but I was only able to get the uuid or the human name of the connection. I also tried the nm_connection_get_path on the NMConnection object but I get a NULL string. I am quite stuck now and any help would be much appreciated. I think the issue is that you might still be using the NMConnection that you built up to send to NM with the add_connection() call. That object isn't consumed by add_connection(), but serves as a template and can be disposed after calling add_connection(). The NMRemoteConnection is what you want to use. I've committed some more documentation to libnm-glib's NMRemoteSettings object which describes this and hopefully helps you out. http://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=2200687b0f92d553dc79e54b672069b2b704203d There are also some examples here, the ones you're interested in have libnm-glib in the name: http://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/examples/C/glib Let us know if you have further questions! Dan #This CMakeLists.txt was automatically generated. #You can add things but not change existing things. #For instance don't change the variable names ! #One exception: you can change the name of the the target library. cmake_minimum_required(VERSION 2.4) if(COMMAND cmake_policy) if( POLICY CMP0003 ) cmake_policy(SET CMP0003 NEW) endif( POLICY CMP0003 ) if( POLICY CMP0015 ) cmake_policy(SET CMP0015 NEW) endif( POLICY CMP0015 ) endif(COMMAND cmake_policy) project( manage_adhoc_remote_connection_nm_glib ) if( NOT CMAKE_VERBOSE_MAKEFILE ) set(
Re: How to get the D-bus path of the settings of a connection ?
On Thu, 2014-04-10 at 14:44 +0200, Manuel Yguel wrote: I have successfully created and deleted adhoc networks from the glib API thanks to Dan help. However my test program suffers from one problem: the network connection configurations get stored in the network manager memory and pollute the user interface. Thus I try to call org.freedesktop.NetworkManager.Settings.Connection.Delete for a certain NMConnection object without any success so far. I can see in the D-bus (with qdbusviewer) the configuration for a single network connection and I am able to call the Delete method on it (because I can see it appears when the setting configuration is recorded). However I do not know how to get the number (x) in the path that appears at org/freedesktop/NetworkManager/Settings/x in order to create a proxy for that Settings.Connection object and call the Delete method on it later. First I would like to know if there is a way to get the path of the object storing the org.freedesktop.NetworkManager.Settings.Connection from the glib API ? When you add the connection to NetworkManager originally, NM will return to you the object path that you can use to work with the Connection object later. With the libnm-glib API, when you call: gboolean nm_remote_settings_add_connection (NMRemoteSettings *settings, NMConnection *connection, NMRemoteSettingsAddConnectionFunc callback, gpointer user_data); callback is called when the add is completed, and your callback has the prototype of: typedef void (*NMRemoteSettingsAddConnectionFunc) (NMRemoteSettings *settings, NMRemoteConnection *connection, GError *error, gpointer user_data); The NMRemoteConnection object (a subclass of NMConnection) represents the actual connection known by NM. You can throw away the NMConnection that you handed to nm_remote_settings_add_connection(), it is unchanged by the call. The NMRemoteConnection is the live object, which you can keep around and use later with functions like: void nm_remote_connection_delete (NMRemoteConnection *connection, NMRemoteConnectionResultFunc callback, gpointer user_data); I was first thinking that it may be a NMSettingConnection object. I was able to access it but I was only able to get the uuid or the human name of the connection. I also tried the nm_connection_get_path on the NMConnection object but I get a NULL string. I am quite stuck now and any help would be much appreciated. I think the issue is that you might still be using the NMConnection that you built up to send to NM with the add_connection() call. That object isn't consumed by add_connection(), but serves as a template and can be disposed after calling add_connection(). The NMRemoteConnection is what you want to use. I've committed some more documentation to libnm-glib's NMRemoteSettings object which describes this and hopefully helps you out. http://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=2200687b0f92d553dc79e54b672069b2b704203d There are also some examples here, the ones you're interested in have libnm-glib in the name: http://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/examples/C/glib Let us know if you have further questions! Dan ___ networkmanager-list mailing list networkmanager-list@gnome.org https://mail.gnome.org/mailman/listinfo/networkmanager-list