summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorNeale Ranns <nranns@cisco.com>2018-09-26 06:51:39 -0700
committerDamjan Marion <dmarion@me.com>2018-10-01 09:42:27 +0000
commitc17776e9fe5accb285e0ef45b56e9380e94801ff (patch)
treea9ba9717eef11e40e382d64258bd1a5ff476cfa3 /src/plugins
parent9382673d93d94f10348d61b7e7e7375883f74f5e (diff)
IGMP: handle (*,G) report with no source addresses
Change-Id: I363370b9d4a27b992bad55c48fc930a2fbea2165 Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/igmp/igmp_report.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/plugins/igmp/igmp_report.c b/src/plugins/igmp/igmp_report.c
index ae8a9339f3f..e0c127d8015 100644
--- a/src/plugins/igmp/igmp_report.c
+++ b/src/plugins/igmp/igmp_report.c
@@ -32,15 +32,21 @@ igmp_group_mk_source_list (const igmp_membership_group_v3_t * r)
n = clib_net_to_host_u16 (r->n_src_addresses);
if (0 == n)
- return (NULL);
-
- vec_validate (srcs, n - 1);
- s = r->src_addresses;
-
- for (ii = 0; ii < n; ii++)
{
- srcs[ii].ip4 = *s;
- s++;
+ /* a (*,G) join has no source address specified */
+ vec_validate (srcs, 0);
+ srcs[0].ip4.as_u32 = 0;
+ }
+ else
+ {
+ vec_validate (srcs, n - 1);
+ s = r->src_addresses;
+
+ for (ii = 0; ii < n; ii++)
+ {
+ srcs[ii].ip4 = *s;
+ s++;
+ }
}
return (srcs);