Remove Ipv6ServiceUtils static instance 78/65878/3
authorTom Pantelis <tompantelis@gmail.com>
Fri, 24 Nov 2017 01:34:46 +0000 (20:34 -0500)
committerSam Hague <shague@redhat.com>
Sun, 26 Nov 2017 13:11:56 +0000 (13:11 +0000)
Make it a proper singleton. Also some of the conversion and
calculation methods are true utilities and thus were made static
to avoid having to inject it.

Change-Id: If96656895c5150024ab5b9d56fc3fed8ce26ba89
Signed-off-by: Tom Pantelis <tompantelis@gmail.com>
vpnservice/ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/IfMgr.java
vpnservice/ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/Ipv6NeighborSolicitation.java
vpnservice/ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/Ipv6PktHandler.java
vpnservice/ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/Ipv6RouterAdvt.java
vpnservice/ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/Ipv6ServiceInterfaceEventListener.java
vpnservice/ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/VirtualPort.java
vpnservice/ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/utils/Ipv6ServiceUtils.java
vpnservice/ipv6service/impl/src/test/java/org/opendaylight/netvirt/ipv6service/Ipv6PktHandlerTest.java
vpnservice/ipv6service/impl/src/test/java/org/opendaylight/netvirt/ipv6service/utils/Ipv6ServiceUtilsTest.java

index 0721ab806774cfe20a147c8b0109635e46980618..b1dcb3a3696260d93fd3575f4b596077f7820681 100644 (file)
@@ -27,7 +27,6 @@ import javax.inject.Singleton;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.genius.mdsalutil.NwConstants;
-import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
 import org.opendaylight.netvirt.elanmanager.api.IElanService;
 import org.opendaylight.netvirt.ipv6service.api.ElementCache;
 import org.opendaylight.netvirt.ipv6service.api.IVirtualNetwork;
@@ -78,8 +77,7 @@ public class IfMgr implements ElementCache, AutoCloseable {
     private final ConcurrentMap<Uuid, List<VirtualPort>> unprocessedSubnetIntfs = new ConcurrentHashMap<>();
     private final OdlInterfaceRpcService interfaceManagerRpc;
     private final IElanService elanProvider;
-    private final IMdsalApiManager mdsalUtil;
-    private final Ipv6ServiceUtils ipv6ServiceUtils = new Ipv6ServiceUtils();
+    private final Ipv6ServiceUtils ipv6ServiceUtils;
     private final DataBroker dataBroker;
     private final PacketProcessingService packetService;
     private final Ipv6PeriodicTrQueue ipv6Queue = new Ipv6PeriodicTrQueue(portId -> transmitUnsolicitedRA(portId));
@@ -87,12 +85,12 @@ public class IfMgr implements ElementCache, AutoCloseable {
 
     @Inject
     public IfMgr(DataBroker dataBroker, IElanService elanProvider, OdlInterfaceRpcService interfaceManagerRpc,
-            IMdsalApiManager mdsalUtil, PacketProcessingService packetService) {
+            PacketProcessingService packetService, Ipv6ServiceUtils ipv6ServiceUtils) {
         this.dataBroker = dataBroker;
         this.elanProvider = elanProvider;
         this.interfaceManagerRpc = interfaceManagerRpc;
-        this.mdsalUtil = mdsalUtil;
         this.packetService = packetService;
+        this.ipv6ServiceUtils = ipv6ServiceUtils;
         LOG.info("IfMgr is enabled");
     }
 
@@ -352,7 +350,7 @@ public class IfMgr implements ElementCache, AutoCloseable {
         if (prevIntf == null) {
             Long elanTag = getNetworkElanTag(networkId);
             // Do service binding for the port and set the serviceBindingStatus to true.
-            ipv6ServiceUtils.bindIpv6Service(dataBroker, portId.getValue(), elanTag, NwConstants.IPV6_TABLE);
+            ipv6ServiceUtils.bindIpv6Service(portId.getValue(), elanTag, NwConstants.IPV6_TABLE);
             intf.setServiceBindingStatus(true);
 
             /* Update the intf dpnId/ofPort from the Operational Store */
@@ -394,7 +392,7 @@ public class IfMgr implements ElementCache, AutoCloseable {
             if (!intf.getServiceBindingStatus()) {
                 Long elanTag = getNetworkElanTag(intf.getNetworkID());
                 LOG.info("In updateHostIntf, service binding for portId {}", portId);
-                ipv6ServiceUtils.bindIpv6Service(dataBroker, portId.getValue(), elanTag, NwConstants.IPV6_TABLE);
+                ipv6ServiceUtils.bindIpv6Service(portId.getValue(), elanTag, NwConstants.IPV6_TABLE);
                 intf.setServiceBindingStatus(true);
             }
         } else {
@@ -422,7 +420,7 @@ public class IfMgr implements ElementCache, AutoCloseable {
 
     public void updateInterfaceDpidOfPortInfo(Uuid portId) {
         LOG.debug("In updateInterfaceDpidOfPortInfo portId {}", portId);
-        Interface interfaceState = Ipv6ServiceUtils.getInterfaceStateFromOperDS(dataBroker, portId.getValue());
+        Interface interfaceState = ipv6ServiceUtils.getInterfaceStateFromOperDS(portId.getValue());
         if (interfaceState == null) {
             LOG.warn("In updateInterfaceDpidOfPortInfo, port info not found in Operational Store {}.", portId);
             return;
@@ -510,11 +508,11 @@ public class IfMgr implements ElementCache, AutoCloseable {
                 flowStatus = vnet.getRSPuntFlowStatusOnDpnId(dpId);
                 if (action == Ipv6Constants.ADD_FLOW && flowStatus == Ipv6Constants.FLOWS_NOT_CONFIGURED) {
                     ipv6ServiceUtils.installIcmpv6RsPuntFlow(NwConstants.IPV6_TABLE, dpId, elanTag,
-                            mdsalUtil, Ipv6Constants.ADD_FLOW);
+                            Ipv6Constants.ADD_FLOW);
                     vnet.setRSPuntFlowStatusOnDpnId(dpId, Ipv6Constants.FLOWS_CONFIGURED);
                 } else if (action == Ipv6Constants.DEL_FLOW && flowStatus == Ipv6Constants.FLOWS_CONFIGURED) {
                     ipv6ServiceUtils.installIcmpv6RsPuntFlow(NwConstants.IPV6_TABLE, dpId, elanTag,
-                            mdsalUtil, Ipv6Constants.DEL_FLOW);
+                            Ipv6Constants.DEL_FLOW);
                     vnet.setRSPuntFlowStatusOnDpnId(dpId, Ipv6Constants.FLOWS_NOT_CONFIGURED);
                 }
             }
@@ -529,11 +527,11 @@ public class IfMgr implements ElementCache, AutoCloseable {
             for (VirtualNetwork.DpnInterfaceInfo dpnIfaceInfo : dpnIfaceList) {
                 if (action == Ipv6Constants.ADD_FLOW && !dpnIfaceInfo.ndTargetFlowsPunted.contains(ipv6Address)) {
                     ipv6ServiceUtils.installIcmpv6NsPuntFlow(NwConstants.IPV6_TABLE, dpnIfaceInfo.getDpId(),
-                            elanTag, ipv6Address.getValue(), mdsalUtil, Ipv6Constants.ADD_FLOW);
+                            elanTag, ipv6Address.getValue(), Ipv6Constants.ADD_FLOW);
                     dpnIfaceInfo.updateNDTargetAddress(ipv6Address, action);
                 } else if (action == Ipv6Constants.DEL_FLOW && dpnIfaceInfo.ndTargetFlowsPunted.contains(ipv6Address)) {
                     ipv6ServiceUtils.installIcmpv6NsPuntFlow(NwConstants.IPV6_TABLE, dpnIfaceInfo.getDpId(),
-                            elanTag, ipv6Address.getValue(), mdsalUtil, Ipv6Constants.DEL_FLOW);
+                            elanTag, ipv6Address.getValue(), Ipv6Constants.DEL_FLOW);
                     dpnIfaceInfo.updateNDTargetAddress(ipv6Address, action);
                 }
             }
@@ -550,14 +548,14 @@ public class IfMgr implements ElementCache, AutoCloseable {
                     Long elanTag = getNetworkElanTag(routerPort.getNetworkID());
                     if (vnet.getRSPuntFlowStatusOnDpnId(dpId) == Ipv6Constants.FLOWS_NOT_CONFIGURED) {
                         ipv6ServiceUtils.installIcmpv6RsPuntFlow(NwConstants.IPV6_TABLE, dpId, elanTag,
-                                mdsalUtil, Ipv6Constants.ADD_FLOW);
+                                Ipv6Constants.ADD_FLOW);
                         vnet.setRSPuntFlowStatusOnDpnId(dpId, Ipv6Constants.FLOWS_CONFIGURED);
                     }
 
                     for (Ipv6Address ipv6Address: routerPort.getIpv6Addresses()) {
                         if (!dpnInfo.ndTargetFlowsPunted.contains(ipv6Address)) {
                             ipv6ServiceUtils.installIcmpv6NsPuntFlow(NwConstants.IPV6_TABLE, dpId,
-                                    elanTag, ipv6Address.getValue(), mdsalUtil, Ipv6Constants.ADD_FLOW);
+                                    elanTag, ipv6Address.getValue(), Ipv6Constants.ADD_FLOW);
                             dpnInfo.updateNDTargetAddress(ipv6Address, Ipv6Constants.ADD_FLOW);
                         }
                     }
index 4b13c19d7dafc2f31bd7a1d4c73d91eac6baef29..043ab2fca0e5f80afe35405c4fd995f3366519bc 100644 (file)
@@ -38,17 +38,15 @@ import org.slf4j.LoggerFactory;
 public class Ipv6NeighborSolicitation {
     private static final Logger LOG = LoggerFactory.getLogger(Ipv6RouterAdvt.class);
     private final PacketProcessingService packetService;
-    private final Ipv6ServiceUtils ipv6Utils;
 
     public Ipv6NeighborSolicitation(PacketProcessingService packetService) {
         this.packetService = packetService;
-        ipv6Utils = Ipv6ServiceUtils.getInstance();
     }
 
     private byte[] frameNeighborSolicitationRequest(MacAddress srcMacAddress, Ipv6Address srcIpv6Address,
                                                   Ipv6Address targetIpv6Address) {
-        MacAddress macAddress = ipv6Utils.getIpv6MulticastMacAddress(targetIpv6Address);
-        Ipv6Address snMcastAddr = ipv6Utils.getIpv6SolicitedNodeMcastAddress(targetIpv6Address);
+        MacAddress macAddress = Ipv6ServiceUtils.getIpv6MulticastMacAddress(targetIpv6Address);
+        Ipv6Address snMcastAddr = Ipv6ServiceUtils.getIpv6SolicitedNodeMcastAddress(targetIpv6Address);
 
         NeighborSolicitationPacketBuilder nsPacket = new NeighborSolicitationPacketBuilder();
         nsPacket.setSourceMac(srcMacAddress);
@@ -95,17 +93,17 @@ public class Ipv6NeighborSolicitation {
 
         buf.put((byte)pdu.getOptionType().shortValue());
         buf.put((byte)pdu.getSourceAddrLength().shortValue());
-        buf.put(ipv6Utils.bytesFromHexString(pdu.getSourceLlAddress().getValue()));
+        buf.put(Ipv6ServiceUtils.bytesFromHexString(pdu.getSourceLlAddress().getValue()));
         return data;
     }
 
     private byte[] fillNeighborSolicitationPacket(NeighborSolicitationPacket pdu) {
         ByteBuffer buf = ByteBuffer.allocate(Ipv6Constants.ICMPV6_OFFSET + pdu.getIpv6Length());
 
-        buf.put(ipv6Utils.convertEthernetHeaderToByte(pdu), 0, 14);
-        buf.put(ipv6Utils.convertIpv6HeaderToByte(pdu), 0, 40);
+        buf.put(Ipv6ServiceUtils.convertEthernetHeaderToByte(pdu), 0, 14);
+        buf.put(Ipv6ServiceUtils.convertIpv6HeaderToByte(pdu), 0, 40);
         buf.put(icmp6NsPayloadtoByte(pdu), 0, pdu.getIpv6Length());
-        int checksum = ipv6Utils.calcIcmpv6Checksum(buf.array(), pdu);
+        int checksum = Ipv6ServiceUtils.calcIcmpv6Checksum(buf.array(), pdu);
         buf.putShort(Ipv6Constants.ICMPV6_OFFSET + 2, (short)checksum);
         return buf.array();
     }
index 68e56066d94978e5bedfd5b85d0314cffef28910..d20e66ba528f7d0045a632699a21173474f3b0a1 100644 (file)
@@ -55,14 +55,12 @@ public class Ipv6PktHandler implements AutoCloseable, PacketProcessingListener {
     private final AtomicLong pktProccessedCounter = new AtomicLong(0);
     private final PacketProcessingService pktService;
     private final IfMgr ifMgr;
-    private final Ipv6ServiceUtils ipv6Utils;
     private final ExecutorService packetProcessor = Executors.newCachedThreadPool();
 
     @Inject
     public Ipv6PktHandler(PacketProcessingService pktService, IfMgr ifMgr) {
         this.pktService = pktService;
         this.ifMgr = ifMgr;
-        this.ipv6Utils = Ipv6ServiceUtils.getInstance();
     }
 
     @Override
@@ -134,7 +132,7 @@ public class Ipv6PktHandler implements AutoCloseable, PacketProcessingListener {
             byte[] data = packet.getPayload();
             NeighborSolicitationPacket nsPdu = deserializeNSPacket(data);
             Ipv6Header ipv6Header = nsPdu;
-            if (ipv6Utils.validateChecksum(data, ipv6Header, nsPdu.getIcmp6Chksum()) == false) {
+            if (Ipv6ServiceUtils.validateChecksum(data, ipv6Header, nsPdu.getIcmp6Chksum()) == false) {
                 pktProccessedCounter.incrementAndGet();
                 LOG.warn("Received Neighbor Solicitation with invalid checksum on {}. Ignoring the packet.",
                         packet.getIngress());
@@ -189,10 +187,10 @@ public class Ipv6PktHandler implements AutoCloseable, PacketProcessingListener {
 
             try {
                 nsPdu.setDestinationMac(new MacAddress(
-                        ipv6Utils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
+                        Ipv6ServiceUtils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
                 bitOffset = bitOffset + 48;
                 nsPdu.setSourceMac(new MacAddress(
-                        ipv6Utils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
+                        Ipv6ServiceUtils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
                 bitOffset = bitOffset + 48;
                 nsPdu.setEthertype(BitBufferHelper.getInt(BitBufferHelper.getBits(data, bitOffset, 16)));
 
@@ -279,17 +277,17 @@ public class Ipv6PktHandler implements AutoCloseable, PacketProcessingListener {
             }
             buf.put((byte)pdu.getOptionType().shortValue());
             buf.put((byte)pdu.getTargetAddrLength().shortValue());
-            buf.put(ipv6Utils.bytesFromHexString(pdu.getTargetLlAddress().getValue()));
+            buf.put(Ipv6ServiceUtils.bytesFromHexString(pdu.getTargetLlAddress().getValue()));
             return data;
         }
 
         private byte[] fillNeighborAdvertisementPacket(NeighborAdvertisePacket pdu) {
             ByteBuffer buf = ByteBuffer.allocate(Ipv6Constants.ICMPV6_OFFSET + pdu.getIpv6Length());
 
-            buf.put(ipv6Utils.convertEthernetHeaderToByte(pdu), 0, 14);
-            buf.put(ipv6Utils.convertIpv6HeaderToByte(pdu), 0, 40);
+            buf.put(Ipv6ServiceUtils.convertEthernetHeaderToByte(pdu), 0, 14);
+            buf.put(Ipv6ServiceUtils.convertIpv6HeaderToByte(pdu), 0, 40);
             buf.put(icmp6NAPayloadtoByte(pdu), 0, pdu.getIpv6Length());
-            int checksum = ipv6Utils.calcIcmpv6Checksum(buf.array(), pdu);
+            int checksum = Ipv6ServiceUtils.calcIcmpv6Checksum(buf.array(), pdu);
             buf.putShort(Ipv6Constants.ICMPV6_OFFSET + 2, (short)checksum);
             return buf.array();
         }
@@ -298,7 +296,7 @@ public class Ipv6PktHandler implements AutoCloseable, PacketProcessingListener {
             byte[] data = packet.getPayload();
             RouterSolicitationPacket rsPdu = deserializeRSPacket(data);
             Ipv6Header ipv6Header = rsPdu;
-            if (ipv6Utils.validateChecksum(data, ipv6Header, rsPdu.getIcmp6Chksum()) == false) {
+            if (Ipv6ServiceUtils.validateChecksum(data, ipv6Header, rsPdu.getIcmp6Chksum()) == false) {
                 pktProccessedCounter.incrementAndGet();
                 LOG.warn("Received RS packet with invalid checksum on {}. Ignoring the packet.",
                         packet.getIngress());
@@ -335,10 +333,10 @@ public class Ipv6PktHandler implements AutoCloseable, PacketProcessingListener {
 
             try {
                 rsPdu.setDestinationMac(new MacAddress(
-                        ipv6Utils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
+                        Ipv6ServiceUtils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
                 bitOffset = bitOffset + 48;
                 rsPdu.setSourceMac(new MacAddress(
-                        ipv6Utils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
+                        Ipv6ServiceUtils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
                 bitOffset = bitOffset + 48;
                 rsPdu.setEthertype(BitBufferHelper.getInt(BitBufferHelper.getBits(data, bitOffset, 16)));
 
@@ -377,7 +375,7 @@ public class Ipv6PktHandler implements AutoCloseable, PacketProcessingListener {
                     bitOffset = bitOffset + 8;
                     if (rsPdu.getOptionType() == Ipv6Constants.ICMP_V6_OPTION_SOURCE_LLA) {
                         rsPdu.setSourceLlAddress(new MacAddress(
-                                ipv6Utils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
+                                Ipv6ServiceUtils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
                     }
                 }
             } catch (BufferException | UnknownHostException e) {
index 6ea255db7a6646e6aac1081ede724397771e52cb..371dffe2696e6d551200e59dec2feadd34b80c91 100644 (file)
@@ -38,11 +38,9 @@ import org.slf4j.LoggerFactory;
 public class Ipv6RouterAdvt {
     private static final Logger LOG = LoggerFactory.getLogger(Ipv6RouterAdvt.class);
     private final PacketProcessingService packetService;
-    private final Ipv6ServiceUtils ipv6Utils;
 
     public Ipv6RouterAdvt(PacketProcessingService packetService) {
         this.packetService = packetService;
-        ipv6Utils = Ipv6ServiceUtils.getInstance();
     }
 
     public boolean transmitRtrAdvertisement(Ipv6RtrAdvertType raType, VirtualPort routerPort,
@@ -118,7 +116,7 @@ public class Ipv6RouterAdvt {
                 + prefixListLength * Ipv6Constants.ICMPV6_OPTION_PREFIX_LENGTH);
         raPacket.setNextHeader(Ipv6Constants.ICMP6_NHEADER);
         raPacket.setHopLimit(Ipv6Constants.ICMP_V6_MAX_HOP_LIMIT);
-        raPacket.setSourceIpv6(ipv6Utils.getIpv6LinkLocalAddressFromMac(sourceMac));
+        raPacket.setSourceIpv6(Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(sourceMac));
 
         raPacket.setIcmp6Type(Ipv6Constants.ICMP_V6_RA_CODE);
         raPacket.setIcmp6Code((short)0);
@@ -174,10 +172,10 @@ public class Ipv6RouterAdvt {
     private byte[] fillRouterAdvertisementPacket(RouterAdvertisementPacket pdu) {
         ByteBuffer buf = ByteBuffer.allocate(Ipv6Constants.ICMPV6_OFFSET + pdu.getIpv6Length());
 
-        buf.put(ipv6Utils.convertEthernetHeaderToByte(pdu), 0, 14);
-        buf.put(ipv6Utils.convertIpv6HeaderToByte(pdu), 0, 40);
+        buf.put(Ipv6ServiceUtils.convertEthernetHeaderToByte(pdu), 0, 14);
+        buf.put(Ipv6ServiceUtils.convertIpv6HeaderToByte(pdu), 0, 40);
         buf.put(icmp6RAPayloadtoByte(pdu), 0, pdu.getIpv6Length());
-        int checksum = ipv6Utils.calcIcmpv6Checksum(buf.array(), pdu);
+        int checksum = Ipv6ServiceUtils.calcIcmpv6Checksum(buf.array(), pdu);
         buf.putShort(Ipv6Constants.ICMPV6_OFFSET + 2, (short)checksum);
         return buf.array();
     }
@@ -197,7 +195,7 @@ public class Ipv6RouterAdvt {
         buf.putInt((int)pdu.getRetransTime().longValue());
         buf.put((byte)pdu.getOptionSourceAddr().shortValue());
         buf.put((byte)pdu.getSourceAddrLength().shortValue());
-        buf.put(ipv6Utils.bytesFromHexString(pdu.getSourceLlAddress().getValue()));
+        buf.put(Ipv6ServiceUtils.bytesFromHexString(pdu.getSourceLlAddress().getValue()));
 
         for (PrefixList prefix : pdu.getPrefixList()) {
             buf.put((byte)prefix.getOptionType().shortValue());
index 814ff68c04f6590efae58ac6f02e0b95e8725a4a..d3a223c1098ce44e3a2e6d14b0cdaedb927a0bf7 100644 (file)
@@ -35,16 +35,18 @@ public class Ipv6ServiceInterfaceEventListener
     private static final Logger LOG = LoggerFactory.getLogger(Ipv6ServiceInterfaceEventListener.class);
     private final DataBroker dataBroker;
     private final IfMgr ifMgr;
+    private final Ipv6ServiceUtils ipv6ServiceUtils;
 
     /**
      * Intialize the member variables.
      * @param broker the data broker instance.
      */
     @Inject
-    public Ipv6ServiceInterfaceEventListener(DataBroker broker, IfMgr ifMgr) {
+    public Ipv6ServiceInterfaceEventListener(DataBroker broker, IfMgr ifMgr, Ipv6ServiceUtils ipv6ServiceUtils) {
         super(Interface.class, Ipv6ServiceInterfaceEventListener.class);
         this.dataBroker = broker;
         this.ifMgr = ifMgr;
+        this.ipv6ServiceUtils = ipv6ServiceUtils;
     }
 
     @Override
@@ -96,7 +98,7 @@ public class Ipv6ServiceInterfaceEventListener
         }
 
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface iface;
-        iface = Ipv6ServiceUtils.getInterface(dataBroker, add.getName());
+        iface = ipv6ServiceUtils.getInterface(add.getName());
         if (null != iface) {
             LOG.debug("Port {} is a Neutron port", iface.getName());
             NodeConnectorId nodeConnectorId = new NodeConnectorId(ofportIds.get(0));
index 7fbe37bd5c6940571f8d0bedfc63dab33353e472..41cbf392a30e0337dedf759f7afe035bbf16db30 100644 (file)
@@ -111,8 +111,7 @@ public class VirtualPort implements IVirtualPort  {
             subnetInfo -> Stream.of(subnetInfo.getIpAddr().getIpv6Address())).collect(Collectors.toList());
 
         if (deviceOwner.equalsIgnoreCase(Ipv6Constants.NETWORK_ROUTER_INTERFACE)) {
-            Ipv6ServiceUtils ipv6Utils = Ipv6ServiceUtils.getInstance();
-            Ipv6Address llAddr = ipv6Utils.getIpv6LinkLocalAddressFromMac(new MacAddress(macAddress));
+            Ipv6Address llAddr = Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(new MacAddress(macAddress));
             ipv6AddrList.add(llAddr);
         }
         return ipv6AddrList;
index 4632e793c8ef99c592a75c37b6a5add3dddebd5a..60d62850f07f2fb928231318889f2fb3295c154f 100644 (file)
@@ -18,6 +18,8 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.apache.commons.lang3.StringUtils;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
@@ -62,9 +64,9 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Singleton
 public class Ipv6ServiceUtils {
     private static final Logger LOG = LoggerFactory.getLogger(Ipv6ServiceUtils.class);
-    public static final Ipv6ServiceUtils INSTANCE = new Ipv6ServiceUtils();
     public static final Ipv6Address ALL_NODES_MCAST_ADDR = newIpv6Address("0:0:0:0:0:0:0:0");
     public static final Ipv6Address UNSPECIFIED_ADDR = newIpv6Address("FF02::1");
 
@@ -77,22 +79,22 @@ public class Ipv6ServiceUtils {
         }
     }
 
-    public Ipv6ServiceUtils() {
-    }
+    private final DataBroker broker;
+    private final IMdsalApiManager mdsalUtil;
 
-    public static Ipv6ServiceUtils getInstance() {
-        return INSTANCE;
+    @Inject
+    public Ipv6ServiceUtils(DataBroker broker, IMdsalApiManager mdsalUtil) {
+        this.broker = broker;
+        this.mdsalUtil = mdsalUtil;
     }
 
     /**
      * Retrieves the object from the datastore.
-     * @param broker the data broker.
      * @param datastoreType the data store type.
      * @param path the wild card path.
      * @return the required object.
      */
-    public static <T extends DataObject> Optional<T> read(DataBroker broker, LogicalDatastoreType datastoreType,
-                                                          InstanceIdentifier<T> path) {
+    public <T extends DataObject> Optional<T> read(LogicalDatastoreType datastoreType, InstanceIdentifier<T> path) {
         try (ReadOnlyTransaction tx = broker.newReadOnlyTransaction()) {
             return tx.read(datastoreType, path).get();
         } catch (InterruptedException | ExecutionException e) {
@@ -102,15 +104,14 @@ public class Ipv6ServiceUtils {
 
     /**
      * Retrieves the Interface from the datastore.
-     * @param broker the data broker
      * @param interfaceName the interface name
      * @return the interface.
      */
-    public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
-        .Interface getInterface(DataBroker broker, String interfaceName) {
+    public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
+        .Interface getInterface(String interfaceName) {
         Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
             .Interface> optInterface =
-                read(broker, LogicalDatastoreType.CONFIGURATION, getInterfaceIdentifier(interfaceName));
+                read(LogicalDatastoreType.CONFIGURATION, getInterfaceIdentifier(interfaceName));
         if (optInterface.isPresent()) {
             return optInterface.get();
         }
@@ -148,18 +149,17 @@ public class Ipv6ServiceUtils {
 
     /**
      * Retrieves the interface state.
-     * @param dataBroker the data broker.
      * @param interfaceName the interface name.
      * @return the interface state.
      */
-    public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
-            .Interface getInterfaceStateFromOperDS(DataBroker dataBroker, String interfaceName) {
+    public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
+            .Interface getInterfaceStateFromOperDS(String interfaceName) {
         InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508
                 .interfaces.state.Interface> ifStateId = buildStateInterfaceId(interfaceName);
-        return MDSALUtil.read(LogicalDatastoreType.OPERATIONAL, ifStateId, dataBroker).orNull();
+        return MDSALUtil.read(LogicalDatastoreType.OPERATIONAL, ifStateId, broker).orNull();
     }
 
-    public String bytesToHexString(byte[] bytes) {
+    public static String bytesToHexString(byte[] bytes) {
         if (bytes == null) {
             return "null";
         }
@@ -178,7 +178,7 @@ public class Ipv6ServiceUtils {
         return buf.toString();
     }
 
-    public byte[] bytesFromHexString(String values) {
+    public static byte[] bytesFromHexString(String values) {
         String target = "";
         if (values != null) {
             target = values;
@@ -192,7 +192,7 @@ public class Ipv6ServiceUtils {
         return ret;
     }
 
-    public int calcIcmpv6Checksum(byte[] packet, Ipv6Header ip6Hdr) {
+    public static int calcIcmpv6Checksum(byte[] packet, Ipv6Header ip6Hdr) {
         long checksum = getSummation(ip6Hdr.getSourceIpv6());
         checksum += getSummation(ip6Hdr.getDestinationIpv6());
         checksum = normalizeChecksum(checksum);
@@ -226,11 +226,11 @@ public class Ipv6ServiceUtils {
         return finalChecksum;
     }
 
-    public boolean validateChecksum(byte[] packet, Ipv6Header ip6Hdr, int recvChecksum) {
+    public static boolean validateChecksum(byte[] packet, Ipv6Header ip6Hdr, int recvChecksum) {
         return calcIcmpv6Checksum(packet, ip6Hdr) == recvChecksum;
     }
 
-    private long getSummation(Ipv6Address addr) {
+    private static long getSummation(Ipv6Address addr) {
         byte[] baddr = null;
         try {
             baddr = InetAddress.getByName(addr.getValue()).getAddress();
@@ -251,7 +251,7 @@ public class Ipv6ServiceUtils {
         return sum;
     }
 
-    private long normalizeChecksum(long value) {
+    private static  long normalizeChecksum(long value) {
         if ((value & 0xffff0000) != 0) {
             value = value & 0xffff;
             value += 1;
@@ -259,7 +259,7 @@ public class Ipv6ServiceUtils {
         return value;
     }
 
-    public byte[] convertEthernetHeaderToByte(EthernetHeader ethPdu) {
+    public static byte[] convertEthernetHeaderToByte(EthernetHeader ethPdu) {
         byte[] data = new byte[16];
         Arrays.fill(data, (byte)0);
 
@@ -270,7 +270,7 @@ public class Ipv6ServiceUtils {
         return data;
     }
 
-    public byte[] convertIpv6HeaderToByte(Ipv6Header ip6Pdu) {
+    public static byte[] convertIpv6HeaderToByte(Ipv6Header ip6Pdu) {
         byte[] data = new byte[128];
         Arrays.fill(data, (byte)0);
 
@@ -292,7 +292,7 @@ public class Ipv6ServiceUtils {
         return data;
     }
 
-    public Ipv6Address getIpv6LinkLocalAddressFromMac(MacAddress mac) {
+    public static Ipv6Address getIpv6LinkLocalAddressFromMac(MacAddress mac) {
         byte[] octets = bytesFromHexString(mac.getValue());
 
         /* As per the RFC2373, steps involved to generate a LLA include
@@ -321,7 +321,7 @@ public class Ipv6ServiceUtils {
         return ipv6LLA;
     }
 
-    public Ipv6Address getIpv6SolicitedNodeMcastAddress(Ipv6Address ipv6Address) {
+    public static Ipv6Address getIpv6SolicitedNodeMcastAddress(Ipv6Address ipv6Address) {
 
         /* According to RFC 4291, a Solicited Node Multicast Address is derived by adding the 24
            lower order bits with the Solicited Node multicast prefix (i.e., FF02::1:FF00:0/104).
@@ -346,7 +346,7 @@ public class Ipv6ServiceUtils {
         return solictedV6Address;
     }
 
-    public MacAddress getIpv6MulticastMacAddress(Ipv6Address ipv6Address) {
+    public static MacAddress getIpv6MulticastMacAddress(Ipv6Address ipv6Address) {
 
         /* According to RFC 2464, a Multicast MAC address is derived by concatenating 32 lower
            order bits of IPv6 Multicast Address with the multicast prefix (i.e., 33:33).
@@ -398,7 +398,7 @@ public class Ipv6ServiceUtils {
     }
 
     public void installIcmpv6NsPuntFlow(short tableId, BigInteger dpId,  Long elanTag, String ipv6Address,
-                                        IMdsalApiManager mdsalUtil,int addOrRemove) {
+            int addOrRemove) {
         List<MatchInfo> neighborSolicitationMatch = getIcmpv6NSMatch(elanTag, ipv6Address);
         List<InstructionInfo> instructions = new ArrayList<>();
         List<ActionInfo> actionsInfos = new ArrayList<>();
@@ -416,8 +416,7 @@ public class Ipv6ServiceUtils {
         }
     }
 
-    public void installIcmpv6RsPuntFlow(short tableId, BigInteger dpId, Long elanTag, IMdsalApiManager mdsalUtil,
-                                        int addOrRemove) {
+    public void installIcmpv6RsPuntFlow(short tableId, BigInteger dpId, Long elanTag, int addOrRemove) {
         if (dpId == null || dpId.equals(Ipv6Constants.INVALID_DPID)) {
             return;
         }
@@ -449,14 +448,14 @@ public class Ipv6ServiceUtils {
                 .addAugmentation(StypeOpenflow.class, augBuilder.build()).build();
     }
 
-    private InstanceIdentifier buildServiceId(String interfaceName,
+    private InstanceIdentifier<BoundServices> buildServiceId(String interfaceName,
                                               short priority) {
         return InstanceIdentifier.builder(ServiceBindings.class).child(ServicesInfo.class,
                 new ServicesInfoKey(interfaceName, ServiceModeIngress.class))
                 .child(BoundServices.class, new BoundServicesKey(priority)).build();
     }
 
-    public void bindIpv6Service(DataBroker broker, String interfaceName, Long elanTag, short tableId) {
+    public void bindIpv6Service(String interfaceName, Long elanTag, short tableId) {
         int instructionKey = 0;
         List<Instruction> instructions = new ArrayList<>();
         instructions.add(MDSALUtil.buildAndGetWriteMetadaInstruction(MetaDataUtil.getElanTagMetadata(elanTag),
index a6697e68fb397235fc27759195f548fd5e4fb544..086ff42c598a4692ebebac0ecc2480f7ccef8266 100644 (file)
@@ -224,8 +224,7 @@ public class Ipv6PktHandlerTest {
         when(ifMgrInstance.getRouterV6InterfaceForNetwork(any())).thenReturn(routerIntf);
         List<Ipv6Address> ipv6AddrList = new ArrayList<>();
         when(routerIntf.getMacAddress()).thenReturn("08:00:27:FE:8F:95");
-        Ipv6ServiceUtils ipv6Utils = Ipv6ServiceUtils.getInstance();
-        Ipv6Address llAddr = ipv6Utils.getIpv6LinkLocalAddressFromMac(new MacAddress("08:00:27:FE:8F:95"));
+        Ipv6Address llAddr = Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(new MacAddress("08:00:27:FE:8F:95"));
         ipv6AddrList.add(llAddr);
         when(routerIntf.getIpv6Addresses()).thenReturn(ipv6AddrList);
 
index 58da187deb38c7f895656414be1c01ff1bf21302..9bc133853604b078c011ab72244a39ee89d85d3c 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.netvirt.ipv6service.utils;
 
 import static org.junit.Assert.assertEquals;
 
-import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
@@ -19,18 +18,12 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.
  * Unit test fort {@link Ipv6ServiceUtilsTest}.
  */
 public class Ipv6ServiceUtilsTest {
-    private Ipv6ServiceUtils instance;
     private static String IPv6_ADDR_1 = "fe80:0:0:0:f816:3eff:fe4e:180c";
     private static String IPv6_ADDR_2 = "fe80:0:0:0:f816:3eff:fe4e:18c0";
     private static String IPv6_ADDR_3 = "fe80:0:0:0:816:3ff:fe04:80c";
     private static String IPv6_ADDR_4 = "fe80:0:0:0:f600:ff:fe0f:6b";
     private static String IPv6_ADDR_5 = "fe80:0:0:0:527b:9dff:fe78:54f3";
 
-    @Before
-    public void initTest() {
-        instance = Ipv6ServiceUtils.getInstance();
-    }
-
     /**
      *  Test getIpv6LinkLocalAddressFromMac with different MACAddress values.
      */
@@ -38,23 +31,23 @@ public class Ipv6ServiceUtilsTest {
     public void testgetIpv6LinkLocalAddressFromMac() {
         MacAddress mac = new MacAddress("fa:16:3e:4e:18:0c");
         Ipv6Address expectedLinkLocalAddress = new Ipv6Address(IPv6_ADDR_1);
-        assertEquals(expectedLinkLocalAddress, instance.getIpv6LinkLocalAddressFromMac(mac));
+        assertEquals(expectedLinkLocalAddress, Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(mac));
 
         mac = new MacAddress("fa:16:3e:4e:18:c0");
         expectedLinkLocalAddress = new Ipv6Address(IPv6_ADDR_2);
-        assertEquals(expectedLinkLocalAddress, instance.getIpv6LinkLocalAddressFromMac(mac));
+        assertEquals(expectedLinkLocalAddress, Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(mac));
 
         mac = new MacAddress("0a:16:03:04:08:0c");
         expectedLinkLocalAddress = new Ipv6Address(IPv6_ADDR_3);
-        assertEquals(expectedLinkLocalAddress, instance.getIpv6LinkLocalAddressFromMac(mac));
+        assertEquals(expectedLinkLocalAddress, Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(mac));
 
         mac = new MacAddress("f4:00:00:0f:00:6b");
         expectedLinkLocalAddress = new Ipv6Address(IPv6_ADDR_4);
-        assertEquals(expectedLinkLocalAddress, instance.getIpv6LinkLocalAddressFromMac(mac));
+        assertEquals(expectedLinkLocalAddress, Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(mac));
 
         mac = new MacAddress("50:7B:9D:78:54:F3");
         expectedLinkLocalAddress = new Ipv6Address(IPv6_ADDR_5);
-        assertEquals(expectedLinkLocalAddress, instance.getIpv6LinkLocalAddressFromMac(mac));
+        assertEquals(expectedLinkLocalAddress, Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(mac));
     }
 
     /**
@@ -64,15 +57,15 @@ public class Ipv6ServiceUtilsTest {
     public void testgetIpv6SolicitedNodeMcastAddress() {
         Ipv6Address ipv6Address = new Ipv6Address(IPv6_ADDR_1);
         Ipv6Address expectedSolicitedNodeAddr = new Ipv6Address("ff02:0:0:0:0:1:ff4e:180c");
-        assertEquals(expectedSolicitedNodeAddr, instance.getIpv6SolicitedNodeMcastAddress(ipv6Address));
+        assertEquals(expectedSolicitedNodeAddr, Ipv6ServiceUtils.getIpv6SolicitedNodeMcastAddress(ipv6Address));
 
         ipv6Address = new Ipv6Address(IPv6_ADDR_2);
         expectedSolicitedNodeAddr = new Ipv6Address("ff02:0:0:0:0:1:ff4e:18c0");
-        assertEquals(expectedSolicitedNodeAddr, instance.getIpv6SolicitedNodeMcastAddress(ipv6Address));
+        assertEquals(expectedSolicitedNodeAddr, Ipv6ServiceUtils.getIpv6SolicitedNodeMcastAddress(ipv6Address));
 
         ipv6Address = new Ipv6Address(IPv6_ADDR_4);
         expectedSolicitedNodeAddr = new Ipv6Address("ff02:0:0:0:0:1:ff0f:6b");
-        assertEquals(expectedSolicitedNodeAddr, instance.getIpv6SolicitedNodeMcastAddress(ipv6Address));
+        assertEquals(expectedSolicitedNodeAddr, Ipv6ServiceUtils.getIpv6SolicitedNodeMcastAddress(ipv6Address));
     }
 
     /**
@@ -82,14 +75,14 @@ public class Ipv6ServiceUtilsTest {
     public void testgetIpv6MulticastMacAddress() {
         Ipv6Address ipv6Address = new Ipv6Address(IPv6_ADDR_1);
         MacAddress expectedMacAddress = new MacAddress("33:33:fe:4e:18:0c");
-        assertEquals(expectedMacAddress, instance.getIpv6MulticastMacAddress(ipv6Address));
+        assertEquals(expectedMacAddress, Ipv6ServiceUtils.getIpv6MulticastMacAddress(ipv6Address));
 
         ipv6Address = new Ipv6Address(IPv6_ADDR_2);
         expectedMacAddress = new MacAddress("33:33:fe:4e:18:c0");
-        assertEquals(expectedMacAddress, instance.getIpv6MulticastMacAddress(ipv6Address));
+        assertEquals(expectedMacAddress, Ipv6ServiceUtils.getIpv6MulticastMacAddress(ipv6Address));
 
         ipv6Address = new Ipv6Address(IPv6_ADDR_4);
         expectedMacAddress = new MacAddress("33:33:fe:0f:00:6b");
-        assertEquals(expectedMacAddress, instance.getIpv6MulticastMacAddress(ipv6Address));
+        assertEquals(expectedMacAddress, Ipv6ServiceUtils.getIpv6MulticastMacAddress(ipv6Address));
     }
 }