From: Neale Ranns Date: Fri, 7 Feb 2020 09:45:07 +0000 (+0000) Subject: ip-neighbor: fix MLD reports not being sent X-Git-Tag: v20.09-rc0~635 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=commitdiff_plain;h=f267d11475d12975ca95cf2f5a61ad0f65ab9f45 ip-neighbor: fix MLD reports not being sent Type: fix Change-Id: I8f81cd6c29ff8cb4f0b4850b8b1f6611d89ddb38 Signed-off-by: Neale Ranns --- 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 """