diff --git a/TODO b/TODO index 34ed0b7398..187afda9bb 100644 --- a/TODO +++ b/TODO @@ -19,7 +19,7 @@ nuttx/: (9) Kernel/Protected Build (3) C++ Support (5) Binary loaders (binfmt/) - (18) Network (net/, drivers/net) + (19) Network (net/, drivers/net) (4) USB (drivers/usbdev, drivers/usbhost) (2) Other drivers (drivers/) (11) Libraries (libs/libc/, libs/libm/) @@ -1497,6 +1497,9 @@ o Network (net/, drivers/net) Instead, the design currently uses a Multicast Address Specific Query with one timer per group and ignores groups that we are not members of. + + Similary, the MLDv1 compatibility timer should be a single, + separate timer, not a per-group timer. Status: Open Priority: Low. There are no customers of MLD as far as I know. diff --git a/net/mld/mld.h b/net/mld/mld.h index 793a322e40..48de7311bd 100644 --- a/net/mld/mld.h +++ b/net/mld/mld.h @@ -189,7 +189,7 @@ enum mld_msgtype_e { MLD_SEND_NONE = 0, /* Nothing to send */ MLD_SEND_GENQUERY, /* Send General Query */ - MLD_SEND_MASQUERY, /* Send Multicast Address Specific (MAS) Query */ + MLD_SEND_MASQUERY, /* Send General Query */ MLD_SEND_V1REPORT, /* Send MLDv1 Report message */ MLD_SEND_V2REPORT, /* Send MLDv2 Report message */ MLD_SEND_DONE /* Send Done message */ diff --git a/net/mld/mld_timer.c b/net/mld/mld_timer.c index b5815f36a6..7053edeb82 100644 --- a/net/mld/mld_timer.c +++ b/net/mld/mld_timer.c @@ -188,10 +188,22 @@ static void mld_polldog_work(FAR void *arg) if (IS_MLD_QUERIER(group->flags)) { - /* Schedule (and forget) the general query. */ + /* Schedule (and forget) the general query or MAS query. */ MLD_STATINCR(g_netstats.mld.query_sched); + +#ifdef CONFIG_NET_MLD_ROUTER + /* REVISIT: In order to support the RFC correctly, we would need + * separate, single general query timer that is not part of the + * group structure. The Querier should query across all groups, + * with a single query, not very via multiple MAS queries as is + * done here. + */ + ret = mld_schedmsg(group, MLD_SEND_GENQUERY); +#else + ret = mld_schedmsg(group, MLD_SEND_MASQUERY); +#endif if (ret < 0) { mlderr("ERROR: Failed to schedule message: %d\n", ret); @@ -363,6 +375,8 @@ void mld_start_polltimer(FAR struct mld_group_s *group, clock_t ticks) * Description: * Start the MLDv1 compatibility timer. * + * REVISIT: This should be a single global timer, not a per-group timer. + * ****************************************************************************/ void mld_start_v1timer(FAR struct mld_group_s *group, clock_t ticks)