Merge "Bug 4957 Wiring new TxChainManager lifecycle"
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / translator / FlowRemovedTranslator.java
index 0b7ee065cdbdc4ed8c040d65fac00e0d7bf9bdcd..6c89d7fb0e5c5cbeb24be49fd16a9414fa69730d 100644 (file)
@@ -4,9 +4,8 @@
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributor: deepthi.v.v@ericsson.com
  */
+
 package org.opendaylight.openflowplugin.openflow.md.core.translator;
 
 import java.math.BigInteger;
@@ -24,14 +23,11 @@ import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
 import org.opendaylight.openflowplugin.extension.api.AugmentTuple;
 import org.opendaylight.openflowplugin.extension.api.path.MatchPath;
 import org.opendaylight.openflowplugin.openflow.md.core.extension.MatchExtensionHelper;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.IpConversionUtil;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchConvertorImpl;
 import org.opendaylight.openflowplugin.openflow.md.util.ByteUtil;
 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SwitchFlowRemovedBuilder;
@@ -163,7 +159,7 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
     private static final String PREFIX_SEPARATOR = "/";
 
     @Override
-    public List<DataObject> translate(SwitchConnectionDistinguisher cookie, SessionContext sc, OfHeader msg) {
+    public List<DataObject> translate(final SwitchConnectionDistinguisher cookie, final SessionContext sc, final OfHeader msg) {
         if (msg instanceof FlowRemovedMessage) {
             FlowRemovedMessage ofFlow = (FlowRemovedMessage) msg;
             List<DataObject> list = new CopyOnWriteArrayList<DataObject>();
@@ -202,7 +198,7 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
             if (ofMatch != null) {
                 salFlowRemoved.setMatch(fromMatch(ofMatch, sc.getFeatures().getDatapathId(), ofVersion));
             } else if (ofFlow.getMatchV10() != null) {
-                MatchBuilder matchBuilder = new MatchBuilder(MatchConvertorImpl.fromOFMatchV10ToSALMatch(ofFlow.getMatchV10(), sc.getFeatures().getDatapathId(), ofVersion));
+                MatchBuilder matchBuilder = new MatchBuilder(MatchConvertorImpl.fromOFMatchV10ToSALMatch(ofFlow.getMatchV10(), sc.getFeatures().getDatapathId(), ofVersion).build());
                 salFlowRemoved.setMatch(matchBuilder.build());
             }
             salFlowRemoved.setNode(new NodeRef(InventoryDataServiceUtil.identifierFromDatapathId(sc.getFeatures()
@@ -216,8 +212,8 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
     }
 
 
-    public Match fromMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match ofMatch,
-                           BigInteger datapathid, OpenflowVersion ofVersion) {
+    public Match fromMatch(final org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match ofMatch,
+                           final BigInteger datapathid, final OpenflowVersion ofVersion) {
         MatchBuilder matchBuilder = new MatchBuilder();
         EthernetMatchBuilder ethernetMatch = null;
         VlanMatchBuilder vlanMatch = null;
@@ -371,29 +367,27 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
                 }
                 if (field.equals(Ipv4Src.class)) {
                     Ipv4SrcCase ipv4SrcCase = ((Ipv4SrcCase) entry.getMatchEntryValue());
-                    Ipv4Address ipv4Address = ipv4SrcCase.getIpv4Src().getIpv4Address();
-                    String ipAddressString = ipv4Address.getValue();
-                    String prefix = "";
+                    int prefix;
                     if (entry.isHasMask()) {
-                        byte[] mask = ipv4SrcCase.getIpv4Src().getMask();
-                        prefix = prefix + PREFIX_SEPARATOR + countBits(mask);
+                        prefix = IpConversionUtil.countBits(ipv4SrcCase.getIpv4Src().getMask());
                     } else {
-                        prefix += PREFIX_SEPARATOR + "32";
+                        prefix = 32;
                     }
-                    ipv4Match.setIpv4Source(createIpv4Prefix(ipAddressString, prefix));
+                    ipv4Match.setIpv4Source(
+                        IpConversionUtil.createPrefix(ipv4SrcCase.getIpv4Src().getIpv4Address(), prefix)
+                    );
 
                 } else if (field.equals(Ipv4Dst.class)) {
                     Ipv4DstCase ipv4DstCase = ((Ipv4DstCase) entry.getMatchEntryValue());
-                    Ipv4Address ipv4Address = ipv4DstCase.getIpv4Dst().getIpv4Address();
-                    String ipAddressString = ipv4Address.getValue();
-                    String prefix = "";
+                    int prefix;
                     if (entry.isHasMask()) {
-                        byte[] mask = ipv4DstCase.getIpv4Dst().getMask();
-                        prefix = prefix + PREFIX_SEPARATOR + countBits(mask);
+                        prefix = IpConversionUtil.countBits(ipv4DstCase.getIpv4Dst().getMask());
                     } else {
-                        prefix += PREFIX_SEPARATOR + "32";
+                        prefix = 32;
                     }
-                    ipv4Match.setIpv4Destination(createIpv4Prefix(ipAddressString, prefix));
+                    ipv4Match.setIpv4Destination(
+                        IpConversionUtil.createPrefix(ipv4DstCase.getIpv4Dst().getIpv4Address(), prefix)
+                    );
                 }
             } else if (field.equals(ArpOp.class) || field.equals(ArpSpa.class) || field.equals(ArpTpa.class)
                     || field.equals(ArpSha.class) || field.equals(ArpTha.class)) {
@@ -406,30 +400,27 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
                 } else if (field.equals(ArpSpa.class)) {
 
                     ArpSpaCase arpSpaCase = ((ArpSpaCase) entry.getMatchEntryValue());
-                    Ipv4Address ipv4Address = arpSpaCase.getArpSpa().getIpv4Address();
-                    String ipAddressString = ipv4Address.getValue();
-                    String prefix = "";
+                    int prefix;
                     if (entry.isHasMask()) {
-                        byte[] mask = arpSpaCase.getArpSpa().getMask();
-                        prefix = prefix + PREFIX_SEPARATOR + countBits(mask);
+                        prefix = IpConversionUtil.countBits(arpSpaCase.getArpSpa().getMask());
                     } else {
-                        prefix += PREFIX_SEPARATOR + "32";
+                        prefix = 32;
                     }
-
-                    arpMatch.setArpSourceTransportAddress(createIpv4Prefix(ipAddressString, prefix));
+                    arpMatch.setArpSourceTransportAddress(
+                        IpConversionUtil.createPrefix(arpSpaCase.getArpSpa().getIpv4Address(), prefix)
+                    );
                 } else if (field.equals(ArpTpa.class)) {
                     ArpTpaCase arpTpaCase = ((ArpTpaCase) entry.getMatchEntryValue());
-                    Ipv4Address ipv4Address = arpTpaCase.getArpTpa().getIpv4Address();
-                    String ipAddressString = ipv4Address.getValue();
-                    String prefix = "";
+                    int prefix;
                     if (entry.isHasMask()) {
-                        byte[] mask = arpTpaCase.getArpTpa().getMask();
-                        prefix = prefix + PREFIX_SEPARATOR + countBits(mask);
+                        prefix = IpConversionUtil.countBits(arpTpaCase.getArpTpa().getMask());
                     } else {
-                        prefix += PREFIX_SEPARATOR + "32";
+                        prefix = 32;
                     }
 
-                    arpMatch.setArpTargetTransportAddress(createIpv4Prefix(ipAddressString, prefix));
+                    arpMatch.setArpTargetTransportAddress(
+                        IpConversionUtil.createPrefix(arpTpaCase.getArpTpa().getIpv4Address(), prefix)
+                    );
                 } else if (field.equals(ArpSha.class)) {
                     ArpSourceHardwareAddressBuilder arpSha = new ArpSourceHardwareAddressBuilder();
                     ArpShaCase arpShaCase = ((ArpShaCase) entry.getMatchEntryValue());
@@ -453,32 +444,28 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
                 }
                 if (field.equals(TunnelIpv4Src.class)) {
                     Ipv4SrcCase ipv4SrcCase = ((Ipv4SrcCase) entry.getMatchEntryValue());
-                    Ipv4Address ipv4Address = ipv4SrcCase.getIpv4Src().getIpv4Address();
-                    String ipAddressString = ipv4Address.getValue();
-
-                    String prefix = "";
+                    int prefix;
                     if (entry.isHasMask()) {
-                        byte[] mask = ipv4SrcCase.getIpv4Src().getMask();
-                        prefix = prefix + PREFIX_SEPARATOR + countBits(mask);
+                        prefix = IpConversionUtil.countBits(ipv4SrcCase.getIpv4Src().getMask());
                     } else {
-                        prefix += PREFIX_SEPARATOR + "32";
+                        prefix = 32;
                     }
 
-                    ipv4Match.setIpv4Source(createIpv4Prefix(ipAddressString, prefix));
+                    ipv4Match.setIpv4Source(
+                        IpConversionUtil.createPrefix(ipv4SrcCase.getIpv4Src().getIpv4Address(), prefix)
+                    );
                 } else if (field.equals(TunnelIpv4Dst.class)) {
                     Ipv4DstCase ipv4DstCase = ((Ipv4DstCase) entry.getMatchEntryValue());
-                    Ipv4Address ipv4Address = ipv4DstCase.getIpv4Dst().getIpv4Address();
-                    String ipAddressString = ipv4Address.getValue();
-                    String prefix = "";
+                    int prefix;
                     if (entry.isHasMask()) {
-                        byte[] mask = ipv4DstCase.getIpv4Dst().getMask();
-                        prefix = prefix + PREFIX_SEPARATOR + countBits(mask);
+                        prefix = IpConversionUtil.countBits(ipv4DstCase.getIpv4Dst().getMask());
                     } else {
-                        prefix += PREFIX_SEPARATOR + "32";
+                        prefix = 32;
                     }
 
-                    ipv4Match.setIpv4Destination(createIpv4Prefix(ipAddressString, prefix));
-                }
+                    ipv4Match.setIpv4Destination(
+                        IpConversionUtil.createPrefix(ipv4DstCase.getIpv4Dst().getIpv4Address(), prefix)
+                    );               }
             } else if (field.equals(Ipv6Src.class) || field.equals(Ipv6Dst.class) || field.equals(Ipv6Flabel.class)
                     || field.equals(Ipv6NdTarget.class) || field.equals(Ipv6NdSll.class)
                     || field.equals(Ipv6NdTll.class) || field.equals(Ipv6Exthdr.class)) {
@@ -487,26 +474,26 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
                 }
                 if (field.equals(Ipv6Src.class)) {
                     Ipv6SrcCase ipv6SrcCase = ((Ipv6SrcCase) entry.getMatchEntryValue());
-                    Ipv6Address ipv6Address = ipv6SrcCase.getIpv6Src().getIpv6Address();
-                    String ipv6string = ipv6Address.getValue();
-                    String prefix = "";
+                    int prefix ;
                     if (entry.isHasMask()) {
-                        byte[] mask = ipv6SrcCase.getIpv6Src().getMask();
-                        prefix = prefix + PREFIX_SEPARATOR + countBits(mask);
+                        prefix = IpConversionUtil.countBits(ipv6SrcCase.getIpv6Src().getMask());
+                    } else {
+                        prefix = 128;
                     }
-
-                    ipv6Match.setIpv6Source(createIpv6Prefix(ipv6string, prefix));
+                    ipv6Match.setIpv6Source(
+                        IpConversionUtil.createPrefix(ipv6SrcCase.getIpv6Src().getIpv6Address(), prefix)
+                    );
                 } else if (field.equals(Ipv6Dst.class)) {
                     Ipv6DstCase ipv6DstCase = ((Ipv6DstCase) entry.getMatchEntryValue());
-                    Ipv6Address ipv6Address = ipv6DstCase.getIpv6Dst().getIpv6Address();
-                    String ipv6string = ipv6Address.getValue();
-                    String prefix = "";
+                    int prefix;
                     if (entry.isHasMask()) {
-                        byte[] mask = ipv6DstCase.getIpv6Dst().getMask();
-                        prefix = prefix + PREFIX_SEPARATOR + countBits(mask);
+                        prefix = IpConversionUtil.countBits(ipv6DstCase.getIpv6Dst().getMask());
+                    } else {
+                        prefix = 128;
                     }
-
-                    ipv6Match.setIpv6Destination(createIpv6Prefix(ipv6string, prefix));
+                    ipv6Match.setIpv6Destination(
+                        IpConversionUtil.createPrefix(ipv6DstCase.getIpv6Dst().getIpv6Address(), prefix)
+                    );
                 } else if (field.equals(Ipv6Flabel.class)) {
                     Ipv6LabelBuilder ipv6Label = new Ipv6LabelBuilder();
                     Ipv6FlabelCase ipv6FlabelCase = ((Ipv6FlabelCase) entry.getMatchEntryValue());
@@ -627,23 +614,4 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
         return matchBuilder.build();
     }
 
-    private Ipv6Prefix createIpv6Prefix(final String ipv6string, final String prefix) {
-        return new Ipv6Prefix(ipv6string + prefix);
-    }
-
-    private Ipv4Prefix createIpv4Prefix(final String ipAddressString, final String prefix) {
-        return new Ipv4Prefix(ipAddressString + prefix);
-    }
-
-    private int toInt(byte b) {
-        return b < 0 ? b + 256 : b;
-    }
-
-    private int countBits(byte[] mask) {
-        int netmask = 0;
-        for (byte b : mask) {
-            netmask += Integer.bitCount(toInt(b));
-        }
-        return netmask;
-    }
 }