summary refs log tree commit diff
path: root/src/wimax
diff options
context:
space:
mode:
Diffstat (limited to 'src/wimax')
-rw-r--r--src/wimax/Makefile.in17
-rw-r--r--src/wimax/nm-device-wimax.c85
-rw-r--r--src/wimax/nm-device-wimax.h3
3 files changed, 30 insertions, 75 deletions
diff --git a/src/wimax/Makefile.in b/src/wimax/Makefile.in
index 8e235277..60f8ad66 100644
--- a/src/wimax/Makefile.in
+++ b/src/wimax/Makefile.in
@@ -61,12 +61,11 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
 	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intltool.m4 \
 	$(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/lib-ld.m4 \
 	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
-	$(top_srcdir)/m4/libnl-check.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
-	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/vapigen.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -255,12 +254,6 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
-LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
-LIBNL1_LIBS = @LIBNL1_LIBS@
-LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
-LIBNL2_LIBS = @LIBNL2_LIBS@
-LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
-LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
 LIBOBJS = @LIBOBJS@
diff --git a/src/wimax/nm-device-wimax.c b/src/wimax/nm-device-wimax.c
index d549e67e..3e2e2833 100644
--- a/src/wimax/nm-device-wimax.c
+++ b/src/wimax/nm-device-wimax.c
@@ -87,7 +87,7 @@ typedef struct {
 
 	gboolean enabled;
 	gboolean wimaxd_enabled;
-	struct ether_addr hw_addr;
+	guint8 hw_addr[ETH_ALEN];
 	guint activation_timeout_id;
 
 	/* Track whether stage1 (Prepare) is completed yet or not */
@@ -124,18 +124,6 @@ nm_wimax_error_quark (void)
 
 /***********************************************************/
 
-void
-nm_device_wimax_get_hw_address (NMDeviceWimax *self, struct ether_addr *addr)
-{
-	NMDeviceWimaxPrivate *priv;
-
-	g_return_if_fail (NM_IS_DEVICE_WIMAX (self));
-	g_return_if_fail (addr != NULL);
-
-	priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-	memcpy (addr, &(priv->hw_addr), sizeof (struct ether_addr));
-}
-
 guint32
 nm_device_wimax_get_center_frequency (NMDeviceWimax *self)
 {
@@ -356,12 +344,6 @@ take_down (NMDevice *device)
 }
 
 static gboolean
-hw_is_up (NMDevice *device)
-{
-	return nm_system_iface_is_up (nm_device_get_ip_ifindex (device));
-}
-
-static gboolean
 hw_bring_up (NMDevice *dev, gboolean *no_firmware)
 {
 	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (dev);
@@ -369,13 +351,7 @@ hw_bring_up (NMDevice *dev, gboolean *no_firmware)
 	if (!priv->enabled || !priv->wimaxd_enabled)
 		return FALSE;
 
-	return nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), TRUE, no_firmware);
-}
-
-static void
-hw_take_down (NMDevice *dev)
-{
-	nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), FALSE, NULL);
+	return NM_DEVICE_GET_CLASS (dev)->hw_bring_up (dev, no_firmware);
 }
 
 static void
@@ -383,32 +359,24 @@ update_hw_address (NMDevice *dev)
 {
 	NMDeviceWimax *self = NM_DEVICE_WIMAX (dev);
 	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-	struct ifreq req;
-	int fd;
-	const char *iface;
-
-	iface = nm_device_get_iface (dev);
-
-	fd = socket (PF_INET, SOCK_DGRAM, 0);
-	if (fd < 0) {
-		nm_log_warn (LOGD_HW, "(%s): couldn't open control socket.", iface);
-		return;
+	gboolean changed = FALSE;
+	gsize addrlen;
+
+	addrlen = nm_device_read_hwaddr (dev, priv->hw_addr, sizeof (priv->hw_addr), &changed);
+	if (addrlen) {
+		g_return_if_fail (addrlen == ETH_ALEN);
+		if (changed)
+			g_object_notify (G_OBJECT (self), NM_DEVICE_WIMAX_HW_ADDRESS);
 	}
+}
 
-	memset (&req, 0, sizeof (struct ifreq));
-	strncpy (req.ifr_name, nm_device_get_iface (dev), IFNAMSIZ);
-
-	errno = 0;
-	if (ioctl (fd, SIOCGIFHWADDR, &req) < 0) {
-		nm_log_err (LOGD_HW | LOGD_WIMAX,
-		            "(%s): failed to read hardware address (error %d)",
-		            iface, errno);
-	} else {
-		memcpy (&priv->hw_addr, &req.ifr_hwaddr.sa_data, ETH_ALEN);
-		g_object_notify (G_OBJECT (self), NM_DEVICE_WIMAX_HW_ADDRESS);
-	}
+static const guint8 *
+get_hw_address (NMDevice *device, guint *out_len)
+{
+	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (device);
 
-	close (fd);
+	*out_len = sizeof (priv->hw_addr);
+	return priv->hw_addr;
 }
 
 static gboolean
@@ -432,7 +400,7 @@ hwaddr_matches (NMDevice *device,
 			g_return_val_if_fail (other_hwaddr_len == ETH_ALEN, FALSE);
 			if (memcmp (mac->data, other_hwaddr, mac->len) == 0)
 				return TRUE;
-		} else if (memcmp (mac->data, priv->hw_addr.ether_addr_octet, mac->len) == 0)
+		} else if (memcmp (mac->data, priv->hw_addr, mac->len) == 0)
 			return TRUE;
 	} else if (fail_if_no_hwaddr == FALSE)
 		return TRUE;
