/**
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2013, 2015 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;
+import java.math.BigInteger;
+import java.util.Iterator;
+
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.IpConversionUtil;
+import org.opendaylight.openflowplugin.openflow.md.util.ActionUtil;
import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
+import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
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.yang.types.rev100924.MacAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv4Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatch;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer3Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer4Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowWildcardsV10;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.v10.grouping.MatchV10;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.v10.grouping.MatchV10Builder;
-
-import java.math.BigInteger;
-import java.util.Iterator;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.v10.grouping.MatchV10;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.v10.grouping.MatchV10Builder;
/**
*
* The value 0xffff (OFP_VLAN_NONE) is used to indicate
* that no VLAN ID is set for OF Flow.
*/
- private static final int OFP_VLAN_NONE = (int) 0xffff;
+ private static final Integer OFP_VLAN_NONE = 0xffff;
/**
* Method builds openflow 1.0 specific match (MatchV10) from MD-SAL match.
matchBuilder.setTpSrc(0);
matchBuilder.setTpDst(0);
- EthernetMatch ethernetMatch = match.getEthernetMatch();
- if(ethernetMatch!= null){
- _dLDST = convertEthernetDlDst(matchBuilder, ethernetMatch);
- _dLSRC = convertEthernetDlSrc(matchBuilder, ethernetMatch);
- _dLTYPE = convertEthernetDlType(matchBuilder, ethernetMatch);
- }
- VlanMatch vlanMatch = match.getVlanMatch();
- if(vlanMatch!= null){
- _dLVLAN = convertDlVlan(matchBuilder, vlanMatch);
- _dLVLANPCP = convertDlVlanPcp(matchBuilder, vlanMatch);
- }
- NodeConnectorId inPort = match.getInPort();
- if(inPort!=null){
- _iNPORT = convertInPortMatch(matchBuilder, inPort);
- }
- Layer3Match l3Match = match.getLayer3Match();
- if(l3Match != null){
- if(l3Match instanceof Ipv4Match){
- Ipv4Match ipv4 = (Ipv4Match)l3Match;
- _tPSRC = convertL3Ipv4SrcMatch(matchBuilder, ipv4);
- _tPDST = convertL3Ipv4DstMatch(matchBuilder, ipv4);
+ if (match != null) {
+ EthernetMatch ethernetMatch = match.getEthernetMatch();
+ if(ethernetMatch!= null){
+ _dLDST = convertEthernetDlDst(matchBuilder, ethernetMatch);
+ _dLSRC = convertEthernetDlSrc(matchBuilder, ethernetMatch);
+ _dLTYPE = convertEthernetDlType(matchBuilder, ethernetMatch);
}
- }
- IpMatch ipMatch = match.getIpMatch();
- if(ipMatch!=null){
- _nWPROTO = convertNwProto(matchBuilder, ipMatch);
- _nWTOS = convertNwTos(matchBuilder, ipMatch);
- }
- Layer4Match layer4Match = match.getLayer4Match();
- if (layer4Match != null) {
- if (layer4Match instanceof TcpMatch) {
- TcpMatch tcpMatch = (TcpMatch) layer4Match;
- _tPSRC = convertL4TpSrcMatch(matchBuilder, tcpMatch);
- _tPDST = convertL4TpDstMatch(matchBuilder, tcpMatch);
- } else if (layer4Match instanceof UdpMatch) {
- UdpMatch udpMatch = (UdpMatch) layer4Match;
- _tPSRC = convertL4UdpSrcMatch(matchBuilder, udpMatch);
- _tPDST = convertL4UdpDstMatch(matchBuilder, udpMatch);
+ VlanMatch vlanMatch = match.getVlanMatch();
+ if(vlanMatch!= null){
+ _dLVLAN = convertDlVlan(matchBuilder, vlanMatch);
+ _dLVLANPCP = convertDlVlanPcp(matchBuilder, vlanMatch);
+ }
+ NodeConnectorId inPort = match.getInPort();
+ if(inPort!=null){
+ _iNPORT = convertInPortMatch(matchBuilder, inPort);
+ }
+ Layer3Match l3Match = match.getLayer3Match();
+ if(l3Match != null){
+ if(l3Match instanceof Ipv4Match){
+ Ipv4Match ipv4 = (Ipv4Match)l3Match;
+ convertL3Ipv4SrcMatch(matchBuilder, ipv4);
+ convertL3Ipv4DstMatch(matchBuilder, ipv4);
+ }
+ }
+ IpMatch ipMatch = match.getIpMatch();
+ if(ipMatch!=null){
+ _nWPROTO = convertNwProto(matchBuilder, ipMatch);
+ _nWTOS = convertNwTos(matchBuilder, ipMatch);
+ }
+ Layer4Match layer4Match = match.getLayer4Match();
+ if (layer4Match != null) {
+ if (layer4Match instanceof TcpMatch) {
+ TcpMatch tcpMatch = (TcpMatch) layer4Match;
+ _tPSRC = convertL4TpSrcMatch(matchBuilder, tcpMatch);
+ _tPDST = convertL4TpDstMatch(matchBuilder, tcpMatch);
+ } else if (layer4Match instanceof UdpMatch) {
+ UdpMatch udpMatch = (UdpMatch) layer4Match;
+ _tPSRC = convertL4UdpSrcMatch(matchBuilder, udpMatch);
+ _tPDST = convertL4UdpDstMatch(matchBuilder, udpMatch);
+ }
+ } else {
+ Icmpv4Match icmpv4Match = match.getIcmpv4Match();
+ if (icmpv4Match != null) {
+ Short type = icmpv4Match.getIcmpv4Type();
+ if (type != null) {
+ matchBuilder.setTpSrc(type.intValue());
+ _tPSRC = false;
+ }
+ Short code = icmpv4Match.getIcmpv4Code();
+ if (code != null) {
+ matchBuilder.setTpDst(code.intValue());
+ _tPDST = false;
+ }
+ }
}
}
private static boolean convertNwTos(final MatchV10Builder matchBuilder,
final IpMatch ipMatch) {
if (ipMatch.getIpDscp() != null) {
- matchBuilder.setNwTos(ipMatch.getIpDscp().getValue());
+ matchBuilder.setNwTos(ActionUtil.dscpToTos(ipMatch.getIpDscp().getValue()));
return false;
}
return true;
}
/**
+ * Method splits the IP address and its mask and set their respective values in MatchV10Builder instance.
+ * Wildcard value of the IP mask will be determined by Openflow java encoding library.
* @param matchBuilder
* @param ipv4
- * @return is wildCard
*/
- private static boolean convertL3Ipv4DstMatch(final MatchV10Builder matchBuilder,
+ private static void convertL3Ipv4DstMatch(final MatchV10Builder matchBuilder,
final Ipv4Match ipv4) {
if(ipv4.getIpv4Destination()!=null){
- Iterator<String> addressParts = MatchConvertorImpl.PREFIX_SPLITTER.split(ipv4.getIpv4Destination().getValue()).iterator();
+ Iterator<String> addressParts = IpConversionUtil.PREFIX_SPLITTER.split(ipv4.getIpv4Destination().getValue()).iterator();
Ipv4Address ipv4Address = new Ipv4Address(addressParts.next());
Integer prefix = buildPrefix(addressParts);
matchBuilder.setNwDst(ipv4Address);
matchBuilder.setNwDstMask(prefix.shortValue());
- return false;
}
- return true;
}
/**
+ * Method splits the IP address and its mask and set their respective values in MatchV10Builder instance.
+ * Wildcard value of the IP mask will be determined by Openflow java encoding library.
* @param matchBuilder
* @param ipv4
- * @return is wildCard
*/
- private static boolean convertL3Ipv4SrcMatch(final MatchV10Builder matchBuilder,
+ private static void convertL3Ipv4SrcMatch(final MatchV10Builder matchBuilder,
final Ipv4Match ipv4) {
if(ipv4.getIpv4Source()!=null){
- Iterator<String> addressParts = MatchConvertorImpl.PREFIX_SPLITTER.split(ipv4.getIpv4Source().getValue()).iterator();
+ Iterator<String> addressParts = IpConversionUtil.PREFIX_SPLITTER.split(ipv4.getIpv4Source().getValue()).iterator();
Ipv4Address ipv4Address = new Ipv4Address(addressParts.next());
int prefix = buildPrefix(addressParts);
matchBuilder.setNwSrc(ipv4Address);
matchBuilder.setNwSrcMask((short) prefix);
- return false;
}
- return true;
}
/**
*/
private static boolean convertInPortMatch(final MatchV10Builder matchBuilder, final NodeConnectorId inPort) {
if (inPort != null) {
- matchBuilder.setInPort(InventoryDataServiceUtil.portNumberfromNodeConnectorId(inPort).intValue());
+ matchBuilder.setInPort(InventoryDataServiceUtil.portNumberfromNodeConnectorId(OpenflowVersion.OF10, inPort).intValue());
return false;
}
return true;