2006-01-10 Robert Love <rml@novell.com>

* src/nm-device-802-11-wireless.c, src/nm-device-802-11-wireless.h,
	  src/nm-device-802-3-ethernet.c, src/nm-device-802-3-ethernet.h,
	  src/nm-device.c: Fix a FIXME!  Reimplement the function
	  nm_device_update_hw_address() in device subclass variants,
	  nm_device_802_3_ethernet_set_address() and
	  nm_device_802_11_wireless_set_address(), hook them up, and use them.
	  This fixes the existing bug where MAC addresses are all zeros.


git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@1309 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
Robert Love 2006-01-10 21:15:54 +00:00 committed by Robert Love
parent 5f10fc0638
commit 5b8589dfb0
6 changed files with 87 additions and 12 deletions

View file

@ -1,3 +1,13 @@
2006-01-10 Robert Love <rml@novell.com>
* src/nm-device-802-11-wireless.c, src/nm-device-802-11-wireless.h,
src/nm-device-802-3-ethernet.c, src/nm-device-802-3-ethernet.h,
src/nm-device.c: Fix a FIXME! Reimplement the function
nm_device_update_hw_address() in device subclass variants,
nm_device_802_3_ethernet_set_address() and
nm_device_802_11_wireless_set_address(), hook them up, and use them.
This fixes the existing bug where MAC addresses are all zeros.
2006-01-10 Robert Love <rml@novell.com>
* gnome/applet/applet-dbus-devices.c, gnome/applet/applet-dbus.h,

View file

@ -409,7 +409,6 @@ nm_device_802_11_wireless_copy_allowed_to_dev_list (NMDevice80211Wireless *self,
}
/*
* nm_device_802_11_wireless_get_address
*
@ -427,6 +426,36 @@ nm_device_802_11_wireless_get_address (NMDevice80211Wireless *self,
}
/*
* nm_device_802_11_wireless_set_address
*
* Set a device's hardware address
*
*/
void
nm_device_802_11_wireless_set_address (NMDevice80211Wireless *self)
{
NMDevice *dev = NM_DEVICE (self);
struct ifreq req;
NMSock *sk;
int ret;
g_return_if_fail (self != NULL);
sk = nm_dev_sock_open (dev, DEV_GENERAL, __FUNCTION__, NULL);
if (!sk)
return;
memset (&req, 0, sizeof (struct ifreq));
strncpy (req.ifr_name, nm_device_get_iface (dev), sizeof (req.ifr_name) - 1);
ret = ioctl (nm_dev_sock_get_fd (sk), SIOCGIFHWADDR, &req);
if (ret)
return;
memcpy (&(self->priv->hw_addr), &(req.ifr_hwaddr.sa_data), sizeof (struct ether_addr));
}
static gboolean
link_to_specific_ap (NMDevice80211Wireless *self,
NMAccessPoint *ap,

View file

@ -82,6 +82,8 @@ void nm_device_802_11_wireless_set_essid (NMDevice80211Wireless *self,
void nm_device_802_11_wireless_get_address (NMDevice80211Wireless *dev,
struct ether_addr *addr);
void nm_device_802_11_wireless_set_address (NMDevice80211Wireless *dev);
void nm_device_802_11_wireless_get_bssid (NMDevice80211Wireless *dev,
struct ether_addr *bssid);

View file

@ -134,7 +134,7 @@ real_start (NMDevice *dev)
/*
* nm_device_get_hw_address
* nm_device_802_3_ethernet_get_address
*
* Get a device's hardware address
*
@ -149,6 +149,36 @@ nm_device_802_3_ethernet_get_address (NMDevice8023Ethernet *self, struct ether_a
}
/*
* nm_device_802_3_ethernet_set_address
*
* Set a device's hardware address
*
*/
void
nm_device_802_3_ethernet_set_address (NMDevice8023Ethernet *self)
{
NMDevice *dev = NM_DEVICE (self);
struct ifreq req;
NMSock *sk;
int ret;
g_return_if_fail (self != NULL);
sk = nm_dev_sock_open (dev, DEV_GENERAL, __FUNCTION__, NULL);
if (!sk)
return;
memset (&req, 0, sizeof (struct ifreq));
strncpy (req.ifr_name, nm_device_get_iface (dev), sizeof (req.ifr_name) - 1);
ret = ioctl (nm_dev_sock_get_fd (sk), SIOCGIFHWADDR, &req);
if (ret)
return;
memcpy (&(self->priv->hw_addr), &(req.ifr_hwaddr.sa_data), sizeof (struct ether_addr));
}
static guint32
real_get_generic_capabilities (NMDevice *dev)
{

View file

@ -83,6 +83,8 @@ static inline gboolean nm_device_is_802_3_ethernet (NMDevice *dev)
void nm_device_802_3_ethernet_get_address (NMDevice8023Ethernet *dev,
struct ether_addr *addr);
void nm_device_802_3_ethernet_set_address (NMDevice8023Ethernet *dev);
G_END_DECLS
#endif /* NM_DEVICE_802_3_ETHERNET_H */

View file

@ -191,10 +191,12 @@ nm_device_new (const char *iface,
nm_device_bring_up_wait (dev, FALSE);
nm_device_update_ip4_address (dev);
/* FIXME */
#if 0
nm_device_update_hw_address (dev);
#endif
/* Update the device's hardware address */
if (nm_device_is_802_3_ethernet (dev))
nm_device_802_3_ethernet_set_address (NM_DEVICE_802_3_ETHERNET (dev));
else if (nm_device_is_802_11_wireless (dev))
nm_device_802_11_wireless_set_address (NM_DEVICE_802_11_WIRELESS (dev));
/* Grab IP config data for this device from the system configuration files */
dev->priv->system_config_data = nm_system_device_get_system_config (dev);
@ -1715,14 +1717,14 @@ nm_device_set_up_down (NMDevice *self,
nm_system_device_set_up_down (self, up);
/* Make sure we have a valid MAC address, some cards reload firmware when they
/*
* Make sure that we have a valid MAC address, some cards reload firmware when they
* are brought up.
*/
/* FIXME */
#if 0
if (up && !nm_ethernet_address_is_valid (&(self->priv->hw_addr)))
nm_device_update_hw_address (self);
#endif
if (nm_device_is_802_3_ethernet (self))
nm_device_802_3_ethernet_set_address (NM_DEVICE_802_3_ETHERNET (self));
else if (nm_device_is_802_11_wireless (self))
nm_device_802_11_wireless_set_address (NM_DEVICE_802_11_WIRELESS (self));
}