From: Alessandro Boch Date: Thu, 26 Sep 2013 21:41:24 +0000 (+0000) Subject: Merge "In case of an error event, cleanup the config too" X-Git-Tag: releasepom-0.1.0~10 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=dfec2688d4213adc433187295d6667cea746d68c;hp=4610c6bd3a8209fc95515ed6626ce71736049284 Merge "In case of an error event, cleanup the config too" --- diff --git a/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/IConnectionManager.java b/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/IConnectionManager.java index 788af16248..106d14dc39 100644 --- a/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/IConnectionManager.java +++ b/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/IConnectionManager.java @@ -14,6 +14,7 @@ import java.util.Map; import java.util.Set; import org.opendaylight.controller.sal.connection.ConnectionConstants; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.utils.Status; diff --git a/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/internal/ConnectionManager.java b/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/internal/ConnectionManager.java index 2d5f80fb79..1beb7fe0bb 100644 --- a/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/internal/ConnectionManager.java +++ b/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/internal/ConnectionManager.java @@ -35,12 +35,12 @@ import org.eclipse.osgi.framework.console.CommandProvider; import org.opendaylight.controller.clustering.services.ICacheUpdateAware; import org.opendaylight.controller.clustering.services.IClusterGlobalServices; import org.opendaylight.controller.clustering.services.ICoordinatorChangeAware; -import org.opendaylight.controller.connectionmanager.ConnectionLocality; import org.opendaylight.controller.connectionmanager.ConnectionMgmtScheme; import org.opendaylight.controller.connectionmanager.IConnectionManager; import org.opendaylight.controller.connectionmanager.scheme.AbstractScheme; import org.opendaylight.controller.connectionmanager.scheme.SchemeFactory; import org.opendaylight.controller.sal.connection.ConnectionConstants; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.sal.connection.IConnectionListener; import org.opendaylight.controller.sal.connection.IConnectionService; import org.opendaylight.controller.sal.core.Node; diff --git a/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/scheme/AbstractScheme.java b/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/scheme/AbstractScheme.java index 062fd1ee77..d7b1968429 100644 --- a/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/scheme/AbstractScheme.java +++ b/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/scheme/AbstractScheme.java @@ -14,8 +14,8 @@ import org.opendaylight.controller.clustering.services.CacheConfigException; import org.opendaylight.controller.clustering.services.CacheExistException; import org.opendaylight.controller.clustering.services.IClusterGlobalServices; import org.opendaylight.controller.clustering.services.IClusterServices; -import org.opendaylight.controller.connectionmanager.ConnectionLocality; import org.opendaylight.controller.connectionmanager.ConnectionMgmtScheme; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.utils.Status; import org.opendaylight.controller.sal.utils.StatusCode; diff --git a/opendaylight/forwardingrulesmanager/implementation/pom.xml b/opendaylight/forwardingrulesmanager/implementation/pom.xml index 651d077fd8..e7faf73584 100644 --- a/opendaylight/forwardingrulesmanager/implementation/pom.xml +++ b/opendaylight/forwardingrulesmanager/implementation/pom.xml @@ -62,6 +62,7 @@ org.opendaylight.controller.sal.match, org.opendaylight.controller.sal.utils, org.opendaylight.controller.sal.packet, + org.opendaylight.controller.sal.connection, org.opendaylight.controller.forwardingrulesmanager, org.opendaylight.controller.connectionmanager, javax.xml.bind.annotation, @@ -135,6 +136,11 @@ sal 0.5.0-SNAPSHOT + + org.opendaylight.controller + sal.connection + 0.1.0-SNAPSHOT + org.opendaylight.controller forwardingrulesmanager diff --git a/opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManager.java b/opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManager.java index fe01fb0e44..c2d1f46737 100644 --- a/opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManager.java +++ b/opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManager.java @@ -38,7 +38,7 @@ import org.opendaylight.controller.clustering.services.ICacheUpdateAware; import org.opendaylight.controller.clustering.services.IClusterContainerServices; import org.opendaylight.controller.clustering.services.IClusterServices; import org.opendaylight.controller.configuration.IConfigurationContainerAware; -import org.opendaylight.controller.connectionmanager.ConnectionLocality; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.connectionmanager.IConnectionManager; import org.opendaylight.controller.forwardingrulesmanager.FlowConfig; import org.opendaylight.controller.forwardingrulesmanager.FlowEntry; 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 ad1a2f9387..793ac49888 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 @@ -13,6 +13,7 @@ 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.HashSet; import java.util.List; import java.util.Set; @@ -73,159 +74,155 @@ public class ToSalConversionsUtils { List actions = source.getAction(); if (actions != null) { - for (Action sourceAction : actions) { - Set targetActions = actionFrom(sourceAction); - for (org.opendaylight.controller.sal.action.Action targetAction : targetActions) { - target.addAction(targetAction); - } - } + target.setActions(actionFrom(actions)); } target.setId(source.getCookie().longValue()); return target; } - public static Set actionFrom(Action source) { - org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.Action sourceAction = source - .getAction(); - Set targetAction = new HashSet<>(); - if (sourceAction instanceof ControllerAction) { - targetAction.add(new Controller()); - } else if (sourceAction instanceof OutputAction) { - - List nodeConnectors = ((OutputAction) sourceAction).getOutputNodeConnector(); - for (Uri uri : nodeConnectors) { - targetAction.add(new Output(fromNodeConnectorRef(uri))); - } - } else if (sourceAction instanceof PopMplsAction) { - // TODO: define maping - } else if (sourceAction instanceof PushMplsAction) { - // TODO: define maping - } else if (sourceAction instanceof PushPbbAction) { - // TODO: define maping - } else if (sourceAction instanceof PushVlanAction) { - // TODO: define maping - // PushVlanAction vlanAction = (PushVlanAction) sourceAction; - // targetAction.add(new PushVlan(vlanAction., pcp, cfi, vlanId); - } else if (sourceAction instanceof SetMplsTtlAction) { - // TODO: define maping - // targetAction = //no action to map - } else if (sourceAction instanceof SetNwTtlAction) { - // TODO: define maping - } else if (sourceAction instanceof SetQueueAction) { - // TODO: define maping - // targetAction = //no action to map - } else if (sourceAction instanceof DropAction) { - targetAction.add(new Drop()); - } else if (sourceAction instanceof FloodAction) { - targetAction.add(new Flood()); - } else if (sourceAction instanceof FloodAllAction) { - targetAction.add(new FloodAll()); - } else if (sourceAction instanceof HwPathAction) { - targetAction.add(new HwPath()); - } else if (sourceAction instanceof LoopbackAction) { - targetAction.add(new Loopback()); - } else if (sourceAction instanceof PopVlanAction) { - targetAction.add(new PopVlan()); - } else if (sourceAction instanceof PushVlanAction) { - PushVlanAction pushVlanAction = (PushVlanAction) sourceAction; - PushVlan pushVlan = pushVlanFrom(pushVlanAction); - if (pushVlan != null) { - targetAction.add(pushVlan); - } - } 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())); + 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 + .getAction(); + + if (sourceAction instanceof ControllerAction) { + targetAction.add(new Controller()); + } else if (sourceAction instanceof OutputAction) { + + List nodeConnectors = ((OutputAction) sourceAction).getOutputNodeConnector(); + if (nodeConnectors != null) { + for (Uri uri : nodeConnectors) { + targetAction.add(new Output(fromNodeConnectorRef(uri))); + } } - } - } 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())); + } else if (sourceAction instanceof PopMplsAction) { + // TODO: define maping + } else if (sourceAction instanceof PushMplsAction) { + // TODO: define maping + } else if (sourceAction instanceof PushPbbAction) { + // TODO: define maping + } else if (sourceAction instanceof SetMplsTtlAction) { + // TODO: define maping + // targetAction = //no action to map + } else if (sourceAction instanceof SetNwTtlAction) { + // TODO: define maping + } else if (sourceAction instanceof SetQueueAction) { + // TODO: define maping + // targetAction = //no action to map + } else if (sourceAction instanceof DropAction) { + targetAction.add(new Drop()); + } else if (sourceAction instanceof FloodAction) { + targetAction.add(new Flood()); + } else if (sourceAction instanceof FloodAllAction) { + targetAction.add(new FloodAll()); + } else if (sourceAction instanceof HwPathAction) { + targetAction.add(new HwPath()); + } else if (sourceAction instanceof LoopbackAction) { + targetAction.add(new Loopback()); + } else if (sourceAction instanceof PopVlanAction) { + targetAction.add(new PopVlan()); + } else if (sourceAction instanceof PushVlanAction) { + PushVlanAction pushVlanAction = (PushVlanAction) sourceAction; + PushVlan pushVlan = pushVlanFrom(pushVlanAction); + if (pushVlan != null) { + targetAction.add(pushVlan); } - } - } else if (sourceAction instanceof SetDlTypeAction) { - EtherType dlType = ((SetDlTypeAction) sourceAction).getDlType(); - if (dlType != null) { - Long dlTypeValue = dlType.getValue(); - if (dlTypeValue != null) { - targetAction.add(new SetDlType(dlTypeValue.intValue())); + } 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())); + } } - } - } else if (sourceAction instanceof SetNextHopAction) { - Address addressL3 = ((SetNextHopAction) sourceAction).getAddress(); + } 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())); + } + } + } else if (sourceAction instanceof SetDlTypeAction) { + EtherType dlType = ((SetDlTypeAction) sourceAction).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(); - InetAddress inetAddress = inetAddressFrom(addressL3); - if (inetAddress != null) { - targetAction.add(new SetNextHop(inetAddress)); - } - } else if (sourceAction instanceof SetNwDstAction) { - Address addressL3 = ((SetNwDstAction) sourceAction).getAddress(); + InetAddress inetAddress = inetAddressFrom(addressL3); + if (inetAddress != null) { + targetAction.add(new SetNextHop(inetAddress)); + } + } else if (sourceAction instanceof SetNwDstAction) { + Address addressL3 = ((SetNwDstAction) sourceAction).getAddress(); - InetAddress inetAddress = inetAddressFrom(addressL3); - if (inetAddress != null) { - targetAction.add(new SetNwDst(inetAddress)); - } - } else if (sourceAction instanceof SetNwSrcAction) { - Address addressL3 = ((SetNwDstAction) sourceAction).getAddress(); + InetAddress inetAddress = inetAddressFrom(addressL3); + if (inetAddress != null) { + targetAction.add(new SetNwDst(inetAddress)); + } + } else if (sourceAction instanceof SetNwSrcAction) { + Address addressL3 = ((SetNwSrcAction) sourceAction).getAddress(); - InetAddress inetAddress = inetAddressFrom(addressL3); - if (inetAddress != null) { - targetAction.add(new SetNwSrc(inetAddress)); - } - } else if (sourceAction instanceof SetNwTosAction) { - Integer tos = ((SetNwTosAction) sourceAction).getTos(); - if (tos != null) { - targetAction.add(new SetNwTos(tos)); - } - } else if (sourceAction instanceof SetTpDstAction) { - PortNumber port = ((SetTpDstAction) sourceAction).getPort(); - if (port != null) { - Integer portValue = port.getValue(); - if (port.getValue() != null) { - targetAction.add(new SetTpDst(portValue)); + InetAddress inetAddress = inetAddressFrom(addressL3); + if (inetAddress != null) { + targetAction.add(new SetNwSrc(inetAddress)); } - } - } else if (sourceAction instanceof SetTpSrcAction) { - PortNumber port = ((SetTpSrcAction) sourceAction).getPort(); - if (port != null) { - Integer portValue = port.getValue(); - if (port.getValue() != null) { - targetAction.add(new SetTpSrc(portValue)); + } else if (sourceAction instanceof SetNwTosAction) { + Integer tos = ((SetNwTosAction) sourceAction).getTos(); + if (tos != null) { + targetAction.add(new SetNwTos(tos)); } - } - } else if (sourceAction instanceof SetVlanCfiAction) { - VlanCfi vlanCfi = ((SetVlanCfiAction) sourceAction).getVlanCfi(); - if (vlanCfi != null) { - Integer vlanCfiValue = vlanCfi.getValue(); - if (vlanCfiValue != null) { - targetAction.add(new SetVlanCfi(vlanCfiValue)); + } else if (sourceAction instanceof SetTpDstAction) { + PortNumber port = ((SetTpDstAction) sourceAction).getPort(); + if (port != null) { + Integer portValue = port.getValue(); + if (port.getValue() != null) { + targetAction.add(new SetTpDst(portValue)); + } } - } - } else if (sourceAction instanceof SetVlanIdAction) { - org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId vlanID = ((SetVlanIdAction) sourceAction) - .getVlanId(); - if (vlanID != null) { - Integer vlanIdValue = vlanID.getValue(); - if (vlanIdValue != null) { - targetAction.add(new SetVlanId(vlanIdValue)); + } else if (sourceAction instanceof SetTpSrcAction) { + PortNumber port = ((SetTpSrcAction) sourceAction).getPort(); + if (port != null) { + Integer portValue = port.getValue(); + if (port.getValue() != null) { + targetAction.add(new SetTpSrc(portValue)); + } } - } - } else if (sourceAction instanceof SetVlanPcpAction) { - VlanPcp vlanPcp = ((SetVlanPcpAction) sourceAction).getVlanPcp(); - if (vlanPcp != null) { - Short vlanPcpValue = vlanPcp.getValue(); - if (vlanPcpValue != null) { - targetAction.add(new SetVlanPcp(vlanPcpValue)); + } else if (sourceAction instanceof SetVlanCfiAction) { + VlanCfi vlanCfi = ((SetVlanCfiAction) sourceAction).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) + .getVlanId(); + if (vlanID != null) { + Integer vlanIdValue = vlanID.getValue(); + if (vlanIdValue != null) { + targetAction.add(new SetVlanId(vlanIdValue)); + } + } + } else if (sourceAction instanceof SetVlanPcpAction) { + VlanPcp vlanPcp = ((SetVlanPcpAction) sourceAction).getVlanPcp(); + if (vlanPcp != null) { + Short vlanPcpValue = vlanPcp.getValue(); + if (vlanPcpValue != null) { + targetAction.add(new SetVlanPcp(vlanPcpValue)); + } } + } else if (sourceAction instanceof SwPathAction) { + targetAction.add(new SwPath()); } - } else if (sourceAction instanceof SwPathAction) { - targetAction.add(new SwPath()); } return targetAction; diff --git a/opendaylight/md-sal/sal-compability/src/test/java/org/opendaylight/controller/sal/compability/TestToSalConversionsUtils.java b/opendaylight/md-sal/sal-compability/src/test/java/org/opendaylight/controller/sal/compability/TestToSalConversionsUtils.java new file mode 100644 index 0000000000..33af3a1236 --- /dev/null +++ b/opendaylight/md-sal/sal-compability/src/test/java/org/opendaylight/controller/sal/compability/TestToSalConversionsUtils.java @@ -0,0 +1,341 @@ +package org.opendaylight.controller.sal.compability; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.math.BigInteger; +import java.net.Inet4Address; +import java.net.Inet6Address; +import java.net.InetAddress; +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; +import org.opendaylight.controller.sal.action.*; +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.FlowAddedBuilder; +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.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.flow.types.rev130819.flow.Match; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.MatchBuilder; +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 org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.EthernetMatchBuilder; + +import com.google.common.net.InetAddresses; + +public class TestToSalConversionsUtils { + // prefix: + // od|Od = Open Daylight + + @Test + public void testToSalConversion() { + Flow salFlow = ToSalConversionsUtils.flowFrom(prepareOdFlow()); + checkSalFlow(salFlow); + } + + private void checkSalFlow(Flow salFlow) { + assertTrue("Id value is incorrect.", salFlow.getId() == 9223372036854775807L); + assertTrue("Hard timeout is incorrect.", salFlow.getHardTimeout() == 32767); + assertTrue("Iddle timeout is incorrect.", salFlow.getIdleTimeout() == 32767); + assertTrue("Priority value is incorrect.", salFlow.getPriority() == 32767); + + checkSalActions(salFlow.getActions()); + } + + private void checkSalActions(List actions) { + checkSalAction(actions, Flood.class, 1); + checkSalAction(actions, FloodAll.class, 1); + checkSalAction(actions, HwPath.class, 1); + checkSalAction(actions, Loopback.class, 1); + checkSalAction(actions, Output.class, 2, true); + checkSalAction(actions, PopVlan.class, 1); + checkSalAction(actions, PushVlan.class, 1, true); + checkSalAction(actions, SetDlDst.class, 1, true); + checkSalAction(actions, SetDlSrc.class, 1, true); + checkSalAction(actions, SetDlType.class, 1, true); + checkSalAction(actions, SetNextHop.class, 2, true); + checkSalAction(actions, SetNwDst.class, 2, true); + checkSalAction(actions, SetNwSrc.class, 2, true); + checkSalAction(actions, SetNwTos.class, 1, true); + checkSalAction(actions, SetTpDst.class, 1, true); + checkSalAction(actions, SetTpSrc.class, 1, true); + checkSalAction(actions, SetVlanCfi.class, 1, true); + checkSalAction(actions, SetVlanId.class, 1, true); + checkSalAction(actions, SetVlanPcp.class, 1, true); + checkSalAction(actions, SwPath.class, 1); + } + + private void checkSalAction(List actions, Class cls, + int numOfActions) { + checkSalAction(actions, cls, numOfActions, false); + } + + private void checkSalAction(List actions, Class cls, + int numOfActions, boolean additionalCheck) { + int numOfEqualClass = 0; + for (org.opendaylight.controller.sal.action.Action action : actions) { + if (action.getClass().equals(cls)) { + if (additionalCheck) { + additionalActionCheck(action); + } + numOfEqualClass++; + } + } + assertEquals("Incorrect number of actions of type " + cls.getName() + " was found.", numOfActions, + numOfEqualClass); + } + + // implement special checks + private void additionalActionCheck(org.opendaylight.controller.sal.action.Action action) { + if (action instanceof Output) { + // ((Output)action).getPort() //TODO finish check when mapping will + // be defined + } else if (action instanceof PushVlan) { + assertEquals("Wrong value for action PushVlan for tag.", 0x8100, ((PushVlan) action).getTag()); + assertEquals("Wrong value for action PushVlan for pcp.", 7, ((PushVlan) action).getPcp()); + assertEquals("Wrong value for action PushVlan for cfi.", 1, ((PushVlan) action).getCfi()); + assertEquals("Wrong value for action PushVlan for vlanID.", 4095, ((PushVlan) action).getVlanId()); + } else if (action instanceof SetDlDst) { + assertEquals("Wrong value for action SetDlDst for MAC address.", "3C:A9:F4:00:E0:C8", new String( + ((SetDlDst) action).getDlAddress())); + } else if (action instanceof SetDlSrc) { + assertEquals("Wrong value for action SetDlSrc for MAC address.", "24:77:03:7C:C5:F1", new String( + ((SetDlSrc) action).getDlAddress())); + } else if (action instanceof SetDlType) { + assertEquals("Wrong value for action SetDlType for.", 513l, ((SetDlType) action).getDlType()); + } else if (action instanceof SetNextHop) { + InetAddress inetAddress = ((SetNextHop) action).getAddress(); + checkIpAddresses(inetAddress, "192.168.100.100", "2001:db8:85a3::8a2e:370:7334"); + } else if (action instanceof SetNwDst) { + InetAddress inetAddress = ((SetNwDst) action).getAddress(); + checkIpAddresses(inetAddress, "192.168.100.101", "2001:db8:85a3::8a2e:370:7335"); + } else if (action instanceof SetNwSrc) { + InetAddress inetAddress = ((SetNwSrc) action).getAddress(); + checkIpAddresses(inetAddress, "192.168.100.102", "2001:db8:85a3::8a2e:370:7336"); + } else if (action instanceof SetNwTos) { + assertEquals("Wrong value for action SetNwTos for tos.", 63, ((SetNwTos) action).getNwTos()); + } else if (action instanceof SetTpDst) { + assertEquals("Wrong value for action SetTpDst for port.", 65535, ((SetTpDst) action).getPort()); + } else if (action instanceof SetTpSrc) { + assertEquals("Wrong value for action SetTpSrc for port.", 65535, ((SetTpSrc) action).getPort()); + } else if (action instanceof SetVlanCfi) { + assertEquals("Wrong value for action SetVlanCfi for port.", 1, ((SetVlanCfi) action).getCfi()); + } else if (action instanceof SetVlanId) { + assertEquals("Wrong value for action SetVlanId for vlan ID.", 4095, ((SetVlanId) action).getVlanId()); + } else if (action instanceof SetVlanPcp) { + assertEquals("Wrong value for action SetVlanPcp for vlan ID.", 7, ((SetVlanPcp) action).getPcp()); + } + } + + private void checkIpAddresses(InetAddress inetAddress, String ipv4, String ipv6) { + if (inetAddress instanceof Inet4Address) { + assertEquals("Wrong value for IP address.", ipv4, InetAddresses.toAddrString(inetAddress)); + } else if (inetAddress instanceof Inet6Address) { + assertEquals("Wrong value for IP address.", ipv6, InetAddresses.toAddrString(inetAddress)); + } + } + + private NodeFlow prepareOdFlow() { + FlowAddedBuilder odNodeFlowBuilder = new FlowAddedBuilder(); + odNodeFlowBuilder.setCookie(new BigInteger("9223372036854775807")); + odNodeFlowBuilder.setHardTimeout(32767); + odNodeFlowBuilder.setIdleTimeout(32767); + odNodeFlowBuilder.setPriority(32767); + odNodeFlowBuilder.setAction(prepareOdActions()); + odNodeFlowBuilder.setMatch(prepareOdMatch()); + + return odNodeFlowBuilder.build(); + } + + private List prepareOdActions() { + List odActions = new ArrayList<>(); + + ControllerActionBuilder controllerActionBuilder = new ControllerActionBuilder(); + DropActionBuilder dropActionBuilder = new DropActionBuilder(); + FloodActionBuilder floodActionBuilder = new FloodActionBuilder(); + FloodAllActionBuilder floodAllActionBuilder = new FloodAllActionBuilder(); + HwPathActionBuilder hwPathActionBuilder = new HwPathActionBuilder(); + LoopbackActionBuilder loopbackActionBuilder = new LoopbackActionBuilder(); + OutputActionBuilder outputActionBuilder = new OutputActionBuilder(); + PopMplsActionBuilder popMplsActionBuilder = new PopMplsActionBuilder(); + PopVlanActionBuilder popVlanActionBuilder = new PopVlanActionBuilder(); + PushMplsActionBuilder pushMplsActionBuilder = new PushMplsActionBuilder(); + PushPbbActionBuilder pushPbbActionBuilder = new PushPbbActionBuilder(); + PushVlanActionBuilder pushVlanActionBuilder = new PushVlanActionBuilder(); + SetDlDstActionBuilder setDlDstActionBuilder = new SetDlDstActionBuilder(); + SetDlSrcActionBuilder setDlSrcActionBuilder = new SetDlSrcActionBuilder(); + SetDlTypeActionBuilder setDlTypeActionBuilder = new SetDlTypeActionBuilder(); + SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder(); + SetNwTosActionBuilder setNwTosActionBuilder = new SetNwTosActionBuilder(); + SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder(); + SetQueueActionBuilder setQueueActionBuilder = new SetQueueActionBuilder(); + SetTpDstActionBuilder setTpDstActionBuilder = new SetTpDstActionBuilder(); + SetTpSrcActionBuilder setTpSrcActionBuilder = new SetTpSrcActionBuilder(); + SetVlanCfiActionBuilder setVlanCfiActionBuilder = new SetVlanCfiActionBuilder(); + SetVlanIdActionBuilder setVlanIdActionBuilder = new SetVlanIdActionBuilder(); + SetVlanPcpActionBuilder setVlanPcpActionBuilder = new SetVlanPcpActionBuilder(); + SwPathActionBuilder swPathActionBuilder = new SwPathActionBuilder(); + + prepareActionOutput(outputActionBuilder); + prepareActionPushVlan(pushVlanActionBuilder); + prepareActionSetDlDst(setDlDstActionBuilder); + prepareActionSetDlSrc(setDlSrcActionBuilder); + prepareActionSetDlType(setDlTypeActionBuilder); + prepareActionNextHop(odActions); + prepareActionSetNwDst(odActions); + prepareActionSetNwSrc(odActions); + prepareActionSetNwTos(setNwTosActionBuilder); + prepareActionSetTpDst(setTpDstActionBuilder); + prepareActionSetTpSrc(setTpSrcActionBuilder); + prepareActionSetVlanCfi(setVlanCfiActionBuilder); + prepareActionSetVladId(setVlanIdActionBuilder); + prepareActionSetVlanPcp(setVlanPcpActionBuilder); + + odActions.add(new ActionBuilder().setAction(controllerActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(dropActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(floodActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(floodAllActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(hwPathActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(loopbackActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(outputActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(popMplsActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(popVlanActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(pushMplsActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(pushPbbActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(pushVlanActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setDlDstActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setDlSrcActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setDlTypeActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setMplsTtlActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setNwTosActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setNwTtlActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setQueueActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setTpDstActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setTpSrcActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setVlanCfiActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setVlanIdActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(setVlanPcpActionBuilder.build()).build()); + odActions.add(new ActionBuilder().setAction(swPathActionBuilder.build()).build()); + + return odActions; + } + + private void prepareActionSetVlanPcp(SetVlanPcpActionBuilder setVlanPcpActionBuilder) { + setVlanPcpActionBuilder.setVlanPcp(new VlanPcp((short) 7)); + } + + private void prepareActionSetVladId(SetVlanIdActionBuilder setVlanIdActionBuilder) { + setVlanIdActionBuilder.setVlanId(new VlanId(4095)); + } + + private void prepareActionSetVlanCfi(SetVlanCfiActionBuilder setVlanCfiActionBuilder) { + setVlanCfiActionBuilder.setVlanCfi(new VlanCfi(1)); + } + + private void prepareActionSetTpDst(SetTpDstActionBuilder setTpDstActionBuilder) { + setTpDstActionBuilder.setPort(new PortNumber(65535)); + } + + private void prepareActionSetTpSrc(SetTpSrcActionBuilder setTpSrcActionBuilder) { + setTpSrcActionBuilder.setPort(new PortNumber(65535)); + } + + private void prepareActionSetNwTos(SetNwTosActionBuilder setNwTosActionBuilder) { + setNwTosActionBuilder.setTos(63); + } + + private void prepareActionSetNwSrc(List odActions) { + // test case for IPv4 + SetNwSrcActionBuilder setNwSrcActionBuilderIpv4 = new SetNwSrcActionBuilder(); + setNwSrcActionBuilderIpv4.setAddress(prapareIpv4Address("192.168.100.102")); + odActions.add(new ActionBuilder().setAction(setNwSrcActionBuilderIpv4.build()).build()); + + // test case for IPv6 + SetNwSrcActionBuilder setNwSrcActionBuilderIpv6 = new SetNwSrcActionBuilder(); + setNwSrcActionBuilderIpv6.setAddress(prapareIpv6Address("2001:0db8:85a3:0000:0000:8a2e:0370:7336")); + odActions.add(new ActionBuilder().setAction(setNwSrcActionBuilderIpv6.build()).build()); + } + + private void prepareActionSetNwDst(List odActions) { + // test case for IPv4 + SetNwDstActionBuilder setNwDstActionBuilderIpv4 = new SetNwDstActionBuilder(); + setNwDstActionBuilderIpv4.setAddress(prapareIpv4Address("192.168.100.101")); + odActions.add(new ActionBuilder().setAction(setNwDstActionBuilderIpv4.build()).build()); + + // test case for IPv6 + SetNwDstActionBuilder setNwDstActionBuilderIpv6 = new SetNwDstActionBuilder(); + setNwDstActionBuilderIpv6.setAddress(prapareIpv6Address("2001:0db8:85a3:0000:0000:8a2e:0370:7335")); + odActions.add(new ActionBuilder().setAction(setNwDstActionBuilderIpv6.build()).build()); + } + + private void prepareActionNextHop(List odActions) { + // test case for IPv4 + SetNextHopActionBuilder setNextHopActionBuilderIpv4 = new SetNextHopActionBuilder(); + setNextHopActionBuilderIpv4.setAddress(prapareIpv4Address("192.168.100.100")); + odActions.add(new ActionBuilder().setAction(setNextHopActionBuilderIpv4.build()).build()); + + // test case for IPv6 + SetNextHopActionBuilder setNextHopActionBuilderIpv6 = new SetNextHopActionBuilder(); + setNextHopActionBuilderIpv6.setAddress(prapareIpv6Address("2001:0db8:85a3:0000:0000:8a2e:0370:7334")); + odActions.add(new ActionBuilder().setAction(setNextHopActionBuilderIpv6.build()).build()); + } + + private Address prapareIpv4Address(String ipv4Address) { + Ipv4Builder ipv4Builder = new Ipv4Builder(); + ipv4Builder.setIpv4Address(new Ipv4Prefix(ipv4Address)); + return ipv4Builder.build(); + } + + private Address prapareIpv6Address(String ipv6Address) { + Ipv6Builder ipv6Builder = new Ipv6Builder(); + ipv6Builder.setIpv6Address(new Ipv6Prefix(ipv6Address)); + return ipv6Builder.build(); + } + + private void prepareActionSetDlType(SetDlTypeActionBuilder setDlTypeActionBuilder) { + setDlTypeActionBuilder.setDlType(new EtherType(513l)); + } + + private void prepareActionSetDlSrc(SetDlSrcActionBuilder setDlSrcActionBuilder) { + setDlSrcActionBuilder.setAddress(new MacAddress("24:77:03:7C:C5:F1")); + } + + private void prepareActionSetDlDst(SetDlDstActionBuilder setDlDstActionBuilder) { + setDlDstActionBuilder.setAddress(new MacAddress("3C:A9:F4:00:E0:C8")); + } + + private void prepareActionPushVlan(PushVlanActionBuilder pushVlanActionBuilder) { + pushVlanActionBuilder.setPcp(7); // 3 bits + pushVlanActionBuilder.setCfi(new VlanCfi(1)); // 1 bit + pushVlanActionBuilder.setVlanId(new VlanId(4095)); + pushVlanActionBuilder.setTag(0x8100); // 12 bit + } + + private void prepareActionOutput(OutputActionBuilder outputActionBuilder) { + List uris = new ArrayList<>(); + uris.add(new Uri("uri1")); + uris.add(new Uri("uri2")); + outputActionBuilder.setOutputNodeConnector(uris); + } + + private Match prepareOdMatch() { + MatchBuilder odMatchBuilder = new MatchBuilder(); + EthernetMatchBuilder odEthernetMatchBuilder = new EthernetMatchBuilder(); + odMatchBuilder.setEthernetMatch(odEthernetMatchBuilder.build()); + + return odMatchBuilder.build(); + } +} diff --git a/opendaylight/northbound/networkconfiguration/neutron/pom.xml b/opendaylight/northbound/networkconfiguration/neutron/pom.xml index e3b572aea4..30426beeea 100644 --- a/opendaylight/northbound/networkconfiguration/neutron/pom.xml +++ b/opendaylight/northbound/networkconfiguration/neutron/pom.xml @@ -84,7 +84,7 @@ org.opendaylight.controller containermanager - 0.4.0-SNAPSHOT + 0.5.0-SNAPSHOT org.opendaylight.controller diff --git a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/InventoryServiceShim.java b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/InventoryServiceShim.java index 6401ec52f8..a920adf71d 100644 --- a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/InventoryServiceShim.java +++ b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/InventoryServiceShim.java @@ -26,6 +26,7 @@ import org.opendaylight.controller.protocol_plugin.openflow.core.IController; import org.opendaylight.controller.protocol_plugin.openflow.core.IMessageListener; import org.opendaylight.controller.protocol_plugin.openflow.core.ISwitch; import org.opendaylight.controller.protocol_plugin.openflow.core.ISwitchStateListener; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.sal.connection.IPluginOutConnectionService; import org.opendaylight.controller.sal.core.Actions; import org.opendaylight.controller.sal.core.Buffers; @@ -259,7 +260,11 @@ public class InventoryServiceShim implements IContainerListener, } // Add this node - addNode(sw); + if (connectionOutService.getLocalityStatus(node) != ConnectionLocality.NOT_CONNECTED) { + addNode(sw); + } else { + logger.debug("Skipping node addition due to Connectivity Status : {}", connectionOutService.getLocalityStatus(node).name()); + } } @Override diff --git a/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/ConnectionLocality.java b/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/ConnectionLocality.java similarity index 93% rename from opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/ConnectionLocality.java rename to opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/ConnectionLocality.java index 347ca07ec1..515acb5734 100644 --- a/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/ConnectionLocality.java +++ b/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/ConnectionLocality.java @@ -1,4 +1,4 @@ -package org.opendaylight.controller.connectionmanager; +package org.opendaylight.controller.sal.connection; public enum ConnectionLocality { /** diff --git a/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/IPluginOutConnectionService.java b/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/IPluginOutConnectionService.java index 456acf0166..16e215444e 100644 --- a/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/IPluginOutConnectionService.java +++ b/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/IPluginOutConnectionService.java @@ -22,4 +22,6 @@ public interface IPluginOutConnectionService { * @return true if node is local to this controller. false otherwise. */ public boolean isLocal(Node node); + + public ConnectionLocality getLocalityStatus(Node node); } \ No newline at end of file diff --git a/opendaylight/sal/connection/implementation/src/main/java/org/opendaylight/controller/sal/connection/implementation/internal/ConnectionService.java b/opendaylight/sal/connection/implementation/src/main/java/org/opendaylight/controller/sal/connection/implementation/internal/ConnectionService.java index e2132fb8a0..1c7e2c05e6 100644 --- a/opendaylight/sal/connection/implementation/src/main/java/org/opendaylight/controller/sal/connection/implementation/internal/ConnectionService.java +++ b/opendaylight/sal/connection/implementation/src/main/java/org/opendaylight/controller/sal/connection/implementation/internal/ConnectionService.java @@ -16,6 +16,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import org.opendaylight.controller.sal.connection.ConnectionConstants; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.sal.connection.IConnectionListener; import org.opendaylight.controller.sal.connection.IConnectionService; import org.opendaylight.controller.sal.connection.IPluginInConnectionService; @@ -104,6 +105,12 @@ public class ConnectionService implements IPluginOutConnectionService, IConnecti return connectionListener.isLocal(node); } + @Override + public ConnectionLocality getLocalityStatus(Node node) { + if (this.connectionListener == null) return ConnectionLocality.NOT_CONNECTED; + return connectionListener.getLocalityStatus(node); + } + @Override public Node connect (String type, String connectionIdentifier, Map params) { IPluginInConnectionService s = pluginService.get(type);