mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2025-08-04 21:44:38 +08:00
Fix bug #39145: IGMP membership report for 224.0.0.1
Ensure allsystems group is always first in linked list
This commit is contained in:
parent
bb8088d498
commit
102a50fa96
@ -244,6 +244,7 @@ struct igmp_group *
|
|||||||
igmp_lookup_group(struct netif *ifp, const ip4_addr_t *addr)
|
igmp_lookup_group(struct netif *ifp, const ip4_addr_t *addr)
|
||||||
{
|
{
|
||||||
struct igmp_group *group;
|
struct igmp_group *group;
|
||||||
|
struct igmp_group *list_head = netif_igmp_data(ifp);
|
||||||
|
|
||||||
/* Search if the group already exists */
|
/* Search if the group already exists */
|
||||||
group = igmp_lookfor_group(ifp, addr);
|
group = igmp_lookfor_group(ifp, addr);
|
||||||
@ -251,7 +252,7 @@ igmp_lookup_group(struct netif *ifp, const ip4_addr_t *addr)
|
|||||||
/* Group already exists. */
|
/* Group already exists. */
|
||||||
return group;
|
return group;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Group doesn't exist yet, create a new one */
|
/* Group doesn't exist yet, create a new one */
|
||||||
group = (struct igmp_group *)memp_malloc(MEMP_IGMP_GROUP);
|
group = (struct igmp_group *)memp_malloc(MEMP_IGMP_GROUP);
|
||||||
if (group != NULL) {
|
if (group != NULL) {
|
||||||
@ -260,9 +261,21 @@ igmp_lookup_group(struct netif *ifp, const ip4_addr_t *addr)
|
|||||||
group->group_state = IGMP_GROUP_NON_MEMBER;
|
group->group_state = IGMP_GROUP_NON_MEMBER;
|
||||||
group->last_reporter_flag = 0;
|
group->last_reporter_flag = 0;
|
||||||
group->use = 0;
|
group->use = 0;
|
||||||
group->next = netif_igmp_data(ifp);
|
|
||||||
|
|
||||||
netif_set_client_data(ifp, LWIP_NETIF_CLIENT_DATA_INDEX_IGMP, group);
|
/* Ensure allsystems group is always first in list */
|
||||||
|
if (list_head == NULL) {
|
||||||
|
/* this is the first entry in linked list */
|
||||||
|
LWIP_ASSERT("igmp_lookup_group: first group must be allsystems",
|
||||||
|
(ip4_addr_cmp(addr, &allsystems) != 0));
|
||||||
|
group->next = NULL;
|
||||||
|
netif_set_client_data(ifp, LWIP_NETIF_CLIENT_DATA_INDEX_IGMP, group);
|
||||||
|
} else {
|
||||||
|
/* append _after_ first entry */
|
||||||
|
LWIP_ASSERT("igmp_lookup_group: all except first group must not be allsystems",
|
||||||
|
(ip4_addr_cmp(addr, &allsystems) == 0));
|
||||||
|
group->next = list_head->next;
|
||||||
|
list_head->next = group;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LWIP_DEBUGF(IGMP_DEBUG, ("igmp_lookup_group: %sallocated a new group with address ", (group?"":"impossible to ")));
|
LWIP_DEBUGF(IGMP_DEBUG, ("igmp_lookup_group: %sallocated a new group with address ", (group?"":"impossible to ")));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user