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.Node.NodeIDType;
import org.opendaylight.controller.sal.core.NodeConnector;
import org.opendaylight.controller.sal.flowprogrammer.Flow;
import org.opendaylight.controller.sal.match.Match;
Uri nodeConnector = ((OutputActionCase) sourceAction).getOutputAction().getOutputNodeConnector();
if (nodeConnector != null) {
- //for (Uri uri : nodeConnectors) {
- Uri fullNodeConnector = new Uri(node.getType()+":"+node.getID()+":"+nodeConnector.getValue());
+ // TODO: We should really have a bi-directional map from AD-SAL node types to
+ // MD-SAL node types, but lets fix that later.
+ String type = node.getType();
+ if( type.equals(NodeIDType.OPENFLOW) ){
+ type = NodeMapping.OPENFLOW_ID_PREFIX;
+ }else{
+ type = type + ":";
+ }
+ Uri fullNodeConnector = new Uri(type+node.getID()+":"+nodeConnector.getValue());
targetAction.add(new Output(fromNodeConnectorRef(fullNodeConnector, node)));
- //}
}
} else if (sourceAction instanceof PopMplsActionCase) {
// TODO: define maping
package org.opendaylight.controller.sal.compatibility.test;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.CRUDP;
import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.ETHERNET_ARP;
assertEquals("OF|1@OF|00:00:00:00:00:00:00:2a", nodeConnector.toString());
}
+ @Test
+ public void testActionFrom() throws ConstructionException {
+ // Bug 2021: Convert AD-SAL notation into MD-SAL notation before calling NodeConnector
+ Node node = new Node(NodeIDType.OPENFLOW, 42L);
+ List<Action> odActions = new ArrayList<>();
+
+ OutputActionBuilder outputActionBuilder = new OutputActionBuilder();
+ outputActionBuilder.setOutputNodeConnector(new Uri("CONTROLLER"));
+ OutputActionCaseBuilder outputActionCaseBuilder = new OutputActionCaseBuilder();
+ outputActionCaseBuilder.setOutputAction(outputActionBuilder.build());
+ odActions.add(new ActionBuilder().setAction(outputActionCaseBuilder.build()).build());
+
+ List<org.opendaylight.controller.sal.action.Action> targetAction =
+ ToSalConversionsUtils.actionFrom(odActions, node);
+ assertNotNull(targetAction);
+ assertTrue( Output.class.isInstance(targetAction.get(0)) );
+ Output targetActionOutput = (Output) targetAction.get(0);
+ NodeConnector port = targetActionOutput.getPort();
+ assertNotNull(port);
+ assertEquals(port.getType(), NodeConnectorIDType.CONTROLLER);
+ assertEquals(port.getID(), org.opendaylight.controller.sal.core.NodeConnector.SPECIALNODECONNECTORID);
+ }
+
private void checkSalMatch(org.opendaylight.controller.sal.match.Match match, MtchType mt) throws ConstructionException {
switch (mt) {
case other: