tests: net: mcast_routing: add verification of multiple interfaces
This commit adds a test for veryfing new functionality of storing mutliple interfaces per single multicast routing entry. Signed-off-by: Konrad Derda <konrad.derda@nordicsemi.no>
This commit is contained in:
parent
61dca2b8bf
commit
b26b01bc38
2 changed files with 95 additions and 0 deletions
|
@ -23,3 +23,4 @@ CONFIG_NET_IPV6_MAX_NEIGHBORS=8
|
||||||
CONFIG_ZTEST=y
|
CONFIG_ZTEST=y
|
||||||
CONFIG_NET_MAX_MCAST_ROUTES=10
|
CONFIG_NET_MAX_MCAST_ROUTES=10
|
||||||
CONFIG_NET_ROUTE_MCAST=y
|
CONFIG_NET_ROUTE_MCAST=y
|
||||||
|
CONFIG_NET_MCAST_ROUTE_MAX_IFACES=3
|
||||||
|
|
|
@ -648,6 +648,99 @@ static void test_route_mcast_scenario3(void)
|
||||||
zassert_equal(forwarding_counter, 0, "wrong count forwarded packets");
|
zassert_equal(forwarding_counter, 0, "wrong count forwarded packets");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_route_mcast_multiple_route_ifaces(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Scenario:
|
||||||
|
* 1. Verify that multicast packet sent to site-local scoped address
|
||||||
|
* to the iface_3 is forwarded only to iface_2 as configured in
|
||||||
|
* test_route_mcast_route_add() test case.
|
||||||
|
* 2. Verify that interface without NET_IF_FORWARD_MULTICASTS flag
|
||||||
|
* enabled cannot be added to multicast routing entry.
|
||||||
|
* 3. Add iface_1 to multicast routing entry for site-local scope.
|
||||||
|
* 4. Verify that packet sent to the same scope as before is now
|
||||||
|
* forwarded also to iface_1.
|
||||||
|
* 5. Remove iface_1 from the multicast routing entry.
|
||||||
|
* 6. Verify that packet sent to the same scope is before is now
|
||||||
|
* NOT forwarded to iface_1 as it was removed from the list.
|
||||||
|
*/
|
||||||
|
struct net_route_entry_mcast *route;
|
||||||
|
bool res;
|
||||||
|
|
||||||
|
reset_counters();
|
||||||
|
memcpy(&active_scenario.src, &iface_3_addr, sizeof(struct in6_addr));
|
||||||
|
active_scenario.src.s6_addr[15] = 0x02;
|
||||||
|
|
||||||
|
memcpy(&active_scenario.mcast, &mcast_prefix_site_local, sizeof(struct in6_addr));
|
||||||
|
active_scenario.mcast.s6_addr[15] = 0x01;
|
||||||
|
|
||||||
|
struct net_pkt *pkt = setup_ipv6_udp(iface_3, &active_scenario.src, &active_scenario.mcast,
|
||||||
|
20015, 20001);
|
||||||
|
|
||||||
|
active_scenario.is_active = true;
|
||||||
|
if (net_recv_data(iface_3, pkt) < 0) {
|
||||||
|
net_pkt_unref(pkt);
|
||||||
|
zassert_true(0, "failed to receive initial packet!");
|
||||||
|
}
|
||||||
|
k_sleep(WAIT_TIME);
|
||||||
|
net_pkt_unref(pkt);
|
||||||
|
active_scenario.is_active = false;
|
||||||
|
|
||||||
|
zassert_true(iface_2_forwarded, "iface_2 did not forward");
|
||||||
|
zassert_false(iface_1_forwarded, "iface_1 forwarded");
|
||||||
|
zassert_false(iface_3_forwarded, "iface_3 forwarded");
|
||||||
|
zassert_equal(forwarding_counter, 1, "unexpected forwarded packet count");
|
||||||
|
|
||||||
|
reset_counters();
|
||||||
|
|
||||||
|
route = net_route_mcast_lookup(&mcast_prefix_site_local);
|
||||||
|
zassert_not_null(route, "failed to find the route entry");
|
||||||
|
|
||||||
|
/* Add iface_1 to the entry */
|
||||||
|
res = net_route_mcast_iface_add(route, iface_1);
|
||||||
|
zassert_true(res, "failed to add iface_1 to the entry");
|
||||||
|
|
||||||
|
struct net_pkt *pkt2 = setup_ipv6_udp(iface_3, &active_scenario.src,
|
||||||
|
&active_scenario.mcast, 215, 201);
|
||||||
|
|
||||||
|
active_scenario.is_active = true;
|
||||||
|
if (net_recv_data(iface_3, pkt2) < 0) {
|
||||||
|
net_pkt_unref(pkt2);
|
||||||
|
zassert_true(0, "failed to receive initial packet!");
|
||||||
|
}
|
||||||
|
k_sleep(WAIT_TIME);
|
||||||
|
net_pkt_unref(pkt2);
|
||||||
|
active_scenario.is_active = false;
|
||||||
|
|
||||||
|
zassert_true(iface_2_forwarded, "iface_2 did not forward");
|
||||||
|
zassert_true(iface_1_forwarded, "iface_1 did not forward");
|
||||||
|
zassert_false(iface_3_forwarded, "iface_3 forwarded");
|
||||||
|
zassert_equal(forwarding_counter, 2, "unexpected forwarded packet count");
|
||||||
|
|
||||||
|
reset_counters();
|
||||||
|
|
||||||
|
/* Remove iface_1 from the entry */
|
||||||
|
res = net_route_mcast_iface_del(route, iface_1);
|
||||||
|
zassert_true(res, "failed to remove iface_1 from the entry");
|
||||||
|
|
||||||
|
struct net_pkt *pkt3 = setup_ipv6_udp(iface_3, &active_scenario.src,
|
||||||
|
&active_scenario.mcast, 215, 201);
|
||||||
|
|
||||||
|
active_scenario.is_active = true;
|
||||||
|
if (net_recv_data(iface_3, pkt3) < 0) {
|
||||||
|
net_pkt_unref(pkt3);
|
||||||
|
zassert_true(0, "failed to receive initial packet!");
|
||||||
|
}
|
||||||
|
k_sleep(WAIT_TIME);
|
||||||
|
net_pkt_unref(pkt3);
|
||||||
|
active_scenario.is_active = false;
|
||||||
|
|
||||||
|
zassert_true(iface_2_forwarded, "iface_2 did not forward");
|
||||||
|
zassert_false(iface_1_forwarded, "iface_1 forwarded");
|
||||||
|
zassert_false(iface_3_forwarded, "iface_3 forwarded");
|
||||||
|
zassert_equal(forwarding_counter, 1, "unexpected forwarded packet count");
|
||||||
|
}
|
||||||
|
|
||||||
/*test case main entry*/
|
/*test case main entry*/
|
||||||
ZTEST(route_mcast_test_suite, test_route_mcast)
|
ZTEST(route_mcast_test_suite, test_route_mcast)
|
||||||
{
|
{
|
||||||
|
@ -657,6 +750,7 @@ ZTEST(route_mcast_test_suite, test_route_mcast)
|
||||||
test_route_mcast_scenario1();
|
test_route_mcast_scenario1();
|
||||||
test_route_mcast_scenario2();
|
test_route_mcast_scenario2();
|
||||||
test_route_mcast_scenario3();
|
test_route_mcast_scenario3();
|
||||||
|
test_route_mcast_multiple_route_ifaces();
|
||||||
test_route_mcast_lookup();
|
test_route_mcast_lookup();
|
||||||
test_route_mcast_route_del();
|
test_route_mcast_route_del();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue