mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-03-23 14:20:40 +01:00
2007-02-05 Tambet Ingo <tambet@ximian.com>
* src/NetworkManagerMain.h: Remove all references to DHCP manager. * src/NetworkManager.c: Don't initialize the DHCP manager, it's a singleton now. * src/nm-device.c: Use the new DHCP manager API. * src/nm-activation-request.c: * src/nm-activation-request.h: - Remove all dhcp related properties and methods. git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@2284 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
parent
1bbdd977e3
commit
58b53400a5
6 changed files with 123 additions and 79 deletions
30
ChangeLog
30
ChangeLog
|
|
@ -1,3 +1,33 @@
|
|||
2007-02-05 Tambet Ingo <tambet@ximian.com>
|
||||
|
||||
* src/NetworkManagerMain.h: Remove all references to DHCP manager.
|
||||
|
||||
* src/NetworkManager.c: Don't initialize the DHCP manager, it's a
|
||||
singleton now.
|
||||
|
||||
* src/nm-device.c: Use the new DHCP manager API.
|
||||
|
||||
* src/nm-activation-request.c:
|
||||
* src/nm-activation-request.h:
|
||||
- Remove all dhcp related properties and methods.
|
||||
|
||||
* src/dhcp-manager/nm-dhcp-marshal-main.c: Add.
|
||||
|
||||
* src/dhcp-manager/nm-dhcp-marshal.list: Add.
|
||||
|
||||
* src/dhcp-manager/nm-dhcp-manager.c:
|
||||
* src/dhcp-manager/nm-dhcp-manager.h:
|
||||
- Convert it to GObject since we need to signal state changes.
|
||||
- Remove all references to other NM classes, this class is one
|
||||
of the lowest classes in our hierarchy.
|
||||
- One less class to use NMActRequest.
|
||||
- Make it singleton, one less user of NMData.
|
||||
- Remove a couple of sleep() calls.
|
||||
- Convert a bunch of low-level dbus API calls to dbus-glib calls.
|
||||
One less class to use the NM's custom tailored signal handlig.
|
||||
|
||||
* Makefile.am: Generate marshallers, add them to build.
|
||||
|
||||
2007-02-02 Dan Williams <dcbw@redhat.com>
|
||||
|
||||
* configure.in
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
#include "nm-supplicant-manager.h"
|
||||
#include "nm-dbus-net.h"
|
||||
#include "nm-netlink-monitor.h"
|
||||
#include "nm-dhcp-manager.h"
|
||||
#include "nm-logging.h"
|
||||
|
||||
#define NM_WIRELESS_LINK_STATE_POLL_INTERVAL (5 * 1000)
|
||||
|
|
@ -567,7 +566,6 @@ static void nm_data_free (NMData *data)
|
|||
nm_dbus_method_list_unref (data->device_methods);
|
||||
|
||||
nm_vpn_manager_dispose (data->vpn_manager);
|
||||
nm_dhcp_manager_dispose (data->dhcp_manager);
|
||||
g_object_unref (data->named_manager);
|
||||
|
||||
g_main_loop_unref (data->main_loop);
|
||||
|
|
@ -818,12 +816,6 @@ main (int argc, char *argv[])
|
|||
goto done;
|
||||
}
|
||||
|
||||
nm_data->dhcp_manager = nm_dhcp_manager_new (nm_data);
|
||||
if (!nm_data->dhcp_manager) {
|
||||
nm_warning ("Failed to start the DHCP manager.");
|
||||
goto done;
|
||||
}
|
||||
|
||||
nm_data->named_manager = nm_named_manager_new ();
|
||||
if (!nm_data->named_manager) {
|
||||
nm_warning ("Failed to start the named manager.");
|
||||
|
|
|
|||
|
|
@ -49,10 +49,6 @@ typedef enum NMIntState
|
|||
typedef struct NMActRequest NMActRequest;
|
||||
typedef struct NMVPNActRequest NMVPNActRequest;
|
||||
typedef struct NMVPNManager NMVPNManager;
|
||||
typedef struct NMDHCPManager NMDHCPManager;
|
||||
|
||||
#define DHCP_SERVICE_NAME "com.redhat.dhcp"
|
||||
#define DHCP_OBJECT_PATH "/com/redhat/dhcp"
|
||||
|
||||
typedef struct NMData
|
||||
{
|
||||
|
|
@ -65,7 +61,6 @@ typedef struct NMData
|
|||
|
||||
NMNamedManager * named_manager;
|
||||
NMVPNManager * vpn_manager;
|
||||
NMDHCPManager * dhcp_manager;
|
||||
guint32 nmi_sig_handler_id;
|
||||
|
||||
NMDbusMethodList * nm_methods;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@
|
|||
#include "nm-activation-request.h"
|
||||
#include "nm-device.h"
|
||||
#include "NetworkManagerDbus.h"
|
||||
#include "nm-dhcp-manager.h"
|
||||
#include "nm-dbus-manager.h"
|
||||
#include "nm-utils.h"
|
||||
|
||||
|
|
@ -43,9 +42,6 @@ struct NMActRequest
|
|||
|
||||
NMActStage stage;
|
||||
DBusPendingCall * user_key_pcall;
|
||||
|
||||
guint32 dhcp_state;
|
||||
guint dhcp_timeout;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -71,7 +67,6 @@ NMActRequest * nm_act_request_new (NMData *data, NMDevice *dev, NMAccessPoint *a
|
|||
req->ap = ap;
|
||||
|
||||
req->user_requested = user_requested;
|
||||
req->dhcp_state = nm_dhcp_manager_get_state_for_device (data->dhcp_manager, dev);
|
||||
|
||||
return req;
|
||||
}
|
||||
|
|
@ -94,9 +89,6 @@ void nm_act_request_unref (NMActRequest *req)
|
|||
if (req->ap)
|
||||
nm_ap_unref (req->ap);
|
||||
|
||||
if (req->dhcp_timeout > 0)
|
||||
g_source_remove (req->dhcp_timeout);
|
||||
|
||||
memset (req, 0, sizeof (NMActRequest));
|
||||
g_free (req);
|
||||
}
|
||||
|
|
@ -225,32 +217,3 @@ void nm_act_request_set_user_key_pending_call (NMActRequest *req, DBusPendingCal
|
|||
if (req->user_key_pcall)
|
||||
dbus_pending_call_ref (req->user_key_pcall);
|
||||
}
|
||||
|
||||
guint8 nm_act_request_get_dhcp_state (NMActRequest *req)
|
||||
{
|
||||
g_return_val_if_fail (req != NULL, 0);
|
||||
|
||||
return req->dhcp_state;
|
||||
}
|
||||
|
||||
void nm_act_request_set_dhcp_state (NMActRequest *req, guint8 dhcp_state)
|
||||
{
|
||||
g_return_if_fail (req != NULL);
|
||||
|
||||
req->dhcp_state = dhcp_state;
|
||||
}
|
||||
|
||||
guint nm_act_request_get_dhcp_timeout (NMActRequest *req)
|
||||
{
|
||||
g_return_val_if_fail (req != NULL, 0);
|
||||
|
||||
return req->dhcp_timeout;
|
||||
}
|
||||
|
||||
void nm_act_request_set_dhcp_timeout (NMActRequest *req, guint dhcp_timeout)
|
||||
{
|
||||
g_return_if_fail (req != NULL);
|
||||
|
||||
req->dhcp_timeout = dhcp_timeout;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,10 +50,4 @@ void nm_act_request_set_stage (NMActRequest *req, NMActStage stage);
|
|||
DBusPendingCall * nm_act_request_get_user_key_pending_call (NMActRequest *req);
|
||||
void nm_act_request_set_user_key_pending_call (NMActRequest *req, DBusPendingCall *pcall);
|
||||
|
||||
guint8 nm_act_request_get_dhcp_state (NMActRequest *req);
|
||||
void nm_act_request_set_dhcp_state (NMActRequest *req, guint8 dhcp_state);
|
||||
|
||||
guint nm_act_request_get_dhcp_timeout (NMActRequest *req);
|
||||
void nm_act_request_set_dhcp_timeout (NMActRequest *req, guint dhcp_timeout);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
116
src/nm-device.c
116
src/nm-device.c
|
|
@ -62,8 +62,9 @@ struct _NMDevicePrivate
|
|||
|
||||
/* IP configuration info */
|
||||
void * system_config_data; /* Distro-specific config data (parsed config file, etc) */
|
||||
gboolean use_dhcp;
|
||||
NMIP4Config * ip4_config; /* Config from DHCP, PPP, or system config files */
|
||||
NMDHCPManager * dhcp_manager;
|
||||
gulong dhcp_signal_id;
|
||||
};
|
||||
|
||||
static void nm_device_activate_schedule_stage5_ip_config_commit (NMActRequest *req);
|
||||
|
|
@ -175,7 +176,7 @@ nm_device_new (const char *iface,
|
|||
|
||||
/* Grab IP config data for this device from the system configuration files */
|
||||
dev->priv->system_config_data = nm_system_device_get_system_config (dev, app_data);
|
||||
dev->priv->use_dhcp = nm_system_device_get_use_dhcp (dev);
|
||||
nm_device_set_use_dhcp (dev, nm_system_device_get_use_dhcp (dev));
|
||||
|
||||
/* Allow distributions to flag devices as disabled */
|
||||
if (nm_system_device_get_disabled (dev))
|
||||
|
|
@ -217,7 +218,6 @@ nm_device_init (NMDevice * self)
|
|||
self->priv->act_source_id = 0;
|
||||
|
||||
self->priv->system_config_data = NULL;
|
||||
self->priv->use_dhcp = TRUE;
|
||||
self->priv->ip4_config = NULL;
|
||||
}
|
||||
|
||||
|
|
@ -724,19 +724,27 @@ real_act_stage3_ip_config_start (NMDevice *self,
|
|||
if (nm_device_get_use_dhcp (self))
|
||||
{
|
||||
/* Begin a DHCP transaction on the interface */
|
||||
if (!nm_dhcp_manager_begin_transaction (data->dhcp_manager, req))
|
||||
{
|
||||
ret = NM_ACT_STAGE_RETURN_FAILURE;
|
||||
goto out;
|
||||
}
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
gboolean success;
|
||||
|
||||
/* DHCP devices will be notified by the DHCP manager when
|
||||
* stuff happens.
|
||||
*/
|
||||
ret = NM_ACT_STAGE_RETURN_POSTPONE;
|
||||
/* DHCP manager will cancel any transaction already in progress and we do not
|
||||
want to cancel this activation if we get "down" state from that. */
|
||||
g_signal_handler_block (priv->dhcp_manager, priv->dhcp_signal_id);
|
||||
|
||||
success = nm_dhcp_manager_begin_transaction (priv->dhcp_manager,
|
||||
nm_device_get_iface (self));
|
||||
|
||||
g_signal_handler_unblock (priv->dhcp_manager, priv->dhcp_signal_id);
|
||||
|
||||
if (success) {
|
||||
/* DHCP devices will be notified by the DHCP manager when
|
||||
* stuff happens.
|
||||
*/
|
||||
ret = NM_ACT_STAGE_RETURN_POSTPONE;
|
||||
} else
|
||||
ret = NM_ACT_STAGE_RETURN_FAILURE;
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -859,9 +867,14 @@ real_act_stage4_get_ip4_config (NMDevice *self,
|
|||
data = nm_act_request_get_data (req);
|
||||
g_assert (data);
|
||||
|
||||
if (nm_device_get_use_dhcp (self))
|
||||
real_config = nm_dhcp_manager_get_ip4_config (data->dhcp_manager, req);
|
||||
else
|
||||
if (nm_device_get_use_dhcp (self)) {
|
||||
real_config = nm_dhcp_manager_get_ip4_config (NM_DEVICE_GET_PRIVATE (self)->dhcp_manager,
|
||||
nm_device_get_iface (self));
|
||||
|
||||
if (real_config && nm_ip4_config_get_mtu (real_config) == 0)
|
||||
/* If the DHCP server doesn't set the MTU, get it from backend. */
|
||||
nm_ip4_config_set_mtu (real_config, nm_system_get_mtu (self));
|
||||
} else
|
||||
real_config = nm_system_device_new_ip4_system_config (self);
|
||||
|
||||
if (real_config)
|
||||
|
|
@ -1138,7 +1151,9 @@ real_activation_cancel_handler (NMDevice *self,
|
|||
g_return_if_fail (req != NULL);
|
||||
|
||||
if (nm_act_request_get_stage (req) == NM_ACT_STAGE_IP_CONFIG_START)
|
||||
nm_dhcp_manager_cancel_transaction (self->priv->app_data->dhcp_manager, req);
|
||||
nm_dhcp_manager_cancel_transaction (NM_DEVICE_GET_PRIVATE (self)->dhcp_manager,
|
||||
nm_device_get_iface (self),
|
||||
TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1212,7 +1227,9 @@ nm_device_deactivate_quickly (NMDevice *self)
|
|||
*/
|
||||
if ((act_request = nm_device_get_act_request (self)))
|
||||
{
|
||||
nm_dhcp_manager_cancel_transaction (app_data->dhcp_manager, act_request);
|
||||
nm_dhcp_manager_cancel_transaction (NM_DEVICE_GET_PRIVATE (self)->dhcp_manager,
|
||||
nm_device_get_iface (self),
|
||||
FALSE);
|
||||
nm_act_request_unref (act_request);
|
||||
self->priv->act_request = NULL;
|
||||
}
|
||||
|
|
@ -1385,21 +1402,72 @@ nm_device_can_interrupt_activation (NMDevice *self)
|
|||
|
||||
/* IP Configuration stuff */
|
||||
|
||||
static void
|
||||
dhcp_state_changed (NMDHCPManager *dhcp_manager,
|
||||
const char *iface,
|
||||
NMDHCPState state,
|
||||
gpointer user_data)
|
||||
{
|
||||
NMDevice *device = NM_DEVICE (user_data);
|
||||
NMActRequest *req;
|
||||
|
||||
req = nm_device_get_act_request (device);
|
||||
if (!req)
|
||||
return;
|
||||
|
||||
if (!strcmp (nm_device_get_iface (device), iface) &&
|
||||
nm_act_request_get_stage (req) == NM_ACT_STAGE_IP_CONFIG_START) {
|
||||
switch (state) {
|
||||
case DHCDBD_BOUND: /* lease obtained */
|
||||
case DHCDBD_RENEW: /* lease renewed */
|
||||
case DHCDBD_REBOOT: /* have valid lease, but now obtained a different one */
|
||||
case DHCDBD_REBIND: /* new, different lease */
|
||||
nm_device_activate_schedule_stage4_ip_config_get (req);
|
||||
break;
|
||||
case DHCDBD_TIMEOUT: /* timed out contacting DHCP server */
|
||||
nm_device_activate_schedule_stage4_ip_config_timeout (req);
|
||||
break;
|
||||
case DHCDBD_FAIL: /* all attempts to contact server timed out, sleeping */
|
||||
case DHCDBD_ABEND: /* dhclient exited abnormally */
|
||||
case DHCDBD_END: /* dhclient exited normally */
|
||||
nm_policy_schedule_activation_failed (req);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_device_get_use_dhcp (NMDevice *self)
|
||||
{
|
||||
g_return_val_if_fail (self != NULL, FALSE);
|
||||
g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
|
||||
|
||||
return self->priv->use_dhcp;
|
||||
return NM_DEVICE_GET_PRIVATE (self)->dhcp_manager ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
nm_device_set_use_dhcp (NMDevice *self,
|
||||
gboolean use_dhcp)
|
||||
{
|
||||
g_return_if_fail (self != NULL);
|
||||
NMDevicePrivate *priv;
|
||||
|
||||
self->priv->use_dhcp = use_dhcp;
|
||||
g_return_if_fail (NM_IS_DEVICE (self));
|
||||
|
||||
priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
|
||||
if (use_dhcp) {
|
||||
if (!priv->dhcp_manager) {
|
||||
priv->dhcp_manager = nm_dhcp_manager_get ();
|
||||
priv->dhcp_signal_id = g_signal_connect (priv->dhcp_manager, "state-changed",
|
||||
G_CALLBACK (dhcp_state_changed),
|
||||
self);
|
||||
}
|
||||
} else if (priv->dhcp_manager) {
|
||||
g_signal_handler_disconnect (priv->dhcp_manager, priv->dhcp_signal_id);
|
||||
g_object_unref (priv->dhcp_manager);
|
||||
priv->dhcp_manager = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1652,6 +1720,8 @@ nm_device_dispose (GObject *object)
|
|||
self->priv->act_source_id = 0;
|
||||
}
|
||||
|
||||
nm_device_set_use_dhcp (self, FALSE);
|
||||
|
||||
/* Chain up to the parent class */
|
||||
klass = NM_DEVICE_CLASS (g_type_class_peek (NM_TYPE_DEVICE));
|
||||
parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue