2008-03-13 Dan Williams <dcbw@redhat.com>
* NetworkManagerUtils.c NetworkManagerUtils.h - Remove NMSock stuff - Remove the completion stuff * nm-device.c nm-device.h NetworkManager.c NetworkManagerSystem.c autoip.c nm-device-802-11-wireless.c nm-device-802-3-ethernet.c - Remove NMSock and completion stuff - Remove nm_ioctl_info() git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3448 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
@@ -43,140 +43,6 @@
|
||||
#include <netlink/addr.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
|
||||
struct NMSock
|
||||
{
|
||||
int fd;
|
||||
char *func;
|
||||
char *desc;
|
||||
char *iface;
|
||||
};
|
||||
|
||||
static GSList * sock_list = NULL;
|
||||
|
||||
|
||||
/*
|
||||
* nm_dev_sock_open
|
||||
*
|
||||
* Open a socket to a network device and store some debug info about it.
|
||||
*
|
||||
*/
|
||||
NMSock *
|
||||
nm_dev_sock_open (const char *iface, SockType type, const char *func_name, const char *desc)
|
||||
{
|
||||
NMSock *sock = NULL;
|
||||
|
||||
sock = g_slice_new (NMSock);
|
||||
sock->fd = -1;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case DEV_WIRELESS:
|
||||
sock->fd = iw_sockets_open ();
|
||||
break;
|
||||
|
||||
case DEV_GENERAL:
|
||||
if ((sock->fd = socket (PF_INET, SOCK_DGRAM, 0)) < 0)
|
||||
if ((sock->fd = socket (PF_PACKET, SOCK_DGRAM, 0)) < 0)
|
||||
sock->fd = socket (PF_INET6, SOCK_DGRAM, 0);
|
||||
break;
|
||||
|
||||
case NETWORK_CONTROL:
|
||||
sock->fd = socket (AF_PACKET, SOCK_PACKET, htons (ETH_P_ALL));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (sock->fd < 0)
|
||||
{
|
||||
g_slice_free (NMSock, sock);
|
||||
nm_warning ("Could not open control socket for device '%s'.", iface ? iface : "none");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
sock->func = func_name ? g_strdup (func_name) : NULL;
|
||||
sock->desc = desc ? g_strdup (desc) : NULL;
|
||||
sock->iface = iface ? g_strdup (iface) : NULL;
|
||||
|
||||
/* Add the sock to our global sock list for tracking */
|
||||
sock_list = g_slist_prepend (sock_list, sock);
|
||||
|
||||
return sock;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* nm_dev_sock_close
|
||||
*
|
||||
* Close a socket and free its debug data.
|
||||
*
|
||||
*/
|
||||
void nm_dev_sock_close (NMSock *sock)
|
||||
{
|
||||
GSList *elt;
|
||||
|
||||
g_return_if_fail (sock != NULL);
|
||||
|
||||
close (sock->fd);
|
||||
g_free (sock->func);
|
||||
g_free (sock->desc);
|
||||
g_free (sock->iface);
|
||||
|
||||
memset (sock, 0, sizeof (NMSock));
|
||||
|
||||
for (elt = sock_list; elt; elt = g_slist_next (elt)) {
|
||||
NMSock *temp_sock = (NMSock *)(elt->data);
|
||||
if (temp_sock == sock) {
|
||||
sock_list = g_slist_remove_link (sock_list, elt);
|
||||
g_slist_free (elt);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_slice_free (NMSock, sock);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* nm_dev_sock_get_fd
|
||||
*
|
||||
* Return the fd associated with an NMSock
|
||||
*
|
||||
*/
|
||||
int nm_dev_sock_get_fd (NMSock *sock)
|
||||
{
|
||||
g_return_val_if_fail (sock != NULL, -1);
|
||||
|
||||
return sock->fd;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* nm_print_open_socks
|
||||
*
|
||||
* Print a list of currently open and registered NMSocks.
|
||||
*
|
||||
*/
|
||||
void nm_print_open_socks (void)
|
||||
{
|
||||
GSList *elt = NULL;
|
||||
int i = 0;
|
||||
|
||||
nm_debug ("Open Sockets List:");
|
||||
for (elt = sock_list; elt; elt = g_slist_next (elt)) {
|
||||
NMSock *sock = (NMSock *)(elt->data);
|
||||
if (sock) {
|
||||
i++;
|
||||
nm_debug (" %d: %s fd:%d F:'%s' D:'%s'", i, sock->iface ? sock->iface : "",
|
||||
sock->fd, sock->func, sock->desc);
|
||||
}
|
||||
}
|
||||
nm_debug ("Open Sockets List Done.");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* nm_null_safe_strcmp
|
||||
*
|
||||
@@ -387,162 +253,6 @@ static inline void nm_timeval_add(struct timeval *a,
|
||||
}
|
||||
}
|
||||
|
||||
static void nm_v_wait_for_completion_or_timeout(
|
||||
const int max_tries,
|
||||
const struct timeval *max_time,
|
||||
const guint interval_usecs,
|
||||
nm_completion_func test_func,
|
||||
nm_completion_func action_func,
|
||||
nm_completion_args args)
|
||||
{
|
||||
int try;
|
||||
gboolean finished = FALSE;
|
||||
struct timeval finish_time;
|
||||
|
||||
g_return_if_fail (test_func || action_func);
|
||||
|
||||
if (max_time) {
|
||||
gettimeofday(&finish_time, NULL);
|
||||
nm_timeval_add(&finish_time, max_time);
|
||||
}
|
||||
|
||||
try = -1;
|
||||
while (!finished &&
|
||||
(max_tries == NM_COMPLETION_TRIES_INFINITY || try < max_tries))
|
||||
{
|
||||
if (max_time && nm_timeval_has_passed(&finish_time))
|
||||
break;
|
||||
try++;
|
||||
if (test_func)
|
||||
{
|
||||
finished = (*test_func)(try, args);
|
||||
if (finished)
|
||||
break;
|
||||
}
|
||||
|
||||
/* #define NM_SLEEP_DEBUG */
|
||||
#ifdef NM_SLEEP_DEBUG
|
||||
syslog (LOG_INFO, "sleeping for %d usecs", interval_usecs);
|
||||
#endif
|
||||
g_usleep(interval_usecs);
|
||||
if (action_func)
|
||||
finished = (*action_func)(try, args);
|
||||
}
|
||||
}
|
||||
|
||||
/* these should probably be moved to NetworkManagerUtils.h as macros
|
||||
* since they don't do varargs stuff any more */
|
||||
void nm_wait_for_completion_or_timeout(
|
||||
const int max_tries,
|
||||
const struct timeval *max_time,
|
||||
const guint interval_usecs,
|
||||
nm_completion_func test_func,
|
||||
nm_completion_func action_func,
|
||||
nm_completion_args args)
|
||||
{
|
||||
nm_v_wait_for_completion_or_timeout(max_tries, max_time,
|
||||
interval_usecs, test_func,
|
||||
action_func, args);
|
||||
}
|
||||
|
||||
void nm_wait_for_completion(
|
||||
const int max_tries,
|
||||
const guint interval_usecs,
|
||||
nm_completion_func test_func,
|
||||
nm_completion_func action_func,
|
||||
nm_completion_args args)
|
||||
{
|
||||
nm_v_wait_for_completion_or_timeout(max_tries, NULL,
|
||||
interval_usecs, test_func,
|
||||
action_func, args);
|
||||
}
|
||||
|
||||
void nm_wait_for_timeout(
|
||||
const struct timeval *max_time,
|
||||
const guint interval_usecs,
|
||||
nm_completion_func test_func,
|
||||
nm_completion_func action_func,
|
||||
nm_completion_args args)
|
||||
{
|
||||
nm_v_wait_for_completion_or_timeout(NM_COMPLETION_TRIES_INFINITY, max_time,
|
||||
interval_usecs, test_func, action_func, args);
|
||||
}
|
||||
|
||||
/* you can use these, but they're really just examples */
|
||||
gboolean nm_completion_boolean_test(int tries, nm_completion_args args)
|
||||
{
|
||||
gboolean *condition = (gboolean *)args[0];
|
||||
char *message = (char *)args[1];
|
||||
int log_level = GPOINTER_TO_INT (args[2]);
|
||||
int log_interval = GPOINTER_TO_INT (args[3]);
|
||||
|
||||
g_return_val_if_fail (condition != NULL, TRUE);
|
||||
|
||||
if (message)
|
||||
if ((log_interval == 0 && tries == 0) || (log_interval != 0 && tries % log_interval == 0))
|
||||
{
|
||||
if (log_level == LOG_WARNING)
|
||||
nm_warning_str (message);
|
||||
else if (log_level == LOG_ERR)
|
||||
nm_error_str (message);
|
||||
else if (log_level == LOG_DEBUG)
|
||||
nm_debug_str (message);
|
||||
else
|
||||
nm_info_str (message);
|
||||
}
|
||||
|
||||
if (*condition)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean nm_completion_boolean_function1_test(int tries,
|
||||
nm_completion_args args)
|
||||
{
|
||||
nm_completion_boolean_function_1 condition = args[0];
|
||||
char *message = args[1];
|
||||
int log_level = GPOINTER_TO_INT (args[2]);
|
||||
int log_interval = GPOINTER_TO_INT (args[3]);
|
||||
u_int64_t arg0;
|
||||
|
||||
memcpy(&arg0, &args[4], sizeof (arg0));
|
||||
|
||||
g_return_val_if_fail (condition, TRUE);
|
||||
|
||||
if (message)
|
||||
if ((log_interval == 0 && tries == 0)
|
||||
|| (log_interval != 0 && tries % log_interval == 0))
|
||||
syslog(log_level, "%s", message);
|
||||
|
||||
if (!(*condition)(arg0))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean nm_completion_boolean_function2_test(int tries,
|
||||
nm_completion_args args)
|
||||
{
|
||||
nm_completion_boolean_function_2 condition = args[0];
|
||||
char *message = args[1];
|
||||
int log_level = GPOINTER_TO_INT (args[2]);
|
||||
int log_interval = GPOINTER_TO_INT (args[3]);
|
||||
u_int64_t arg0, arg1;
|
||||
|
||||
memcpy(&arg0, &args[4], sizeof (arg0));
|
||||
memcpy(&arg1, &args[4]+sizeof (arg0), sizeof (arg1));
|
||||
|
||||
g_return_val_if_fail (condition, TRUE);
|
||||
|
||||
if (message)
|
||||
if ((log_interval == 0 && tries == 0)
|
||||
|| (log_interval != 0 && tries % log_interval == 0))
|
||||
syslog(log_level, "%s", message);
|
||||
|
||||
if (!(*condition)(arg0, arg1))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
gchar *nm_utils_inet_ip4_address_as_string (guint32 ip)
|
||||
{
|
||||
|
Reference in New Issue
Block a user