Replace OpenflowplugintestCommandProvider with previous version. 88/3288/1
authorEd Warnicke <eaw@cisco.com>
Sun, 1 Dec 2013 11:55:49 +0000 (03:55 -0800)
committerEd Warnicke <eaw@cisco.com>
Sun, 1 Dec 2013 11:55:49 +0000 (03:55 -0800)
The current version is broken, and is incapable of actually pushing
a flow to a non-dummy node.  Because its critical today that we
actually can test and debug through to a real switch, I am restoring
the version that is capable of that.

Change-Id: Icf9f652acdf7fad4524de87d1a492b2b3bddad71
Signed-off-by: Ed Warnicke <eaw@cisco.com>
test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginTestCommandProvider.java

index a1fd88de82c191614a538b206aaf50ca42768dc5..514ac3142d0fb91ce542fe9f3b24d022096c8657 100644 (file)
@@ -1,3 +1,4 @@
+
 /*
  * Copyright (c) 2013 Ericsson , Inc. and others.  All rights reserved.
  *
@@ -8,6 +9,7 @@
 
 package org.opendaylight.openflowplugin.test;
 
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
@@ -20,8 +22,8 @@ import org.opendaylight.controller.md.sal.common.api.data.DataModification;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
-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.DropActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtl;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlBuilder;
 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.action.list.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.Flows;
@@ -39,119 +41,116 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
 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.Ipv4MatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthType;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.osgi.framework.BundleContext;
 
+
+
 public class OpenflowpluginTestCommandProvider implements CommandProvider {
 
-    private DataBrokerService dataBrokerService;
-    private ProviderContext pc;
-    private BundleContext ctx;
-    private Flow testFlow;
-    private Node testNode;
+       private DataBrokerService dataBrokerService;
+       private ProviderContext pc;
+       private BundleContext ctx;
+       private FlowBuilder testFlow;
+    private NodeBuilder testNode;
     private String originalFlowName = "Foo";
     private String updatedFlowName = "Bar";
 
-    public OpenflowpluginTestCommandProvider(BundleContext ctx) {
-        this.ctx = ctx;
-    }
+       public OpenflowpluginTestCommandProvider(BundleContext ctx) {
+           this.ctx = ctx;
+       }
 
-    public void onSessionInitiated(ProviderContext session) {
-        pc = session;
-        dataBrokerService = session.getSALService(DataBrokerService.class);
-        ctx.registerService(CommandProvider.class.getName(), this, null);
+       public void onSessionInitiated(ProviderContext session) {
+           pc = session;
+               dataBrokerService = session.getSALService(DataBrokerService.class);
+               ctx.registerService(CommandProvider.class.getName(), this, null);
+               createTestFlow(createTestNode(null));
     }
 
-    private void createTestNode() {
-        NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID);
+       private NodeBuilder createTestNode(String nodeId) {
+           if(nodeId == null) {
+               nodeId = OpenflowpluginTestActivator.NODE_ID;
+           }
+           NodeRef nodeOne = createNodeRef(nodeId);
         NodeBuilder builder = new NodeBuilder();
-        builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
+        builder.setId(new NodeId(nodeId));
         builder.setKey(new NodeKey(builder.getId()));
-        testNode = builder.build();
-    }
+        testNode = builder;
+        return builder;
+       }
 
-    private void createUserNode(String nodeRef) {
-        NodeRef nodeOne = createNodeRef(nodeRef);
-        NodeBuilder builder = new NodeBuilder();
-        builder.setId(new NodeId(nodeRef));
-        builder.setKey(new NodeKey(builder.getId()));
-        testNode = builder.build();
-    }
+       private InstanceIdentifier<Node> nodeBuilderToInstanceId(NodeBuilder node) {
+           return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
+       }
 
-    private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
-        return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
-    }
+       private FlowBuilder createTestFlow(NodeBuilder nodeBuilder) {
 
-    private void createTestFlow() {
-        // Sample data , committing to DataStore
-        DataModification modification = (DataModification) dataBrokerService.beginTransaction();
         long id = 123;
-        FlowKey key = new FlowKey(id, new NodeRef(new NodeRef(nodeToInstanceId(testNode))));
+        FlowKey key = new FlowKey(id, new NodeRef(new NodeRef(nodeBuilderToInstanceId(nodeBuilder))));
         FlowBuilder flow = new FlowBuilder();
         flow.setKey(key);
         MatchBuilder match = new MatchBuilder();
-        EthernetMatchBuilder eth = new EthernetMatchBuilder();
-        EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();
-        ethTypeBuilder.setType(new EtherType((long) 0x86dd));
-        eth.setEthernetType(ethTypeBuilder.build());
-        // Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();
+        Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();
         // ipv4Match.setIpv4Destination(new Ipv4Prefix(cliInput.get(4)));
-        // Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.1/24");
-        // ipv4Match.setIpv4Destination(prefix);
-        // Ipv4Match i4m = ipv4Match.build();
-        // match.setLayer3Match(i4m);
+        Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.1/24");
+        ipv4Match.setIpv4Destination(prefix);
+        Ipv4Match i4m = ipv4Match.build();
+        match.setLayer3Match(i4m);
         flow.setMatch(match.build());
+
+        // Create a drop action
+        /*
+         * Note: We are mishandling drop actions
         DropAction dropAction = new DropActionBuilder().build();
-        ApplyActionsBuilder aab = new ApplyActionsBuilder();
         ActionBuilder ab = new ActionBuilder();
         ab.setAction(dropAction);
+        */
+
+        DecNwTtlBuilder ta = new DecNwTtlBuilder();
+        DecNwTtl decNwTtl = ta.build();
+        ActionBuilder ab = new ActionBuilder();
+        ab.setAction(decNwTtl);
+
+        // Add our drop action to a list
         List<Action> actionList = new ArrayList<Action>();
         actionList.add(ab.build());
