Hello,

I was trying to make NM work with Debian with the help of Michael
Biebl. I found several issues:
1) When the nm-system-settings was not working (because of missing 
configuration 
file) the gnome applet was not showing when a wired network was enabled in the 
left-click menu, and I could not get network information from the right-click 
menu.
Is this expected behaviour?

2) NM 0.7 doesn't seem to use the configuration of wireless networks I had from 
0.6

3) I'm trying to make NM work with resolvconf. I want to pass DNS 
configurations 
received from DHCP to the dispatcher and then to the dispatcher script. I have 
no 
knowledge of dbus, so I made an ugly patch to pass the first nameserver 
configuration.
Could you tell me what should be the correct way of passing the nameservers 
to the dispatcher?


Best regards,
Hristo

Index: callouts/nm-dispatcher-action.h
===================================================================
--- callouts/nm-dispatcher-action.h     (revision 3624)
+++ callouts/nm-dispatcher-action.h     (working copy)
@@ -32,4 +32,5 @@
 #define NMD_DEVICE_PROPS_TYPE             "type"
 #define NMD_DEVICE_PROPS_STATE            "state"
 #define NMD_DEVICE_PROPS_PATH             "path"
+#define NMD_DEVICE_PROPS_DNS_NAMESERVERS  "nameservers"
 
Index: callouts/nm-dispatcher-action.c
===================================================================
--- callouts/nm-dispatcher-action.c     (revision 3624)
+++ callouts/nm-dispatcher-action.c     (working copy)
@@ -218,12 +218,19 @@
 dispatch_scripts (const char *action,
                   const char *iface,
                   const char *parent_iface,
-                  NMDeviceType type)
+                  NMDeviceType type,
+                  guint32 nameservers)
 {
        GDir *dir;
        const char *filename;
        GSList *scripts = NULL, *iter;
        GError *error = NULL;
+       char sz_nameservers[20];
+       sprintf( sz_nameservers, "%u.%u.%u.%u",
+                                       (int)(nameservers&0xFF),
+                                       (int)((nameservers >> 8)&0xFF),
+                                       (int)((nameservers >> 16)&0xFF),
+                                       (int)((nameservers >> 24)&0xFF) );
 
        if (!(dir = g_dir_open (NMD_SCRIPT_DIR, 0, &error))) {
                g_warning ("g_dir_open() could not open '" NMD_SCRIPT_DIR "'.  
'%s'",
@@ -262,14 +269,15 @@
        g_dir_close (dir);
 
        for (iter = scripts; iter; iter = g_slist_next (iter)) {
-               gchar *argv[4];
+               gchar *argv[5];
                gchar *envp[1] = { NULL };
                gint status = -1;
 
                argv[0] = (char *) iter->data;
                argv[1] = (char *) iface;
                argv[2] = (char *) action;
-               argv[3] = NULL;
+               argv[3] = (char *) sz_nameservers;
+               argv[4] = NULL;
 
                error = NULL;
                if (g_spawn_sync ("/", argv, envp, 0, child_setup, NULL, NULL, 
NULL, &status, &error)) {
@@ -304,6 +312,7 @@
        char *parent_iface = NULL;
        NMDeviceType type = DEVICE_TYPE_UNKNOWN;
        GValue *value;
+       guint32 nameservers = 0;
 
        /* Back off the quit timeout */
        if (d->quit_timeout)
@@ -341,8 +350,13 @@
        }
        type = g_value_get_uint (value);
 
-       dispatch_scripts (action, iface, parent_iface, type);
+       value = g_hash_table_lookup (device_props, 
NMD_DEVICE_PROPS_DNS_NAMESERVERS);
+       if (value && G_VALUE_HOLDS_UINT (value)) {
+               nameservers = g_value_get_uint (value);
+       }
 
+       dispatch_scripts (action, iface, parent_iface, type, nameservers);
+
 out:
        return TRUE;
 }
Index: src/NetworkManagerUtils.c
===================================================================
--- src/NetworkManagerUtils.c   (revision 3624)
+++ src/NetworkManagerUtils.c   (working copy)
@@ -354,6 +354,8 @@
        GHashTable *connection_hash;
        GHashTable *connection_props;
        GHashTable *device_props;
+       NMIP4Config *config = NULL;
+       guint32 num_nameservers = 0;
 
        g_return_if_fail (action != NULL);
        g_return_if_fail (NM_IS_DEVICE (device));
@@ -423,6 +425,12 @@
        g_hash_table_insert (device_props, NMD_DEVICE_PROPS_PATH,
                             op_to_gvalue (nm_device_get_udi (device)));
 
+       config = nm_device_get_ip4_config (device);
+       num_nameservers = nm_ip4_config_get_num_nameservers (config);
+       if ( num_nameservers > 0 )
+               g_hash_table_insert (device_props, 
NMD_DEVICE_PROPS_DNS_NAMESERVERS,
+                       uint_to_gvalue (nm_ip4_config_get_nameserver(config, 
0)));
+
        dbus_g_proxy_call_no_reply (proxy, "Action",
                                    G_TYPE_STRING, action,
                                    DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, 
connection_hash,
_______________________________________________
NetworkManager-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to