2004-07-05 Dan Williams <dcbw@redhat.com>
* dispatcher-daemon/NetworkManagerDispatcher.c - A bit more descriptive state message - Don't segfault when reading directory * src/NetworkManager.h - Remove NMData desired_ap member, its now per-device rather than global * src/NetworkManager.c - Remove references to desired_ap - Move the allowed AP list refresh stuff into a thread * src/NetworkManagerDevice.c src/NetworkManagerDevice.h - Each wireless device now has a "best ap" - Make device activate/deactivate functions per-device - Make wireless scanning per-device - Add IPv4 address discover functions, stub IPv6 ones - Move ethernet address validation functions to NetworkManagerUtils.c - Add wireless access point accessor function - Get/Set functions for "best ap" * src/NetworkManagerPolicy.c - Move activate/deactivate stuff into NetworkManagerDevice.c, per-device - Deal with per-device "best ap" rather than data->desired_apa - Implement allowed access point worker thread - Add nm_policy_essid_is_allowed() function * src/NetworkManagerUtils.c src/NetworkManagerUtils.h - Add nm_ethernet_address_is_valid() function - Add IPv4/IPv6 address get functions * src/NetworkManagerWireless.c src/NetworkManagerWireless.h - Move scanning stuff into NetworkManagerDevice.c, per-device git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@12 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <linux/sockios.h>
|
||||
|
||||
#include "NetworkManager.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
@@ -126,6 +127,30 @@ int nm_get_network_control_socket (void)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* nm_ethernet_address_is_valid
|
||||
*
|
||||
* Compares an ethernet address against known invalid addresses.
|
||||
*
|
||||
*/
|
||||
gboolean nm_ethernet_address_is_valid (struct ether_addr *test_addr)
|
||||
{
|
||||
gboolean valid = FALSE;
|
||||
struct ether_addr invalid_addr1 = { {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} };
|
||||
struct ether_addr invalid_addr2 = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00} };
|
||||
struct ether_addr invalid_addr3 = { {0x44, 0x44, 0x44, 0x44, 0x44, 0x44} };
|
||||
|
||||
g_return_if_fail (test_addr != NULL);
|
||||
|
||||
/* Compare the AP address the card has with invalid ethernet MAC addresses. */
|
||||
if ( (memcmp(test_addr, &invalid_addr1, sizeof(struct ether_addr)) != 0)
|
||||
&& (memcmp(test_addr, &invalid_addr2, sizeof(struct ether_addr)) != 0)
|
||||
&& (memcmp(test_addr, &invalid_addr3, sizeof(struct ether_addr)) != 0))
|
||||
valid = TRUE;
|
||||
|
||||
return (valid);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* nm_dispose_scan_results
|
||||
@@ -145,3 +170,43 @@ void nm_dispose_scan_results (wireless_scan *result_list)
|
||||
free (tmp2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* nm_get_ip4_address_for_device
|
||||
*
|
||||
* Get a device's IPv4 address
|
||||
*
|
||||
*/
|
||||
guint32 nm_get_ip4_address_for_device(NMDevice *dev)
|
||||
{
|
||||
struct ifreq req;
|
||||
int socket;
|
||||
|
||||
g_return_val_if_fail (dev != NULL, 0);
|
||||
g_return_val_if_fail (nm_device_get_iface (dev) != NULL, 0);
|
||||
|
||||
socket = nm_get_network_control_socket ();
|
||||
if (socket < 0)
|
||||
return (0);
|
||||
|
||||
strncpy ((char *)(&req.ifr_name), nm_device_get_iface (dev), 16); // 16 == IF_NAMESIZE
|
||||
if (ioctl (socket, SIOCGIFADDR, &req) != 0)
|
||||
return (0);
|
||||
|
||||
return (((struct sockaddr_in *)(&req.ifr_addr))->sin_addr.s_addr);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* nm_get_ip6_address_for_device
|
||||
*
|
||||
* Get a device's IPv6 address
|
||||
*
|
||||
*/
|
||||
void nm_get_ip6_address_for_device(NMDevice *dev)
|
||||
{
|
||||
/* FIXME
|
||||
* Implement
|
||||
*/
|
||||
}
|
||||
|
Reference in New Issue
Block a user