mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-08 11:19:16 +02:00
2005-01-09 Dan Williams <dcbw@redhat.com>
* src/NetworkManagerDevice.c - Don't set mode/freq/bitrate if that mode/freq/bitrate is already set. Stops some drivers like Atmel from continually reloading the firmware, which they do upon every configuration change. git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@365 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
parent
8a45dd87d6
commit
62ca4dc643
2 changed files with 53 additions and 39 deletions
|
|
@ -1,3 +1,11 @@
|
||||||
|
2005-01-09 Dan Williams <dcbw@redhat.com>
|
||||||
|
|
||||||
|
* src/NetworkManagerDevice.c
|
||||||
|
- Don't set mode/freq/bitrate if that mode/freq/bitrate is
|
||||||
|
already set. Stops some drivers like Atmel from continually
|
||||||
|
reloading the firmware, which they do upon every configuration
|
||||||
|
change.
|
||||||
|
|
||||||
2005-01-09 Dan Williams <dcbw@redhat.com>
|
2005-01-09 Dan Williams <dcbw@redhat.com>
|
||||||
|
|
||||||
* dhcpcd/client.c
|
* dhcpcd/client.c
|
||||||
|
|
|
||||||
|
|
@ -731,7 +731,7 @@ char * nm_device_get_essid (NMDevice *dev)
|
||||||
*/
|
*/
|
||||||
void nm_device_set_essid (NMDevice *dev, const char *essid)
|
void nm_device_set_essid (NMDevice *dev, const char *essid)
|
||||||
{
|
{
|
||||||
int iwlib_socket;
|
int sk;
|
||||||
int err;
|
int err;
|
||||||
struct iwreq wreq;
|
struct iwreq wreq;
|
||||||
unsigned char safe_essid[IW_ESSID_MAX_SIZE + 1] = "\0";
|
unsigned char safe_essid[IW_ESSID_MAX_SIZE + 1] = "\0";
|
||||||
|
|
@ -757,18 +757,18 @@ void nm_device_set_essid (NMDevice *dev, const char *essid)
|
||||||
safe_essid[IW_ESSID_MAX_SIZE] = '\0';
|
safe_essid[IW_ESSID_MAX_SIZE] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
iwlib_socket = iw_sockets_open ();
|
sk = iw_sockets_open ();
|
||||||
if (iwlib_socket >= 0)
|
if (sk >= 0)
|
||||||
{
|
{
|
||||||
wreq.u.essid.pointer = (caddr_t) safe_essid;
|
wreq.u.essid.pointer = (caddr_t) safe_essid;
|
||||||
wreq.u.essid.length = strlen (safe_essid) + 1;
|
wreq.u.essid.length = strlen (safe_essid) + 1;
|
||||||
wreq.u.essid.flags = 1; /* Enable essid on card */
|
wreq.u.essid.flags = 1; /* Enable essid on card */
|
||||||
|
|
||||||
err = iw_set_ext (iwlib_socket, nm_device_get_iface (dev), SIOCSIWESSID, &wreq);
|
err = iw_set_ext (sk, nm_device_get_iface (dev), SIOCSIWESSID, &wreq);
|
||||||
if (err == -1)
|
if (err == -1)
|
||||||
syslog (LOG_ERR, "nm_device_set_essid(): error setting ESSID '%s' for device %s. errno = %d", safe_essid, nm_device_get_iface (dev), errno);
|
syslog (LOG_ERR, "nm_device_set_essid(): error setting ESSID '%s' for device %s. errno = %d", safe_essid, nm_device_get_iface (dev), errno);
|
||||||
|
|
||||||
close (iwlib_socket);
|
close (sk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -827,6 +827,9 @@ void nm_device_set_frequency (NMDevice *dev, const double freq)
|
||||||
if (dev->test_device)
|
if (dev->test_device)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (nm_device_get_frequency (dev) == freq)
|
||||||
|
return;
|
||||||
|
|
||||||
sk = iw_sockets_open ();
|
sk = iw_sockets_open ();
|
||||||
if (sk >= 0)
|
if (sk >= 0)
|
||||||
{
|
{
|
||||||
|
|
@ -893,6 +896,9 @@ void nm_device_set_bitrate (NMDevice *dev, const int KHz)
|
||||||
if (dev->test_device)
|
if (dev->test_device)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (nm_device_get_bitrate (dev) == KHz)
|
||||||
|
return;
|
||||||
|
|
||||||
sk = iw_sockets_open ();
|
sk = iw_sockets_open ();
|
||||||
if (sk >= 0)
|
if (sk >= 0)
|
||||||
{
|
{
|
||||||
|
|
@ -965,7 +971,7 @@ void nm_device_get_ap_address (NMDevice *dev, struct ether_addr *addr)
|
||||||
*/
|
*/
|
||||||
void nm_device_set_enc_key (NMDevice *dev, const char *key, NMDeviceAuthMethod auth_method)
|
void nm_device_set_enc_key (NMDevice *dev, const char *key, NMDeviceAuthMethod auth_method)
|
||||||
{
|
{
|
||||||
int iwlib_socket;
|
int sk;
|
||||||
int err;
|
int err;
|
||||||
struct iwreq wreq;
|
struct iwreq wreq;
|
||||||
int keylen;
|
int keylen;
|
||||||
|
|
@ -988,8 +994,8 @@ void nm_device_set_enc_key (NMDevice *dev, const char *key, NMDeviceAuthMethod a
|
||||||
safe_key[IW_ENCODING_TOKEN_MAX] = '\0';
|
safe_key[IW_ENCODING_TOKEN_MAX] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
iwlib_socket = iw_sockets_open ();
|
sk = iw_sockets_open ();
|
||||||
if (iwlib_socket >= 0)
|
if (sk >= 0)
|
||||||
{
|
{
|
||||||
wreq.u.data.pointer = (caddr_t) NULL;
|
wreq.u.data.pointer = (caddr_t) NULL;
|
||||||
wreq.u.data.length = 0;
|
wreq.u.data.length = 0;
|
||||||
|
|
@ -1010,7 +1016,7 @@ void nm_device_set_enc_key (NMDevice *dev, const char *key, NMDeviceAuthMethod a
|
||||||
{
|
{
|
||||||
unsigned char parsed_key[IW_ENCODING_TOKEN_MAX + 1];
|
unsigned char parsed_key[IW_ENCODING_TOKEN_MAX + 1];
|
||||||
|
|
||||||
keylen = iw_in_key_full(iwlib_socket, nm_device_get_iface (dev), safe_key, &parsed_key[0], &wreq.u.data.flags);
|
keylen = iw_in_key_full (sk, nm_device_get_iface (dev), safe_key, &parsed_key[0], &wreq.u.data.flags);
|
||||||
if (keylen > 0)
|
if (keylen > 0)
|
||||||
{
|
{
|
||||||
switch (auth_method)
|
switch (auth_method)
|
||||||
|
|
@ -1033,12 +1039,12 @@ void nm_device_set_enc_key (NMDevice *dev, const char *key, NMDeviceAuthMethod a
|
||||||
|
|
||||||
if (set_key)
|
if (set_key)
|
||||||
{
|
{
|
||||||
err = iw_set_ext (iwlib_socket, nm_device_get_iface (dev), SIOCSIWENCODE, &wreq);
|
err = iw_set_ext (sk, nm_device_get_iface (dev), SIOCSIWENCODE, &wreq);
|
||||||
if (err == -1)
|
if (err == -1)
|
||||||
syslog (LOG_ERR, "nm_device_set_enc_key(): error setting key for device %s. errno = %d", nm_device_get_iface (dev), errno);
|
syslog (LOG_ERR, "nm_device_set_enc_key(): error setting key for device %s. errno = %d", nm_device_get_iface (dev), errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
close (iwlib_socket);
|
close (sk);
|
||||||
} else syslog (LOG_ERR, "nm_device_set_enc_key(): could not get wireless control socket.");
|
} else syslog (LOG_ERR, "nm_device_set_enc_key(): could not get wireless control socket.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1073,7 +1079,7 @@ gint8 nm_device_get_signal_strength (NMDevice *dev)
|
||||||
void nm_device_update_signal_strength (NMDevice *dev)
|
void nm_device_update_signal_strength (NMDevice *dev)
|
||||||
{
|
{
|
||||||
gboolean has_range;
|
gboolean has_range;
|
||||||
int iwlib_socket;
|
int sk;
|
||||||
iwrange range;
|
iwrange range;
|
||||||
iwstats stats;
|
iwstats stats;
|
||||||
int percent = -1;
|
int percent = -1;
|
||||||
|
|
@ -1098,9 +1104,9 @@ void nm_device_update_signal_strength (NMDevice *dev)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
iwlib_socket = iw_sockets_open ();
|
sk = iw_sockets_open ();
|
||||||
has_range = (iw_get_range_info (iwlib_socket, nm_device_get_iface (dev), &range) >= 0);
|
has_range = (iw_get_range_info (sk, nm_device_get_iface (dev), &range) >= 0);
|
||||||
if (iw_get_stats (iwlib_socket, nm_device_get_iface (dev), &stats, &range, has_range) == 0)
|
if (iw_get_stats (sk, nm_device_get_iface (dev), &stats, &range, has_range) == 0)
|
||||||
{
|
{
|
||||||
/* Update our max quality while we're at it */
|
/* Update our max quality while we're at it */
|
||||||
dev->options.wireless.max_quality = range.max_qual.level;
|
dev->options.wireless.max_quality = range.max_qual.level;
|
||||||
|
|
@ -1113,7 +1119,7 @@ void nm_device_update_signal_strength (NMDevice *dev)
|
||||||
dev->options.wireless.noise = -1;
|
dev->options.wireless.noise = -1;
|
||||||
percent = -1;
|
percent = -1;
|
||||||
}
|
}
|
||||||
close (iwlib_socket);
|
close (sk);
|
||||||
|
|
||||||
/* Try to smooth out the strength. Atmel cards, for example, will give no strength
|
/* Try to smooth out the strength. Atmel cards, for example, will give no strength
|
||||||
* one second and normal strength the next.
|
* one second and normal strength the next.
|
||||||
|
|
@ -1197,7 +1203,7 @@ void nm_device_update_ip4_address (NMDevice *dev)
|
||||||
{
|
{
|
||||||
guint32 new_address;
|
guint32 new_address;
|
||||||
struct ifreq req;
|
struct ifreq req;
|
||||||
int socket;
|
int sk;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
g_return_if_fail (dev != NULL);
|
g_return_if_fail (dev != NULL);
|
||||||
|
|
@ -1211,14 +1217,13 @@ void nm_device_update_ip4_address (NMDevice *dev)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
socket = nm_device_open_sock ();
|
if ((sk = nm_device_open_sock ()) < 0)
|
||||||
if (socket < 0)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
memset (&req, 0, sizeof (struct ifreq));
|
memset (&req, 0, sizeof (struct ifreq));
|
||||||
strncpy ((char *)(&req.ifr_name), nm_device_get_iface (dev), strlen (nm_device_get_iface (dev)));
|
strncpy ((char *)(&req.ifr_name), nm_device_get_iface (dev), strlen (nm_device_get_iface (dev)));
|
||||||
err = ioctl (socket, SIOCGIFADDR, &req);
|
err = ioctl (sk, SIOCGIFADDR, &req);
|
||||||
close (socket);
|
close (sk);
|
||||||
if (err != 0)
|
if (err != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -1263,7 +1268,7 @@ void nm_device_get_hw_address(NMDevice *dev, unsigned char hw_addr[ETH_ALEN])
|
||||||
void nm_device_update_hw_address (NMDevice *dev)
|
void nm_device_update_hw_address (NMDevice *dev)
|
||||||
{
|
{
|
||||||
struct ifreq req;
|
struct ifreq req;
|
||||||
int socket;
|
int sk;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
g_return_if_fail (dev != NULL);
|
g_return_if_fail (dev != NULL);
|
||||||
|
|
@ -1277,14 +1282,13 @@ void nm_device_update_hw_address (NMDevice *dev)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
socket = nm_device_open_sock ();
|
if ((sk = nm_device_open_sock ()) < 0)
|
||||||
if (socket < 0)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
memset (&req, 0, sizeof (struct ifreq));
|
memset (&req, 0, sizeof (struct ifreq));
|
||||||
strncpy ((char *)(&req.ifr_name), nm_device_get_iface (dev), strlen (nm_device_get_iface (dev)));
|
strncpy ((char *)(&req.ifr_name), nm_device_get_iface (dev), strlen (nm_device_get_iface (dev)));
|
||||||
err = ioctl (socket, SIOCGIFHWADDR, &req);
|
err = ioctl (sk, SIOCGIFHWADDR, &req);
|
||||||
close (socket);
|
close (sk);
|
||||||
if (err != 0)
|
if (err != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -1301,7 +1305,7 @@ void nm_device_update_hw_address (NMDevice *dev)
|
||||||
static void nm_device_set_up_down (NMDevice *dev, gboolean up)
|
static void nm_device_set_up_down (NMDevice *dev, gboolean up)
|
||||||
{
|
{
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
int iface_fd;
|
int sk;
|
||||||
int err;
|
int err;
|
||||||
guint32 flags = up ? IFF_UP : ~IFF_UP;
|
guint32 flags = up ? IFF_UP : ~IFF_UP;
|
||||||
|
|
||||||
|
|
@ -1317,13 +1321,13 @@ static void nm_device_set_up_down (NMDevice *dev, gboolean up)
|
||||||
if (nm_device_get_driver_support_level (dev) == NM_DRIVER_UNSUPPORTED)
|
if (nm_device_get_driver_support_level (dev) == NM_DRIVER_UNSUPPORTED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
iface_fd = nm_device_open_sock ();
|
sk = nm_device_open_sock ();
|
||||||
if (iface_fd < 0)
|
if (sk < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Get flags already there */
|
/* Get flags already there */
|
||||||
strcpy (ifr.ifr_name, nm_device_get_iface (dev));
|
strcpy (ifr.ifr_name, nm_device_get_iface (dev));
|
||||||
err = ioctl (iface_fd, SIOCGIFFLAGS, &ifr);
|
err = ioctl (sk, SIOCGIFFLAGS, &ifr);
|
||||||
if (!err)
|
if (!err)
|
||||||
{
|
{
|
||||||
/* If the interface doesn't have those flags already,
|
/* If the interface doesn't have those flags already,
|
||||||
|
|
@ -1333,15 +1337,14 @@ static void nm_device_set_up_down (NMDevice *dev, gboolean up)
|
||||||
{
|
{
|
||||||
ifr.ifr_flags &= ~IFF_UP;
|
ifr.ifr_flags &= ~IFF_UP;
|
||||||
ifr.ifr_flags |= IFF_UP & flags;
|
ifr.ifr_flags |= IFF_UP & flags;
|
||||||
err = ioctl (iface_fd, SIOCSIFFLAGS, &ifr);
|
if ((err = ioctl (sk, SIOCSIFFLAGS, &ifr)))
|
||||||
if (err)
|
|
||||||
syslog (LOG_ERR, "nm_device_set_up_down() could not bring device %s %s. errno = %d", nm_device_get_iface (dev), (up ? "up" : "down"), errno );
|
syslog (LOG_ERR, "nm_device_set_up_down() could not bring device %s %s. errno = %d", nm_device_get_iface (dev), (up ? "up" : "down"), errno );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
syslog (LOG_ERR, "nm_device_set_up_down() could not get flags for device %s. errno = %d", nm_device_get_iface (dev), errno );
|
syslog (LOG_ERR, "nm_device_set_up_down() could not get flags for device %s. errno = %d", nm_device_get_iface (dev), errno );
|
||||||
|
|
||||||
close (iface_fd);
|
close (sk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1365,7 +1368,7 @@ void nm_device_bring_down (NMDevice *dev)
|
||||||
|
|
||||||
gboolean nm_device_is_up (NMDevice *dev)
|
gboolean nm_device_is_up (NMDevice *dev)
|
||||||
{
|
{
|
||||||
int iface_fd;
|
int sk;
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
|
@ -1374,14 +1377,14 @@ gboolean nm_device_is_up (NMDevice *dev)
|
||||||
if (dev->test_device)
|
if (dev->test_device)
|
||||||
return (dev->test_device_up);
|
return (dev->test_device_up);
|
||||||
|
|
||||||
iface_fd = nm_device_open_sock ();
|
sk = nm_device_open_sock ();
|
||||||
if (iface_fd < 0)
|
if (sk < 0)
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
|
|
||||||
/* Get device's flags */
|
/* Get device's flags */
|
||||||
strcpy (ifr.ifr_name, nm_device_get_iface (dev));
|
strcpy (ifr.ifr_name, nm_device_get_iface (dev));
|
||||||
err = ioctl (iface_fd, SIOCGIFFLAGS, &ifr);
|
err = ioctl (sk, SIOCGIFFLAGS, &ifr);
|
||||||
close (iface_fd);
|
close (sk);
|
||||||
if (!err)
|
if (!err)
|
||||||
return (!((ifr.ifr_flags^IFF_UP) & IFF_UP));
|
return (!((ifr.ifr_flags^IFF_UP) & IFF_UP));
|
||||||
|
|
||||||
|
|
@ -1450,6 +1453,9 @@ gboolean nm_device_set_mode (NMDevice *dev, const NMNetworkMode mode)
|
||||||
g_return_val_if_fail (nm_device_is_wireless (dev), FALSE);
|
g_return_val_if_fail (nm_device_is_wireless (dev), FALSE);
|
||||||
g_return_val_if_fail ((mode == NETWORK_MODE_INFRA) || (mode == NETWORK_MODE_ADHOC), FALSE);
|
g_return_val_if_fail ((mode == NETWORK_MODE_INFRA) || (mode == NETWORK_MODE_ADHOC), FALSE);
|
||||||
|
|
||||||
|
if (nm_device_get_mode (dev) == mode)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
/* Force the card into Managed/Infrastructure mode */
|
/* Force the card into Managed/Infrastructure mode */
|
||||||
sk = iw_sockets_open ();
|
sk = iw_sockets_open ();
|
||||||
if (sk >= 0)
|
if (sk >= 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue