X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-compability%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcompability%2FToSalConversionsUtils.java;h=702bd31aeb72651edfb1619531f41980c3158d1c;hb=0e4aa6c7f5a4c66c3778d4eaa488eaa91f964fac;hp=793ac4988842e817292418db3b1d3a6237e5520a;hpb=a88a736c185f9551a2bf98335054e69a04b8f3bb;p=controller.git diff --git a/opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/ToSalConversionsUtils.java b/opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/ToSalConversionsUtils.java index 793ac49888..702bd31aeb 100644 --- a/opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/ToSalConversionsUtils.java +++ b/opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/ToSalConversionsUtils.java @@ -1,5 +1,9 @@ package org.opendaylight.controller.sal.compability; +import static org.opendaylight.controller.sal.compability.ProtocolConstants.ETHERNET_ARP; +import static org.opendaylight.controller.sal.compability.ProtocolConstants.SCTP; +import static org.opendaylight.controller.sal.compability.ProtocolConstants.TCP; +import static org.opendaylight.controller.sal.compability.ProtocolConstants.UDP; import static org.opendaylight.controller.sal.match.MatchType.DL_DST; import static org.opendaylight.controller.sal.match.MatchType.DL_SRC; import static org.opendaylight.controller.sal.match.MatchType.DL_TYPE; @@ -14,9 +18,8 @@ import static org.opendaylight.controller.sal.match.MatchType.TP_SRC; import java.net.InetAddress; import java.util.ArrayList; -import java.util.HashSet; +import java.util.Collections; import java.util.List; -import java.util.Set; import org.opendaylight.controller.sal.action.*; import org.opendaylight.controller.sal.core.NodeConnector; @@ -24,25 +27,28 @@ import org.opendaylight.controller.sal.flowprogrammer.Flow; import org.opendaylight.controller.sal.match.Match; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.*; 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.NodeFlow; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.VlanCfi; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.*; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv4; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv6; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.ActionList; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.VlanCfi; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.*; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.Address; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv4; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv6; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.list.Action; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction; import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType; import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.MacAddressFilter; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.ethernet.match.fields.EthernetType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.*; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.ArpMatch; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv4Match; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv6Match; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.SctpMatch; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.TcpMatch; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.UdpMatch; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.vlan.match.fields.VlanId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.MacAddressFilter; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetType; +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.layer._3.match.ArpMatch; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6Match; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatch; +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.model.match.types.rev131026.vlan.match.fields.VlanId; import com.google.common.net.InetAddresses; @@ -52,7 +58,7 @@ public class ToSalConversionsUtils { } - public static Flow flowFrom(NodeFlow source) { + public static Flow toFlow(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow source) { final Flow target = new Flow(); Integer hardTimeout = source.getHardTimeout(); @@ -70,9 +76,9 @@ public class ToSalConversionsUtils { target.setPriority(priority.shortValue()); } - target.setMatch(matchFrom(source.getMatch())); + target.setMatch(toMatch(source.getMatch())); - List actions = source.getAction(); + List actions = getAction(source); if (actions != null) { target.setActions(actionFrom(actions)); } @@ -81,10 +87,23 @@ public class ToSalConversionsUtils { return target; } + public static List getAction( + org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow source) { + if (source.getInstructions() != null) { + for (Instruction instruction : source.getInstructions().getInstruction()) { + if (instruction.getInstruction() instanceof ActionList) { + return (((ActionList) instruction.getInstruction()).getAction()); + } + } + } + // TODO Auto-generated method stub + return Collections.emptyList(); + } + public static List actionFrom(List actions) { List targetAction = new ArrayList<>(); for (Action action : actions) { - org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.Action sourceAction = action + org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.Action sourceAction = action .getAction(); if (sourceAction instanceof ControllerAction) { @@ -132,18 +151,13 @@ public class ToSalConversionsUtils { } else if (sourceAction instanceof SetDlDstAction) { MacAddress addressL2Dest = ((SetDlDstAction) sourceAction).getAddress(); if (addressL2Dest != null) { - String addressValue = addressL2Dest.getValue(); - if (addressValue != null) { - targetAction.add(new SetDlDst(addressValue.getBytes())); - } + targetAction.add(new SetDlDst(bytesFrom(addressL2Dest))); } } else if (sourceAction instanceof SetDlSrcAction) { MacAddress addressL2Src = ((SetDlSrcAction) sourceAction).getAddress(); if (addressL2Src != null) { - String addressValue = addressL2Src.getValue(); - if (addressValue != null) { - targetAction.add(new SetDlSrc(addressValue.getBytes())); - } + targetAction.add(new SetDlSrc(bytesFrom(addressL2Src))); + } } else if (sourceAction instanceof SetDlTypeAction) { EtherType dlType = ((SetDlTypeAction) sourceAction).getDlType(); @@ -272,7 +286,7 @@ public class ToSalConversionsUtils { return null; } - public static Match matchFrom(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Match source) { + public static Match toMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match source) { Match target = new Match(); if (source != null) { fillFrom(target, source.getVlanMatch()); @@ -311,7 +325,8 @@ public class ToSalConversionsUtils { private static void fillFrom(Match target, IpMatch ipMatch) { if (ipMatch != null) { Short ipProtocol = ipMatch.getIpProtocol(); - if (ipProtocol != null) { + + if (ipProtocol != null && target.getField(NW_PROTO) == null) { target.setField(NW_PROTO, ipProtocol.byteValue()); } Dscp dscp = ipMatch.getIpDscp(); @@ -353,6 +368,8 @@ public class ToSalConversionsUtils { target.setField(TP_DST, udpDestPortValue.shortValue()); } } + + target.setField(NW_PROTO, UDP); } private static void fillTransportLayer(Match target, TcpMatch source) { @@ -371,6 +388,8 @@ public class ToSalConversionsUtils { target.setField(TP_DST, tcpDestPortValue.shortValue()); } } + + target.setField(NW_PROTO, TCP); } private static void fillTransportLayer(Match target, SctpMatch source) { @@ -388,6 +407,9 @@ public class ToSalConversionsUtils { target.setField(TP_DST, sctpDestPortValue.shortValue()); } } + + target.setField(NW_PROTO, SCTP); + } private static void fillFrom(Match target, Layer3Match source) { @@ -407,10 +429,21 @@ public class ToSalConversionsUtils { if (sourceAddress != null) { target.setField(NW_SRC, (InetAddress) inetAddressFrom(sourceAddress), null); } - Ipv4Prefix destAddress = source.getArpSourceTransportAddress(); + Ipv4Prefix destAddress = source.getArpTargetTransportAddress(); if (destAddress != null) { target.setField(NW_DST, (InetAddress) inetAddressFrom(destAddress), null); } + ArpSourceHardwareAddress sourceHwAddress = source.getArpSourceHardwareAddress(); + if (sourceHwAddress != null) { + target.setField(DL_SRC, bytesFrom(sourceHwAddress.getAddress())); + } + ArpTargetHardwareAddress targetHwAddress = source.getArpTargetHardwareAddress(); + if (targetHwAddress != null) { + target.setField(DL_DST, bytesFrom(targetHwAddress.getAddress())); + } + + target.setField(DL_TYPE, new Short(ETHERNET_ARP)); + } private static void fillFromIpv6(Match target, Ipv6Match source) { @@ -418,7 +451,7 @@ public class ToSalConversionsUtils { if (sourceAddress != null) { target.setField(NW_SRC, (InetAddress) inetAddressFrom(sourceAddress), null); } - Ipv6Prefix destAddress = source.getIpv6Source(); + Ipv6Prefix destAddress = source.getIpv6Destination(); if (destAddress != null) { target.setField(NW_DST, (InetAddress) inetAddressFrom(destAddress), null); } @@ -429,7 +462,7 @@ public class ToSalConversionsUtils { if (sourceAddress != null) { target.setField(NW_SRC, (InetAddress) inetAddressFrom(sourceAddress), null); } - Ipv4Prefix destAddress = source.getIpv4Source(); + Ipv4Prefix destAddress = source.getIpv4Destination(); if (destAddress != null) { target.setField(NW_DST, (InetAddress) inetAddressFrom(destAddress), null); } @@ -457,7 +490,7 @@ public class ToSalConversionsUtils { EthernetType ethType = source.getEthernetType(); if (ethType != null) { EtherType ethInnerType = ethType.getType(); - if (ethInnerType != null) { + if (ethInnerType != null && target.getField(DL_TYPE) == null) { Long value = ethInnerType.getValue(); target.setField(DL_TYPE, value.shortValue()); } @@ -475,9 +508,11 @@ public class ToSalConversionsUtils { } private static byte[] bytesFrom(MacAddress address) { - if (address != null) { - return address.getValue().getBytes(); + String[] mac = address.getValue().split(":"); + byte[] macAddress = new byte[6]; // mac.length == 6 bytes + for (int i = 0; i < mac.length; i++) { + macAddress[i] = Integer.decode("0x" + mac[i]).byteValue(); } - return null; + return macAddress; } }