platform/tests: merge branch 'th/platform-1'

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1440
This commit is contained in:
Thomas Haller 2022-10-26 08:25:59 +02:00
commit 06bf0707ee
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
12 changed files with 256 additions and 80 deletions

View file

@ -72,8 +72,8 @@ nmtst_platform_ip6_address(const char *address, const char *peer_address, guint
g_assert(plen <= 128);
memset(&addr, 0, sizeof(addr));
addr.address = *nmtst_inet6_from_string(address);
addr.peer_address = *nmtst_inet6_from_string(peer_address);
addr.address = nmtst_inet6_from_string(address);
addr.peer_address = nmtst_inet6_from_string(peer_address);
addr.plen = plen;
return &addr;
@ -148,10 +148,10 @@ nmtst_platform_ip6_route(const char *network, guint plen, const char *gateway, c
nm_assert(plen <= 128);
memset(&route, 0, sizeof(route));
route.network = *nmtst_inet6_from_string(network);
route.network = nmtst_inet6_from_string(network);
route.plen = plen;
route.gateway = *nmtst_inet6_from_string(gateway);
route.pref_src = *nmtst_inet6_from_string(pref_src);
route.gateway = nmtst_inet6_from_string(gateway);
route.pref_src = nmtst_inet6_from_string(pref_src);
return &route;
}

View file

@ -271,7 +271,7 @@ link_add_pre(NMPlatform *platform,
g_assert(address_len == 0);
device->obj = o;
device->ip6_lladdr = *nmtst_inet6_from_string(ip6_lladdr);
device->ip6_lladdr = nmtst_inet6_from_string(ip6_lladdr);
return device;
}

View file

@ -8,6 +8,8 @@
#include <stdlib.h>
#include <syslog.h>
#include "libnm-glib-aux/nm-str-buf.h"
#include "libnm-glib-aux/nm-io-utils.h"
#include "libnm-platform/nm-linux-platform.h"
#include "libnm-platform/nmp-object.h"
@ -17,10 +19,25 @@ NMTST_DEFINE();
static struct {
gboolean persist;
char *state_file;
} global_opt = {
.persist = TRUE,
};
const char *const *const ip_argv_rule6 = NM_MAKE_STRV("ip", "-d", "-6", "rule");
static const struct {
NMPObjectType obj_type;
const char *const *ip_argv;
} dump_obj_types[] = {
{NMP_OBJECT_TYPE_LINK, NM_MAKE_STRV("ip", "-d", "link")},
{NMP_OBJECT_TYPE_IP4_ADDRESS, NM_MAKE_STRV("ip", "-d", "-4", "address")},
{NMP_OBJECT_TYPE_IP6_ADDRESS, NM_MAKE_STRV("ip", "-d", "-6", "address")},
{NMP_OBJECT_TYPE_IP4_ROUTE, NM_MAKE_STRV("ip", "-d", "-4", "route")},
{NMP_OBJECT_TYPE_IP6_ROUTE, NM_MAKE_STRV("ip", "-d", "-6", "route")},
{NMP_OBJECT_TYPE_ROUTING_RULE, NM_MAKE_STRV("ip", "-d", "-4", "rule")},
};
static gboolean
read_argv(int *argc, char ***argv)
{
@ -33,6 +50,13 @@ read_argv(int *argc, char ***argv)
&global_opt.persist,
"Exit after processing netlink messages",
NULL},
{"state-file",
'S',
0,
G_OPTION_ARG_FILENAME,
&global_opt.state_file,
N_("Dump the platform cache to this file"),
N_("FILE")},
{0},
};
gs_free_error GError *error = NULL;
@ -63,6 +87,123 @@ mptcp_addr_dump(NMPlatform *platform)
/*****************************************************************************/
static void
_dump_state(NMPlatform *platform, const char *state_file)
{
nm_auto_str_buf NMStrBuf sbuf = NM_STR_BUF_INIT_A(NM_UTILS_GET_NEXT_REALLOC_SIZE_488, FALSE);
nm_auto_unref_gdatetime GDateTime *time_datetime = NULL;
gs_free char *time_str = NULL;
int i_obj_type;
if (!state_file)
return;
time_datetime = g_date_time_new_now_local();
time_str = g_date_time_format(time_datetime, "%C%y-%m-%dT%H:%M:%S.%f");
nm_log_dbg(LOGD_PLATFORM, "dump to file \"%s\", at %s", state_file, time_str);
nm_str_buf_append_printf(&sbuf, "time: %s\n", time_str);
nm_str_buf_append_printf(&sbuf, "pid: %lld\n", (long long) getpid());
for (i_obj_type = 0; i_obj_type < (int) G_N_ELEMENTS(dump_obj_types); i_obj_type++) {
NMPObjectType obj_type = dump_obj_types[i_obj_type].obj_type;
const char *const *ip_argv = dump_obj_types[i_obj_type].ip_argv;
const NMDedupMultiHeadEntry *pl_head_entry;
NMDedupMultiIter pl_iter;
const NMPObject *obj;
guint i;
char buf1[1000];
pl_head_entry = nm_platform_lookup_obj_type(platform, obj_type);
nm_str_buf_append_printf(&sbuf,
"\n%s: %u\n",
nmp_class_from_type(obj_type)->obj_type_name,
pl_head_entry ? pl_head_entry->len : 0u);
i = 0;
nmp_cache_iter_for_each (&pl_iter, pl_head_entry, &obj) {
nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, buf1, sizeof(buf1));
nm_str_buf_append_printf(&sbuf,
"%s[%u]: %s\n",
nmp_class_from_type(obj_type)->obj_type_name,
i,
buf1);
g_assert(strlen(buf1) < sizeof(buf1) - 1u);
i++;
}
ip_again:
if (ip_argv) {
gs_free_error GError *error = NULL;
gs_free char *ip_argv_ss = NULL;
gs_free char *s_stdout = NULL;
gs_free char *s_stderr = NULL;
int exit_code;
g_spawn_sync(NULL,
(char **) ip_argv,
NULL,
G_SPAWN_SEARCH_PATH,
NULL,
NULL,
&s_stdout,
&s_stderr,
&exit_code,
&error);
nm_str_buf_append_printf(&sbuf,
"%s: call %s: ",
nmp_class_from_type(obj_type)->obj_type_name,
ip_argv_ss = g_strjoinv(" ", (char **) ip_argv));
if (error) {
nm_str_buf_append_printf(&sbuf, "FAILED: %s\n", error->message);
} else if (WIFEXITED(exit_code) && WEXITSTATUS(exit_code) == 0)
nm_str_buf_append_printf(&sbuf, "SUCCESS\n");
else {
nm_str_buf_append_printf(
&sbuf,
"ERROR: %s\n",
nm_utils_get_process_exit_status_desc_buf(exit_code, buf1, sizeof(buf1)));
}
if (!nm_str_is_empty(s_stdout))
nm_str_buf_append_printf(&sbuf, "STDOUT>\n%s<\n", s_stdout);
if (!nm_str_is_empty(s_stderr))
nm_str_buf_append_printf(&sbuf, "STDERR>\n%s<\n", s_stderr);
if (obj_type == NMP_OBJECT_TYPE_ROUTING_RULE
&& ip_argv == dump_obj_types[i_obj_type].ip_argv) {
ip_argv = ip_argv_rule6;
goto ip_again;
}
}
}
nm_utils_file_set_contents(state_file,
nm_str_buf_get_str_unsafe(&sbuf),
sbuf.len,
00644,
NULL,
NULL,
NULL);
nm_log_dbg(LOGD_PLATFORM, "dump to file complete");
}
static void
_dump_state_platform_cb(NMPlatform *platform,
int obj_type_i,
int ifindex,
gconstpointer platform_object,
int change_type_i,
gpointer unused_user_data)
{
_dump_state(platform, global_opt.state_file);
}
/*****************************************************************************/
int
main(int argc, char **argv)
{
@ -82,12 +223,32 @@ main(int argc, char **argv)
nm_linux_platform_setup();
if (global_opt.state_file) {
int i_obj_type;
for (i_obj_type = 0; i_obj_type < (int) G_N_ELEMENTS(dump_obj_types); i_obj_type++) {
NMPObjectType obj_type = dump_obj_types[i_obj_type].obj_type;
g_signal_connect(NM_PLATFORM_GET,
nmp_class_from_type(obj_type)->signal_type,
G_CALLBACK(_dump_state_platform_cb),
NULL);
}
}
mptcp_addr_dump(NM_PLATFORM_GET);
_dump_state(NM_PLATFORM_GET, global_opt.state_file);
if (global_opt.persist)
g_main_loop_run(loop);
g_main_loop_unref(loop);
g_signal_handlers_disconnect_by_func(NM_PLATFORM_GET,
G_CALLBACK(_dump_state_platform_cb),
NULL);
g_object_unref(NM_PLATFORM_GET);
return EXIT_SUCCESS;
}

