diff options
Diffstat (limited to 'src/wimax')
| -rw-r--r-- | src/wimax/Makefile.in | 17 | ||||
| -rw-r--r-- | src/wimax/nm-device-wimax.c | 85 | ||||
| -rw-r--r-- | src/wimax/nm-device-wimax.h | 3 |
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); |