|
Packit Service |
87a54e |
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
Packit |
5756e2 |
/*
|
|
Packit |
5756e2 |
* Copyright (C) 2015 Red Hat, Inc.
|
|
Packit |
5756e2 |
*/
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
#include "nm-default.h"
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
#include "test-common.h"
|
|
Packit |
5756e2 |
|
|
Packit Service |
a1bd4f |
#define IP4_ADDRESS "192.0.2.1"
|
|
Packit Service |
a1bd4f |
#define IP4_ADDRESS_PEER "192.0.2.2"
|
|
Packit |
5756e2 |
#define IP4_ADDRESS_PEER2 "192.0.3.1"
|
|
Packit Service |
a1bd4f |
#define IP4_PLEN 24
|
|
Packit Service |
a1bd4f |
#define IP6_ADDRESS "2001:db8:a:b:1:2:3:4"
|
|
Packit Service |
a1bd4f |
#define IP6_PLEN 64
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
#define DEVICE_IFINDEX NMTSTP_ENV1_IFINDEX
|
|
Packit |
5756e2 |
#define EX NMTSTP_ENV1_EX
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
/*****************************************************************************/
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
static void
|
|
Packit Service |
a1bd4f |
ip4_address_callback(NMPlatform * platform,
|
|
Packit Service |
a1bd4f |
NMPObjectType obj_type,
|
|
Packit Service |
a1bd4f |
int ifindex,
|
|
Packit Service |
a1bd4f |
NMPlatformIP4Address * received,
|
|
Packit Service |
a1bd4f |
NMPlatformSignalChangeType change_type,
|
|
Packit Service |
a1bd4f |
SignalData * data)
|
|
Packit |
5756e2 |
{
|
|
Packit Service |
a1bd4f |
g_assert(received);
|
|
Packit Service |
a1bd4f |
g_assert_cmpint(received->ifindex, ==, ifindex);
|
|
Packit Service |
a1bd4f |
g_assert(data && data->name);
|
|
Packit Service |
a1bd4f |
g_assert_cmpstr(data->name, ==, NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED);
|
|
Packit |
5756e2 |
|
|
Packit Service |
a1bd4f |
if (data->ifindex && data->ifindex != received->ifindex)
|
|
Packit Service |
a1bd4f |
return;
|
|
Packit Service |
a1bd4f |
if (data->change_type != change_type)
|
|
Packit Service |
a1bd4f |
return;
|
|
Packit |
5756e2 |
|
|
Packit Service |
a1bd4f |
if (data->loop)
|
|
Packit Service |
a1bd4f |
g_main_loop_quit(data->loop);
|
|
Packit |
5756e2 |
|
|
Packit Service |
a1bd4f |
data->received_count++;
|
|
Packit Service |
a1bd4f |
_LOGD("Received signal '%s' %dth time.", data->name, data->received_count);
|
|
Packit |
5756e2 |
}
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
static void
|
|
Packit Service |
a1bd4f |
ip6_address_callback(NMPlatform * platform,
|
|
Packit Service |
a1bd4f |
NMPObjectType obj_type,
|
|
Packit Service |
a1bd4f |
int ifindex,
|
|
Packit Service |
a1bd4f |
NMPlatformIP6Address * received,
|
|
Packit Service |
a1bd4f |
NMPlatformSignalChangeType change_type,
|
|
Packit Service |
a1bd4f |
SignalData * data)
|
|
Packit |
5756e2 |
{
|
|
Packit Service |
a1bd4f |
g_assert(received);
|
|
Packit Service |
a1bd4f |
g_assert_cmpint(received->ifindex, ==, ifindex);
|
|
Packit Service |
a1bd4f |
g_assert(data && data->name);
|
|
Packit Service |
a1bd4f |
g_assert_cmpstr(data->name, ==, NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED);
|
|
Packit |
5756e2 |
|
|
Packit Service |
a1bd4f |
if (data->ifindex && data->ifindex != received->ifindex)
|
|
Packit Service |
a1bd4f |
return;
|
|
Packit Service |
a1bd4f |
if (data->change_type != change_type)
|
|
Packit Service |
a1bd4f |
return;
|
|
Packit |
5756e2 |
|
|
Packit Service |
a1bd4f |
if (data->loop)
|
|
Packit Service |
a1bd4f |
g_main_loop_quit(data->loop);
|
|
Packit |
5756e2 |
|
|
Packit Service |
a1bd4f |
data->received_count++;
|
|
Packit Service |
a1bd4f |
_LOGD("Received signal '%s' %dth time.", data->name, data->received_count);
|
|
Packit |
5756e2 |
}
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
/*****************************************************************************/
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
static void
|
|
Packit Service |
a1bd4f |
test_ip4_address_general(void)
|
|
Packit |
5756e2 |
{
|
|
Packit Service |
a1bd4f |
const int ifindex = DEVICE_IFINDEX;
|
|
Packit Service |
a1bd4f |
SignalData *address_added = add_signal_ifindex(NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_ADDED,
|
|
Packit Service |
a1bd4f |
ip4_address_callback,
|
|
Packit Service |
a1bd4f |
ifindex);
|
|
Packit Service |
a1bd4f |
SignalData *address_changed = add_signal_ifindex(NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_CHANGED,
|
|
Packit Service |
a1bd4f |
ip4_address_callback,
|
|
Packit Service |
a1bd4f |
ifindex);
|
|
Packit Service |
a1bd4f |
SignalData *address_removed = add_signal_ifindex(NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_REMOVED,
|
|
Packit Service |
a1bd4f |
ip4_address_callback,
|
|
Packit Service |
a1bd4f |
ifindex);
|
|
Packit Service |
a1bd4f |
GArray * addresses;
|
|
Packit Service |
a1bd4f |
NMPlatformIP4Address *address;
|
|
Packit Service |
a1bd4f |
in_addr_t addr;
|
|
Packit Service |
a1bd4f |
guint32 lifetime = 2000;
|
|
Packit Service |
a1bd4f |
guint32 preferred = 1000;
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
inet_pton(AF_INET, IP4_ADDRESS, &addr);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Add address */
|
|
Packit Service |
a1bd4f |
g_assert(!nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr));
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_add(NULL, EX, ifindex, addr, IP4_PLEN, addr, lifetime, preferred, 0, NULL);
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr));
|
|
Packit Service |
a1bd4f |
accept_signal(address_added);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Add address again (aka update) */
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_add(NULL,
|
|
Packit Service |
a1bd4f |
EX,
|
|
Packit Service |
a1bd4f |
ifindex,
|
|
Packit Service |
a1bd4f |
addr,
|
|
Packit Service |
a1bd4f |
IP4_PLEN,
|
|
Packit Service |
a1bd4f |
addr,
|
|
Packit Service |
a1bd4f |
lifetime + 100,
|
|
Packit Service |
a1bd4f |
preferred + 50,
|
|
Packit Service |
a1bd4f |
0,
|
|
Packit Service |
a1bd4f |
NULL);
|
|
Packit Service |
a1bd4f |
accept_signals(address_changed, 0, 1);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Test address listing */
|
|
Packit Service |
a1bd4f |
addresses = nmtstp_platform_ip4_address_get_all(NM_PLATFORM_GET, ifindex);
|
|
Packit Service |
a1bd4f |
g_assert(addresses);
|
|
Packit Service |
a1bd4f |
g_assert_cmpint(addresses->len, ==, 1);
|
|
Packit Service |
a1bd4f |
address = &g_array_index(addresses, NMPlatformIP4Address, 0);
|
|
Packit Service |
a1bd4f |
g_assert_cmpint(address->ifindex, ==, ifindex);
|
|
Packit Service |
a1bd4f |
g_assert_cmphex(address->address, ==, addr);
|
|
Packit Service |
a1bd4f |
g_assert_cmphex(address->peer_address, ==, addr);
|
|
Packit Service |
a1bd4f |
g_assert_cmpint(address->plen, ==, IP4_PLEN);
|
|
Packit Service |
a1bd4f |
g_array_unref(addresses);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Remove address */
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_del(NULL, EX, ifindex, addr, IP4_PLEN, addr);
|
|
Packit Service |
a1bd4f |
g_assert(!nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr));
|
|
Packit Service |
a1bd4f |
accept_signal(address_removed);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Remove address again */
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_del(NULL, EX, ifindex, addr, IP4_PLEN, addr);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
free_signal(address_added);
|
|
Packit Service |
a1bd4f |
free_signal(address_changed);
|
|
Packit Service |
a1bd4f |
free_signal(address_removed);
|
|
Packit |
5756e2 |
}
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
static void
|
|
Packit Service |
a1bd4f |
test_ip6_address_general(void)
|
|
Packit |
5756e2 |
{
|
|
Packit Service |
a1bd4f |
const int ifindex = DEVICE_IFINDEX;
|
|
Packit Service |
a1bd4f |
SignalData *address_added = add_signal_ifindex(NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_ADDED,
|
|
Packit Service |
a1bd4f |
ip6_address_callback,
|
|
Packit Service |
a1bd4f |
ifindex);
|
|
Packit Service |
a1bd4f |
SignalData *address_changed = add_signal_ifindex(NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_CHANGED,
|
|
Packit Service |
a1bd4f |
ip6_address_callback,
|
|
Packit Service |
a1bd4f |
ifindex);
|
|
Packit Service |
a1bd4f |
SignalData *address_removed = add_signal_ifindex(NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_REMOVED,
|
|
Packit Service |
a1bd4f |
ip6_address_callback,
|
|
Packit Service |
a1bd4f |
ifindex);
|
|
Packit Service |
a1bd4f |
GArray * addresses;
|
|
Packit Service |
a1bd4f |
NMPlatformIP6Address *address;
|
|
Packit Service |
a1bd4f |
struct in6_addr addr;
|
|
Packit Service |
a1bd4f |
guint32 lifetime = 2000;
|
|
Packit Service |
a1bd4f |
guint32 preferred = 1000;
|
|
Packit Service |
a1bd4f |
guint flags = 0;
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
inet_pton(AF_INET6, IP6_ADDRESS, &addr);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Add address */
|
|
Packit Service |
a1bd4f |
g_assert(!nm_platform_ip6_address_get(NM_PLATFORM_GET, ifindex, &addr));
|
|
Packit Service |
a1bd4f |
nmtstp_ip6_address_add(NULL,
|
|
Packit Service |
a1bd4f |
EX,
|
|
Packit Service |
a1bd4f |
ifindex,
|
|
Packit Service |
a1bd4f |
addr,
|
|
Packit Service |
a1bd4f |
IP6_PLEN,
|
|
Packit Service |
a1bd4f |
in6addr_any,
|
|
Packit Service |
a1bd4f |
lifetime,
|
|
Packit Service |
a1bd4f |
preferred,
|
|
Packit Service |
a1bd4f |
flags);
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_ip6_address_get(NM_PLATFORM_GET, ifindex, &addr));
|
|
Packit Service |
a1bd4f |
accept_signal(address_added);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Add address again (aka update) */
|
|
Packit Service |
a1bd4f |
nmtstp_ip6_address_add(NULL,
|
|
Packit Service |
a1bd4f |
EX,
|
|
Packit Service |
a1bd4f |
ifindex,
|
|
Packit Service |
a1bd4f |
addr,
|
|
Packit Service |
a1bd4f |
IP6_PLEN,
|
|
Packit Service |
a1bd4f |
in6addr_any,
|
|
Packit Service |
a1bd4f |
lifetime,
|
|
Packit Service |
a1bd4f |
preferred,
|
|
Packit Service |
a1bd4f |
flags);
|
|
Packit Service |
a1bd4f |
accept_signals(address_changed, 0, 2);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Test address listing */
|
|
Packit Service |
a1bd4f |
addresses = nmtstp_platform_ip6_address_get_all(NM_PLATFORM_GET, ifindex);
|
|
Packit Service |
a1bd4f |
g_assert(addresses);
|
|
Packit Service |
a1bd4f |
g_assert_cmpint(addresses->len, ==, 1);
|
|
Packit Service |
a1bd4f |
address = &g_array_index(addresses, NMPlatformIP6Address, 0);
|
|
Packit Service |
a1bd4f |
g_assert_cmpint(address->ifindex, ==, ifindex);
|
|
Packit Service |
a1bd4f |
g_assert(!memcmp(&address->address, &addr, sizeof(addr)));
|
|
Packit Service |
a1bd4f |
g_assert_cmpint(address->plen, ==, IP6_PLEN);
|
|
Packit Service |
a1bd4f |
g_array_unref(addresses);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Remove address */
|
|
Packit Service |
a1bd4f |
nmtstp_ip6_address_del(NULL, EX, ifindex, addr, IP6_PLEN);
|
|
Packit Service |
a1bd4f |
g_assert(!nm_platform_ip6_address_get(NM_PLATFORM_GET, ifindex, &addr));
|
|
Packit Service |
a1bd4f |
accept_signal(address_removed);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Remove address again */
|
|
Packit Service |
a1bd4f |
nmtstp_ip6_address_del(NULL, EX, ifindex, addr, IP6_PLEN);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* ensure not pending signal. */
|
|
Packit Service |
a1bd4f |
accept_signals(address_changed, 0, 1);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
free_signal(address_added);
|
|
Packit Service |
a1bd4f |
free_signal(address_changed);
|
|
Packit Service |
a1bd4f |
free_signal(address_removed);
|
|
Packit |
5756e2 |
}
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
static void
|
|
Packit Service |
a1bd4f |
test_ip4_address_general_2(void)
|
|
Packit |
5756e2 |
{
|
|
Packit Service |
a1bd4f |
const int ifindex = DEVICE_IFINDEX;
|
|
Packit Service |
a1bd4f |
SignalData *address_added = add_signal(NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_ADDED,
|
|
Packit Service |
a1bd4f |
ip4_address_callback);
|
|
Packit Service |
a1bd4f |
SignalData *address_removed = add_signal(NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_REMOVED,
|
|
Packit Service |
a1bd4f |
ip4_address_callback);
|
|
Packit Service |
a1bd4f |
in_addr_t addr;
|
|
Packit Service |
a1bd4f |
guint32 lifetime = 2000;
|
|
Packit Service |
a1bd4f |
guint32 preferred = 1000;
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
inet_pton(AF_INET, IP4_ADDRESS, &addr);
|
|
Packit Service |
a1bd4f |
g_assert(ifindex > 0);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Looks like addresses are not announced by kernel when the interface
|
|
Packit Service |
a1bd4f |
* is down. Link-local IPv6 address is automatically added.
|
|
Packit Service |
a1bd4f |
*/
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_link_set_up(NM_PLATFORM_GET, DEVICE_IFINDEX, NULL));
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Add/delete notification */
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_add(NULL, EX, ifindex, addr, IP4_PLEN, addr, lifetime, preferred, 0, NULL);
|
|
Packit Service |
a1bd4f |
accept_signal(address_added);
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr));
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_del(NULL, EX, ifindex, addr, IP4_PLEN, addr);
|
|
Packit Service |
a1bd4f |
accept_signal(address_removed);
|
|
Packit Service |
a1bd4f |
g_assert(!nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr));
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Add/delete conflict */
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_add(NULL, EX, ifindex, addr, IP4_PLEN, addr, lifetime, preferred, 0, NULL);
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr));
|
|
Packit Service |
a1bd4f |
accept_signal(address_added);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
free_signal(address_added);
|
|
Packit Service |
a1bd4f |
free_signal(address_removed);
|
|
Packit |
5756e2 |
}
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
static void
|
|
Packit Service |
a1bd4f |
test_ip6_address_general_2(void)
|
|
Packit |
5756e2 |
{
|
|
Packit Service |
a1bd4f |
const int ifindex = DEVICE_IFINDEX;
|
|
Packit Service |
a1bd4f |
SignalData * address_added = add_signal(NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_ADDED,
|
|
Packit Service |
a1bd4f |
ip6_address_callback);
|
|
Packit Service |
a1bd4f |
SignalData * address_removed = add_signal(NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_REMOVED,
|
|
Packit Service |
a1bd4f |
ip6_address_callback);
|
|
Packit Service |
a1bd4f |
struct in6_addr addr;
|
|
Packit Service |
a1bd4f |
guint32 lifetime = 2000;
|
|
Packit Service |
a1bd4f |
guint32 preferred = 1000;
|
|
Packit Service |
a1bd4f |
guint flags = 0;
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
inet_pton(AF_INET6, IP6_ADDRESS, &addr);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Add/delete notification */
|
|
Packit Service |
a1bd4f |
nmtstp_ip6_address_add(NULL, EX, ifindex, addr, IP6_PLEN, in6addr_any, lifetime, preferred, 0);
|
|
Packit Service |
a1bd4f |
accept_signal(address_added);
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_ip6_address_get(NM_PLATFORM_GET, ifindex, &addr));
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
nmtstp_ip6_address_del(NULL, EX, ifindex, addr, IP6_PLEN);
|
|
Packit Service |
a1bd4f |
accept_signal(address_removed);
|
|
Packit Service |
a1bd4f |
g_assert(!nm_platform_ip6_address_get(NM_PLATFORM_GET, ifindex, &addr));
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Add/delete conflict */
|
|
Packit Service |
a1bd4f |
nmtstp_ip6_address_add(NULL, EX, ifindex, addr, IP6_PLEN, in6addr_any, lifetime, preferred, 0);
|
|
Packit Service |
a1bd4f |
accept_signal(address_added);
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_ip6_address_get(NM_PLATFORM_GET, ifindex, &addr));
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
nmtstp_ip6_address_add(NULL,
|
|
Packit Service |
a1bd4f |
EX,
|
|
Packit Service |
a1bd4f |
ifindex,
|
|
Packit Service |
a1bd4f |
addr,
|
|
Packit Service |
a1bd4f |
IP6_PLEN,
|
|
Packit Service |
a1bd4f |
in6addr_any,
|
|
Packit Service |
a1bd4f |
lifetime,
|
|
Packit Service |
a1bd4f |
preferred,
|
|
Packit Service |
a1bd4f |
flags);
|
|
Packit Service |
a1bd4f |
ensure_no_signal(address_added);
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_ip6_address_get(NM_PLATFORM_GET, ifindex, &addr));
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
free_signal(address_added);
|
|
Packit Service |
a1bd4f |
free_signal(address_removed);
|
|
Packit |
5756e2 |
}
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
/*****************************************************************************/
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
static void
|
|
Packit Service |
a1bd4f |
test_ip4_address_peer(void)
|
|
Packit |
5756e2 |
{
|
|
Packit Service |
a1bd4f |
const int ifindex = DEVICE_IFINDEX;
|
|
Packit Service |
a1bd4f |
SignalData * address_added = add_signal(NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_ADDED,
|
|
Packit Service |
a1bd4f |
ip4_address_callback);
|
|
Packit Service |
a1bd4f |
SignalData * address_removed = add_signal(NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED,
|
|
Packit Service |
a1bd4f |
NM_PLATFORM_SIGNAL_REMOVED,
|
|
Packit Service |
a1bd4f |
ip4_address_callback);
|
|
Packit Service |
a1bd4f |
in_addr_t addr, addr_peer, addr_peer2;
|
|
Packit Service |
a1bd4f |
guint32 lifetime = 2000;
|
|
Packit Service |
a1bd4f |
guint32 preferred = 1000;
|
|
Packit Service |
a1bd4f |
const NMPlatformIP4Address *a;
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
inet_pton(AF_INET, IP4_ADDRESS, &addr);
|
|
Packit Service |
a1bd4f |
inet_pton(AF_INET, IP4_ADDRESS_PEER, &addr_peer);
|
|
Packit Service |
a1bd4f |
inet_pton(AF_INET, IP4_ADDRESS_PEER2, &addr_peer2);
|
|
Packit Service |
a1bd4f |
g_assert(ifindex > 0);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
g_assert(addr != addr_peer);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_link_set_up(NM_PLATFORM_GET, ifindex, NULL));
|
|
Packit Service |
a1bd4f |
accept_signals(address_removed, 0, G_MAXINT);
|
|
Packit Service |
a1bd4f |
accept_signals(address_added, 0, G_MAXINT);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
/* Add/delete notification */
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_add(NULL,
|
|
Packit Service |
a1bd4f |
EX,
|
|
Packit Service |
a1bd4f |
ifindex,
|
|
Packit Service |
a1bd4f |
addr,
|
|
Packit Service |
a1bd4f |
IP4_PLEN,
|
|
Packit Service |
a1bd4f |
addr_peer,
|
|
Packit Service |
a1bd4f |
lifetime,
|
|
Packit Service |
a1bd4f |
preferred,
|
|
Packit Service |
a1bd4f |
0,
|
|
Packit Service |
a1bd4f |
NULL);
|
|
Packit Service |
a1bd4f |
accept_signal(address_added);
|
|
Packit Service |
a1bd4f |
a = nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr_peer);
|
|
Packit Service |
a1bd4f |
g_assert(a);
|
|
Packit Service |
a1bd4f |
g_assert(!nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr_peer2));
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
nmtstp_ip_address_assert_lifetime((NMPlatformIPAddress *) a, -1, lifetime, preferred);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_add(NULL,
|
|
Packit Service |
a1bd4f |
EX,
|
|
Packit Service |
a1bd4f |
ifindex,
|
|
Packit Service |
a1bd4f |
addr,
|
|
Packit Service |
a1bd4f |
IP4_PLEN,
|
|
Packit Service |
a1bd4f |
addr_peer2,
|
|
Packit Service |
a1bd4f |
lifetime,
|
|
Packit Service |
a1bd4f |
preferred,
|
|
Packit Service |
a1bd4f |
0,
|
|
Packit Service |
a1bd4f |
NULL);
|
|
Packit Service |
a1bd4f |
accept_signal(address_added);
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr_peer));
|
|
Packit Service |
a1bd4f |
a = nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr_peer2);
|
|
Packit Service |
a1bd4f |
g_assert(a);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
nmtstp_ip_address_assert_lifetime((NMPlatformIPAddress *) a, -1, lifetime, preferred);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
g_assert(addr != addr_peer);
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_del(NULL, EX, ifindex, addr, IP4_PLEN, addr_peer);
|
|
Packit Service |
a1bd4f |
accept_signal(address_removed);
|
|
Packit Service |
a1bd4f |
g_assert(!nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr_peer));
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, IP4_PLEN, addr_peer2));
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
free_signal(address_added);
|
|
Packit Service |
a1bd4f |
free_signal(address_removed);
|
|
Packit |
5756e2 |
}
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
/*****************************************************************************/
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
static void
|
|
Packit Service |
a1bd4f |
test_ip4_address_peer_zero(void)
|
|
Packit |
5756e2 |
{
|
|
Packit Service |
a1bd4f |
const int ifindex = DEVICE_IFINDEX;
|
|
Packit Service |
a1bd4f |
in_addr_t addr, addr_peer;
|
|
Packit Service |
a1bd4f |
guint32 lifetime = 2000;
|
|
Packit Service |
a1bd4f |
guint32 preferred = 1000;
|
|
Packit Service |
a1bd4f |
const gint8 plen = 24;
|
|
Packit Service |
a1bd4f |
const char *label = NULL;
|
|
Packit Service |
a1bd4f |
in_addr_t peers[3], r_peers[3];
|
|
Packit Service |
a1bd4f |
int i;
|
|
Packit Service |
a1bd4f |
GArray * addrs;
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
g_assert(ifindex > 0);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
inet_pton(AF_INET, "192.168.5.2", &addr);
|
|
Packit Service |
a1bd4f |
inet_pton(AF_INET, "192.168.6.2", &addr_peer);
|
|
Packit Service |
a1bd4f |
peers[0] = addr;
|
|
Packit Service |
a1bd4f |
peers[1] = addr_peer;
|
|
Packit Service |
a1bd4f |
peers[2] = 0;
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_link_set_up(NM_PLATFORM_GET, ifindex, NULL));
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
nmtst_rand_perm(NULL, r_peers, peers, sizeof(peers[0]), G_N_ELEMENTS(peers));
|
|
Packit Service |
a1bd4f |
for (i = 0; i < G_N_ELEMENTS(peers); i++) {
|
|
Packit Service |
a1bd4f |
g_assert(!nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, plen, r_peers[i]));
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_add(NULL,
|
|
Packit Service |
a1bd4f |
EX,
|
|
Packit Service |
a1bd4f |
ifindex,
|
|
Packit Service |
a1bd4f |
addr,
|
|
Packit Service |
a1bd4f |
plen,
|
|
Packit Service |
a1bd4f |
r_peers[i],
|
|
Packit Service |
a1bd4f |
lifetime,
|
|
Packit Service |
a1bd4f |
preferred,
|
|
Packit Service |
a1bd4f |
0,
|
|
Packit Service |
a1bd4f |
label);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
addrs = nmtstp_platform_ip4_address_get_all(NM_PLATFORM_GET, ifindex);
|
|
Packit Service |
a1bd4f |
g_assert(addrs);
|
|
Packit Service |
a1bd4f |
g_assert_cmpint(addrs->len, ==, i + 1);
|
|
Packit Service |
a1bd4f |
g_array_unref(addrs);
|
|
Packit Service |
a1bd4f |
}
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
if (nmtst_is_debug() && nmtstp_is_root_test())
|
|
Packit Service |
a1bd4f |
nmtstp_run_command_check("ip address show dev %s", DEVICE_NAME);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
nmtst_rand_perm(NULL, r_peers, peers, sizeof(peers[0]), G_N_ELEMENTS(peers));
|
|
Packit Service |
a1bd4f |
for (i = 0; i < G_N_ELEMENTS(peers); i++) {
|
|
Packit Service |
a1bd4f |
g_assert(nm_platform_ip4_address_get(NM_PLATFORM_GET, ifindex, addr, plen, r_peers[i]));
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
nmtstp_ip4_address_del(NULL, EX, ifindex, addr, plen, r_peers[i]);
|
|
Packit Service |
a1bd4f |
|
|
Packit Service |
a1bd4f |
addrs = nmtstp_platform_ip4_address_get_all(NM_PLATFORM_GET, ifindex);
|
|
Packit Service |
a1bd4f |
g_assert(addrs);
|
|
Packit Service |
a1bd4f |
g_assert_cmpint(addrs->len, ==, G_N_ELEMENTS(peers) - i - 1);
|
|
Packit Service |
a1bd4f |
g_array_unref(addrs);
|
|
Packit Service |
a1bd4f |
}
|
|
Packit |
5756e2 |
}
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
/*****************************************************************************/
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
NMTstpSetupFunc const _nmtstp_setup_platform_func = SETUP;
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
void
|
|
Packit Service |
a1bd4f |
_nmtstp_init_tests(int *argc, char ***argv)
|
|
Packit |
5756e2 |
{
|
|
Packit Service |
a1bd4f |
nmtst_init_with_logging(argc, argv, NULL, "ALL");
|
|
Packit |
5756e2 |
}
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
/*****************************************************************************
|
|
Packit |
5756e2 |
* SETUP TESTS
|
|
Packit |
5756e2 |
*****************************************************************************/
|
|
Packit |
5756e2 |
|
|
Packit |
5756e2 |
void
|
|
Packit Service |
a1bd4f |
_nmtstp_setup_tests(void)
|
|
Packit |
5756e2 |
{
|
|
Packit |
5756e2 |
#define add_test_func(testpath, test_func) nmtstp_env1_add_test_func(testpath, test_func, FALSE)
|
|
Packit Service |
a1bd4f |
add_test_func("/address/ipv4/general", test_ip4_address_general);
|
|
Packit Service |
a1bd4f |
add_test_func("/address/ipv6/general", test_ip6_address_general);
|
|
Packit |
5756e2 |
|
|
Packit Service |
a1bd4f |
add_test_func("/address/ipv4/general-2", test_ip4_address_general_2);
|
|
Packit Service |
a1bd4f |
add_test_func("/address/ipv6/general-2", test_ip6_address_general_2);
|
|
Packit |
5756e2 |
|
|
Packit Service |
a1bd4f |
add_test_func("/address/ipv4/peer", test_ip4_address_peer);
|
|
Packit Service |
a1bd4f |
add_test_func("/address/ipv4/peer/zero", test_ip4_address_peer_zero);
|
|
Packit |
5756e2 |
}
|