diff options
author | Dan Williams <dcbw@redhat.com> | 2008-05-29 21:16:51 +0000 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2008-05-29 21:16:51 +0000 |
commit | 884a070f180e74d814f22c50f4a973823bf15ca6 (patch) | |
tree | 27282dbee9211e29ded11bfc08892cb5a958df73 /src | |
parent | 0aae98f986ae0f00cc84c2e289713b03e1019033 (diff) | |
download | NetworkManager-884a070f180e74d814f22c50f4a973823bf15ca6.tar.gz |
2008-05-29 Dan Williams <dcbw@redhat.com>
* src/dnsmasq-manager/nm-dnsmasq-manager.c
src/dnsmasq-manager/nm-dnsmasq-manager.h
- (nm_dnsmasq_manager_new): move iface argument here
- (constructor): remove, not needed
- (get_pidfile_for_iface, create_dm_cmd_line, kill_existing_for_iface,
nm_dnsmasq_manager_start, nm_dnsmasq_manager_stop): use priv->pidfile
* src/nm-device.c
- (real_act_stage4_get_ip4_config,
nm_device_activate_stage5_ip_config_commit): fix for dnsmasq manager
changes
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3712 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
Diffstat (limited to 'src')
-rw-r--r-- | src/dnsmasq-manager/nm-dnsmasq-manager.c | 77 | ||||
-rw-r--r-- | src/dnsmasq-manager/nm-dnsmasq-manager.h | 6 | ||||
-rw-r--r-- | src/nm-device.c | 4 |
3 files changed, 40 insertions, 47 deletions
diff --git a/src/dnsmasq-manager/nm-dnsmasq-manager.c b/src/dnsmasq-manager/nm-dnsmasq-manager.c index a2b4af6b9d..50e8afd696 100644 --- a/src/dnsmasq-manager/nm-dnsmasq-manager.c +++ b/src/dnsmasq-manager/nm-dnsmasq-manager.c @@ -12,6 +12,8 @@ #include "nm-utils.h" typedef struct { + char *iface; + char *pidfile; GPid pid; guint32 dm_watch_id; } NMDnsMasqManagerPrivate; @@ -29,7 +31,7 @@ enum { static guint signals[LAST_SIGNAL] = { 0 }; typedef enum { - NM_DNSMASQ_MANAGER_ERROR_UNKOWN + NM_DNSMASQ_MANAGER_ERROR_NOT_FOUND, } NMDnsMasqManagerError; GQuark @@ -48,21 +50,16 @@ nm_dnsmasq_manager_init (NMDnsMasqManager *manager) { } -static GObject * -constructor (GType type, - guint n_construct_params, - GObjectConstructParam *construct_params) -{ - return G_OBJECT_CLASS (nm_dnsmasq_manager_parent_class)->constructor (type, - n_construct_params, - construct_params); -} - static void finalize (GObject *object) { + NMDnsMasqManagerPrivate *priv = NM_DNSMASQ_MANAGER_GET_PRIVATE (object); + nm_dnsmasq_manager_stop (NM_DNSMASQ_MANAGER (object)); + g_free (priv->iface); + g_free (priv->pidfile); + G_OBJECT_CLASS (nm_dnsmasq_manager_parent_class)->finalize (object); } @@ -73,7 +70,6 @@ nm_dnsmasq_manager_class_init (NMDnsMasqManagerClass *manager_class) g_type_class_add_private (manager_class, sizeof (NMDnsMasqManagerPrivate)); - object_class->constructor = constructor; object_class->finalize = finalize; /* signals */ @@ -89,9 +85,20 @@ nm_dnsmasq_manager_class_init (NMDnsMasqManagerClass *manager_class) } NMDnsMasqManager * -nm_dnsmasq_manager_new (void) +nm_dnsmasq_manager_new (const char *iface) { - return (NMDnsMasqManager *) g_object_new (NM_TYPE_DNSMASQ_MANAGER, NULL); + NMDnsMasqManager *manager; + NMDnsMasqManagerPrivate *priv; + + manager = (NMDnsMasqManager *) g_object_new (NM_TYPE_DNSMASQ_MANAGER, NULL); + if (!manager) + return NULL; + + priv = NM_DNSMASQ_MANAGER_GET_PRIVATE (manager); + priv->iface = g_strdup (iface); + priv->pidfile = g_strdup_printf (LOCALSTATEDIR "/run/nm-dnsmasq-%s.pid", iface); + + return manager; } typedef struct { @@ -217,25 +224,17 @@ dm_watch_cb (GPid pid, gint status, gpointer user_data) g_signal_emit (manager, signals[STATE_CHANGED], 0, NM_DNSMASQ_STATUS_DEAD); } -static char * -get_pidfile_for_iface (const char *iface) -{ - g_return_val_if_fail (iface != NULL, NULL); - - return g_strdup_printf (LOCALSTATEDIR "/run/nm-dnsmasq-%s.pid", iface); -} - static NMCmdLine * -create_dm_cmd_line (const char *iface, GError **err) +create_dm_cmd_line (const char *iface, const char *pidfile, GError **error) { const char *dm_binary; NMCmdLine *cmd; - char *s, *pidfile; + char *s; dm_binary = nm_find_dnsmasq (); if (!dm_binary) { - g_set_error (err, NM_DNSMASQ_MANAGER_ERROR, NM_DNSMASQ_MANAGER_ERROR, - "Could not find dnsmasq binary."); + g_set_error (error, NM_DNSMASQ_MANAGER_ERROR, NM_DNSMASQ_MANAGER_ERROR_NOT_FOUND, + "Could not find dnsmasq binary."); return NULL; } @@ -252,9 +251,7 @@ create_dm_cmd_line (const char *iface, GError **err) nm_cmd_line_add_string (cmd, "--dhcp-option=option:router,0.0.0.0"); nm_cmd_line_add_string (cmd, "--dhcp-lease-max=50"); - pidfile = get_pidfile_for_iface (iface); s = g_strdup_printf ("--pid-file=%s", pidfile); - g_free (pidfile); nm_cmd_line_add_string (cmd, s); g_free (s); @@ -270,15 +267,13 @@ dm_child_setup (gpointer user_data G_GNUC_UNUSED) } static void -kill_existing_for_iface (const char *iface) +kill_existing_for_iface (const char *iface, const char *pidfile) { - char *pidfile; char *contents = NULL; glong pid; char *proc_path = NULL; char *cmdline_contents = NULL; - pidfile = get_pidfile_for_iface (iface); if (!g_file_get_contents (pidfile, &contents, NULL, NULL)) goto out; @@ -302,13 +297,10 @@ out: g_free (cmdline_contents); g_free (proc_path); g_free (contents); - g_free (pidfile); } gboolean -nm_dnsmasq_manager_start (NMDnsMasqManager *manager, - const char *iface, - GError **err) +nm_dnsmasq_manager_start (NMDnsMasqManager *manager, GError **error) { NMDnsMasqManagerPrivate *priv; NMCmdLine *dm_cmd; @@ -316,18 +308,19 @@ nm_dnsmasq_manager_start (NMDnsMasqManager *manager, GSource *dm_watch; g_return_val_if_fail (NM_IS_DNSMASQ_MANAGER (manager), FALSE); - g_return_val_if_fail (iface != NULL, FALSE); + if (error) + g_return_val_if_fail (*error == NULL, FALSE); - kill_existing_for_iface (iface); + priv = NM_DNSMASQ_MANAGER_GET_PRIVATE (manager); + + kill_existing_for_iface (priv->iface, priv->pidfile); - dm_cmd = create_dm_cmd_line (iface, err); + dm_cmd = create_dm_cmd_line (priv->iface, priv->pidfile, error); if (!dm_cmd) return FALSE; g_ptr_array_add (dm_cmd->array, NULL); - priv = NM_DNSMASQ_MANAGER_GET_PRIVATE (manager); - nm_info ("Starting dnsmasq..."); cmd_str = nm_cmd_line_to_str (dm_cmd); @@ -338,7 +331,7 @@ nm_dnsmasq_manager_start (NMDnsMasqManager *manager, if (!g_spawn_async (NULL, (char **) dm_cmd->array->pdata, NULL, G_SPAWN_DO_NOT_REAP_CHILD, dm_child_setup, - NULL, &priv->pid, err)) { + NULL, &priv->pid, error)) { goto out; } @@ -390,4 +383,6 @@ nm_dnsmasq_manager_stop (NMDnsMasqManager *manager) priv->pid = 0; } + + unlink (priv->pidfile); } diff --git a/src/dnsmasq-manager/nm-dnsmasq-manager.h b/src/dnsmasq-manager/nm-dnsmasq-manager.h index 9eb7e7fba2..1dc0177b56 100644 --- a/src/dnsmasq-manager/nm-dnsmasq-manager.h +++ b/src/dnsmasq-manager/nm-dnsmasq-manager.h @@ -33,11 +33,9 @@ typedef struct { GType nm_dnsmasq_manager_get_type (void); -NMDnsMasqManager *nm_dnsmasq_manager_new (void); +NMDnsMasqManager *nm_dnsmasq_manager_new (const char *iface); -gboolean nm_dnsmasq_manager_start (NMDnsMasqManager *manager, - const char *device, - GError **err); +gboolean nm_dnsmasq_manager_start (NMDnsMasqManager *manager, GError **error); void nm_dnsmasq_manager_stop (NMDnsMasqManager *manager); diff --git a/src/nm-device.c b/src/nm-device.c index 6782aa6eb6..977410f480 100644 --- a/src/nm-device.c +++ b/src/nm-device.c @@ -701,7 +701,7 @@ real_act_stage4_get_ip4_config (NMDevice *self, nm_utils_merge_ip4_config (*config, s_ip4); } else if (!strcmp (s_ip4->method, NM_SETTING_IP4_CONFIG_METHOD_SHARED)) { *config = nm_device_new_ip4_shared_config (self); - priv->dnsmasq_manager = nm_dnsmasq_manager_new (); + priv->dnsmasq_manager = nm_dnsmasq_manager_new (nm_device_get_ip_iface (self)); } } @@ -895,7 +895,7 @@ nm_device_activate_stage5_ip_config_commit (gpointer user_data) if (s_ip4 && !strcmp (s_ip4->method, "shared")) { GError *error = NULL; - if (!nm_dnsmasq_manager_start (priv->dnsmasq_manager, nm_device_get_ip_iface (self), &error)) { + if (!nm_dnsmasq_manager_start (priv->dnsmasq_manager, &error)) { nm_warning ("(%s): failed to start dnsmasq: %s", iface, error->message); g_error_free (error); nm_device_state_changed (self, NM_DEVICE_STATE_FAILED); |