@@ -471,7 +439,7 @@ check_connection_compatible (NMDevice *device,
 	}
 
 	mac = nm_setting_wimax_get_mac_address (s_wimax);
-	if (mac && memcmp (mac->data, &(priv->hw_addr.ether_addr_octet), ETH_ALEN)) {
+	if (mac && memcmp (mac->data, &priv->hw_addr, ETH_ALEN)) {
 		g_set_error (error,
 					 NM_WIMAX_ERROR, NM_WIMAX_ERROR_CONNECTION_INCOMPATIBLE,
 					 "The connection's MAC address did not match this device.");
@@ -585,7 +553,7 @@ complete_connection (NMDevice *device,
 	setting_mac = nm_setting_wimax_get_mac_address (s_wimax);
 	if (setting_mac) {
 		/* Make sure the setting MAC (if any) matches the device's permanent MAC */
-		if (memcmp (setting_mac->data, &priv->hw_addr.ether_addr_octet, ETH_ALEN)) {
+		if (memcmp (setting_mac->data, &priv->hw_addr, ETH_ALEN)) {
 			g_set_error (error,
 				         NM_SETTING_WIMAX_ERROR,
 				         NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY,
@@ -597,9 +565,9 @@ complete_connection (NMDevice *device,
 		const guint8 null_mac[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
 
 		/* Lock the connection to this device by default */
-		if (memcmp (&priv->hw_addr.ether_addr_octet, null_mac, ETH_ALEN)) {
+		if (memcmp (&priv->hw_addr, null_mac, ETH_ALEN)) {
 			mac = g_byte_array_sized_new (ETH_ALEN);
-			g_byte_array_append (mac, priv->hw_addr.ether_addr_octet, ETH_ALEN);
+			g_byte_array_append (mac, priv->hw_addr, ETH_ALEN);
 			g_object_set (G_OBJECT (s_wimax), NM_SETTING_WIMAX_MAC_ADDRESS, mac, NULL);
 			g_byte_array_free (mac, TRUE);
 		}
@@ -638,7 +606,7 @@ get_best_auto_connection (NMDevice *device,
 			continue;
 
 		mac = nm_setting_wimax_get_mac_address (s_wimax);
-		if (mac && memcmp (mac->data, priv->hw_addr.ether_addr_octet, ETH_ALEN))
+		if (mac && memcmp (mac->data, priv->hw_addr, ETH_ALEN))
 			continue;
 
 		for (iter = priv->nsp_list; iter; iter = iter->next) {
@@ -1433,12 +1401,10 @@ get_property (GObject *object, guint prop_id,
 {
 	NMDeviceWimax *self = NM_DEVICE_WIMAX (object);
 	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
-	struct ether_addr hw_addr;
 
 	switch (prop_id) {
 	case PROP_HW_ADDRESS:
-		nm_device_wimax_get_hw_address (self, &hw_addr);
-		g_value_take_string (value, nm_utils_hwaddr_ntoa (&hw_addr, ARPHRD_ETHER));
+		g_value_take_string (value, nm_utils_hwaddr_ntoa (priv->hw_addr, ARPHRD_ETHER));
 		break;
 	case PROP_ACTIVE_NSP:
 		if (priv->current_nsp)
@@ -1518,10 +1484,9 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *klass)
 	object_class->dispose = dispose;
 
 	device_class->take_down = take_down;
-	device_class->hw_is_up = hw_is_up;
 	device_class->hw_bring_up = hw_bring_up;
-	device_class->hw_take_down = hw_take_down;
 	device_class->update_hw_address = update_hw_address;
+	device_class->get_hw_address = get_hw_address;
 	device_class->check_connection_compatible = check_connection_compatible;
 	device_class->check_connection_available = check_connection_available;
 	device_class->complete_connection = complete_connection;
diff --git a/src/wimax/nm-device-wimax.h b/src/wimax/nm-device-wimax.h
index a67ff17d..c43c5dd2 100644
--- a/src/wimax/nm-device-wimax.h
+++ b/src/wimax/nm-device-wimax.h
@@ -70,9 +70,6 @@ NMDevice   *nm_device_wimax_new            (const char *udi,
 											const char *iface,
 											const char *driver);
 
-void        nm_device_wimax_get_hw_address (NMDeviceWimax *self,
-											struct ether_addr *addr);
-
 NMWimaxNsp *nm_device_wimax_get_active_nsp (NMDeviceWimax *self);
 
 guint       nm_device_wimax_get_center_frequency (NMDeviceWimax *self);