X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fcompatibility%2Fsal-compatibility%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcompatibility%2FToSalConversionsUtils.java;h=b64f17a77028ff018df7691d4f0498027356d4a8;hp=96b69618b0db78031a3bf20e2796af99ea42bef2;hb=bc1e703ab2d257b450fe6eb3fe0fe5333783bc69;hpb=1a898f3bd37baec93cc13140a5eb24b30d4ea999 diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java index 96b69618b0..b64f17a770 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java @@ -1,6 +1,32 @@ +/* + * Copyright (c) 2014 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, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ package org.opendaylight.controller.sal.compatibility; -import com.google.common.net.InetAddresses; +import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.CRUDP; +import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.ETHERNET_ARP; +import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.TCP; +import static org.opendaylight.controller.sal.compatibility.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; +import static org.opendaylight.controller.sal.match.MatchType.DL_VLAN; +import static org.opendaylight.controller.sal.match.MatchType.DL_VLAN_PR; +import static org.opendaylight.controller.sal.match.MatchType.NW_DST; +import static org.opendaylight.controller.sal.match.MatchType.NW_PROTO; +import static org.opendaylight.controller.sal.match.MatchType.NW_SRC; +import static org.opendaylight.controller.sal.match.MatchType.NW_TOS; +import static org.opendaylight.controller.sal.match.MatchType.TP_DST; +import static org.opendaylight.controller.sal.match.MatchType.TP_SRC; + +import java.net.InetAddress; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import org.opendaylight.controller.sal.action.Controller; import org.opendaylight.controller.sal.action.Drop; @@ -24,50 +50,56 @@ 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.ConstructionException; +import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.core.NodeConnector; import org.opendaylight.controller.sal.flowprogrammer.Flow; import org.opendaylight.controller.sal.match.Match; +import org.opendaylight.controller.sal.match.MatchType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp; 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.action.types.rev131112.ActionList; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.VlanCfi; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.ControllerAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodAllAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.HwPathAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.LoopbackAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlTypeAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNextHopAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanCfiAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpAction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SwPathAction; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.ControllerActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodAllActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.HwPathActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.LoopbackActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlTypeActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNextHopActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanCfiActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SwPathActionCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.Address; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv6; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SwitchFlowRemoved; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.GenericFlowAttributes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; 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.rev131026.MacAddressFilter; @@ -86,37 +118,53 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026 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 org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.net.InetAddress; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.ETHERNET_ARP; -import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.SCTP; -import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.TCP; -import static org.opendaylight.controller.sal.compatibility.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; -import static org.opendaylight.controller.sal.match.MatchType.DL_VLAN; -import static org.opendaylight.controller.sal.match.MatchType.DL_VLAN_PR; -import static org.opendaylight.controller.sal.match.MatchType.NW_DST; -import static org.opendaylight.controller.sal.match.MatchType.NW_PROTO; -import static org.opendaylight.controller.sal.match.MatchType.NW_SRC; -import static org.opendaylight.controller.sal.match.MatchType.NW_TOS; -import static org.opendaylight.controller.sal.match.MatchType.TP_DST; -import static org.opendaylight.controller.sal.match.MatchType.TP_SRC; +import com.google.common.net.InetAddresses; public class ToSalConversionsUtils { + private static final Logger LOG = LoggerFactory.getLogger(ToSalConversionsUtils.class); + private ToSalConversionsUtils() { } - public static Flow toFlow(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow source) { + public static Flow toFlow(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow source, Node node) { final Flow target = new Flow(); + genericFlowToAdFlow(source, target); + + target.setMatch(toMatch(source.getMatch())); + + List actions = getAction(source); + if (actions != null) { + target.setActions(actionFrom(actions, node)); + } + return target; + } + + /** + * @param source notification, missing instructions + * @param node corresponding node where the flow change occured + * @return ad-sal node, build from given data + */ + public static Flow toFlow(SwitchFlowRemoved source, Node node) { + final Flow target = new Flow(); + genericFlowToAdFlow(source, target); + + target.setMatch(toMatch(source.getMatch())); + + return target; + } + + /** + * @param source + * @param target + */ + private static void genericFlowToAdFlow(GenericFlowAttributes source, + final Flow target) { Integer hardTimeout = source.getHardTimeout(); if (hardTimeout != null) { target.setHardTimeout(hardTimeout.shortValue()); @@ -131,24 +179,15 @@ public class ToSalConversionsUtils { if (priority != null) { target.setPriority(priority.shortValue()); } - - target.setMatch(toMatch(source.getMatch())); - - List actions = getAction(source); - if (actions != null) { - target.setActions(actionFrom(actions)); - } - - target.setId(source.getCookie().longValue()); - return target; + target.setId(source.getCookie().getValue().longValue()); } - + 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()); + if (instruction.getInstruction() instanceof ApplyActionsCase) { + return (((ApplyActionsCase) instruction.getInstruction()).getApplyActions().getAction()); } } } @@ -156,125 +195,125 @@ public class ToSalConversionsUtils { return Collections.emptyList(); } - public static List actionFrom(List actions) { + public static List actionFrom(List actions, Node node) { List targetAction = new ArrayList<>(); for (Action action : actions) { - org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action sourceAction = action + org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action sourceAction = action .getAction(); - if (sourceAction instanceof ControllerAction) { + if (sourceAction instanceof ControllerActionCase) { targetAction.add(new Controller()); - } else if (sourceAction instanceof OutputAction) { + } else if (sourceAction instanceof OutputActionCase) { - List nodeConnectors = ((OutputAction) sourceAction).getOutputNodeConnector(); - if (nodeConnectors != null) { - for (Uri uri : nodeConnectors) { - targetAction.add(new Output(fromNodeConnectorRef(uri))); - } + Uri nodeConnector = ((OutputActionCase) sourceAction).getOutputAction().getOutputNodeConnector(); + if (nodeConnector != null) { + //for (Uri uri : nodeConnectors) { + targetAction.add(new Output(fromNodeConnectorRef(nodeConnector, node))); + //} } - } else if (sourceAction instanceof PopMplsAction) { + } else if (sourceAction instanceof PopMplsActionCase) { // TODO: define maping - } else if (sourceAction instanceof PushMplsAction) { + } else if (sourceAction instanceof PushMplsActionCase) { // TODO: define maping - } else if (sourceAction instanceof PushPbbAction) { + } else if (sourceAction instanceof PushPbbActionCase) { // TODO: define maping - } else if (sourceAction instanceof SetMplsTtlAction) { + } else if (sourceAction instanceof SetMplsTtlActionCase) { // TODO: define maping // targetAction = //no action to map - } else if (sourceAction instanceof SetNwTtlAction) { + } else if (sourceAction instanceof SetNwTtlActionCase) { // TODO: define maping - } else if (sourceAction instanceof SetQueueAction) { + } else if (sourceAction instanceof SetQueueActionCase) { // TODO: define maping // targetAction = //no action to map - } else if (sourceAction instanceof DropAction) { + } else if (sourceAction instanceof DropActionCase) { targetAction.add(new Drop()); - } else if (sourceAction instanceof FloodAction) { + } else if (sourceAction instanceof FloodActionCase) { targetAction.add(new Flood()); - } else if (sourceAction instanceof FloodAllAction) { + } else if (sourceAction instanceof FloodAllActionCase) { targetAction.add(new FloodAll()); - } else if (sourceAction instanceof HwPathAction) { + } else if (sourceAction instanceof HwPathActionCase) { targetAction.add(new HwPath()); - } else if (sourceAction instanceof LoopbackAction) { + } else if (sourceAction instanceof LoopbackActionCase) { targetAction.add(new Loopback()); - } else if (sourceAction instanceof PopVlanAction) { + } else if (sourceAction instanceof PopVlanActionCase) { targetAction.add(new PopVlan()); - } else if (sourceAction instanceof PushVlanAction) { - PushVlanAction pushVlanAction = (PushVlanAction) sourceAction; - PushVlan pushVlan = pushVlanFrom(pushVlanAction); + } else if (sourceAction instanceof PushVlanActionCase) { + PushVlanActionCase pushVlanAction = (PushVlanActionCase) sourceAction; + PushVlan pushVlan = pushVlanFrom(pushVlanAction.getPushVlanAction()); if (pushVlan != null) { targetAction.add(pushVlan); } - } else if (sourceAction instanceof SetDlDstAction) { - MacAddress addressL2Dest = ((SetDlDstAction) sourceAction).getAddress(); + } else if (sourceAction instanceof SetDlDstActionCase) { + MacAddress addressL2Dest = ((SetDlDstActionCase) sourceAction).getSetDlDstAction().getAddress(); if (addressL2Dest != null) { targetAction.add(new SetDlDst(bytesFrom(addressL2Dest))); } - } else if (sourceAction instanceof SetDlSrcAction) { - MacAddress addressL2Src = ((SetDlSrcAction) sourceAction).getAddress(); + } else if (sourceAction instanceof SetDlSrcActionCase) { + MacAddress addressL2Src = ((SetDlSrcActionCase) sourceAction).getSetDlSrcAction().getAddress(); if (addressL2Src != null) { targetAction.add(new SetDlSrc(bytesFrom(addressL2Src))); } - } else if (sourceAction instanceof SetDlTypeAction) { - EtherType dlType = ((SetDlTypeAction) sourceAction).getDlType(); + } else if (sourceAction instanceof SetDlTypeActionCase) { + EtherType dlType = ((SetDlTypeActionCase) sourceAction).getSetDlTypeAction().getDlType(); if (dlType != null) { Long dlTypeValue = dlType.getValue(); if (dlTypeValue != null) { targetAction.add(new SetDlType(dlTypeValue.intValue())); } } - } else if (sourceAction instanceof SetNextHopAction) { - Address addressL3 = ((SetNextHopAction) sourceAction).getAddress(); + } else if (sourceAction instanceof SetNextHopActionCase) { + Address addressL3 = ((SetNextHopActionCase) sourceAction).getSetNextHopAction().getAddress(); InetAddress inetAddress = inetAddressFrom(addressL3); if (inetAddress != null) { targetAction.add(new SetNextHop(inetAddress)); } - } else if (sourceAction instanceof SetNwDstAction) { - Address addressL3 = ((SetNwDstAction) sourceAction).getAddress(); + } else if (sourceAction instanceof SetNwDstActionCase) { + Address addressL3 = ((SetNwDstActionCase) sourceAction).getSetNwDstAction().getAddress(); InetAddress inetAddress = inetAddressFrom(addressL3); if (inetAddress != null) { targetAction.add(new SetNwDst(inetAddress)); } - } else if (sourceAction instanceof SetNwSrcAction) { - Address addressL3 = ((SetNwSrcAction) sourceAction).getAddress(); + } else if (sourceAction instanceof SetNwSrcActionCase) { + Address addressL3 = ((SetNwSrcActionCase) sourceAction).getSetNwSrcAction().getAddress(); InetAddress inetAddress = inetAddressFrom(addressL3); if (inetAddress != null) { targetAction.add(new SetNwSrc(inetAddress)); } - } else if (sourceAction instanceof SetNwTosAction) { - Integer tos = ((SetNwTosAction) sourceAction).getTos(); + } else if (sourceAction instanceof SetNwTosActionCase) { + Integer tos = ((SetNwTosActionCase) sourceAction).getSetNwTosAction().getTos(); if (tos != null) { targetAction.add(new SetNwTos(tos)); } - } else if (sourceAction instanceof SetTpDstAction) { - PortNumber port = ((SetTpDstAction) sourceAction).getPort(); + } else if (sourceAction instanceof SetTpDstActionCase) { + PortNumber port = ((SetTpDstActionCase) sourceAction).getSetTpDstAction().getPort(); if (port != null) { Integer portValue = port.getValue(); if (port.getValue() != null) { targetAction.add(new SetTpDst(portValue)); } } - } else if (sourceAction instanceof SetTpSrcAction) { - PortNumber port = ((SetTpSrcAction) sourceAction).getPort(); + } else if (sourceAction instanceof SetTpSrcActionCase) { + PortNumber port = ((SetTpSrcActionCase) sourceAction).getSetTpSrcAction().getPort(); if (port != null) { Integer portValue = port.getValue(); if (port.getValue() != null) { targetAction.add(new SetTpSrc(portValue)); } } - } else if (sourceAction instanceof SetVlanCfiAction) { - VlanCfi vlanCfi = ((SetVlanCfiAction) sourceAction).getVlanCfi(); + } else if (sourceAction instanceof SetVlanCfiActionCase) { + VlanCfi vlanCfi = ((SetVlanCfiActionCase) sourceAction).getSetVlanCfiAction().getVlanCfi(); if (vlanCfi != null) { Integer vlanCfiValue = vlanCfi.getValue(); if (vlanCfiValue != null) { targetAction.add(new SetVlanCfi(vlanCfiValue)); } } - } else if (sourceAction instanceof SetVlanIdAction) { - org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId vlanID = ((SetVlanIdAction) sourceAction) + } else if (sourceAction instanceof SetVlanIdActionCase) { + org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId vlanID = ((SetVlanIdActionCase) sourceAction).getSetVlanIdAction() .getVlanId(); if (vlanID != null) { Integer vlanIdValue = vlanID.getValue(); @@ -282,15 +321,15 @@ public class ToSalConversionsUtils { targetAction.add(new SetVlanId(vlanIdValue)); } } - } else if (sourceAction instanceof SetVlanPcpAction) { - VlanPcp vlanPcp = ((SetVlanPcpAction) sourceAction).getVlanPcp(); + } else if (sourceAction instanceof SetVlanPcpActionCase) { + VlanPcp vlanPcp = ((SetVlanPcpActionCase) sourceAction).getSetVlanPcpAction().getVlanPcp(); if (vlanPcp != null) { Short vlanPcpValue = vlanPcp.getValue(); if (vlanPcpValue != null) { targetAction.add(new SetVlanPcp(vlanPcpValue)); } } - } else if (sourceAction instanceof SwPathAction) { + } else if (sourceAction instanceof SwPathActionCase) { targetAction.add(new SwPath()); } } @@ -315,7 +354,7 @@ public class ToSalConversionsUtils { return null; } - private static PushVlan pushVlanFrom(PushVlanAction pushVlanAction) { + private static PushVlan pushVlanFrom(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanAction pushVlanAction) { final int tag; final int pcp; final int cfi; @@ -337,12 +376,17 @@ public class ToSalConversionsUtils { return null; } - private static NodeConnector fromNodeConnectorRef(Uri uri) { - // TODO: Define mapping - return null; + private static NodeConnector fromNodeConnectorRef(Uri uri, Node node) { + NodeConnector nodeConnector = null; + try { + nodeConnector = new NodeConnector(NodeMapping.MD_SAL_TYPE,node.getNodeIDString()+":"+uri.getValue(),node); + } catch (ConstructionException e) { + e.printStackTrace(); + } + return nodeConnector; } - public static Match toMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match source) { + public static Match toMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match source) { Match target = new Match(); if (source != null) { fillFrom(target, source.getVlanMatch()); @@ -350,11 +394,30 @@ public class ToSalConversionsUtils { fillFrom(target, source.getLayer3Match()); fillFrom(target, source.getLayer4Match()); fillFrom(target, source.getIpMatch()); + fillFrom(target, source.getInPort()); } return target; } + /** + * @param target + * @param inPort + */ + private static void fillFrom(Match target, NodeConnectorId inPort) { + if (inPort != null) { + String inPortValue = inPort.getValue(); + if (inPortValue != null) { + try { + target.setField(MatchType.IN_PORT, NodeMapping.toADNodeConnector(inPort, + NodeMapping.toAdNodeId(inPort))); + } catch (ConstructionException e) { + LOG.warn("nodeConnector construction failed", e); + } + } + } + } + private static void fillFrom(Match target, VlanMatch vlanMatch) { if (vlanMatch != null) { VlanId vlanId = vlanMatch.getVlanId(); @@ -464,7 +527,7 @@ public class ToSalConversionsUtils { } } - target.setField(NW_PROTO, SCTP); + target.setField(NW_PROTO, CRUDP); } @@ -483,11 +546,11 @@ public class ToSalConversionsUtils { private static void fillFromArp(Match target, ArpMatch source) { Ipv4Prefix sourceAddress = source.getArpSourceTransportAddress(); if (sourceAddress != null) { - target.setField(NW_SRC, (InetAddress) inetAddressFrom(sourceAddress), null); + target.setField(NW_SRC, inetAddressFrom(sourceAddress), null); } Ipv4Prefix destAddress = source.getArpTargetTransportAddress(); if (destAddress != null) { - target.setField(NW_DST, (InetAddress) inetAddressFrom(destAddress), null); + target.setField(NW_DST, inetAddressFrom(destAddress), null); } ArpSourceHardwareAddress sourceHwAddress = source.getArpSourceHardwareAddress(); if (sourceHwAddress != null) { @@ -505,22 +568,22 @@ public class ToSalConversionsUtils { private static void fillFromIpv6(Match target, Ipv6Match source) { Ipv6Prefix sourceAddress = source.getIpv6Source(); if (sourceAddress != null) { - target.setField(NW_SRC, (InetAddress) inetAddressFrom(sourceAddress), null); + target.setField(NW_SRC, inetAddressFrom(sourceAddress), null); } Ipv6Prefix destAddress = source.getIpv6Destination(); if (destAddress != null) { - target.setField(NW_DST, (InetAddress) inetAddressFrom(destAddress), null); + target.setField(NW_DST, inetAddressFrom(destAddress), null); } } private static void fillFromIpv4(Match target, Ipv4Match source) { Ipv4Prefix sourceAddress = source.getIpv4Source(); if (sourceAddress != null) { - target.setField(NW_SRC, (InetAddress) inetAddressFrom(sourceAddress), null); + target.setField(NW_SRC, inetAddressFrom(sourceAddress), null); } Ipv4Prefix destAddress = source.getIpv4Destination(); if (destAddress != null) { - target.setField(NW_DST, (InetAddress) inetAddressFrom(destAddress), null); + target.setField(NW_DST, inetAddressFrom(destAddress), null); } } @@ -563,7 +626,7 @@ public class ToSalConversionsUtils { } } - private static byte[] bytesFrom(MacAddress address) { + public static byte[] bytesFrom(MacAddress address) { String[] mac = address.getValue().split(":"); byte[] macAddress = new byte[6]; // mac.length == 6 bytes for (int i = 0; i < mac.length; i++) { @@ -571,4 +634,15 @@ public class ToSalConversionsUtils { } return macAddress; } + + public static byte[] bytesFromDpid(long dpid) { + byte[] mac = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + + for (short i = 0; i < 6; i++) { + mac[5 - i] = (byte) dpid; + dpid >>= 8; + } + + return mac; + } }