View file

@ -1029,7 +1029,7 @@ nmtstp_ip_address_assert_lifetime(const NMPlatformIPAddress *addr,
static void
_ip_address_add(NMPlatform *platform,
gboolean external_command,
int external_command,
gboolean is_v4,
int ifindex,
const NMIPAddr *address,
@ -1181,7 +1181,7 @@ _ip_address_add(NMPlatform *platform,
void
nmtstp_ip4_address_add(NMPlatform *platform,
gboolean external_command,
int external_command,
int ifindex,
in_addr_t address,
int plen,
@ -1206,7 +1206,7 @@ nmtstp_ip4_address_add(NMPlatform *platform,
void
nmtstp_ip6_address_add(NMPlatform *platform,
gboolean external_command,
int external_command,
int ifindex,
struct in6_addr address,
int plen,
@ -1284,7 +1284,7 @@ nmtstp_ip6_route_add(NMPlatform *platform,
static void
_ip_address_del(NMPlatform *platform,
gboolean external_command,
int external_command,
gboolean is_v4,
int ifindex,
const NMIPAddr *address,
@ -1383,7 +1383,7 @@ _ip_address_del(NMPlatform *platform,
void
nmtstp_ip4_address_del(NMPlatform *platform,
gboolean external_command,
int external_command,
int ifindex,
in_addr_t address,
int plen,
@ -1400,7 +1400,7 @@ nmtstp_ip4_address_del(NMPlatform *platform,
void
nmtstp_ip6_address_del(NMPlatform *platform,
gboolean external_command,
int external_command,
int ifindex,
struct in6_addr address,
int plen)
@ -1470,7 +1470,7 @@ nmtstp_link_bridge_normalize_jiffies_time(const NMPlatformLnkBridge *requested,
const NMPlatformLink *
nmtstp_link_bridge_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkBridge *lnk)
{
@ -1625,10 +1625,7 @@ nmtstp_link_bridge_add(NMPlatform *platform,
return pllink;
}
const NMPlatformLink *
nmtstp_link_veth_add(NMPlatform *platform,
gboolean external_command,
const char *name,
const char *peer)
nmtstp_link_veth_add(NMPlatform *platform, int external_command, const char *name, const char *peer)
{
const NMPlatformLink *pllink = NULL;
gboolean success = FALSE;
@ -1673,7 +1670,7 @@ again:
}
const NMPlatformLink *
nmtstp_link_dummy_add(NMPlatform *platform, gboolean external_command, const char *name)
nmtstp_link_dummy_add(NMPlatform *platform, int external_command, const char *name)
{
const NMPlatformLink *pllink = NULL;
gboolean success;
@ -1698,7 +1695,7 @@ nmtstp_link_dummy_add(NMPlatform *platform, gboolean external_command, const cha
const NMPlatformLink *
nmtstp_link_gre_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkGre *lnk)
{
@ -1749,7 +1746,7 @@ nmtstp_link_gre_add(NMPlatform *platform,
const NMPlatformLink *
nmtstp_link_ip6tnl_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkIp6Tnl *lnk)
{
@ -1815,7 +1812,7 @@ nmtstp_link_ip6tnl_add(NMPlatform *platform,
const NMPlatformLink *
nmtstp_link_ip6gre_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkIp6Tnl *lnk)
{
@ -1874,7 +1871,7 @@ nmtstp_link_ip6gre_add(NMPlatform *platform,
const NMPlatformLink *
nmtstp_link_ipip_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkIpIp *lnk)
{
@ -1917,7 +1914,7 @@ nmtstp_link_ipip_add(NMPlatform *platform,
const NMPlatformLink *
nmtstp_link_macvlan_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
int parent,
const NMPlatformLnkMacvlan *lnk)
@ -1966,7 +1963,7 @@ nmtstp_link_macvlan_add(NMPlatform *platform,
const NMPlatformLink *
nmtstp_link_sit_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkSit *lnk)
{
@ -2013,7 +2010,7 @@ nmtstp_link_sit_add(NMPlatform *platform,
const NMPlatformLink *
nmtstp_link_tun_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkTun *lnk,
int *out_fd)
@ -2078,7 +2075,7 @@ nmtstp_link_tun_add(NMPlatform *platform,
const NMPlatformLink *
nmtstp_link_vrf_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkVrf *lnk,
gboolean *out_not_supported)
@ -2115,7 +2112,7 @@ nmtstp_link_vrf_add(NMPlatform *platform,
const NMPlatformLink *
nmtstp_link_vxlan_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkVxlan *lnk)
{
@ -2231,7 +2228,7 @@ nmtstp_link_get(NMPlatform *platform, int ifindex, const char *name)
void
nmtstp_link_delete(NMPlatform *platform,
gboolean external_command,
int external_command,
int ifindex,
const char *name,
gboolean require_exist)
@ -2283,7 +2280,7 @@ nmtstp_link_delete(NMPlatform *platform,
/*****************************************************************************/
void
nmtstp_link_set_updown(NMPlatform *platform, gboolean external_command, int ifindex, gboolean up)
nmtstp_link_set_updown(NMPlatform *platform, int external_command, int ifindex, gboolean up)
{
const NMPlatformLink *plink;
gint64 end_time;

View file

@ -261,7 +261,7 @@ void nmtstp_ip_address_assert_lifetime(const NMPlatformIPAddress *addr,
guint32 expected_preferred);
void nmtstp_ip4_address_add(NMPlatform *platform,
gboolean external_command,
int external_command,
int ifindex,
in_addr_t address,
int plen,
@ -271,7 +271,7 @@ void nmtstp_ip4_address_add(NMPlatform *platform,
guint32 flags,
const char *label);
void nmtstp_ip6_address_add(NMPlatform *platform,
gboolean external_command,
int external_command,
int ifindex,
struct in6_addr address,
int plen,
@ -280,13 +280,13 @@ void nmtstp_ip6_address_add(NMPlatform *platform,
guint32 preferred,
guint32 flags);
void nmtstp_ip4_address_del(NMPlatform *platform,
gboolean external_command,
int external_command,
int ifindex,
in_addr_t address,
int plen,
in_addr_t peer_address);
void nmtstp_ip6_address_del(NMPlatform *platform,
gboolean external_command,
int external_command,
int ifindex,
struct in6_addr address,
int plen);
@ -452,8 +452,7 @@ const NMPlatformLink *nmtstp_link_get(NMPlatform *platform, int ifindex, const c
gboolean nmtstp_kernel_support_get(NMPlatformKernelSupportType type);
void
nmtstp_link_set_updown(NMPlatform *platform, gboolean external_command, int ifindex, gboolean up);
void nmtstp_link_set_updown(NMPlatform *platform, int external_command, int ifindex, gboolean up);
const NMPlatformLnkBridge *
nmtstp_link_bridge_normalize_jiffies_time(const NMPlatformLnkBridge *requested,
@ -461,57 +460,57 @@ nmtstp_link_bridge_normalize_jiffies_time(const NMPlatformLnkBridge *requested,
NMPlatformLnkBridge *dst);
const NMPlatformLink *nmtstp_link_bridge_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkBridge *lnk);
const NMPlatformLink *nmtstp_link_veth_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const char *peer);
const NMPlatformLink *
nmtstp_link_dummy_add(NMPlatform *platform, gboolean external_command, const char *name);
nmtstp_link_dummy_add(NMPlatform *platform, int external_command, const char *name);
const NMPlatformLink *nmtstp_link_gre_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkGre *lnk);
const NMPlatformLink *nmtstp_link_ip6tnl_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkIp6Tnl *lnk);
const NMPlatformLink *nmtstp_link_ip6gre_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkIp6Tnl *lnk);
const NMPlatformLink *nmtstp_link_ipip_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkIpIp *lnk);
const NMPlatformLink *nmtstp_link_macvlan_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
int parent,
const NMPlatformLnkMacvlan *lnk);
const NMPlatformLink *nmtstp_link_sit_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkSit *lnk);
const NMPlatformLink *nmtstp_link_tun_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkTun *lnk,
int *out_fd);
const NMPlatformLink *nmtstp_link_vrf_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkVrf *lnk,
gboolean *out_not_supported);
const NMPlatformLink *nmtstp_link_vxlan_add(NMPlatform *platform,
gboolean external_command,
int external_command,
const char *name,
const NMPlatformLnkVxlan *lnk);
void nmtstp_link_delete(NMPlatform *platform,
gboolean external_command,
int external_command,
int ifindex,
const char *name,
gboolean require_exist);

View file

@ -1203,8 +1203,8 @@ _test_wireguard_change(NMPlatform *platform, int ifindex, int test_mode)
.in6 =
{
.sin6_family = AF_INET6,
.sin6_addr = *nmtst_inet6_from_string(
nm_sprintf_buf(s_addr, "a:b:c:e::1:%d", i)),
.sin6_addr =
nmtst_inet6_from_string(nm_sprintf_buf(s_addr, "a:b:c:e::1:%d", i)),
.sin6_port = htons(16000 + i),
},
};
@ -1225,7 +1225,7 @@ _test_wireguard_change(NMPlatform *platform, int ifindex, int test_mode)
nm_sprintf_buf(s_addr, "10.%u.%u.0", i, i_allowed_ips));
aip->mask = 32 - (i_allowed_ips % 8);
} else {
aip->addr.addr6 = *nmtst_inet6_from_string(
aip->addr.addr6 = nmtst_inet6_from_string(
nm_sprintf_buf(s_addr, "a:d:f:%02x:%02x::", i, i_allowed_ips));
aip->mask = 128 - (i_allowed_ips % 10);
}
@ -1412,8 +1412,8 @@ test_software_detect(gconstpointer user_data)
switch (test_data->test_mode) {
case 0:
lnk_ip6tnl.local = *nmtst_inet6_from_string("fd01::15");
lnk_ip6tnl.remote = *nmtst_inet6_from_string("fd01::16");
lnk_ip6tnl.local = nmtst_inet6_from_string("fd01::15");
lnk_ip6tnl.remote = nmtst_inet6_from_string("fd01::16");
lnk_ip6tnl.parent_ifindex = ifindex_parent;
lnk_ip6tnl.tclass = 20;
lnk_ip6tnl.encap_limit = 6;
@ -1421,8 +1421,8 @@ test_software_detect(gconstpointer user_data)
lnk_ip6tnl.proto = IPPROTO_IPV6;
break;
case 1:
lnk_ip6tnl.local = *nmtst_inet6_from_string("fd01::17");
lnk_ip6tnl.remote = *nmtst_inet6_from_string("fd01::18");
lnk_ip6tnl.local = nmtst_inet6_from_string("fd01::17");
lnk_ip6tnl.remote = nmtst_inet6_from_string("fd01::18");
lnk_ip6tnl.parent_ifindex = ifindex_parent;
lnk_ip6tnl.tclass = 0;
lnk_ip6tnl.encap_limit = 0;
@ -1452,8 +1452,8 @@ test_software_detect(gconstpointer user_data)
gracefully_skip = nmp_utils_modprobe(NULL, TRUE, "ip6_gre", NULL) != 0;
}
lnk_ip6tnl.local = *nmtst_inet6_from_string("fd01::42");
lnk_ip6tnl.remote = *nmtst_inet6_from_string("fd01::aaaa");
lnk_ip6tnl.local = nmtst_inet6_from_string("fd01::42");
lnk_ip6tnl.remote = nmtst_inet6_from_string("fd01::aaaa");
lnk_ip6tnl.parent_ifindex = ifindex_parent;
lnk_ip6tnl.tclass = 21;
lnk_ip6tnl.flow_label = 1338;
@ -1479,8 +1479,8 @@ test_software_detect(gconstpointer user_data)
gracefully_skip = nmp_utils_modprobe(NULL, TRUE, "ip6_gre", NULL) != 0;
}
lnk_ip6tnl.local = *nmtst_inet6_from_string("fe80::abcd");
lnk_ip6tnl.remote = *nmtst_inet6_from_string("fc01::bbbb");
lnk_ip6tnl.local = nmtst_inet6_from_string("fe80::abcd");
lnk_ip6tnl.remote = nmtst_inet6_from_string("fc01::bbbb");
lnk_ip6tnl.parent_ifindex = ifindex_parent;
lnk_ip6tnl.ttl = 10;
lnk_ip6tnl.tclass = 22;
@ -1608,8 +1608,8 @@ test_software_detect(gconstpointer user_data)
case 1:
lnk_vxlan.parent_ifindex = nm_platform_link_get_ifindex(NM_PLATFORM_GET, PARENT_NAME);
lnk_vxlan.id = 11214423;
lnk_vxlan.local6 = *nmtst_inet6_from_string("1:2:3:4:334:23::23");
lnk_vxlan.group6 = *nmtst_inet6_from_string("ff0e::115");
lnk_vxlan.local6 = nmtst_inet6_from_string("1:2:3:4:334:23::23");
lnk_vxlan.group6 = nmtst_inet6_from_string("ff0e::115");
lnk_vxlan.ttl = 32;
lnk_vxlan.dst_port = 57412;
lnk_vxlan.src_port_min = 1000;

View file

@ -746,7 +746,7 @@ test_ip6_route_get(void)
nmtstp_wait_for_signal(NM_PLATFORM_GET, 10);
if (nmtstp_ip6_route_get(NM_PLATFORM_GET,
ifindex,
nmtst_inet6_from_string("fd01:abcd::"),
nmtst_inet6_from_string_p("fd01:abcd::"),
64,
NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6,
NULL,
@ -754,7 +754,7 @@ test_ip6_route_get(void)
break;
});
a = nmtst_inet6_from_string("fd01:abcd::42");
a = nmtst_inet6_from_string_p("fd01:abcd::42");
result = nm_platform_ip_route_get(NM_PLATFORM_GET,
AF_INET6,
a,
@ -796,7 +796,7 @@ test_ip6_route_options(gconstpointer test_data)
rts_add[rts_n++] = ((NMPlatformIP6Route){
.ifindex = IFINDEX,
.rt_source = NM_IP_CONFIG_SOURCE_USER,
.network = *nmtst_inet6_from_string("2001:db8:a:b:0:0:0:0"),
.network = nmtst_inet6_from_string("2001:db8:a:b:0:0:0:0"),
.plen = 64,
.gateway = in6addr_any,
.metric = 1024,
@ -811,7 +811,7 @@ test_ip6_route_options(gconstpointer test_data)
case 2:
addr[addr_n++] = ((NMPlatformIP6Address){
.ifindex = IFINDEX,
.address = *nmtst_inet6_from_string("2000::2"),
.address = nmtst_inet6_from_string("2000::2"),
.plen = 128,
.peer_address = in6addr_any,
.lifetime = NM_PLATFORM_LIFETIME_PERMANENT,
@ -821,17 +821,17 @@ test_ip6_route_options(gconstpointer test_data)
rts_add[rts_n++] = ((NMPlatformIP6Route){
.ifindex = IFINDEX,
.rt_source = NM_IP_CONFIG_SOURCE_USER,
.network = *nmtst_inet6_from_string("1010::1"),
.network = nmtst_inet6_from_string("1010::1"),
.plen = 128,
.gateway = in6addr_any,
.metric = 256,
.pref_src = *nmtst_inet6_from_string("2000::2"),
.pref_src = nmtst_inet6_from_string("2000::2"),
});
break;
case 3:
addr[addr_n++] = ((NMPlatformIP6Address){
.ifindex = IFINDEX,
.address = *nmtst_inet6_from_string("2001:db8:8086::5"),
.address = nmtst_inet6_from_string("2001:db8:8086::5"),
.plen = 128,
.peer_address = in6addr_any,
.lifetime = NM_PLATFORM_LIFETIME_PERMANENT,
@ -841,7 +841,7 @@ test_ip6_route_options(gconstpointer test_data)
rts_add[rts_n++] = ((NMPlatformIP6Route){
.ifindex = IFINDEX,
.rt_source = nmp_utils_ip_config_source_round_trip_rtprot(NM_IP_CONFIG_SOURCE_USER),
.network = *nmtst_inet6_from_string("2001:db8:8086::"),
.network = nmtst_inet6_from_string("2001:db8:8086::"),
.plen = 110,
.metric = 10021,
.mss = 0,
@ -849,9 +849,9 @@ test_ip6_route_options(gconstpointer test_data)
rts_add[rts_n++] = ((NMPlatformIP6Route){
.ifindex = IFINDEX,
.rt_source = nmp_utils_ip_config_source_round_trip_rtprot(NM_IP_CONFIG_SOURCE_USER),
.network = *nmtst_inet6_from_string("2001:db8:abad:c0de::"),
.network = nmtst_inet6_from_string("2001:db8:abad:c0de::"),
.plen = 64,
.gateway = *nmtst_inet6_from_string("2001:db8:8086::1"),
.gateway = nmtst_inet6_from_string("2001:db8:8086::1"),
.metric = 21,
.mss = 0,
});
@ -1330,7 +1330,7 @@ _rule_create_random(NMPlatform *platform)
p_addr->addr4 =
nmtst_inet4_from_string(nm_sprintf_buf(saddr, "192.192.5.%u", (~p) % 256u));
else
p_addr->addr6 = *nmtst_inet6_from_string(
p_addr->addr6 = nmtst_inet6_from_string(
nm_sprintf_buf(saddr, "1:2:3:4::f:%02x", (~p) % 256u));
} else if ((p % 3u) == 1)
nmtst_rand_buf(NULL, p_addr, addr_size);

View file

@ -152,8 +152,8 @@ test_logging_error(void)
static void
_test_same_prefix(const char *a1, const char *a2, guint8 plen)
{
struct in6_addr a = *nmtst_inet6_from_string(a1);
struct in6_addr b = *nmtst_inet6_from_string(a2);
struct in6_addr a = nmtst_inet6_from_string(a1);
struct in6_addr b = nmtst_inet6_from_string(a2);
g_assert(nm_ip6_addr_same_prefix(&a, &b, plen));
}

View file

@ -418,7 +418,7 @@ test_l3cfg(gconstpointer test_data)
nm_l3_config_data_add_address_6(
l3cd,
NM_PLATFORM_IP6_ADDRESS_INIT(.address = *nmtst_inet6_from_string("1:2:3:4::45"),
NM_PLATFORM_IP6_ADDRESS_INIT(.address = nmtst_inet6_from_string("1:2:3:4::45"),
.plen = 64, ));
if (nmtst_get_rand_one_case_in(2))
@ -985,7 +985,7 @@ test_l3_ipv6ll(gconstpointer test_data)
nmtstp_ip6_address_add(tdata->f->platform,
-1,
tdata->f->ifindex1,
*nmtst_inet6_from_string(_LLADDR_TEST1),
nmtst_inet6_from_string(_LLADDR_TEST1),
64,
in6addr_any,
NM_PLATFORM_LIFETIME_PERMANENT,

View file

@ -10430,7 +10430,7 @@ static void
test_nm_ip_addr_zero(void)
{
in_addr_t a4 = nmtst_inet4_from_string("0.0.0.0");
struct in6_addr a6 = *nmtst_inet6_from_string("::");
struct in6_addr a6 = nmtst_inet6_from_string("::");
char buf[NM_INET_ADDRSTRLEN];
NMIPAddr a = NM_IP_ADDR_INIT;

View file

@ -131,6 +131,9 @@ NM_AUTO_DEFINE_FCN_VOID0(void *, _nm_auto_unref_gtypeclass, g_type_class_unref);
NM_AUTO_DEFINE_FCN0(GByteArray *, _nm_auto_unref_bytearray, g_byte_array_unref);
#define nm_auto_unref_bytearray nm_auto(_nm_auto_unref_bytearray)
NM_AUTO_DEFINE_FCN0(GDateTime *, _nm_auto_unref_gdatetime, g_date_time_unref);
#define nm_auto_unref_gdatetime nm_auto(_nm_auto_unref_gdatetime)
static inline void
_nm_auto_free_gstring(GString **str)
{

View file

@ -1589,7 +1589,7 @@ nmtst_inet4_from_string(const char *str)
}
static inline const struct in6_addr *
nmtst_inet6_from_string(const char *str)
nmtst_inet6_from_string_p(const char *str)
{
static _nm_thread_local struct in6_addr addr;
int success;
@ -1604,6 +1604,22 @@ nmtst_inet6_from_string(const char *str)
return &addr;
}
static inline struct in6_addr
nmtst_inet6_from_string(const char *str)
{
struct in6_addr addr;
int success;
if (!str)
addr = in6addr_any;
else {
success = inet_pton(AF_INET6, str, &addr);
g_assert(success == 1);
}
return addr;
}
static inline gconstpointer
nmtst_inet_from_string(int addr_family, const char *str)
{
@ -1614,7 +1630,7 @@ nmtst_inet_from_string(int addr_family, const char *str)
return &a;
}
if (addr_family == AF_INET6)
return nmtst_inet6_from_string(str);
return nmtst_inet6_from_string_p(str);
g_assert_not_reached();
return NULL;
@ -1673,7 +1689,7 @@ _nmtst_assert_ip6_address(const char *file,
if (!addr)
addr = &any;
if (memcmp(nmtst_inet6_from_string(str_expected), addr, sizeof(*addr)) != 0) {
if (memcmp(nmtst_inet6_from_string_p(str_expected), addr, sizeof(*addr)) != 0) {
char buf[100];
g_error("%s:%d: Unexpected IPv6 address: expected %s, got %s",