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%2FMDFlowMapping.xtend;fp=opendaylight%2Fmd-sal%2Fsal-compability%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcompability%2FMDFlowMapping.xtend;h=8490ad950148899b9e1f3076fd878070a2a27bb7;hb=4f5a4b3e71e81c6149a1ca78ca418866e152c45b;hp=0000000000000000000000000000000000000000;hpb=058e97d0ed62600f124937fa44ec982503510ac4;p=controller.git diff --git a/opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/MDFlowMapping.xtend b/opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/MDFlowMapping.xtend new file mode 100644 index 0000000000..8490ad9501 --- /dev/null +++ b/opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/MDFlowMapping.xtend @@ -0,0 +1,357 @@ +package org.opendaylight.controller.sal.compability; + +import com.google.common.net.InetAddresses +import java.math.BigInteger +import java.net.Inet4Address +import java.net.Inet6Address +import java.util.ArrayList +import java.util.List +import org.opendaylight.controller.sal.action.Controller +import org.opendaylight.controller.sal.action.Drop +import org.opendaylight.controller.sal.action.Flood +import org.opendaylight.controller.sal.action.FloodAll +import org.opendaylight.controller.sal.action.HwPath +import org.opendaylight.controller.sal.action.Loopback +import org.opendaylight.controller.sal.action.Output +import org.opendaylight.controller.sal.action.PopVlan +import org.opendaylight.controller.sal.action.PushVlan +import org.opendaylight.controller.sal.action.SetDlDst +import org.opendaylight.controller.sal.action.SetDlSrc +import org.opendaylight.controller.sal.action.SetDlType +import org.opendaylight.controller.sal.action.SetNextHop +import org.opendaylight.controller.sal.action.SetNwDst +import org.opendaylight.controller.sal.action.SetNwSrc +import org.opendaylight.controller.sal.action.SetNwTos +import org.opendaylight.controller.sal.action.SetTpDst +import org.opendaylight.controller.sal.action.SetTpSrc +import org.opendaylight.controller.sal.action.SetVlanCfi +import org.opendaylight.controller.sal.action.SetVlanId +import org.opendaylight.controller.sal.action.SetVlanPcp +import org.opendaylight.controller.sal.action.SwPath +import org.opendaylight.controller.sal.core.Node +import org.opendaylight.controller.sal.core.NodeConnector +import org.opendaylight.controller.sal.flowprogrammer.Flow +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.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.inet.types.rev100924.Uri +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.AddFlowInputBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAddedBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsInputBuilder +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.ControllerActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.DropActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.FloodActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.FloodAllActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.HwPathActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.LoopbackActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.OutputActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.PopVlanActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.PushVlanActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetDlDstActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetDlSrcActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetDlTypeActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNextHopActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNwDstActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNwSrcActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNwTosActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetTpDstActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetTpSrcActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetVlanCfiActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetVlanIdActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetVlanPcpActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SwPathActionBuilder +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.Ipv4Builder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv6Builder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.ActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType +import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId +import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp + +import static extension org.opendaylight.controller.sal.compability.FromSalConversionsUtils.* +import static extension org.opendaylight.controller.sal.compability.NodeMapping.* + +public class MDFlowMapping { + + private new() { + throw new UnsupportedOperationException() + } + + public static def flowAdded(Flow sourceFlow) { + if (sourceFlow == null) + throw new IllegalArgumentException(); + val it = new FlowAddedBuilder(); + + hardTimeout = sourceFlow.hardTimeout as int + idleTimeout = sourceFlow.idleTimeout as int + cookie = BigInteger.valueOf(sourceFlow.id) + priority = sourceFlow.priority as int + + val sourceActions = sourceFlow.actions; + val targetActions = new ArrayList(); + for (sourceAction : sourceActions) { + targetActions.add(sourceAction.toAction()); + } + action = targetActions; + match = sourceFlow.match.toMatch(); + return it.build(); + + } + + public static def flowStatisticsInput(Node sourceNode, Flow sourceFlow) { + val it = new GetFlowStatisticsInputBuilder(); + val source = flowAdded(sourceFlow); + cookie = (source.getCookie()); + action = (source.getAction()); + action = (source.getAction()); + cookie = (source.getCookie()); + hardTimeout = (source.getHardTimeout()); + match = (source.getMatch()); + priority = (source.getPriority()); + node = sourceNode.toNodeRef(); + return it.build(); + } + + public static def removeFlowInput(Node sourceNode, Flow sourceFlow) { + val it = new RemoveFlowInputBuilder(); + val source = flowAdded(sourceFlow); + action = (source.getAction()); + cookie = (source.getCookie()); + action = (source.getAction()); + cookie = (source.getCookie()); + hardTimeout = (source.getHardTimeout()); + match = (source.getMatch()); + priority = (source.getPriority()); + node = sourceNode.toNodeRef(); + return it.build(); + } + + public static def addFlowInput(Node sourceNode, Flow sourceFlow) { + val it = new AddFlowInputBuilder(); + val source = flowAdded(sourceFlow); + action = (source.getAction()); + cookie = (source.getCookie()); + action = (source.getAction()); + cookie = (source.getCookie()); + hardTimeout = (source.getHardTimeout()); + match = (source.getMatch()); + priority = (source.getPriority()); + node = sourceNode.toNodeRef() + return it.build(); + } + + public static def updateFlowInput(Node sourceNode, Flow oldFlow, Flow newFlow) { + val it = new UpdateFlowInputBuilder(); + val source = flowAdded(newFlow); + action = (source.getAction()); + cookie = (source.getCookie()); + action = (source.getAction()); + cookie = (source.getCookie()); + hardTimeout = (source.getHardTimeout()); + match = (source.getMatch()); + priority = (source.getPriority()); + node = sourceNode.toNodeRef() + return it.build(); + } + + public static dispatch def toAction(Controller sourceAction) { + val actionBuilder = new ActionBuilder(); + actionBuilder.action = new ControllerActionBuilder().build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(Drop sourceAction) { + val actionBuilder = new ActionBuilder(); + actionBuilder.action = new DropActionBuilder().build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(Flood sourceAction) { + val actionBuilder = new ActionBuilder(); + actionBuilder.action = new FloodActionBuilder().build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(FloodAll sourceAction) { + val actionBuilder = new ActionBuilder(); + actionBuilder.action = new FloodAllActionBuilder().build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(HwPath sourceAction) { + val actionBuilder = new ActionBuilder(); + actionBuilder.action = new HwPathActionBuilder().build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(Loopback sourceAction) { + val actionBuilder = new ActionBuilder(); + actionBuilder.action = new LoopbackActionBuilder().build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(Output sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new OutputActionBuilder(); + outputNodeConnector = sourceAction.port.toUriList; + actionBuilder.action = it.build(); + return actionBuilder.build(); + + } + + + + public static dispatch def toAction(PopVlan sourceAction) { + val actionBuilder = new ActionBuilder(); + actionBuilder.action = new PopVlanActionBuilder().build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(PushVlan sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new PushVlanActionBuilder(); + cfi = new VlanCfi(sourceAction.cfi); + vlanId = new VlanId(sourceAction.vlanId); + pcp = sourceAction.pcp; + tag = sourceAction.tag; + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetDlDst sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new SetDlDstActionBuilder(); + address = sourceAction.dlAddress.toMacAddress(); + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetDlSrc sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new SetDlSrcActionBuilder(); + address = sourceAction.dlAddress.toMacAddress; + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetDlType sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new SetDlTypeActionBuilder(); + dlType = new EtherType(sourceAction.dlType as long); + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetNextHop sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new SetNextHopActionBuilder(); + val inetAddress = sourceAction.address; + address = inetAddress.toInetAddress; + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetNwDst sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new SetNwDstActionBuilder(); + val inetAddress = sourceAction.address; + address = inetAddress.toInetAddress; + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetNwSrc sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new SetNwSrcActionBuilder(); + val inetAddress = sourceAction.address; + address = inetAddress.toInetAddress; + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetNwTos sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new SetNwTosActionBuilder(); + tos = sourceAction.nwTos; + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetTpDst sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new SetTpDstActionBuilder(); + port = new PortNumber(sourceAction.port); + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetTpSrc sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new SetTpSrcActionBuilder(); + port = new PortNumber(sourceAction.port); + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetVlanCfi sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new SetVlanCfiActionBuilder(); + vlanCfi = new VlanCfi(sourceAction.cfi); + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetVlanId sourceAction) { + val actionBuilder = new ActionBuilder(); + + val it = new SetVlanIdActionBuilder(); + vlanId = new VlanId(sourceAction.vlanId); + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SetVlanPcp sourceAction) { + val actionBuilder = new ActionBuilder(); + val it = new SetVlanPcpActionBuilder(); + vlanPcp = new VlanPcp(sourceAction.pcp as short); + actionBuilder.action = it.build(); + return actionBuilder.build(); + } + + public static dispatch def toAction(SwPath sourceAction) { + val actionBuilder = new ActionBuilder(); + actionBuilder.action = new SwPathActionBuilder().build(); + return actionBuilder.build(); + } + + public static def dispatch Address toInetAddress(Inet4Address address) { + val it = new Ipv4Builder + ipv4Address = new Ipv4Prefix(InetAddresses.toAddrString(address)) + return it.build() + } + + public static def dispatch Address toInetAddress(Inet6Address address) { + val it = new Ipv6Builder + ipv6Address = new Ipv6Prefix(InetAddresses.toAddrString(address)) + return it.build() + } + + public static def List toUriList(NodeConnector connector) { + throw new UnsupportedOperationException("TODO: auto-generated method stub") + } + + public static def MacAddress toMacAddress(byte[] bytes) { + val sb = new StringBuilder(18); + for (byte b : bytes) { + if (sb.length() > 0) + sb.append(':'); + sb.append(String.format("%02x", b)); + } + return new MacAddress(sb.toString()); + } +}