mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-01 01:20:12 +01:00
platform/tests: merge branch 'th/platform-1'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1440
This commit is contained in:
commit
06bf0707ee
12 changed files with 256 additions and 80 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue