diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2016-08-01 13:06:35 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2016-12-21 20:26:04 -0500 |
| commit | a459fe85c85e51bf36c10fc5700b6345c904d01d (patch) | |
| tree | 333c9c2e24c9b5adf113fe253a4b155985018926 /pimd/pim_igmpv3.c | |
| parent | 3667b0bcf62d73248587ece9d4efd91f78c83a63 (diff) | |
pimd: igmpv3.c was causing prune/join messages to be sent
We were erroneously sending a prune *,G immediately followed
by a join *,G under certain situations
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'pimd/pim_igmpv3.c')
| -rw-r--r-- | pimd/pim_igmpv3.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/pimd/pim_igmpv3.c b/pimd/pim_igmpv3.c index bf81c8d2c5..79932edb35 100644 --- a/pimd/pim_igmpv3.c +++ b/pimd/pim_igmpv3.c @@ -933,6 +933,16 @@ static void toex_excl(struct igmp_group *group, /* clear off SEND flag from all known sources (X,Y) */ source_clear_send_flag(group->group_source_list); + if (num_sources == 0) + { + struct igmp_source *source; + struct in_addr any = { .s_addr = INADDR_ANY }; + + source = igmp_find_source_by_addr (group, any); + if (source) + IGMP_SOURCE_DONT_DELETE(source->source_flags); + } + /* scan received sources (A) */ for (i = 0; i < num_sources; ++i) { struct igmp_source *source; |
