1 package org.opendaylight.openflowplugin.test;
3 import com.google.common.util.concurrent.CheckedFuture;
4 import com.google.common.util.concurrent.FutureCallback;
5 import com.google.common.util.concurrent.Futures;
6 import java.math.BigInteger;
7 import java.util.ArrayList;
9 import java.util.concurrent.ExecutionException;
10 import java.util.concurrent.Future;
11 import org.eclipse.osgi.framework.console.CommandInterpreter;
12 import org.eclipse.osgi.framework.console.CommandProvider;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
15 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
16 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
17 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
18 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
19 import org.opendaylight.controller.sal.binding.api.NotificationService;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.ControllerActionCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.controller.action._case.ControllerActionBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.out._case.CopyTtlOutBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtl;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropAction;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCaseBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCaseBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.go.to.table._case.GoToTableBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.meter._case.MeterBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.NodeErrorListener;
98 import org.opendaylight.yangtools.concepts.Registration;
99 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
100 import org.opendaylight.yangtools.yang.common.RpcResult;
101 import org.osgi.framework.BundleContext;
102 import org.slf4j.Logger;
103 import org.slf4j.LoggerFactory;
105 //import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.M
107 public class OpenflowPluginBulkGroupTransactionProvider implements CommandProvider {
108 private static final Logger LOG = LoggerFactory.getLogger(OpenflowPluginBulkGroupTransactionProvider.class);
109 private NodeBuilder testNode;
110 private DataBroker dataBroker;
111 private final BundleContext ctx;
112 private ProviderContext pc;
113 private FlowBuilder testFlow;
114 private final String originalFlowName = "Foo";
115 private final NodeErrorListener nodeErrorListener = new NodeErrorListenerLoggingImpl();
116 private Registration listener1Reg;
117 private Registration listener2Reg;
118 private Group testGroup;
119 private Group testGroup2;
120 private Node testNode12;
121 private final String originalGroupName = "Foo";
122 private static NotificationService notificationService;
124 public OpenflowPluginBulkGroupTransactionProvider(BundleContext ctx) {
128 public void onSessionInitiated(ProviderContext session) {
130 notificationService = session.getSALService(NotificationService.class);
131 listener2Reg = notificationService.registerNotificationListener(nodeErrorListener);
132 dataBroker = session.getSALService(DataBroker.class);
133 ctx.registerService(CommandProvider.class.getName(), this, null);
134 createTestFlow(createTestNode(null), null, null);
137 private NodeBuilder createTestNode(String nodeId) {
138 if (nodeId == null) {
139 nodeId = OpenflowpluginTestActivator.NODE_ID;
141 NodeRef nodeOne = createNodeRef(nodeId);
142 NodeBuilder builder = new NodeBuilder();
143 builder.setId(new NodeId(nodeId));
144 builder.setKey(new NodeKey(builder.getId()));
149 private static NodeRef createNodeRef(String string) {
150 NodeKey key = new NodeKey(new NodeId(string));
151 InstanceIdentifier<Node> path = InstanceIdentifier.create(Nodes.class).child(Node.class, key);
152 return new NodeRef(path);
156 public String getHelp() {
163 private static MatchBuilder createMatch1() {
164 MatchBuilder match = new MatchBuilder();
165 Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();
166 Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.1/24");
167 ipv4Match.setIpv4Destination(prefix);
168 Ipv4Match i4m = ipv4Match.build();
169 match.setLayer3Match(i4m);
171 EthernetMatchBuilder eth = new EthernetMatchBuilder();
172 EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();
173 ethTypeBuilder.setType(new EtherType(0x0800L));
174 eth.setEthernetType(ethTypeBuilder.build());
175 match.setEthernetMatch(eth.build());
182 private static InstructionsBuilder createDecNwTtlInstructions() {
183 DecNwTtlBuilder ta = new DecNwTtlBuilder();
184 DecNwTtl decNwTtl = ta.build();
185 ActionBuilder ab = new ActionBuilder();
186 ab.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(decNwTtl).build());
188 // Add our drop action to a list
189 List<Action> actionList = new ArrayList<Action>();
190 actionList.add(ab.build());
192 // Create an Apply Action
193 ApplyActionsBuilder aab = new ApplyActionsBuilder();
194 aab.setAction(actionList);
196 // Wrap our Apply Action in an Instruction
197 InstructionBuilder ib = new InstructionBuilder();
198 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
199 ib.setKey(new InstructionKey(0));
202 // Put our Instruction in a list of Instructions
203 InstructionsBuilder isb = new InstructionsBuilder();
204 List<Instruction> instructions = new ArrayList<Instruction>();
205 instructions.add(ib.build());
206 isb.setInstruction(instructions);
213 private static MatchBuilder createMatch2() {
214 MatchBuilder match = new MatchBuilder();
215 Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();
216 Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.1");
217 ipv4Match.setIpv4Source(prefix);
218 Ipv4Match i4m = ipv4Match.build();
219 match.setLayer3Match(i4m);
221 EthernetMatchBuilder eth = new EthernetMatchBuilder();
222 EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();
223 ethTypeBuilder.setType(new EtherType(0x0800L));
224 eth.setEthernetType(ethTypeBuilder.build());
225 match.setEthernetMatch(eth.build());
232 private static MatchBuilder createMatch3() {
233 MatchBuilder match = new MatchBuilder();
234 EthernetMatchBuilder ethernetMatch = new EthernetMatchBuilder();
235 EthernetSourceBuilder ethSourceBuilder = new EthernetSourceBuilder();
236 ethSourceBuilder.setAddress(new MacAddress("00:00:00:00:00:01"));
237 ethernetMatch.setEthernetSource(ethSourceBuilder.build());
238 match.setEthernetMatch(ethernetMatch.build());
243 private static InstructionsBuilder createDropInstructions() {
244 DropActionBuilder dab = new DropActionBuilder();
245 DropAction dropAction = dab.build();
246 ActionBuilder ab = new ActionBuilder();
247 ab.setAction(new DropActionCaseBuilder().setDropAction(dropAction).build());
249 // Add our drop action to a list
250 List<Action> actionList = new ArrayList<Action>();
251 actionList.add(ab.build());
253 // Create an Apply Action
254 ApplyActionsBuilder aab = new ApplyActionsBuilder();
255 aab.setAction(actionList);
257 // Wrap our Apply Action in an Instruction
258 InstructionBuilder ib = new InstructionBuilder();
259 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
261 // Put our Instruction in a list of Instructions
262 InstructionsBuilder isb = new InstructionsBuilder();
263 List<Instruction> instructions = new ArrayList<Instruction>();
264 instructions.add(ib.build());
265 isb.setInstruction(instructions);
269 private static MatchBuilder createEthernetMatch() {
270 MatchBuilder match = new MatchBuilder();
272 byte[] mask1 = new byte[]{(byte) -1, (byte) -1, 0, 0, 0, 0};
273 byte[] mask2 = new byte[]{(byte) -1, (byte) -1, (byte) -1, 0, 0, 0};
275 EthernetMatchBuilder ethmatch = new EthernetMatchBuilder(); // ethernettype
277 EthernetTypeBuilder ethtype = new EthernetTypeBuilder();
278 EtherType type = new EtherType(0x0800L);
279 ethmatch.setEthernetType(ethtype.setType(type).build());
281 EthernetDestinationBuilder ethdest = new EthernetDestinationBuilder(); // ethernet
284 MacAddress macdest = new MacAddress("ff:ff:ff:ff:ff:ff");
285 ethdest.setAddress(macdest);
286 // ethdest.setMask(mask1);
288 ethmatch.setEthernetDestination(ethdest.build());
290 EthernetSourceBuilder ethsrc = new EthernetSourceBuilder();
291 MacAddress macsrc = new MacAddress("00:00:00:00:23:ae");
292 ethsrc.setAddress(macsrc);
293 // ethsrc.setMask(mask2);
295 ethmatch.setEthernetSource(ethsrc.build());
296 match.setEthernetMatch(ethmatch.build());
304 private static InstructionsBuilder createMeterInstructions() {
306 MeterBuilder aab = new MeterBuilder();
307 aab.setMeterId(new MeterId(new Long(1)));
309 InstructionBuilder ib = new InstructionBuilder();
310 ib.setInstruction(new MeterCaseBuilder().setMeter(aab.build()).build());
312 // Put our Instruction in a list of Instructions
313 InstructionsBuilder isb = new InstructionsBuilder();
314 List<Instruction> instructions = new ArrayList<Instruction>();
315 instructions.add(ib.build());
316 isb.setInstruction(instructions);
320 private static InstructionsBuilder createAppyActionInstruction() {
322 List<Action> actionList = new ArrayList<Action>();
323 ActionBuilder ab = new ActionBuilder();
324 ControllerActionBuilder controller = new ControllerActionBuilder();
325 controller.setMaxLength(5);
326 ab.setAction(new ControllerActionCaseBuilder().setControllerAction(controller.build()).build());
327 actionList.add(ab.build());
328 // Create an Apply Action
329 ApplyActionsBuilder aab = new ApplyActionsBuilder();
330 aab.setAction(actionList);
332 // Wrap our Apply Action in an Instruction
333 InstructionBuilder ib = new InstructionBuilder();
334 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
336 // Put our Instruction in a list of Instructions
337 InstructionsBuilder isb = new InstructionsBuilder();
338 List<Instruction> instructions = new ArrayList<Instruction>();
339 instructions.add(ib.build());
340 isb.setInstruction(instructions);
344 private static InstructionsBuilder createAppyActionInstruction7() {
346 List<Action> actionList = new ArrayList<Action>();
347 ActionBuilder ab = new ActionBuilder();
349 SetVlanIdActionBuilder vl = new SetVlanIdActionBuilder();
350 VlanId a = new VlanId(4012);
352 ab.setAction(new SetVlanIdActionCaseBuilder().setSetVlanIdAction(vl.build()).build());
353 actionList.add(ab.build());
354 // Create an Apply Action
355 ApplyActionsBuilder aab = new ApplyActionsBuilder();
356 aab.setAction(actionList);
358 // Wrap our Apply Action in an Instruction
359 InstructionBuilder ib = new InstructionBuilder();
360 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
362 // Put our Instruction in a list of Instructions
363 InstructionsBuilder isb = new InstructionsBuilder();
364 List<Instruction> instructions = new ArrayList<Instruction>();
365 instructions.add(ib.build());
366 isb.setInstruction(instructions);
370 private static InstructionsBuilder createAppyActionInstruction21() {
372 List<Action> actionList = new ArrayList<Action>();
373 ActionBuilder ab = new ActionBuilder();
375 PopVlanActionBuilder popVlanActionBuilder = new PopVlanActionBuilder();
376 ab.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(popVlanActionBuilder.build()).build());
377 actionList.add(ab.build());
379 // Create an Apply Action
380 ApplyActionsBuilder aab = new ApplyActionsBuilder();
381 aab.setAction(actionList);
383 // Wrap our Apply Action in an Instruction
384 InstructionBuilder ib = new InstructionBuilder();
385 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
387 // Put our Instruction in a list of Instructions
388 InstructionsBuilder isb = new InstructionsBuilder();
389 List<Instruction> instructions = new ArrayList<Instruction>();
390 instructions.add(ib.build());
391 isb.setInstruction(instructions);
395 private static InstructionsBuilder createAppyActionInstruction2() {
397 List<Action> actionList = new ArrayList<Action>();
398 ActionBuilder ab = new ActionBuilder();
400 PushMplsActionBuilder push = new PushMplsActionBuilder();
401 push.setEthernetType(new Integer(0x8847));
402 ab.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(push.build()).build());
403 actionList.add(ab.build());
404 // Create an Apply Action
405 ApplyActionsBuilder aab = new ApplyActionsBuilder();
406 aab.setAction(actionList);
408 // Wrap our Apply Action in an Instruction
409 InstructionBuilder ib = new InstructionBuilder();
410 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
412 // Put our Instruction in a list of Instructions
413 InstructionsBuilder isb = new InstructionsBuilder();
414 List<Instruction> instructions = new ArrayList<Instruction>();
415 instructions.add(ib.build());
416 isb.setInstruction(instructions);
420 private static InstructionsBuilder createAppyActionInstruction3() {
422 List<Action> actionList = new ArrayList<Action>();
423 ActionBuilder ab = new ActionBuilder();
425 PushPbbActionBuilder pbb = new PushPbbActionBuilder();
426 pbb.setEthernetType(new Integer(0x88E7));
427 ab.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pbb.build()).build());
428 actionList.add(ab.build());
429 // Create an Apply Action
430 ApplyActionsBuilder aab = new ApplyActionsBuilder();
431 aab.setAction(actionList);
433 // Wrap our Apply Action in an Instruction
434 InstructionBuilder ib = new InstructionBuilder();
435 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
437 // Put our Instruction in a list of Instructions
438 InstructionsBuilder isb = new InstructionsBuilder();
439 List<Instruction> instructions = new ArrayList<Instruction>();
440 instructions.add(ib.build());
441 isb.setInstruction(instructions);
445 private static InstructionsBuilder createGotoTableInstructions() {
447 GoToTableBuilder aab = new GoToTableBuilder();
448 aab.setTableId((short) 2);
450 InstructionBuilder ib = new InstructionBuilder();
451 ib.setInstruction(new GoToTableCaseBuilder().setGoToTable(aab.build()).build());
453 // Put our Instruction in a list of Instructions
454 InstructionsBuilder isb = new InstructionsBuilder();
455 List<Instruction> instructions = new ArrayList<Instruction>();
456 instructions.add(ib.build());
457 isb.setInstruction(instructions);
461 private FlowBuilder createTestFlow(NodeBuilder nodeBuilder, String flowTypeArg, String tableId) {
463 FlowBuilder flow = new FlowBuilder();
466 String flowType = flowTypeArg;
467 if (flowType == null) {
474 flow.setMatch(createMatch1().build());
475 flow.setInstructions(createDecNwTtlInstructions().build());
479 flow.setMatch(createMatch2().build());
480 flow.setInstructions(createDropInstructions().build());
484 flow.setMatch(createMatch3().build());
485 flow.setInstructions(createDropInstructions().build());
489 flow.setMatch(createEthernetMatch().build());
490 flow.setInstructions(createDropInstructions().build());
494 flow.setMatch(createMatch1().build());
495 flow.setInstructions(createDropInstructions().build());
499 flow.setMatch(createMatch1().build());
500 flow.setInstructions(createAppyActionInstruction().build());
504 flow.setMatch(createMatch1().build());
505 flow.setInstructions(createGotoTableInstructions().build());
509 flow.setMatch(createMatch1().build());
510 flow.setInstructions(createMeterInstructions().build());
514 flow.setMatch(createMatch1().build());
515 flow.setInstructions(createAppyActionInstruction7().build());
519 flow.setMatch(createMatch1().build());
520 flow.setInstructions(createAppyActionInstruction2().build());
524 flow.setMatch(createMatch1().build());
525 flow.setInstructions(createAppyActionInstruction3().build());
529 flow.setMatch(createMatch1().build());
530 flow.setInstructions(createAppyActionInstruction7().build());
534 flow.setMatch(createMatch1().build());
535 flow.setInstructions(createAppyActionInstruction21().build());
539 LOG.warn("flow type not understood: {}", flowType);
542 FlowKey key = new FlowKey(new FlowId(Long.toString(id)));
543 if (null == flow.isBarrier()) {
544 flow.setBarrier(Boolean.FALSE);
546 // flow.setBufferId(new Long(12));
547 BigInteger value = new BigInteger("10", 10);
548 BigInteger outputPort = new BigInteger("4294967295", 10);
549 flow.setCookie(new FlowCookie(value));
550 flow.setCookieMask(new FlowCookie(value));
551 flow.setHardTimeout(0);
552 flow.setIdleTimeout(0);
553 flow.setInstallHw(false);
554 flow.setStrict(false);
555 flow.setContainerName(null);
556 flow.setFlags(new FlowModFlags(false, false, false, false, true));
557 flow.setId(new FlowId("12"));
558 flow.setTableId(getTableId(tableId));
559 flow.setOutGroup(new Long("4294967295"));
560 // set outport to OFPP_NONE (65535) to disable remove restriction for
562 flow.setOutPort(outputPort);
566 flow.setFlowName(originalFlowName + "X" + flowType);
571 private short getTableId(String tableId) {
574 table = Short.parseShort(tableId);
575 } catch (Exception ex) {
576 // ignore exception and continue with default value
583 public void _addGroups(CommandInterpreter ci) {
584 String nref = ci.nextArgument();
587 ci.println("test node added");
590 ci.println("User node added" + nref);
591 createUserNode(nref);
593 Integer count = Integer.parseInt(ci.nextArgument());
596 GroupBuilder group = createTestGroup("a7", "g1", "add", "1");
597 GroupBuilder group1 = createTestGroup("a3", "g1", "add", "2");
598 writeGroup(ci, group.build(), group1.build());
601 GroupBuilder group2 = createTestGroup("a4", "g1", "add", "4");
602 GroupBuilder group3 = createTestGroup("a5", "g1", "add", "5");
603 writeGroup(ci, group2.build(), group3.build());
606 GroupBuilder group4 = createTestGroup("a6", "g1", "add", "6");
607 GroupBuilder group5 = createTestGroup("a7", "g1", "add", "7");
608 writeGroup(ci, group4.build(), group5.build());
612 GroupBuilder group6 = createTestGroup("a14", "g1", "add", "5");
613 GroupBuilder group7 = createTestGroup("a3", "g1", "add", "6");
614 writeGroup(ci, group6.build(), group7.build());
621 private void createUserNode(String nodeRef) {
622 NodeRef nodeOne = createNodeRef(nodeRef);
623 NodeBuilder builder = new NodeBuilder();
624 builder.setId(new NodeId(nodeRef));
625 builder.setKey(new NodeKey(builder.getId()));
626 testNode12 = builder.build();
629 public void _modifyGroups(CommandInterpreter ci) {
630 String nref = ci.nextArgument();
633 ci.println("test node added");
636 ci.println("User node added" + nref);
637 createUserNode(nref);
639 Integer count = Integer.parseInt(ci.nextArgument());
642 GroupBuilder group = createTestGroup("a4", "g1", "modify", "1");
643 GroupBuilder group1 = createTestGroup("a5", "g1", "modify", "2");
644 writeGroup(ci, group.build(), group1.build());
647 GroupBuilder group2 = createTestGroup("a1", "g1", "modify", "4");
648 GroupBuilder group3 = createTestGroup("a2", "g1", "modify", "5");
649 writeGroup(ci, group2.build(), group3.build());
652 GroupBuilder group4 = createTestGroup("a9", "g1", "modify", "6");
653 GroupBuilder group5 = createTestGroup("a10", "g1", "modify", "7");
654 writeGroup(ci, group4.build(), group5.build());
658 GroupBuilder group6 = createTestGroup("a6", "g1", "modify", "5");
659 GroupBuilder group7 = createTestGroup("a29", "g1", "modify", "6");
660 writeGroup(ci, group6.build(), group7.build());
665 private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
666 return InstanceIdentifier.create(Nodes.class).child(Node.class, node.getKey());
669 private void createTestNode() {
670 NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID);
671 NodeBuilder builder = new NodeBuilder();
672 builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
673 builder.setKey(new NodeKey(builder.getId()));
674 testNode12 = builder.build();
677 public void _removeGroups(CommandInterpreter ci) {
678 String nref = ci.nextArgument();
681 ci.println("test node added");
684 ci.println("User node added" + nref);
685 createUserNode(nref);
688 Integer count = Integer.parseInt(ci.nextArgument());
691 GroupBuilder group = createTestGroup("a2", "g1", "remove", "1");
692 GroupBuilder group1 = createTestGroup("a3", "g1", "remove", "2");
693 deleteGroup(ci, group.build(), group1.build());
696 GroupBuilder group2 = createTestGroup("a4", "g1", "remove", "4");
697 GroupBuilder group3 = createTestGroup("a5", "g1", "remove", "5");
698 deleteGroup(ci, group2.build(), group3.build());
701 GroupBuilder group4 = createTestGroup("a6", "g1", "remove", "6");
702 GroupBuilder group5 = createTestGroup("a7", "g1", "remove", "7");
703 deleteGroup(ci, group4.build(), group5.build());
706 GroupBuilder group6 = createTestGroup("a14", "g1", "remove", "5");
707 GroupBuilder group7 = createTestGroup("a3", "g1", "remove", "6");
708 deleteGroup(ci, group6.build(), group7.build());
711 GroupBuilder group8 = createTestGroup("a4", "g1", "modify", "1");
712 GroupBuilder group9 = createTestGroup("a5", "g1", "modify", "2");
713 writeGroup(ci, group8.build(), group9.build());
716 GroupBuilder group10 = createTestGroup("a1", "g1", "modify", "4");
717 GroupBuilder group11 = createTestGroup("a2", "g1", "modify", "5");
718 writeGroup(ci, group10.build(), group11.build());
721 GroupBuilder group12 = createTestGroup("a9", "g1", "modify", "6");
722 GroupBuilder group13 = createTestGroup("a10", "g1", "modify", "7");
723 writeGroup(ci, group12.build(), group13.build());
727 GroupBuilder group14 = createTestGroup("a6", "g1", "modify", "5");
728 GroupBuilder group15 = createTestGroup("a29", "g1", "modify", "6");
729 writeGroup(ci, group14.build(), group15.build());
736 private void writeGroup(final CommandInterpreter ci, Group group, Group group1) {
737 ReadWriteTransaction modification = dataBroker.newReadWriteTransaction();
739 InstanceIdentifier<Group> path1 = InstanceIdentifier.create(Nodes.class)
740 .child(Node.class, testNode12.getKey()).augmentation(FlowCapableNode.class)
741 .child(Group.class, new GroupKey(group.getGroupId()));
742 modification.merge(LogicalDatastoreType.CONFIGURATION, nodeToInstanceId(testNode12), testNode12, true);
743 modification.merge(LogicalDatastoreType.CONFIGURATION, path1, group, true);
745 InstanceIdentifier<Group> path2 = InstanceIdentifier.create(Nodes.class)
746 .child(Node.class, testNode12.getKey()).augmentation(FlowCapableNode.class)
747 .child(Group.class, new GroupKey(group1.getGroupId()));
748 modification.merge(LogicalDatastoreType.CONFIGURATION, nodeToInstanceId(testNode12), testNode12, true);
749 modification.merge(LogicalDatastoreType.CONFIGURATION, path2, group1, true);
750 CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
751 Futures.addCallback(commitFuture, new FutureCallback<Void>() {
753 public void onSuccess(Void aVoid) {
754 ci.println("Status of Group Data Loaded Transaction: success.");
758 public void onFailure(Throwable throwable) {
759 ci.println(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s",throwable));
764 private void deleteGroup(final CommandInterpreter ci, Group group, Group group1) {
765 ReadWriteTransaction modification = dataBroker.newReadWriteTransaction();
766 InstanceIdentifier<Group> path1 = InstanceIdentifier.create(Nodes.class)
767 .child(Node.class, testNode12.getKey()).augmentation(FlowCapableNode.class)
768 .child(Group.class, new GroupKey(group.getGroupId()));
769 modification.delete(LogicalDatastoreType.OPERATIONAL, path1);
770 modification.delete(LogicalDatastoreType.CONFIGURATION, path1);
771 InstanceIdentifier<Group> path2 = InstanceIdentifier.create(Nodes.class)
772 .child(Node.class, testNode12.getKey()).augmentation(FlowCapableNode.class)
773 .child(Group.class, new GroupKey(group1.getGroupId()));
774 modification.delete(LogicalDatastoreType.OPERATIONAL, path2);
775 modification.delete(LogicalDatastoreType.CONFIGURATION, path2);
776 CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
777 Futures.addCallback(commitFuture, new FutureCallback<Void>() {
779 public void onSuccess(Void aVoid) {
780 ci.println("Status of Group Data Loaded Transaction: success.");
784 public void onFailure(Throwable throwable) {
785 ci.println(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s",throwable));
790 private GroupBuilder createTestGroup(String actiontype, String type, String mod, String iD) {
791 // Sample data , committing to DataStore
793 String GroupType = type;
794 String ActionType = actiontype;
795 String Groupmod = mod;
797 long id = Long.parseLong(iD);
798 GroupKey key = new GroupKey(new GroupId(id));
799 GroupBuilder group = new GroupBuilder();
800 BucketBuilder bucket = new BucketBuilder();
801 bucket.setBucketId(new BucketId((long) 12));
802 bucket.setKey(new BucketKey(new BucketId((long) 12)));
804 if (GroupType == null) {
807 if (ActionType == null) {
813 group.setGroupType(GroupTypes.GroupSelect);
816 group.setGroupType(GroupTypes.GroupAll);
819 group.setGroupType(GroupTypes.GroupIndirect);
822 group.setGroupType(GroupTypes.GroupFf);
826 switch (ActionType) {
828 bucket.setAction(createPopVlanAction());
831 bucket.setAction(createPushVlanAction());
834 bucket.setAction(createPushMplsAction());
837 bucket.setAction(createPopMplsAction());
840 bucket.setAction(createPopPbbAction());
843 bucket.setAction(createPushPbbAction());
846 bucket.setAction(createPushPbbAction());
849 bucket.setAction(createCopyTtlInAction());
852 bucket.setAction(createCopyTtlOutAction());
855 bucket.setAction(createDecMplsTtlAction());
858 bucket.setAction(createGroupAction());
861 bucket.setAction(createNonAppyPushVlanAction());
866 if (Groupmod == "add") {
867 bucket.setWatchGroup((long) 14);
868 bucket.setWatchPort((long) 1234);
869 bucket.setWeight(50);
871 bucket.setWatchGroup((long) 13);
872 bucket.setWatchPort((long) 134);
873 bucket.setWeight(30);
876 // group.setInstall(false);
877 group.setGroupId(new GroupId(id));
878 group.setGroupName(originalGroupName);
879 group.setBarrier(false);
880 BucketsBuilder value = new BucketsBuilder();
881 List<Bucket> value1 = new ArrayList<Bucket>();
882 value1.add(bucket.build());
883 value.setBucket(value1);
884 group.setBuckets(value.build());
885 testGroup = group.build();
889 private List<Action> createPopVlanAction() {
890 PopVlanActionBuilder vlanAction = new PopVlanActionBuilder();
891 ActionBuilder action = new ActionBuilder();
892 action.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(vlanAction.build()).build());
893 action.setKey(new ActionKey(0));
894 List<Action> actions = new ArrayList<Action>();
895 actions.add(action.build());
899 private List<Action> createPushVlanAction() {
900 PushVlanActionBuilder vlan = new PushVlanActionBuilder();
901 vlan.setEthernetType(new Integer(0x8100));
902 VlanId v = new VlanId(2);
904 ActionBuilder action = new ActionBuilder();
905 action.setAction(new PushVlanActionCaseBuilder().setPushVlanAction(vlan.build()).build());
906 List<Action> actions = new ArrayList<Action>();
907 actions.add(action.build());
911 private List<Action> createPushMplsAction() {
912 PushMplsActionBuilder push = new PushMplsActionBuilder();
913 push.setEthernetType(new Integer(0x8847));
914 ActionBuilder action = new ActionBuilder();
915 action.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(push.build()).build());
916 List<Action> actions = new ArrayList<Action>();
917 actions.add(action.build());
921 private List<Action> createPopMplsAction() {
922 PopMplsActionBuilder popMplsActionBuilder = new PopMplsActionBuilder();
923 popMplsActionBuilder.setEthernetType(0XB);
924 ActionBuilder action = new ActionBuilder();
925 action.setAction(new PopMplsActionCaseBuilder().setPopMplsAction(popMplsActionBuilder.build()).build());
926 List<Action> actions = new ArrayList<Action>();
927 actions.add(action.build());
931 private List<Action> createPopPbbAction() {
932 PopPbbActionBuilder popPbbActionBuilder = new PopPbbActionBuilder();
933 ActionBuilder action = new ActionBuilder();
934 action.setAction(new PopPbbActionCaseBuilder().setPopPbbAction(popPbbActionBuilder.build()).build());
935 List<Action> actions = new ArrayList<Action>();
936 actions.add(action.build());
940 private List<Action> createPushPbbAction() {
941 PushPbbActionBuilder pbb = new PushPbbActionBuilder();
942 pbb.setEthernetType(new Integer(0x88E7));
943 ActionBuilder action = new ActionBuilder();
944 action.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pbb.build()).build());
945 List<Action> actions = new ArrayList<Action>();
946 actions.add(action.build());
950 private List<Action> createCopyTtlInAction() {
951 CopyTtlInBuilder ttlin = new CopyTtlInBuilder();
952 ActionBuilder action = new ActionBuilder();
953 action.setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(ttlin.build()).build());
954 List<Action> actions = new ArrayList<Action>();
955 actions.add(action.build());
959 private List<Action> createCopyTtlOutAction() {
960 CopyTtlOutBuilder ttlout = new CopyTtlOutBuilder();
961 ActionBuilder action = new ActionBuilder();
962 action.setAction(new CopyTtlOutCaseBuilder().setCopyTtlOut(ttlout.build()).build());
963 List<Action> actions = new ArrayList<Action>();
964 actions.add(action.build());
968 private List<Action> createDecMplsTtlAction() {
969 DecMplsTtlBuilder mpls = new DecMplsTtlBuilder();
970 ActionBuilder action = new ActionBuilder();
971 action.setAction(new DecMplsTtlCaseBuilder().setDecMplsTtl(mpls.build()).build());
972 List<Action> actions = new ArrayList<Action>();
973 actions.add(action.build());
977 private List<Action> createGroupAction() {
979 GroupActionBuilder groupActionB = new GroupActionBuilder();
980 groupActionB.setGroupId(1L);
981 groupActionB.setGroup("0");
982 ActionBuilder action = new ActionBuilder();
983 action.setAction(new GroupActionCaseBuilder().setGroupAction(groupActionB.build()).build());
984 action.setKey(new ActionKey(0));
985 List<Action> actions = new ArrayList<Action>();
986 actions.add(action.build());
990 private static List<Action> createNonAppyPushVlanAction() {
992 List<Action> actionList = new ArrayList<Action>();
993 ActionBuilder ab = new ActionBuilder();
995 GroupActionBuilder groupActionB = new GroupActionBuilder();
996 groupActionB.setGroupId(1L);
997 groupActionB.setGroup("0");
998 ab.setAction(new GroupActionCaseBuilder().setGroupAction(groupActionB.build()).build());
999 actionList.add(ab.build());