Skip to content

Commit 4a4c635

Browse files
fabiobaltierijhedberg
authored andcommitted
net: if: check for multicast address already registered
Add a check to stop a multicast address to be registered multiple times. This can happen if the application is using net_if_ipv6_maddr_add() directly. Tested on the existing bluetooth/ipsp sample: <wrn> net_if: Multicast address ff02::1 is is already registered. Signed-off-by: Fabio Baltieri <[email protected]>
1 parent f6fbf1f commit 4a4c635

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

subsys/net/ip/net_if.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1672,6 +1672,12 @@ struct net_if_mcast_addr *net_if_ipv6_maddr_add(struct net_if *iface,
16721672
return NULL;
16731673
}
16741674

1675+
if (net_if_ipv6_maddr_lookup(addr, &iface)) {
1676+
NET_WARN("Multicast address %s is is already registered.",
1677+
log_strdup(net_sprint_ipv6_addr(addr)));
1678+
return NULL;
1679+
}
1680+
16751681
for (i = 0; i < NET_IF_MAX_IPV6_MADDR; i++) {
16761682
if (ipv6->mcast[i].is_used) {
16771683
continue;

tests/net/iface/src/main.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,14 @@ static void test_v6_addr_add(void)
718718
zassert_true(ret, "Cannot add IPv6 address");
719719
}
720720

721+
static void test_v6_addr_add_mcast_twice(void)
722+
{
723+
struct net_if_mcast_addr *maddr;
724+
725+
maddr = net_if_ipv6_maddr_add(iface1, &in6addr_mcast);
726+
zassert_equal(maddr, NULL, "Address was added twice");
727+
}
728+
721729
static void test_v6_addr_lookup(void)
722730
{
723731
int ret;
@@ -859,6 +867,7 @@ void test_main(void)
859867
ztest_user_unit_test(test_v4_addr_lookup_user),
860868
ztest_unit_test(test_v4_addr_rm_user_from_userspace),
861869
ztest_unit_test(test_v6_addr_add),
870+
ztest_unit_test(test_v6_addr_add_mcast_twice),
862871
ztest_unit_test(test_v6_addr_lookup),
863872
ztest_unit_test(test_v6_addr_rm),
864873
ztest_unit_test(test_v6_addr_add_user_from_userspace),

0 commit comments

Comments
 (0)