* 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;
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;
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>();
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()
}
- 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;
}
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)) {
} 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());
}
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)) {
}
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());
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;
- }
}