cli: move helper IP conversion functions from devices.c to utils.c

This commit is contained in:
Jiří Klimeš
2012-01-05 16:30:22 +01:00
parent 3a23cddb37
commit e4327518f3
3 changed files with 71 additions and 55 deletions

View File

@@ -24,10 +24,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <errno.h> #include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <glib.h> #include <glib.h>
#include <glib/gi18n.h> #include <glib/gi18n.h>
@@ -388,46 +384,6 @@ ap_wpa_rsn_flags_to_string (NM80211ApSecurityFlags flags)
return ret_str; return ret_str;
} }
static gchar *
ip4_address_as_string (guint32 ip)
{
struct in_addr tmp_addr;
char buf[INET_ADDRSTRLEN+1];
memset (&buf, '\0', sizeof (buf));
tmp_addr.s_addr = ip;
if (inet_ntop (AF_INET, &tmp_addr, buf, INET_ADDRSTRLEN)) {
return g_strdup (buf);
} else {
g_warning (_("%s: error converting IP4 address 0x%X"),
__func__, ntohl (tmp_addr.s_addr));
return NULL;
}
}
static gchar *
ip6_address_as_string (const struct in6_addr *ip)
{
char buf[INET6_ADDRSTRLEN];
memset (&buf, '\0', sizeof (buf));
if (inet_ntop (AF_INET6, ip, buf, INET6_ADDRSTRLEN)) {
return g_strdup (buf);
} else {
int j;
GString *ip6_str = g_string_new (NULL);
g_string_append_printf (ip6_str, "%02X", ip->s6_addr[0]);
for (j = 1; j < 16; j++)
g_string_append_printf (ip6_str, " %02X", ip->s6_addr[j]);
g_warning ("%s: error converting IP6 address %s",
__func__, ip6_str->str);
g_string_free (ip6_str, TRUE);
return NULL;
}
}
typedef struct { typedef struct {
NmCli *nmc; NmCli *nmc;
int index; int index;
@@ -879,9 +835,9 @@ show_device_info (gpointer data, gpointer user_data)
guint32 prefix; guint32 prefix;
char *ip_str, *gw_str; char *ip_str, *gw_str;
ip_str = ip4_address_as_string (nm_ip4_address_get_address (addr)); ip_str = nmc_ip4_address_as_string (nm_ip4_address_get_address (addr), NULL);
prefix = nm_ip4_address_get_prefix (addr); prefix = nm_ip4_address_get_prefix (addr);
gw_str = ip4_address_as_string (nm_ip4_address_get_gateway (addr)); gw_str = nmc_ip4_address_as_string (nm_ip4_address_get_gateway (addr), NULL);
addr_arr[j++] = g_strdup_printf ("ip = %s/%u, gw = %s", ip_str, prefix, gw_str); addr_arr[j++] = g_strdup_printf ("ip = %s/%u, gw = %s", ip_str, prefix, gw_str);
g_free (ip_str); g_free (ip_str);
@@ -898,8 +854,8 @@ show_device_info (gpointer data, gpointer user_data)
guint32 prefix, metric; guint32 prefix, metric;
char *dest_str, *nexthop_str; char *dest_str, *nexthop_str;
dest_str = ip4_address_as_string (nm_ip4_route_get_dest (route)); dest_str = nmc_ip4_address_as_string (nm_ip4_route_get_dest (route), NULL);
nexthop_str = ip4_address_as_string (nm_ip4_route_get_next_hop (route)); nexthop_str = nmc_ip4_address_as_string (nm_ip4_route_get_next_hop (route), NULL);
prefix = nm_ip4_route_get_prefix (route); prefix = nm_ip4_route_get_prefix (route);
metric = nm_ip4_route_get_metric (route); metric = nm_ip4_route_get_metric (route);
@@ -914,7 +870,7 @@ show_device_info (gpointer data, gpointer user_data)
if (array) { if (array) {
dns_arr = g_new (char *, array->len + 1); dns_arr = g_new (char *, array->len + 1);
for (j = 0; j < array->len; j++) for (j = 0; j < array->len; j++)
dns_arr[j] = ip4_address_as_string (g_array_index (array, guint32, j)); dns_arr[j] = nmc_ip4_address_as_string (g_array_index (array, guint32, j), NULL);
dns_arr[j] = NULL; dns_arr[j] = NULL;
} }
@@ -934,7 +890,7 @@ show_device_info (gpointer data, gpointer user_data)
if (array) { if (array) {
wins_arr = g_new (char *, array->len + 1); wins_arr = g_new (char *, array->len + 1);
for (j = 0; j < array->len; j++) for (j = 0; j < array->len; j++)
wins_arr[j] = ip4_address_as_string (g_array_index (array, guint32, j)); wins_arr[j] = nmc_ip4_address_as_string (g_array_index (array, guint32, j), NULL);
wins_arr[j] = NULL; wins_arr[j] = NULL;
} }
@@ -1013,9 +969,9 @@ show_device_info (gpointer data, gpointer user_data)
guint32 prefix; guint32 prefix;
char *ip_str, *gw_str; char *ip_str, *gw_str;
ip_str = ip6_address_as_string (nm_ip6_address_get_address (addr)); ip_str = nmc_ip6_address_as_string (nm_ip6_address_get_address (addr), NULL);
prefix = nm_ip6_address_get_prefix (addr); prefix = nm_ip6_address_get_prefix (addr);
gw_str = ip6_address_as_string (nm_ip6_address_get_gateway (addr)); gw_str = nmc_ip6_address_as_string (nm_ip6_address_get_gateway (addr), NULL);
addr_arr[j++] = g_strdup_printf ("ip = %s/%u, gw = %s", ip_str, prefix, gw_str); addr_arr[j++] = g_strdup_printf ("ip = %s/%u, gw = %s", ip_str, prefix, gw_str);
g_free (ip_str); g_free (ip_str);
@@ -1032,8 +988,8 @@ show_device_info (gpointer data, gpointer user_data)
guint32 prefix, metric; guint32 prefix, metric;
char *dest_str, *nexthop_str; char *dest_str, *nexthop_str;
dest_str = ip6_address_as_string (nm_ip6_route_get_dest (route)); dest_str = nmc_ip6_address_as_string (nm_ip6_route_get_dest (route), NULL);
nexthop_str = ip6_address_as_string (nm_ip6_route_get_next_hop (route)); nexthop_str = nmc_ip6_address_as_string (nm_ip6_route_get_next_hop (route), NULL);
prefix = nm_ip6_route_get_prefix (route); prefix = nm_ip6_route_get_prefix (route);
metric = nm_ip6_route_get_metric (route); metric = nm_ip6_route_get_metric (route);
@@ -1048,7 +1004,7 @@ show_device_info (gpointer data, gpointer user_data)
dns_arr = g_new (char *, g_slist_length (list) + 1); dns_arr = g_new (char *, g_slist_length (list) + 1);
j = 0; j = 0;
for (iter = list; iter; iter = g_slist_next (iter)) for (iter = list; iter; iter = g_slist_next (iter))
dns_arr[j++] = ip6_address_as_string (iter->data); dns_arr[j++] = nmc_ip6_address_as_string (iter->data, NULL);
dns_arr[j] = NULL; dns_arr[j] = NULL;

View File

@@ -23,6 +23,10 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <glib.h> #include <glib.h>
#include <glib/gi18n.h> #include <glib/gi18n.h>
#include <dbus/dbus-glib-bindings.h> #include <dbus/dbus-glib-bindings.h>
@@ -78,6 +82,60 @@ ssid_to_printable (const char *str, gsize len)
return printable_str; return printable_str;
} }
/*
* Converts IPv4 address from guint32 in network-byte order to text representation.
* Returns: text form of the IP or NULL (then error is set)
*/
char *
nmc_ip4_address_as_string (guint32 ip, GError **error)
{
struct in_addr tmp_addr;
char buf[INET_ADDRSTRLEN];
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
memset (&buf, '\0', sizeof (buf));
tmp_addr.s_addr = ip;
if (inet_ntop (AF_INET, &tmp_addr, buf, INET_ADDRSTRLEN)) {
return g_strdup (buf);
} else {
g_set_error (error, 0, 0, _("Error converting IP4 address '0x%X' to text form"),
ntohl (tmp_addr.s_addr));
return NULL;
}
}
/*
* Converts IPv6 address in in6_addr structure to text representation.
* Returns: text form of the IP or NULL (then error is set)
*/
char *
nmc_ip6_address_as_string (const struct in6_addr *ip, GError **error)
{
char buf[INET6_ADDRSTRLEN];
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
memset (&buf, '\0', sizeof (buf));
if (inet_ntop (AF_INET6, ip, buf, INET6_ADDRSTRLEN)) {
return g_strdup (buf);
} else {
if (error) {
int j;
GString *ip6_str = g_string_new (NULL);
g_string_append_printf (ip6_str, "%02X", ip->s6_addr[0]);
for (j = 1; j < 16; j++)
g_string_append_printf (ip6_str, " %02X", ip->s6_addr[j]);
g_set_error (error, 0, 0, _("Error converting IP6 address '%s' to text form"),
ip6_str->str);
g_string_free (ip6_str, TRUE);
}
return NULL;
}
}
/* /*
* Find out how many columns an UTF-8 string occupies on the screen * Find out how many columns an UTF-8 string occupies on the screen
*/ */

View File

@@ -28,6 +28,8 @@
int matches (const char *cmd, const char *pattern); int matches (const char *cmd, const char *pattern);
int next_arg (int *argc, char ***argv); int next_arg (int *argc, char ***argv);
char *ssid_to_printable (const char *str, gsize len); char *ssid_to_printable (const char *str, gsize len);
char *nmc_ip4_address_as_string (guint32 ip, GError **error);
char *nmc_ip6_address_as_string (const struct in6_addr *ip, GError **error);
int nmc_string_screen_width (const char *start, const char *end); int nmc_string_screen_width (const char *start, const char *end);
void set_val_str (NmcOutputField fields_array[], guint32 index, const char *value); void set_val_str (NmcOutputField fields_array[], guint32 index, const char *value);
void set_val_arr (NmcOutputField fields_array[], guint32 index, const char **value); void set_val_arr (NmcOutputField fields_array[], guint32 index, const char **value);