+
+        // Create an Apply Action
+        ApplyActionsBuilder aab = new ApplyActionsBuilder();
         aab.setAction(actionList);
+
+        // Wrap our Apply Action in an Instruction
         InstructionBuilder ib = new InstructionBuilder();
         ib.setInstruction(aab.build());
-        flow.setTableId((short) 0);
+
+        // Put our Instruction in a list of Instructions
         InstructionsBuilder isb = new InstructionsBuilder();
         List<Instruction> instructions = new ArrayList<Instruction>();
+        instructions.add(ib.build());
         isb.setInstruction(instructions);
+
+        // Add our instructions to the flow
         flow.setInstructions(isb.build());
-        // ActionBuilder action = new ActionBuilder();
 
-        // List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action>
-        // actions = Collections
-        // .singletonList(action.build());
-        // flow.setAction(actions);
+
         flow.setPriority(2);
         flow.setFlowName(originalFlowName);
-        testFlow = flow.build();
-    }
-
-    public void _mdremoveFlow(CommandInterpreter ci) {
-        String nref = ci.nextArgument();
-
-        if (nref == null) {
-            ci.println("test node added");
-            createTestNode();
-        } else {
-            ci.println("User node added" + nref);
-            createUserNode(nref);
-        }
-        createTestFlow();
-        DataModification modification = (DataModification) dataBrokerService.beginTransaction();
-        InstanceIdentifier<Flow> path1 = InstanceIdentifier.builder(Flows.class).child(Flow.class, testFlow.getKey())
-                .toInstance();
-        DataObject cls = (DataObject) modification.readConfigurationData(path1);
-        modification.removeOperationalData(nodeToInstanceId(testNode));
+        testFlow = flow;
+        return flow;
+       }
+
+       public void _removeMDFlow(CommandInterpreter ci) {
+           DataModification<InstanceIdentifier<?>, DataObject> modification = dataBrokerService.beginTransaction();
+           NodeBuilder tn = createTestNode(ci.nextArgument());
+           FlowBuilder tf = createTestFlow(tn);
+        InstanceIdentifier<Flow> path1 = InstanceIdentifier.builder(Flows.class).child(Flow.class, tf.getKey()).toInstance();
+        modification.removeOperationalData(nodeBuilderToInstanceId(tn));
         modification.removeOperationalData(path1);
-        modification.removeConfigurationData(nodeToInstanceId(testNode));
+        modification.removeConfigurationData(nodeBuilderToInstanceId(tn));
         modification.removeConfigurationData(path1);
         Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
         try {
@@ -166,31 +165,21 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
-    }
+       }
 
