1 package org.opendaylight.openflowplugin.test;
3 import java.math.BigInteger;
4 import java.util.ArrayList;
6 import java.util.concurrent.ExecutionException;
7 import java.util.concurrent.Future;
8 import org.eclipse.osgi.framework.console.CommandInterpreter;
9 import org.eclipse.osgi.framework.console.CommandProvider;
10 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
11 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
12 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
13 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
14 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
15 import org.opendaylight.controller.sal.binding.api.NotificationService;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.ControllerActionCaseBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.controller.action._case.ControllerActionBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.out._case.CopyTtlOutBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtl;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropAction;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCaseBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCaseBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.go.to.table._case.GoToTableBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.meter._case.MeterBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.NodeErrorListener;
94 import org.opendaylight.yangtools.concepts.Registration;
95 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
96 import org.opendaylight.yangtools.yang.common.RpcResult;
97 import org.osgi.framework.BundleContext;
98 import org.slf4j.Logger;
99 import org.slf4j.LoggerFactory;
101 //import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.M
103 public class OpenflowPluginBulkGroupTransactionProvider implements CommandProvider {
104 private static final Logger LOG = LoggerFactory.getLogger(OpenflowPluginBulkGroupTransactionProvider.class);
105 private NodeBuilder testNode;
106 private DataBroker dataBroker;
107 private final BundleContext ctx;
108 private ProviderContext pc;
109 private FlowBuilder testFlow;
110 private final String originalFlowName = "Foo";
111 private final NodeErrorListener nodeErrorListener = new NodeErrorListenerLoggingImpl();
112 private Registration listener1Reg;
113 private Registration listener2Reg;
114 private Group testGroup;
115 private Group testGroup2;
116 private Node testNode12;
117 private final String originalGroupName = "Foo";
118 private static NotificationService notificationService;
120 public OpenflowPluginBulkGroupTransactionProvider(BundleContext ctx) {
124 public void onSessionInitiated(ProviderContext session) {
126 notificationService = session.getSALService(NotificationService.class);
127 listener2Reg = notificationService.registerNotificationListener(nodeErrorListener);
128 dataBroker = session.getSALService(DataBroker.class);
129 ctx.registerService(CommandProvider.class.getName(), this, null);
130 createTestFlow(createTestNode(null), null, null);
133 private NodeBuilder createTestNode(String nodeId) {
134 if (nodeId == null) {
135 nodeId = OpenflowpluginTestActivator.NODE_ID;
137 NodeRef nodeOne = createNodeRef(nodeId);
138 NodeBuilder builder = new NodeBuilder();
139 builder.setId(new NodeId(nodeId));
140 builder.setKey(new NodeKey(builder.getId()));
145 private static NodeRef createNodeRef(String string) {
146 NodeKey key = new NodeKey(new NodeId(string));
147 InstanceIdentifier<Node> path = InstanceIdentifier.builder(Nodes.class).child(Node.class, key)
150 return new NodeRef(path);
154 public String getHelp() {
161 private static MatchBuilder createMatch1() {
162 MatchBuilder match = new MatchBuilder();
163 Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();
164 Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.1/24");
165 ipv4Match.setIpv4Destination(prefix);
166 Ipv4Match i4m = ipv4Match.build();
167 match.setLayer3Match(i4m);
169 EthernetMatchBuilder eth = new EthernetMatchBuilder();
170 EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();
171 ethTypeBuilder.setType(new EtherType(0x0800L));
172 eth.setEthernetType(ethTypeBuilder.build());
173 match.setEthernetMatch(eth.build());
180 private static InstructionsBuilder createDecNwTtlInstructions() {
181 DecNwTtlBuilder ta = new DecNwTtlBuilder();
182 DecNwTtl decNwTtl = ta.build();
183 ActionBuilder ab = new ActionBuilder();
184 ab.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(decNwTtl).build());
186 // Add our drop action to a list
187 List<Action> actionList = new ArrayList<Action>();
188 actionList.add(ab.build());
190 // Create an Apply Action
191 ApplyActionsBuilder aab = new ApplyActionsBuilder();
192 aab.setAction(actionList);
194 // Wrap our Apply Action in an Instruction
195 InstructionBuilder ib = new InstructionBuilder();
196 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
197 ib.setKey(new InstructionKey(0));
200 // Put our Instruction in a list of Instructions
201 InstructionsBuilder isb = new InstructionsBuilder();
202 List<Instruction> instructions = new ArrayList<Instruction>();
203 instructions.add(ib.build());
204 isb.setInstruction(instructions);
211 private static MatchBuilder createMatch2() {
212 MatchBuilder match = new MatchBuilder();
213 Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();
214 Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.1");
215 ipv4Match.setIpv4Source(prefix);
216 Ipv4Match i4m = ipv4Match.build();
217 match.setLayer3Match(i4m);
219 EthernetMatchBuilder eth = new EthernetMatchBuilder();
220 EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();
221 ethTypeBuilder.setType(new EtherType(0x0800L));
222 eth.setEthernetType(ethTypeBuilder.build());
223 match.setEthernetMatch(eth.build());
230 private static MatchBuilder createMatch3() {
231 MatchBuilder match = new MatchBuilder();
232 EthernetMatchBuilder ethernetMatch = new EthernetMatchBuilder();
233 EthernetSourceBuilder ethSourceBuilder = new EthernetSourceBuilder();
234 ethSourceBuilder.setAddress(new MacAddress("00:00:00:00:00:01"));
235 ethernetMatch.setEthernetSource(ethSourceBuilder.build());
236 match.setEthernetMatch(ethernetMatch.build());
241 private static InstructionsBuilder createDropInstructions() {
242 DropActionBuilder dab = new DropActionBuilder();
243 DropAction dropAction = dab.build();
244 ActionBuilder ab = new ActionBuilder();
245 ab.setAction(new DropActionCaseBuilder().setDropAction(dropAction).build());
247 // Add our drop action to a list
248 List<Action> actionList = new ArrayList<Action>();
249 actionList.add(ab.build());
251 // Create an Apply Action
252 ApplyActionsBuilder aab = new ApplyActionsBuilder();
253 aab.setAction(actionList);
255 // Wrap our Apply Action in an Instruction
256 InstructionBuilder ib = new InstructionBuilder();
257 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
259 // Put our Instruction in a list of Instructions
260 InstructionsBuilder isb = new InstructionsBuilder();
261 List<Instruction> instructions = new ArrayList<Instruction>();
262 instructions.add(ib.build());
263 isb.setInstruction(instructions);
267 private static MatchBuilder createEthernetMatch() {
268 MatchBuilder match = new MatchBuilder();
270 byte[] mask1 = new byte[]{(byte) -1, (byte) -1, 0, 0, 0, 0};
271 byte[] mask2 = new byte[]{(byte) -1, (byte) -1, (byte) -1, 0, 0, 0};
273 EthernetMatchBuilder ethmatch = new EthernetMatchBuilder(); // ethernettype
275 EthernetTypeBuilder ethtype = new EthernetTypeBuilder();
276 EtherType type = new EtherType(0x0800L);
277 ethmatch.setEthernetType(ethtype.setType(type).build());
279 EthernetDestinationBuilder ethdest = new EthernetDestinationBuilder(); // ethernet
282 MacAddress macdest = new MacAddress("ff:ff:ff:ff:ff:ff");
283 ethdest.setAddress(macdest);
284 // ethdest.setMask(mask1);
286 ethmatch.setEthernetDestination(ethdest.build());
288 EthernetSourceBuilder ethsrc = new EthernetSourceBuilder();
289 MacAddress macsrc = new MacAddress("00:00:00:00:23:ae");
290 ethsrc.setAddress(macsrc);
291 // ethsrc.setMask(mask2);
293 ethmatch.setEthernetSource(ethsrc.build());
294 match.setEthernetMatch(ethmatch.build());
302 private static InstructionsBuilder createMeterInstructions() {
304 MeterBuilder aab = new MeterBuilder();
305 aab.setMeterId(new MeterId(new Long(1)));
307 InstructionBuilder ib = new InstructionBuilder();
308 ib.setInstruction(new MeterCaseBuilder().setMeter(aab.build()).build());
310 // Put our Instruction in a list of Instructions
311 InstructionsBuilder isb = new InstructionsBuilder();
312 List<Instruction> instructions = new ArrayList<Instruction>();
313 instructions.add(ib.build());
314 isb.setInstruction(instructions);
318 private static InstructionsBuilder createAppyActionInstruction() {
320 List<Action> actionList = new ArrayList<Action>();
321 ActionBuilder ab = new ActionBuilder();
322 ControllerActionBuilder controller = new ControllerActionBuilder();
323 controller.setMaxLength(5);
324 ab.setAction(new ControllerActionCaseBuilder().setControllerAction(controller.build()).build());
325 actionList.add(ab.build());
326 // Create an Apply Action
327 ApplyActionsBuilder aab = new ApplyActionsBuilder();
328 aab.setAction(actionList);
330 // Wrap our Apply Action in an Instruction
331 InstructionBuilder ib = new InstructionBuilder();
332 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
334 // Put our Instruction in a list of Instructions
335 InstructionsBuilder isb = new InstructionsBuilder();
336 List<Instruction> instructions = new ArrayList<Instruction>();
337 instructions.add(ib.build());
338 isb.setInstruction(instructions);
342 private static InstructionsBuilder createAppyActionInstruction7() {
344 List<Action> actionList = new ArrayList<Action>();
345 ActionBuilder ab = new ActionBuilder();
347 SetVlanIdActionBuilder vl = new SetVlanIdActionBuilder();
348 VlanId a = new VlanId(4012);
350 ab.setAction(new SetVlanIdActionCaseBuilder().setSetVlanIdAction(vl.build()).build());
351 actionList.add(ab.build());
352 // Create an Apply Action
353 ApplyActionsBuilder aab = new ApplyActionsBuilder();
354 aab.setAction(actionList);
356 // Wrap our Apply Action in an Instruction
357 InstructionBuilder ib = new InstructionBuilder();
358 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
360 // Put our Instruction in a list of Instructions
361 InstructionsBuilder isb = new InstructionsBuilder();
362 List<Instruction> instructions = new ArrayList<Instruction>();
363 instructions.add(ib.build());
364 isb.setInstruction(instructions);
368 private static InstructionsBuilder createAppyActionInstruction21() {
370 List<Action> actionList = new ArrayList<Action>();
371 ActionBuilder ab = new ActionBuilder();
373 PopVlanActionBuilder popVlanActionBuilder = new PopVlanActionBuilder();
374 ab.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(popVlanActionBuilder.build()).build());
375 actionList.add(ab.build());
377 // Create an Apply Action
378 ApplyActionsBuilder aab = new ApplyActionsBuilder();
379 aab.setAction(actionList);
381 // Wrap our Apply Action in an Instruction
382 InstructionBuilder ib = new InstructionBuilder();
383 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
385 // Put our Instruction in a list of Instructions
386 InstructionsBuilder isb = new InstructionsBuilder();
387 List<Instruction> instructions = new ArrayList<Instruction>();
388 instructions.add(ib.build());
389 isb.setInstruction(instructions);
393 private static InstructionsBuilder createAppyActionInstruction2() {
395 List<Action> actionList = new ArrayList<Action>();
396 ActionBuilder ab = new ActionBuilder();
398 PushMplsActionBuilder push = new PushMplsActionBuilder();
399 push.setEthernetType(new Integer(0x8847));
400 ab.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(push.build()).build());
401 actionList.add(ab.build());
402 // Create an Apply Action
403 ApplyActionsBuilder aab = new ApplyActionsBuilder();
404 aab.setAction(actionList);
406 // Wrap our Apply Action in an Instruction
407 InstructionBuilder ib = new InstructionBuilder();
408 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
410 // Put our Instruction in a list of Instructions
411 InstructionsBuilder isb = new InstructionsBuilder();
412 List<Instruction> instructions = new ArrayList<Instruction>();
413 instructions.add(ib.build());
414 isb.setInstruction(instructions);
418 private static InstructionsBuilder createAppyActionInstruction3() {
420 List<Action> actionList = new ArrayList<Action>();
421 ActionBuilder ab = new ActionBuilder();
423 PushPbbActionBuilder pbb = new PushPbbActionBuilder();
424 pbb.setEthernetType(new Integer(0x88E7));
425 ab.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pbb.build()).build());
426 actionList.add(ab.build());
427 // Create an Apply Action
428 ApplyActionsBuilder aab = new ApplyActionsBuilder();
429 aab.setAction(actionList);
431 // Wrap our Apply Action in an Instruction
432 InstructionBuilder ib = new InstructionBuilder();
433 ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
435 // Put our Instruction in a list of Instructions
436 InstructionsBuilder isb = new InstructionsBuilder();
437 List<Instruction> instructions = new ArrayList<Instruction>();
438 instructions.add(ib.build());
439 isb.setInstruction(instructions);
443 private static InstructionsBuilder createGotoTableInstructions() {
445 GoToTableBuilder aab = new GoToTableBuilder();
446 aab.setTableId((short) 2);
448 InstructionBuilder ib = new InstructionBuilder();
449 ib.setInstruction(new GoToTableCaseBuilder().setGoToTable(aab.build()).build());
451 // Put our Instruction in a list of Instructions
452 InstructionsBuilder isb = new InstructionsBuilder();
453 List<Instruction> instructions = new ArrayList<Instruction>();
454 instructions.add(ib.build());
455 isb.setInstruction(instructions);
459 private FlowBuilder createTestFlow(NodeBuilder nodeBuilder, String flowTypeArg, String tableId) {
461 FlowBuilder flow = new FlowBuilder();
464 String flowType = flowTypeArg;
465 if (flowType == null) {
472 flow.setMatch(createMatch1().build());
473 flow.setInstructions(createDecNwTtlInstructions().build());
477 flow.setMatch(createMatch2().build());
478 flow.setInstructions(createDropInstructions().build());
482 flow.setMatch(createMatch3().build());
483 flow.setInstructions(createDropInstructions().build());
487 flow.setMatch(createEthernetMatch().build());
488 flow.setInstructions(createDropInstructions().build());
492 flow.setMatch(createMatch1().build());
493 flow.setInstructions(createDropInstructions().build());
497 flow.setMatch(createMatch1().build());
498 flow.setInstructions(createAppyActionInstruction().build());
502 flow.setMatch(createMatch1().build());
503 flow.setInstructions(createGotoTableInstructions().build());
507 flow.setMatch(createMatch1().build());
508 flow.setInstructions(createMeterInstructions().build());
512 flow.setMatch(createMatch1().build());
513 flow.setInstructions(createAppyActionInstruction7().build());
517 flow.setMatch(createMatch1().build());
518 flow.setInstructions(createAppyActionInstruction2().build());
522 flow.setMatch(createMatch1().build());
523 flow.setInstructions(createAppyActionInstruction3().build());
527 flow.setMatch(createMatch1().build());
528 flow.setInstructions(createAppyActionInstruction7().build());
532 flow.setMatch(createMatch1().build());
533 flow.setInstructions(createAppyActionInstruction21().build());
537 LOG.warn("flow type not understood: {}", flowType);
540 FlowKey key = new FlowKey(new FlowId(Long.toString(id)));
541 if (null == flow.isBarrier()) {
542 flow.setBarrier(Boolean.FALSE);
544 // flow.setBufferId(new Long(12));
545 BigInteger value = new BigInteger("10", 10);
546 BigInteger outputPort = new BigInteger("4294967295", 10);
547 flow.setCookie(new FlowCookie(value));
548 flow.setCookieMask(new FlowCookie(value));
549 flow.setHardTimeout(0);
550 flow.setIdleTimeout(0);
551 flow.setInstallHw(false);
552 flow.setStrict(false);
553 flow.setContainerName(null);
554 flow.setFlags(new FlowModFlags(false, false, false, false, true));
555 flow.setId(new FlowId("12"));
556 flow.setTableId(getTableId(tableId));
557 flow.setOutGroup(new Long("4294967295"));
558 // set outport to OFPP_NONE (65535) to disable remove restriction for
560 flow.setOutPort(outputPort);
564 flow.setFlowName(originalFlowName + "X" + flowType);
569 private short getTableId(String tableId) {
572 table = Short.parseShort(tableId);
573 } catch (Exception ex) {
574 // ignore exception and continue with default value
581 public void _addGroups(CommandInterpreter ci) {
582 String nref = ci.nextArgument();
585 ci.println("test node added");
588 ci.println("User node added" + nref);
589 createUserNode(nref);
591 Integer count = Integer.parseInt(ci.nextArgument());
594 GroupBuilder group = createTestGroup("a7", "g1", "add", "1");
595 GroupBuilder group1 = createTestGroup("a3", "g1", "add", "2");
596 writeGroup(ci, group.build(), group1.build());
599 GroupBuilder group2 = createTestGroup("a4", "g1", "add", "4");
600 GroupBuilder group3 = createTestGroup("a5", "g1", "add", "5");
601 writeGroup(ci, group2.build(), group3.build());
604 GroupBuilder group4 = createTestGroup("a6", "g1", "add", "6");
605 GroupBuilder group5 = createTestGroup("a7", "g1", "add", "7");
606 writeGroup(ci, group4.build(), group5.build());
610 GroupBuilder group6 = createTestGroup("a14", "g1", "add", "5");
611 GroupBuilder group7 = createTestGroup("a3", "g1", "add", "6");
612 writeGroup(ci, group6.build(), group7.build());
619 private void createUserNode(String nodeRef) {
620 NodeRef nodeOne = createNodeRef(nodeRef);
621 NodeBuilder builder = new NodeBuilder();
622 builder.setId(new NodeId(nodeRef));
623 builder.setKey(new NodeKey(builder.getId()));
624 testNode12 = builder.build();
627 public void _modifyGroups(CommandInterpreter ci) {
628 String nref = ci.nextArgument();
631 ci.println("test node added");
634 ci.println("User node added" + nref);
635 createUserNode(nref);
637 Integer count = Integer.parseInt(ci.nextArgument());
640 GroupBuilder group = createTestGroup("a4", "g1", "modify", "1");
641 GroupBuilder group1 = createTestGroup("a5", "g1", "modify", "2");
642 writeGroup(ci, group.build(), group1.build());
645 GroupBuilder group2 = createTestGroup("a1", "g1", "modify", "4");
646 GroupBuilder group3 = createTestGroup("a2", "g1", "modify", "5");
647 writeGroup(ci, group2.build(), group3.build());
650 GroupBuilder group4 = createTestGroup("a9", "g1", "modify", "6");
651 GroupBuilder group5 = createTestGroup("a10", "g1", "modify", "7");
652 writeGroup(ci, group4.build(), group5.build());
656 GroupBuilder group6 = createTestGroup("a6", "g1", "modify", "5");
657 GroupBuilder group7 = createTestGroup("a29", "g1", "modify", "6");
658 writeGroup(ci, group6.build(), group7.build());
663 private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
664 return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
667 private void createTestNode() {
668 NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID);
669 NodeBuilder builder = new NodeBuilder();
670 builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
671 builder.setKey(new NodeKey(builder.getId()));
672 testNode12 = builder.build();
675 public void _removeGroups(CommandInterpreter ci) {
676 String nref = ci.nextArgument();
679 ci.println("test node added");
682 ci.println("User node added" + nref);
683 createUserNode(nref);
686 Integer count = Integer.parseInt(ci.nextArgument());
689 GroupBuilder group = createTestGroup("a2", "g1", "remove", "1");
690 GroupBuilder group1 = createTestGroup("a3", "g1", "remove", "2");
691 deleteGroup(ci, group.build(), group1.build());
694 GroupBuilder group2 = createTestGroup("a4", "g1", "remove", "4");
695 GroupBuilder group3 = createTestGroup("a5", "g1", "remove", "5");
696 deleteGroup(ci, group2.build(), group3.build());
699 GroupBuilder group4 = createTestGroup("a6", "g1", "remove", "6");
700 GroupBuilder group5 = createTestGroup("a7", "g1", "remove", "7");
701 deleteGroup(ci, group4.build(), group5.build());
704 GroupBuilder group6 = createTestGroup("a14", "g1", "remove", "5");
705 GroupBuilder group7 = createTestGroup("a3", "g1", "remove", "6");
706 deleteGroup(ci, group6.build(), group7.build());
709 GroupBuilder group8 = createTestGroup("a4", "g1", "modify", "1");
710 GroupBuilder group9 = createTestGroup("a5", "g1", "modify", "2");
711 writeGroup(ci, group8.build(), group9.build());
714 GroupBuilder group10 = createTestGroup("a1", "g1", "modify", "4");
715 GroupBuilder group11 = createTestGroup("a2", "g1", "modify", "5");
716 writeGroup(ci, group10.build(), group11.build());
719 GroupBuilder group12 = createTestGroup("a9", "g1", "modify", "6");
720 GroupBuilder group13 = createTestGroup("a10", "g1", "modify", "7");
721 writeGroup(ci, group12.build(), group13.build());
725 GroupBuilder group14 = createTestGroup("a6", "g1", "modify", "5");
726 GroupBuilder group15 = createTestGroup("a29", "g1", "modify", "6");
727 writeGroup(ci, group14.build(), group15.build());
734 private void writeGroup(CommandInterpreter ci, Group group, Group group1) {
735 ReadWriteTransaction modification = dataBroker.newReadWriteTransaction();
737 InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Nodes.class)
738 .child(Node.class, testNode12.getKey()).augmentation(FlowCapableNode.class)
739 .child(Group.class, new GroupKey(group.getGroupId())).build();
740 modification.put(LogicalDatastoreType.CONFIGURATION, nodeToInstanceId(testNode12), testNode12);
741 modification.put(LogicalDatastoreType.CONFIGURATION, path1, group);
743 InstanceIdentifier<Group> path2 = InstanceIdentifier.builder(Nodes.class)
744 .child(Node.class, testNode12.getKey()).augmentation(FlowCapableNode.class)
745 .child(Group.class, new GroupKey(group1.getGroupId())).build();
746 modification.put(LogicalDatastoreType.CONFIGURATION, nodeToInstanceId(testNode12), testNode12);
747 modification.put(LogicalDatastoreType.CONFIGURATION, path2, group1);
748 Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
751 RpcResult<TransactionStatus> result = commitFuture.get();
752 TransactionStatus status = result.getResult();
753 ci.println("Status of Group Data Loaded Transaction: " + status);
755 } catch (InterruptedException e) {
756 // TODO Auto-generated catch block
758 } catch (ExecutionException e) {
759 // TODO Auto-generated catch block
764 private void deleteGroup(CommandInterpreter ci, Group group, Group group1) {
765 ReadWriteTransaction modification = dataBroker.newReadWriteTransaction();
766 InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Nodes.class)
767 .child(Node.class, testNode12.getKey()).augmentation(FlowCapableNode.class)
768 .child(Group.class, new GroupKey(group.getGroupId())).build();
769 modification.delete(LogicalDatastoreType.OPERATIONAL, path1);
770 modification.delete(LogicalDatastoreType.CONFIGURATION, path1);
771 InstanceIdentifier<Group> path2 = InstanceIdentifier.builder(Nodes.class)
772 .child(Node.class, testNode12.getKey()).augmentation(FlowCapableNode.class)
773 .child(Group.class, new GroupKey(group1.getGroupId())).build();
774 modification.delete(LogicalDatastoreType.OPERATIONAL, path2);
775 modification.delete(LogicalDatastoreType.CONFIGURATION, path2);
776 Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
778 RpcResult<TransactionStatus> result = commitFuture.get();
779 TransactionStatus status = result.getResult();
780 ci.println("Status of Group Data Loaded Transaction: " + status);
781 ci.println("Status of Group Data Loaded Transaction: ");
783 } catch (InterruptedException e) {
784 // TODO Auto-generated catch block
786 } catch (ExecutionException e) {
787 // TODO Auto-generated catch block
792 private GroupBuilder createTestGroup(String actiontype, String type, String mod, String iD) {
793 // Sample data , committing to DataStore
795 String GroupType = type;
796 String ActionType = actiontype;
797 String Groupmod = mod;
799 long id = Long.parseLong(iD);
800 GroupKey key = new GroupKey(new GroupId(id));
801 GroupBuilder group = new GroupBuilder();
802 BucketBuilder bucket = new BucketBuilder();
803 bucket.setBucketId(new BucketId((long) 12));
804 bucket.setKey(new BucketKey(new BucketId((long) 12)));
806 if (GroupType == null) {
809 if (ActionType == null) {
815 group.setGroupType(GroupTypes.GroupSelect);
818 group.setGroupType(GroupTypes.GroupAll);
821 group.setGroupType(GroupTypes.GroupIndirect);
824 group.setGroupType(GroupTypes.GroupFf);
828 switch (ActionType) {
830 bucket.setAction(createPopVlanAction());
833 bucket.setAction(createPushVlanAction());
836 bucket.setAction(createPushMplsAction());
839 bucket.setAction(createPopMplsAction());
842 bucket.setAction(createPopPbbAction());
845 bucket.setAction(createPushPbbAction());
848 bucket.setAction(createPushPbbAction());
851 bucket.setAction(createCopyTtlInAction());
854 bucket.setAction(createCopyTtlOutAction());
857 bucket.setAction(createDecMplsTtlAction());
860 bucket.setAction(createGroupAction());
863 bucket.setAction(createNonAppyPushVlanAction());
868 if (Groupmod == "add") {
869 bucket.setWatchGroup((long) 14);
870 bucket.setWatchPort((long) 1234);
871 bucket.setWeight(50);
873 bucket.setWatchGroup((long) 13);
874 bucket.setWatchPort((long) 134);
875 bucket.setWeight(30);
878 // group.setInstall(false);
879 group.setGroupId(new GroupId(id));
880 group.setGroupName(originalGroupName);
881 group.setBarrier(false);
882 BucketsBuilder value = new BucketsBuilder();
883 List<Bucket> value1 = new ArrayList<Bucket>();
884 value1.add(bucket.build());
885 value.setBucket(value1);
886 group.setBuckets(value.build());
887 testGroup = group.build();
891 private List<Action> createPopVlanAction() {
892 PopVlanActionBuilder vlanAction = new PopVlanActionBuilder();
893 ActionBuilder action = new ActionBuilder();
894 action.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(vlanAction.build()).build());
895 action.setKey(new ActionKey(0));
896 List<Action> actions = new ArrayList<Action>();
897 actions.add(action.build());
901 private List<Action> createPushVlanAction() {
902 PushVlanActionBuilder vlan = new PushVlanActionBuilder();
903 vlan.setEthernetType(new Integer(0x8100));
904 VlanId v = new VlanId(2);
906 ActionBuilder action = new ActionBuilder();
907 action.setAction(new PushVlanActionCaseBuilder().setPushVlanAction(vlan.build()).build());
908 List<Action> actions = new ArrayList<Action>();
909 actions.add(action.build());
913 private List<Action> createPushMplsAction() {
914 PushMplsActionBuilder push = new PushMplsActionBuilder();
915 push.setEthernetType(new Integer(0x8847));
916 ActionBuilder action = new ActionBuilder();
917 action.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(push.build()).build());
918 List<Action> actions = new ArrayList<Action>();
919 actions.add(action.build());
923 private List<Action> createPopMplsAction() {
924 PopMplsActionBuilder popMplsActionBuilder = new PopMplsActionBuilder();
925 popMplsActionBuilder.setEthernetType(0XB);
926 ActionBuilder action = new ActionBuilder();
927 action.setAction(new PopMplsActionCaseBuilder().setPopMplsAction(popMplsActionBuilder.build()).build());
928 List<Action> actions = new ArrayList<Action>();
929 actions.add(action.build());
933 private List<Action> createPopPbbAction() {
934 PopPbbActionBuilder popPbbActionBuilder = new PopPbbActionBuilder();
935 ActionBuilder action = new ActionBuilder();
936 action.setAction(new PopPbbActionCaseBuilder().setPopPbbAction(popPbbActionBuilder.build()).build());
937 List<Action> actions = new ArrayList<Action>();
938 actions.add(action.build());
942 private List<Action> createPushPbbAction() {
943 PushPbbActionBuilder pbb = new PushPbbActionBuilder();
944 pbb.setEthernetType(new Integer(0x88E7));
945 ActionBuilder action = new ActionBuilder();
946 action.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pbb.build()).build());
947 List<Action> actions = new ArrayList<Action>();
948 actions.add(action.build());
952 private List<Action> createCopyTtlInAction() {
953 CopyTtlInBuilder ttlin = new CopyTtlInBuilder();
954 ActionBuilder action = new ActionBuilder();
955 action.setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(ttlin.build()).build());
956 List<Action> actions = new ArrayList<Action>();
957 actions.add(action.build());
961 private List<Action> createCopyTtlOutAction() {
962 CopyTtlOutBuilder ttlout = new CopyTtlOutBuilder();
963 ActionBuilder action = new ActionBuilder();
964 action.setAction(new CopyTtlOutCaseBuilder().setCopyTtlOut(ttlout.build()).build());
965 List<Action> actions = new ArrayList<Action>();
966 actions.add(action.build());
970 private List<Action> createDecMplsTtlAction() {
971 DecMplsTtlBuilder mpls = new DecMplsTtlBuilder();
972 ActionBuilder action = new ActionBuilder();
973 action.setAction(new DecMplsTtlCaseBuilder().setDecMplsTtl(mpls.build()).build());
974 List<Action> actions = new ArrayList<Action>();
975 actions.add(action.build());
979 private List<Action> createGroupAction() {
981 GroupActionBuilder groupActionB = new GroupActionBuilder();
982 groupActionB.setGroupId(1L);
983 groupActionB.setGroup("0");
984 ActionBuilder action = new ActionBuilder();
985 action.setAction(new GroupActionCaseBuilder().setGroupAction(groupActionB.build()).build());
986 action.setKey(new ActionKey(0));
987 List<Action> actions = new ArrayList<Action>();
988 actions.add(action.build());
992 private static List<Action> createNonAppyPushVlanAction() {
994 List<Action> actionList = new ArrayList<Action>();
995 ActionBuilder ab = new ActionBuilder();
997 GroupActionBuilder groupActionB = new GroupActionBuilder();
998 groupActionB.setGroupId(1L);
999 groupActionB.setGroup("0");
1000 ab.setAction(new GroupActionCaseBuilder().setGroupAction(groupActionB.build()).build());
1001 actionList.add(ab.build());