diff options
author | Neale Ranns <nranns@cisco.com> | 2020-02-07 09:45:07 +0000 |
---|---|---|
committer | Neale Ranns <nranns@cisco.com> | 2020-02-10 13:02:23 +0000 |
commit | f267d11475d12975ca95cf2f5a61ad0f65ab9f45 (patch) | |
tree | 0945f1b49ce06cfb1cd79fc6a02d13d1d9633ba3 | |
parent | 8ebcb7a99d7b73a1ee5874780b4efdc69d32c82f (diff) |
ip-neighbor: fix MLD reports not being sent
Type: fix
Change-Id: I8f81cd6c29ff8cb4f0b4850b8b1f6611d89ddb38
Signed-off-by: Neale Ranns <nranns@cisco.com>
-rw-r--r-- | src/vnet/ip6-nd/ip6_mld.c | 6 | ||||
-rw-r--r-- | test/test_ip6.py | 32 |
2 files changed, 34 insertions, 4 deletions
diff --git a/src/vnet/ip6-nd/ip6_mld.c b/src/vnet/ip6-nd/ip6_mld.c index bd5f8489b7b..f1f5a68d33f 100644 --- a/src/vnet/ip6-nd/ip6_mld.c +++ b/src/vnet/ip6-nd/ip6_mld.c @@ -257,7 +257,7 @@ ip6_neighbor_send_mldpv2_report (u32 sw_if_index) icmp6_multicast_listener_report_header_t *rh0; icmp6_multicast_listener_report_packet_t *rp0; - if (! !vnet_sw_interface_is_admin_up (vnm, sw_if_index)) + if (!vnet_sw_interface_is_admin_up (vnm, sw_if_index)) return; imd = ip6_mld_get_itf (sw_if_index); @@ -390,14 +390,14 @@ ip6_mld_timer_event (vlib_main_t * vm, /* *INDENT-OFF* */ pool_foreach (imd, ip6_mld_pool, ({ - if(!vnet_sw_interface_is_admin_up (vnm, imd->sw_if_index)) + if (!vnet_sw_interface_is_admin_up (vnm, imd->sw_if_index)) { imd->all_routers_mcast = 0; continue; } /* Make sure that we've joined the all-routers multicast group */ - if(!imd->all_routers_mcast) + if (!imd->all_routers_mcast) { /* send MDLP_REPORT_EVENT message */ ip6_neighbor_send_mldpv2_report(imd->sw_if_index); diff --git a/test/test_ip6.py b/test/test_ip6.py index 04db7e52b38..f4b9ef8c647 100644 --- a/test/test_ip6.py +++ b/test/test_ip6.py @@ -10,7 +10,8 @@ from scapy.contrib.mpls import MPLS from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6ND_RS, \ ICMPv6ND_RA, ICMPv6NDOptMTU, ICMPv6NDOptSrcLLAddr, ICMPv6NDOptPrefixInfo, \ ICMPv6ND_NA, ICMPv6NDOptDstLLAddr, ICMPv6DestUnreach, icmp6types, \ - ICMPv6TimeExceeded, ICMPv6EchoRequest, ICMPv6EchoReply, IPv6ExtHdrHopByHop + ICMPv6TimeExceeded, ICMPv6EchoRequest, ICMPv6EchoReply, \ + IPv6ExtHdrHopByHop, ICMPv6MLReport2, ICMPv6MLDMultAddrRec from scapy.layers.l2 import Ether, Dot1Q from scapy.packet import Raw from scapy.utils6 import in6_getnsma, in6_getnsmac, in6_ptop, in6_islladdr, \ @@ -945,6 +946,35 @@ class TestIPv6(TestIPv6ND): # self.pg0.ip6_ra_config(no=1, suppress=1, send_unicast=0) + def test_mld(self): + """ MLD Report """ + # + # test one MLD is sent after applying an IPv6 Address on an interface + # + self.pg_enable_capture(self.pg_interfaces) + self.pg_start() + + subitf = VppDot1QSubint(self, self.pg1, 99) + + subitf.admin_up() + subitf.config_ip6() + + rxs = self.pg1._get_capture(timeout=2, filter_out_fn=None) + + # + # hunt for the MLD on vlan 99 + # + for rx in rxs: + # make sure ipv6 packets with hop by hop options have + # correct checksums + self.assert_packet_checksums_valid(rx) + if rx.haslayer(IPv6ExtHdrHopByHop) and \ + rx.haslayer(Dot1Q) and \ + rx[Dot1Q].vlan == 99: + mld = rx[ICMPv6MLReport2] + + self.assertEqual(mld.records_number, 4) + class TestIPv6IfAddrRoute(VppTestCase): """ IPv6 Interface Addr Route Test Case """ |