diff options
author | Neale Ranns <nranns@cisco.com> | 2018-09-26 06:51:39 -0700 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2018-10-01 09:42:27 +0000 |
commit | c17776e9fe5accb285e0ef45b56e9380e94801ff (patch) | |
tree | a9ba9717eef11e40e382d64258bd1a5ff476cfa3 | |
parent | 9382673d93d94f10348d61b7e7e7375883f74f5e (diff) |
IGMP: handle (*,G) report with no source addresses
Change-Id: I363370b9d4a27b992bad55c48fc930a2fbea2165
Signed-off-by: Neale Ranns <nranns@cisco.com>
-rw-r--r-- | src/plugins/igmp/igmp_report.c | 22 | ||||
-rw-r--r-- | test/test_igmp.py | 16 |
2 files changed, 30 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); diff --git a/test/test_igmp.py b/test/test_igmp.py index cfdd1a8aed3..128ac5e8eff 100644 --- a/test/test_igmp.py +++ b/test/test_igmp.py @@ -629,6 +629,22 @@ class TestIgmp(VppTestCase): self.assertFalse(self.vapi.igmp_dump()) # + # A (*,G) host report + # + p_j = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) / + IP(src=self.pg0.remote_ip4, dst="224.0.0.22", tos=0xc0, ttl=1, + options=[IPOption(copy_flag=1, optclass="control", + option="router_alert")]) / + IGMPv3(type="Version 3 Membership Report") / + IGMPv3mr(numgrp=1) / + IGMPv3gr(rtype="Allow New Sources", maddr="239.1.1.2")) + + self.send(self.pg0, p_j) + + self.assertTrue(wait_for_igmp_event(self, 1, self.pg0, + "239.1.1.2", "0.0.0.0", 1)) + + # # disable router config # self.vapi.igmp_enable_disable(self.pg0.sw_if_index, |