-    public void _mdaddFlow(CommandInterpreter ci) {
-        String nref = ci.nextArgument();
-
-        if (nref == null) {
-            ci.println("test node added");
-            createTestNode();
-        } else {
-            ci.println("User node added" + nref);
-            createUserNode(nref);
-        }
-        createTestFlow();
-        writeFlow(ci, testFlow);
+       public void _addMDFlow(CommandInterpreter ci) {
+        NodeBuilder tn = createTestNode(ci.nextArgument());
+        FlowBuilder tf = createTestFlow(tn);
+        writeFlow(ci, tf, tn);
     }
 
-    private void writeFlow(CommandInterpreter ci, Flow flow) {
-        DataModification modification = (DataModification) dataBrokerService.beginTransaction();
-        InstanceIdentifier<Flow> path1 = InstanceIdentifier.builder(Flows.class).child(Flow.class, flow.getKey())
-                .toInstance();
-        DataObject cls = (DataObject) modification.readConfigurationData(path1);
-        modification.putOperationalData(nodeToInstanceId(testNode), testNode);
-        modification.putOperationalData(path1, flow);
-        modification.putConfigurationData(nodeToInstanceId(testNode), testNode);
-        modification.putConfigurationData(path1, flow);
+       private void writeFlow(CommandInterpreter ci,FlowBuilder flow, NodeBuilder nodeBuilder) {
+           DataModification<InstanceIdentifier<?>, DataObject> modification = dataBrokerService.beginTransaction();
+        InstanceIdentifier<Flow> path1 = InstanceIdentifier.builder(Flows.class).child(Flow.class, flow.getKey()).toInstance();
+        modification.putOperationalData(nodeBuilderToInstanceId(nodeBuilder), nodeBuilder.build());
+        modification.putOperationalData(path1, flow.build());
+        modification.putConfigurationData(nodeBuilderToInstanceId(nodeBuilder), nodeBuilder.build());
+        modification.putConfigurationData(path1, flow.build());
         Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
         try {
             RpcResult<TransactionStatus> result = commitFuture.get();
@@ -204,41 +193,28 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
-    }
-
-    public void _mdmodifyFlow(CommandInterpreter ci) {
-        String nref = ci.nextArgument();
-
-        if (nref == null) {
-            ci.println("test node added");
-            createTestNode();
-        } else {
-            ci.println("User node added" + nref);
-            createUserNode(nref);
-        }
-        createTestFlow();
-        FlowBuilder flow = new FlowBuilder(testFlow);
-        flow.setFlowName(updatedFlowName);
-        writeFlow(ci, flow.build());
-        flow.setFlowName(originalFlowName);
-        writeFlow(ci, flow.build());
-    }
-
-    private static NodeRef createNodeRef(String string) {
+       }
+
+       public void _modifyMDFlow(CommandInterpreter ci) {
+        NodeBuilder tn = createTestNode(ci.nextArgument());
+           FlowBuilder tf = createTestFlow(tn);
+           tf.setFlowName(updatedFlowName);
+           writeFlow(ci, tf,tn);
+           tf.setFlowName(originalFlowName);
+           writeFlow(ci, tf,tn);
+       }
+
+       private static NodeRef createNodeRef(String string) {
         NodeKey key = new NodeKey(new NodeId(string));
-        InstanceIdentifier<Node> path = InstanceIdentifier.builder(Nodes.class).child(Node.class, key).toInstance();
+        InstanceIdentifier<Node> path =
+               InstanceIdentifier.builder().node(Nodes.class).node(Node.class, key).toInstance();
 
         return new NodeRef(path);
     }
 
     @Override
     public String getHelp() {
-        StringBuffer help = new StringBuffer();
-        help.append("---FRM MD-SAL test module---\n");
-        help.append("\t mdaddFlow <node id>        - node ref\n");
-        help.append("\t mdmodifyFlow <node id>        - node ref\n");
-        help.append("\t mdremoveFlow <node id>        - node ref\n");
-
-        return help.toString();
+        return "No help";
     }
 }
+