diff options
| author | Michael Biebl <biebl@debian.org> | 2013-02-09 03:16:54 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2013-02-09 03:16:54 +0100 |
| commit | e17c5736fc3722ce51cb33f3edb203960125a4c1 (patch) | |
| tree | 2b41ee92b307915e9d97f0ef2c012fc793653599 /src/nm-device-adsl.c | |
| parent | 9c202e3e860b3be9e1f8882630b69affbb130102 (diff) | |
Imported Upstream version 0.9.7.997 upstream/0.9.7.997
Diffstat (limited to 'src/nm-device-adsl.c')
| -rw-r--r-- | src/nm-device-adsl.c | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/src/nm-device-adsl.c b/src/nm-device-adsl.c index 29d30cd0..db678d9f 100644 --- a/src/nm-device-adsl.c +++ b/src/nm-device-adsl.c @@ -82,6 +82,7 @@ typedef struct { int brfd; int nas_ifindex; char * nas_ifname; + guint8 nas_hw_addr[ETH_ALEN]; } NMDeviceAdslPrivate; enum { @@ -207,22 +208,12 @@ get_best_auto_connection (NMDevice *dev, for (iter = connections; iter; iter = g_slist_next (iter)) { NMConnection *connection = NM_CONNECTION (iter->data); - NMSettingConnection *s_con; - NMSettingAdsl *s_adsl; if (!nm_connection_is_type (connection, NM_SETTING_ADSL_SETTING_NAME)) continue; - s_adsl = nm_connection_get_setting_adsl (connection); - if (!s_adsl) - continue; - - s_con = nm_connection_get_setting_connection (connection); - g_assert (s_con); - if (!nm_setting_connection_get_autoconnect (s_con)) - continue; - - return connection; + if (nm_connection_get_setting_adsl (connection)) + return connection; } return NULL; } @@ -233,6 +224,7 @@ static void set_nas_iface (NMDeviceAdsl *self, int idx, const char *name) { NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (self); + gsize addrlen; g_return_if_fail (name != NULL); @@ -245,6 +237,13 @@ set_nas_iface (NMDeviceAdsl *self, int idx, const char *name) g_warn_if_fail (priv->nas_ifname == NULL); priv->nas_ifname = g_strdup (name); + + /* Update NAS interface's MAC address */ + addrlen = nm_device_read_hwaddr (NM_DEVICE (self), + priv->nas_hw_addr, + sizeof (priv->nas_hw_addr), + NULL); + g_warn_if_fail (addrlen == sizeof (priv->nas_hw_addr)); } static gboolean @@ -591,10 +590,20 @@ deactivate (NMDevice *device) priv->nas_ifindex = -1; g_free (priv->nas_ifname); priv->nas_ifname = NULL; + memset (priv->nas_hw_addr, 0, sizeof (priv->nas_hw_addr)); } /**************************************************************/ +static const guint8 * +get_hw_address (NMDevice *device, guint *out_len) +{ + NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (device); + + *out_len = priv->nas_ifname ? sizeof (priv->nas_hw_addr) : 0; + return priv->nas_hw_addr; +} + static void set_carrier (NMDeviceAdsl *self, const gboolean carrier) { @@ -818,6 +827,7 @@ nm_device_adsl_class_init (NMDeviceAdslClass *klass) parent_class->get_best_auto_connection = get_best_auto_connection; parent_class->complete_connection = complete_connection; + parent_class->get_hw_address = get_hw_address; parent_class->act_stage2_config = act_stage2_config; parent_class->act_stage3_ip4_config_start = act_stage3_ip4_config_start; parent_class->deactivate = deactivate; |