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:
Dan Williams
2004-07-06 01:34:10 +00:00
parent d340cafffa
commit 019e2337bf
12 changed files with 718 additions and 287 deletions

View File

@@ -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
*/
}