cli: move helper IP conversion functions from devices.c to utils.c
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
@@ -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
|
||||||
*/
|
*/
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user