blob: 535eee07de80c8d036a92fde89a846b76d1d18a5 [file] [log] [blame]
/*
* Copyright (c) 2023 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/net/net_if.h>
#include <zephyr/net/dummy.h>
#include <zephyr/net/conn_mgr_connectivity.h>
#include "test_conn_impl.h"
#include "test_ifaces.h"
/* Create test ifaces */
/* Generic iface initializer, shared by all three ifaces */
static void test_iface_init(struct net_if *iface)
{
/* Fake link layer address is needed to silence assertions inside the net core */
static uint8_t fake_lladdr[] = { 0x01 };
net_if_set_link_addr(iface, fake_lladdr, sizeof(fake_lladdr), NET_LINK_DUMMY);
/* Do not automatically start the iface */
net_if_flag_set(iface, NET_IF_NO_AUTO_START);
}
static struct dummy_api test_iface_api = {
.iface_api.init = test_iface_init,
};
/* Create three ifaces, a1, a2, b such that:
* iface a1 and a2 share L2 connectivity implementation a
* iface b uses connectivity implementation b
*/
NET_DEVICE_INIT(test_iface_a1,
"test_iface_a1",
NULL,
NULL,
NULL,
NULL,
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT,
&test_iface_api,
DUMMY_L2,
NET_L2_GET_CTX_TYPE(DUMMY_L2),
127);
NET_DEVICE_INIT(test_iface_a2,
"test_iface_a2",
NULL,
NULL,
NULL,
NULL,
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT,
&test_iface_api,
DUMMY_L2,
NET_L2_GET_CTX_TYPE(DUMMY_L2),
127);
NET_DEVICE_INIT(test_iface_b,
"test_iface_b",
NULL,
NULL,
NULL,
NULL,
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT,
&test_iface_api,
DUMMY_L2,
NET_L2_GET_CTX_TYPE(DUMMY_L2),
127);
/* Create an ifaces with NULL implementation, NULL init, and no connectivity at all */
NET_DEVICE_INIT(test_iface_null,
"test_iface_null",
NULL,
NULL,
NULL,
NULL,
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT,
&test_iface_api,
DUMMY_L2,
NET_L2_GET_CTX_TYPE(DUMMY_L2),
127);
NET_DEVICE_INIT(test_iface_ni,
"test_iface_ni",
NULL,
NULL,
NULL,
NULL,
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT,
&test_iface_api,
DUMMY_L2,
NET_L2_GET_CTX_TYPE(DUMMY_L2),
127);
NET_DEVICE_INIT(test_iface_none,
"test_iface_none",
NULL,
NULL,
NULL,
NULL,
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT,
&test_iface_api,
DUMMY_L2,
NET_L2_GET_CTX_TYPE(DUMMY_L2),
127);
/* Bind L2 connectivity implementations to ifaces */
CONN_MGR_BIND_CONN(test_iface_a1, TEST_L2_CONN_IMPL_A);
CONN_MGR_BIND_CONN(test_iface_a2, TEST_L2_CONN_IMPL_A);
CONN_MGR_BIND_CONN(test_iface_b, TEST_L2_CONN_IMPL_B);
/* Bind edge-case L2 connectivity implementations to ifaces */
CONN_MGR_BIND_CONN(test_iface_null, TEST_L2_CONN_IMPL_N);
CONN_MGR_BIND_CONN(test_iface_ni, TEST_L2_CONN_IMPL_NI);
/* Public accessors for static iface structs */
struct net_if *ifa1 = NET_IF_GET(test_iface_a1, 0);
struct net_if *ifa2 = NET_IF_GET(test_iface_a2, 0);
struct net_if *ifb = NET_IF_GET(test_iface_b, 0);
struct net_if *ifni = NET_IF_GET(test_iface_ni, 0);
struct net_if *ifnull = NET_IF_GET(test_iface_null, 0);
struct net_if *ifnone = NET_IF_GET(test_iface_none, 0);