--- /dev/null
+package org.opendaylight.openflowplugin.test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+import org.eclipse.osgi.framework.console.CommandInterpreter;
+import org.eclipse.osgi.framework.console.CommandProvider;
+import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
+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.opendaylight.group.config.rev131024.Groups;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.config.rev131024.groups.Group;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.config.rev131024.groups.GroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.config.rev131024.groups.GroupKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
+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.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 OpenflowpluginGroupTestCommandProvider implements CommandProvider {
+
+ private DataBrokerService dataBrokerService;
+ private ProviderContext pc;
+ private final BundleContext ctx;
+ private Group testGroup;
+ private Node testNode;
+ private final String originalGroupName = "Foo";
+ private final String updatedGroupName = "Bar";
+
+ public OpenflowpluginGroupTestCommandProvider(BundleContext ctx) {
+ this.ctx = ctx;
+ }
+
+ public void onSessionInitiated(ProviderContext session) {
+ pc = session;
+ dataBrokerService = session.getSALService(DataBrokerService.class);
+ ctx.registerService(CommandProvider.class.getName(), this, null);
+ createTestNode();
+ }
+
+ 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 void createTestNode() {
+ NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID);
+ NodeBuilder builder = new NodeBuilder();
+ builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
+ builder.setKey(new NodeKey(builder.getId()));
+ testNode = builder.build();
+ }
+
+ private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
+ return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
+ }
+
+ private void createTestGroup() {
+ // Sample data , committing to DataStore
+ DataModification modification = dataBrokerService.beginTransaction();
+ long id = 123;
+ GroupKey key = new GroupKey(id, new NodeRef(new NodeRef(nodeToInstanceId(testNode))));
+ GroupBuilder group = new GroupBuilder();
+ BucketBuilder bucket = new BucketBuilder();
+ bucket.setOrder(12);
+ group.setKey(key);
+ group.setInstall(false);
+ group.setId(id);
+ group.setGroupType(GroupTypes.GroupSelect);
+ group.setGroupName(originalGroupName);
+ group.setBarrier(false);
+ BucketsBuilder value = new BucketsBuilder();
+ List<Bucket> value1 = new ArrayList<Bucket>();
+ value1.add(bucket.build());
+ value.setBucket(value1);
+ group.setBuckets(value.build());
+ testGroup = group.build();
+ }
+
+ public void _removeGroup(CommandInterpreter ci) {
+ String nref = ci.nextArgument();
+
+ if (nref == null) {
+ ci.println("test node added");
+ createTestNode();
+ } else {
+ ci.println("User node added" + nref);
+ createUserNode(nref);
+ }
+ createTestGroup();
+ DataModification modification = dataBrokerService.beginTransaction();
+ InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Groups.class)
+ .child(Group.class, testGroup.getKey()).toInstance();
+ DataObject cls = (DataObject) modification.readConfigurationData(path1);
+ modification.removeOperationalData(nodeToInstanceId(testNode));
+ modification.removeOperationalData(path1);
+ modification.removeConfigurationData(nodeToInstanceId(testNode));
+ modification.removeConfigurationData(path1);
+ Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
+ try {
+ RpcResult<TransactionStatus> result = commitFuture.get();
+ TransactionStatus status = result.getResult();
+ ci.println("Status of Group Data Loaded Transaction: " + status);
+
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ public void _addGroup(CommandInterpreter ci) {
+ String nref = ci.nextArgument();
+
+ if (nref == null) {
+ ci.println("test node added");
+ createTestNode();
+ } else {
+ ci.println("User node added" + nref);
+ createUserNode(nref);
+ }
+ createTestGroup();
+ writeGroup(ci, testGroup);
+ }
+
+ private void writeGroup(CommandInterpreter ci, Group group) {
+ DataModification modification = dataBrokerService.beginTransaction();
+ InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Groups.class).child(Group.class, group.getKey())
+ .toInstance();
+ DataObject cls = (DataObject) modification.readConfigurationData(path1);
+ modification.putOperationalData(nodeToInstanceId(testNode), testNode);
+ modification.putOperationalData(path1, group);
+ modification.putConfigurationData(nodeToInstanceId(testNode), testNode);
+ modification.putConfigurationData(path1, group);
+ Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
+ try {
+ RpcResult<TransactionStatus> result = commitFuture.get();
+ TransactionStatus status = result.getResult();
+ ci.println("Status of Group Data Loaded Transaction: " + status);
+
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ public void _modifyGroup(CommandInterpreter ci) {
+ String nref = ci.nextArgument();
+
+ if (nref == null) {
+ ci.println("test node added");
+ createTestNode();
+ } else {
+ ci.println("User node added" + nref);
+ createUserNode(nref);
+ }
+ createTestGroup();
+ GroupBuilder group = new GroupBuilder(testGroup);
+ group.setGroupName(updatedGroupName);
+ writeGroup(ci, group.build());
+ group.setGroupName(originalGroupName);
+ writeGroup(ci, group.build());
+ }
+
+ @Override
+ public String getHelp() {
+ StringBuffer help = new StringBuffer();
+ help.append("---FRM MD-SAL Group test module---\n");
+ help.append("\t addGroup <node id> - node ref\n");
+ help.append("\t modifyGroup <node id> - node ref\n");
+ help.append("\t removeGroup <node id> - node ref\n");
+
+ return help.toString();
+ }
+
+ 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();
+
+ return new NodeRef(path);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.openflowplugin.test
+
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeContext
+import org.opendaylight.yangtools.concepts.CompositeObjectRegistration
+import org.opendaylight.yangtools.concepts.Registration
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
+import org.opendaylight.yangtools.yang.binding.NotificationListener
+import org.slf4j.LoggerFactory
+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.NodeKey
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupInput
+
+class OpenflowpluginTestServiceProvider implements AutoCloseable, SalGroupService {
+
+
+ static val LOG = LoggerFactory.getLogger(OpenflowpluginTestServiceProvider);
+
+ @Property
+ DataProviderService dataService;
+
+ @Property
+ RoutedRpcRegistration<SalGroupService> groupRegistration;
+
+
+ @Property
+ NotificationProviderService notificationService;
+
+
+ def void start() {
+ LOG.info("SalGroupServiceProvider Started.");
+
+ }
+
+
+ override close() {
+ LOG.info("SalGroupServiceProvide stopped.");
+ groupRegistration.close;
+ }
+
+ override addGroup(AddGroupInput input) {
+ LOG.info("addGroup - " + input);
+ return null;
+
+ }
+
+ override removeGroup(RemoveGroupInput input) {
+ LOG.info("removeGroup - " + input);
+ return null;
+ }
+
+ override updateGroup(UpdateGroupInput input) {
+ LOG.info("updateGroup - " + input);
+ return null;
+ }
+
+
+ def CompositeObjectRegistration<OpenflowpluginTestServiceProvider> register(ProviderContext ctx) {
+ val builder = CompositeObjectRegistration
+ .<OpenflowpluginTestServiceProvider> builderFor(this);
+
+ groupRegistration = ctx.addRoutedRpcImplementation(SalGroupService, this);
+ val nodeIndentifier = InstanceIdentifier.builder(Nodes).child(Node, new NodeKey(new NodeId(OpenflowpluginTestActivator.NODE_ID)));
+ groupRegistration.registerPath(NodeContext, nodeIndentifier.toInstance());
+ builder.add(groupRegistration);
+
+ return builder.toInstance();
+ }
+
+}
+
+
--- /dev/null
+package org.opendaylight.openflowplugin.test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+import org.eclipse.osgi.framework.console.CommandInterpreter;
+import org.eclipse.osgi.framework.console.CommandProvider;
+import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
+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.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
+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.meter.config.rev131024.Meters;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.Meter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.MeterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.MeterKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemark;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemarkBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeaders;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
+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 OpenflowpluginMeterTestCommandProvider implements CommandProvider {
+
+ private DataBrokerService dataBrokerService;
+ private ProviderContext pc;
+ private final BundleContext ctx;
+ private Meter testMeter;
+ private Node testNode;
+ private final String originalMeterName = "Foo";
+ private final String updatedMeterName = "Bar";
+
+ public OpenflowpluginMeterTestCommandProvider(BundleContext ctx) {
+ this.ctx = ctx;
+ }
+
+ public void onSessionInitiated(ProviderContext session) {
+ pc = session;
+ dataBrokerService = session.getSALService(DataBrokerService.class);
+ ctx.registerService(CommandProvider.class.getName(), this, null);
+ createTestNode();
+ createTestMeter();
+ }
+
+ 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 void createTestNode() {
+ NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID);
+ NodeBuilder builder = new NodeBuilder();
+ builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
+ builder.setKey(new NodeKey(builder.getId()));
+ testNode = builder.build();
+ }
+
+ private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
+ return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
+ }
+
+ private void createTestMeter() {
+ // Sample data , committing to DataStore
+ DataModification modification = dataBrokerService.beginTransaction();
+ long id = 123;
+ MeterKey key = new MeterKey(id, new NodeRef(new NodeRef(nodeToInstanceId(testNode))));
+ MeterBuilder meter = new MeterBuilder();
+ meter.setContainerName("abcd");
+ meter.setId((long) 123);
+ meter.setKey(key);
+ meter.setMeterName(originalMeterName);
+ meter.setFlags(new MeterFlags(true, false, false, false));
+ MeterBandHeadersBuilder bandHeaders = new MeterBandHeadersBuilder();
+ List<MeterBandHeader> bandHdr = new ArrayList<MeterBandHeader>();
+ MeterBandHeaderBuilder bandHeader = new MeterBandHeaderBuilder();
+ bandHeader.setRate((long) 234);
+ bandHeader.setBurstSize((long) 444);
+ DscpRemarkBuilder dscpRemark = new DscpRemarkBuilder();
+ dscpRemark.setBurstSize((long) 5);
+ dscpRemark.setPercLevel((short) 1);
+ dscpRemark.setRate((long) 12);
+ bandHeader.setBandType(dscpRemark.build());
+ bandHdr.add(bandHeader.build());
+ bandHeaders.setMeterBandHeader(bandHdr);
+ meter.setMeterBandHeaders(bandHeaders.build());
+ testMeter = meter.build();
+ }
+
+ public void _removeMeter(CommandInterpreter ci) {
+ String nref = ci.nextArgument();
+
+ if (nref == null) {
+ ci.println("test node added");
+ createTestNode();
+ } else {
+ ci.println("User node added" + nref);
+ createUserNode(nref);
+ }
+ DataModification modification = dataBrokerService.beginTransaction();
+ InstanceIdentifier<Meter> path1 = InstanceIdentifier.builder(Meters.class)
+ .child(Meter.class, testMeter.getKey()).toInstance();
+ DataObject cls = (DataObject) modification.readConfigurationData(path1);
+ modification.removeOperationalData(nodeToInstanceId(testNode));
+ modification.removeOperationalData(path1);
+ modification.removeConfigurationData(nodeToInstanceId(testNode));
+ modification.removeConfigurationData(path1);
+ Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
+ try {
+ RpcResult<TransactionStatus> result = commitFuture.get();
+ TransactionStatus status = result.getResult();
+ ci.println("Status of Meter Data Loaded Transaction: " + status);
+
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ public void _addMeter(CommandInterpreter ci) {
+ writeMeter(ci, testMeter);
+ }
+
+ private void writeMeter(CommandInterpreter ci, Meter meter) {
+ DataModification modification = dataBrokerService.beginTransaction();
+ InstanceIdentifier<Meter> path1 = InstanceIdentifier.builder(Meters.class).
+ child(Meter.class, meter.getKey())
+ .toInstance();
+ DataObject cls = (DataObject) modification.readConfigurationData(path1);
+ modification.putOperationalData(nodeToInstanceId(testNode), testNode);
+ modification.putOperationalData(path1, meter);
+ modification.putConfigurationData(nodeToInstanceId(testNode), testNode);
+ modification.putConfigurationData(path1, meter);
+ Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
+ try {
+ RpcResult<TransactionStatus> result = commitFuture.get();
+ TransactionStatus status = result.getResult();
+ ci.println("Status of Meter Data Loaded Transaction: " + status);
+
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ public void _modifyMeter(CommandInterpreter ci) {
+ String nref = ci.nextArgument();
+
+ if (nref == null) {
+ ci.println("test node added");
+ createTestNode();
+ } else {
+ ci.println("User node added" + nref);
+ createUserNode(nref);
+ }
+ createTestMeter();
+ MeterBuilder meter = new MeterBuilder(testMeter);
+ meter.setMeterName(updatedMeterName);
+ writeMeter(ci, meter.build());
+ meter.setMeterName(originalMeterName);
+ writeMeter(ci, meter.build());
+ }
+
+ @Override
+ public String getHelp() {
+ StringBuffer help = new StringBuffer();
+ help.append("---FRM MD-SAL Group test module---\n");
+ help.append("\t addMeter <node id> - node ref\n");
+ help.append("\t modifyMeter <node id> - node ref\n");
+ help.append("\t removeMeter <node id> - node ref\n");
+
+ return help.toString();
+ }
+
+ 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();
+
+ return new NodeRef(path);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.openflowplugin.test
+
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeContext
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId
+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.NodeKey
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInput
+import org.opendaylight.yangtools.concepts.CompositeObjectRegistration
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
+import org.slf4j.LoggerFactory
+
+class OpenflowpluginTestServiceProvider implements AutoCloseable, SalMeterService {
+
+
+ static val LOG = LoggerFactory.getLogger(OpenflowpluginTestServiceProvider);
+
+ @Property
+ DataProviderService dataService;
+
+ @Property
+ RoutedRpcRegistration<SalMeterService> meterRegistration;
+
+
+ @Property
+ NotificationProviderService notificationService;
+
+
+ def void start() {
+ LOG.info("SalMeterServiceProvider Started.");
+
+ }
+
+
+ override close() {
+ LOG.info("SalMeterServiceProvide stopped.");
+ meterRegistration.close;
+ }
+
+ override addMeter(AddMeterInput input) {
+ LOG.info("addMeter - " + input);
+ return null;
+
+ }
+
+ override removeMeter(RemoveMeterInput input) {
+ LOG.info("removeMeter - " + input);
+ return null;
+ }
+
+ override updateMeter(UpdateMeterInput input) {
+ LOG.info("updateMeter - " + input);
+ return null;
+ }
+
+
+ def CompositeObjectRegistration<OpenflowpluginTestServiceProvider> register(ProviderContext ctx) {
+ val builder = CompositeObjectRegistration
+ .<OpenflowpluginTestServiceProvider> builderFor(this);
+
+ meterRegistration = ctx.addRoutedRpcImplementation(SalMeterService, this);
+ val nodeIndentifier = InstanceIdentifier.builder(Nodes).child(Node, new NodeKey(new NodeId(OpenflowpluginTestActivator.NODE_ID)));
+ meterRegistration.registerPath(NodeContext, nodeIndentifier.toInstance());
+ builder.add(meterRegistration);
+
+ return builder.toInstance();
+ }
+
+}
+
+
static var OpenflowpluginTestServiceProvider provider = new OpenflowpluginTestServiceProvider();
var OpenflowpluginTestCommandProvider cmdProvider;
+ var OpenflowpluginGroupTestCommandProvider cmdGroupProvider;
+ var OpenflowpluginMeterTestCommandProvider cmdMeterProvider;
public static final String NODE_ID = "foo:node:1";
override onSessionInitiated(ProviderContext session) {
provider.start();
provider.register(session);
cmdProvider.onSessionInitiated(session);
-
+ cmdGroupProvider.onSessionInitiated(session);
+ cmdMeterProvider.onSessionInitiated(session);
}
override startImpl(BundleContext ctx) {
super.startImpl(ctx);
cmdProvider = new OpenflowpluginTestCommandProvider(ctx);
-
+ cmdGroupProvider = new OpenflowpluginGroupTestCommandProvider(ctx);
+ cmdMeterProvider = new OpenflowpluginMeterTestCommandProvider(ctx);
}
override protected stopImpl(BundleContext context) {
-
/*
* Copyright (c) 2013 Ericsson , Inc. and others. All rights reserved.
*
package org.opendaylight.openflowplugin.test;
-
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
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.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.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.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;
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 FlowBuilder testFlow;
- private NodeBuilder testNode;
+ private DataBrokerService dataBrokerService;
+ private ProviderContext pc;
+ private BundleContext ctx;
+ private Flow testFlow;
+ private Node 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);
- createTestFlow(createTestNode(null));
+ public void onSessionInitiated(ProviderContext session) {
+ pc = session;
+ dataBrokerService = session.getSALService(DataBrokerService.class);
+ ctx.registerService(CommandProvider.class.getName(), this, null);
}
- private NodeBuilder createTestNode(String nodeId) {
- if(nodeId == null) {
- nodeId = OpenflowpluginTestActivator.NODE_ID;
- }
- NodeRef nodeOne = createNodeRef(nodeId);
+ private void createTestNode() {
+ NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID);
NodeBuilder builder = new NodeBuilder();
- builder.setId(new NodeId(nodeId));
+ builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
builder.setKey(new NodeKey(builder.getId()));
- testNode = builder;
- return builder;
- }
+ testNode = builder.build();
+ }
- private InstanceIdentifier<Node> nodeBuilderToInstanceId(NodeBuilder node) {
- return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
- }
+ 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 FlowBuilder createTestFlow(NodeBuilder nodeBuilder) {
+ private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
+ return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
+ }
+ 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(nodeBuilderToInstanceId(nodeBuilder))));
+ FlowKey key = new FlowKey(id, new NodeRef(new NodeRef(nodeToInstanceId(testNode))));
FlowBuilder flow = new FlowBuilder();
flow.setKey(key);
MatchBuilder match = new MatchBuilder();
- Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();
+ EthernetMatchBuilder eth = new EthernetMatchBuilder();
+ EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();
+ ethTypeBuilder.setType(new EtherType((long) 0x86dd));
+ eth.setEthernetType(ethTypeBuilder.build());
+ // 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());
-
- // Put our Instruction in a list of Instructions
+ flow.setTableId((short) 0);
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;
- 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));
+ 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));
modification.removeOperationalData(path1);
- modification.removeConfigurationData(nodeBuilderToInstanceId(tn));
+ modification.removeConfigurationData(nodeToInstanceId(testNode));
modification.removeConfigurationData(path1);
Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
try {
// TODO Auto-generated catch block
e.printStackTrace();
}
- }
+ }
- public void _addMDFlow(CommandInterpreter ci) {
- NodeBuilder tn = createTestNode(ci.nextArgument());
- FlowBuilder tf = createTestFlow(tn);
- writeFlow(ci, tf, tn);
+ 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);
}
- 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());
+ 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);
Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
try {
RpcResult<TransactionStatus> result = commitFuture.get();
// TODO Auto-generated catch block
e.printStackTrace();
}
- }
-
- 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) {
+ }
+
+ 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) {
NodeKey key = new NodeKey(new NodeId(string));
- InstanceIdentifier<Node> path =
- InstanceIdentifier.builder().node(Nodes.class).node(Node.class, key).toInstance();
+ InstanceIdentifier<Node> path = InstanceIdentifier.builder(Nodes.class).child(Node.class, key).toInstance();
return new NodeRef(path);
}
@Override
public String getHelp() {
- return "No help";
+ 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();
}
}
-