Duplicate RA messages are sending from ODL Controller 27/83227/3
authorNishchya Gupta <nishchyag@altencalsoftlabs.com>
Wed, 24 Jul 2019 09:24:28 +0000 (14:54 +0530)
committerNishchya Gupta <nishchyag@altencalsoftlabs.com>
Mon, 17 Feb 2020 09:57:50 +0000 (15:27 +0530)
Issue:
======
While sending IPv6 periodic RA packets to all Ipv6
VMs OF port ODL controller is sending more than one
time with same RA packets to same ELAN group as a
result each IPv6 VMs OF ports are getting more
than one RA packets for each perodic
UNSOLICTED/CEASE messages.

Solution:
=========
Using IPv6 network ELAN BC group approach sending
IPv6 RA packet from ODL Controller to VMs OF ports
should be one time is sufficient.
Since ELAN BC group will deliver the RA packets to
all IPv6 VMs OF ports for that particular ELAN group.

Change-Id: Ia1564148ce84044754e6a008e1de21a62435459d
Signed-off-by: Nishchya Gupta <nishchyag@altencalsoftlabs.com>
ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/IfMgr.java

index 55de264ad5768bb758bec5fa7b7b539428cc2380..a5888dc11c1abffcaf9fb2e7400b7da56f897980 100644 (file)
@@ -955,12 +955,17 @@ public class IfMgr implements ElementCache, AutoCloseable {
         if (vnet != null) {
             long elanTag = vnet.getElanTag();
             Collection<VirtualNetwork.DpnInterfaceInfo> dpnIfaceList = vnet.getDpnIfaceList();
+            /* For UNSOLICITED_ADVERTISEMENT and CEASE_ADVERTISEMENT invoking transmitRtrAdvertisement()
+             * one time is sufficient. Since using IPv6 network ELAN BC group it will send an RA packetOut
+             * information to all VMs OF port which are booted on that particular ELAN Group
+             */
             for (VirtualNetwork.DpnInterfaceInfo dpnIfaceInfo : dpnIfaceList) {
                 LOG.debug("transmitRouterAdvertisement: Transmitting RA {} for ELAN Tag {}",
                         advType, elanTag);
                 if (dpnIfaceInfo.getDpId() != null) {
                     ipv6RouterAdvert.transmitRtrAdvertisement(advType, intf, elanTag, null,
                             dpnIfaceInfo.getDpId(), intf.getIntfUUID());
+                    break;
                 }
             }
         }