enum flow-mod-failed;
enum group-mod-failed;
enum port-mod-failed;
- enum table-mod-failed;
+ enum table-mod-failed;
enum queue-op-failed;
enum switch-config-failed;
enum role-request-failed;
}
leaf code {
- type uint16;
+ type uint16;
}
leaf data {
}
leaf exp-type {
- type uint16;
+ type uint16;
}
leaf experimenter-id {
- type uint32;
+ type uint32;
}
leaf data {
type string;
}
- }
+ }
}
\ No newline at end of file
rpc add-flow {
input {
uses node-flow;
- uses tr:transaction-aware;
+ uses tr:transaction-aware;
}
output {
uses tr:transaction-aware;
rpc remove-flow {
input {
uses node-flow;
- uses tr:transaction-aware;
+ uses tr:transaction-aware;
}
output {
uses tr:transaction-aware;
rpc update-flow {
input {
uses flow-update;
- uses tr:transaction-aware;
+ uses tr:transaction-aware;
}
output {
uses tr:transaction-aware;
rpc add-group {
input {
uses node-group;
- uses tr:transaction-aware;
+ uses tr:transaction-aware;
}
output {
uses tr:transaction-aware;
rpc remove-group {
input {
uses node-group;
- uses tr:transaction-aware;
+ uses tr:transaction-aware;
}
output {
uses tr:transaction-aware;
rpc update-group {
input {
uses group-update;
- uses tr:transaction-aware;
+ uses tr:transaction-aware;
}
output {
uses tr:transaction-aware;
import flow-capable-transaction {prefix tr;}
contact
- "Anilkumar Vishnoi
- Email: avishnoi@in.ibm.com";
-
+ "Anilkumar Vishnoi
+ Email: avishnoi@in.ibm.com";
+
revision "2013-11-11" {
description "Initial revision of group statistics service";
}
augment "/inv:nodes/inv:node" {
ext:augment-identifier "node-group-statistics";
container group-statistics {
- //config "false";
- uses group-types:group-statistics-reply;
+ //config "false";
+ uses group-types:group-statistics-reply;
}
}
- augment "/inv:nodes/inv:node" {
+ augment "/inv:nodes/inv:node" {
ext:augment-identifier "node-group-desc-stats";
container group-desc {
- //config "false";
- uses group-types:group-desc-stats-reply;
+ //config "false";
+ uses group-types:group-desc-stats-reply;
}
}
-
- augment "/inv:nodes/inv:node" {
+
+ augment "/inv:nodes/inv:node" {
ext:augment-identifier "node-group-features";
container group-features {
- //config "false";
- uses group-types:group-features-reply;
+ //config "false";
+ uses group-types:group-features-reply;
}
}
- // RPC calls
- rpc get-all-group-statistics {
- input {
- uses inv:node;
+ // RPC calls
+ rpc get-all-group-statistics {
+ input {
+ uses inv:node-context-ref;
}
output {
- uses group-types:group-statistics-reply;
+ uses group-types:group-statistics-reply;
uses tr:transaction-aware;
}
-
- }
-
- rpc get-group-statistics {
- input {
- uses inv:node;
+
+ }
+
+ rpc get-group-statistics {
+ input {
+ uses inv:node-context-ref;
leaf group-id{
- type group-types:group-id;
+ type group-types:group-id;
}
}
uses group-types:group-statistics-reply;
uses tr:transaction-aware;
}
-
- }
-
- rpc get-group-description {
- input {
- uses inv:node;
+
+ }
+
+ rpc get-group-description {
+ input {
+ uses inv:node-context-ref;
}
output {
uses group-types:group-desc-stats-reply;
uses tr:transaction-aware;
}
- }
-
- rpc get-group-features {
- input {
- uses inv:node;
+ }
+
+ rpc get-group-features {
+ input {
+ uses inv:node-context-ref;
}
output {
uses group-types:group-features-reply;
uses tr:transaction-aware;
}
- }
-
+ }
+
- //Notification calls
-
- notification group-statistics-updated {
- leaf moreReplies {
- type boolean;
- }
- uses inv:node;
- uses group-types:group-statistics-reply;
+ //Notification calls
+
+ notification group-statistics-updated {
+ leaf moreReplies {
+ type boolean;
+ }
+ uses inv:node;
+ uses group-types:group-statistics-reply;
uses tr:transaction-aware;
- }
-
- notification group-desc-stats-updated {
- leaf moreReplies {
- type boolean;
- }
- uses inv:node;
- uses group-types:group-desc-stats-reply;
+ }
+
+ notification group-desc-stats-updated {
+ leaf moreReplies {
+ type boolean;
+ }
+ uses inv:node;
+ uses group-types:group-desc-stats-reply;
uses tr:transaction-aware;
- }
+ }
- notification group-features-updated {
- leaf moreReplies {
- type boolean;
- }
- uses inv:node;
- uses group-types:group-features-reply;
+ notification group-features-updated {
+ leaf moreReplies {
+ type boolean;
+ }
+ uses inv:node;
+ uses group-types:group-features-reply;
uses tr:transaction-aware;
- }
+ }
}
import flow-capable-transaction {prefix tr;}
contact
- "Anilkumar Vishnoi
- Email: avishnoi@in.ibm.com";
+ "Anilkumar Vishnoi
+ Email: avishnoi@in.ibm.com";
revision "2013-11-11" {
description "Initial revision of meter statistics service";
augment "/inv:nodes/inv:node" {
ext:augment-identifier "node-meter-statistics";
container meter-statistics {
- //config "false";
- uses meter-types:meter-statistics-reply;
+ //config "false";
+ uses meter-types:meter-statistics-reply;
}
}
- augment "/inv:nodes/inv:node" {
+ augment "/inv:nodes/inv:node" {
ext:augment-identifier "node-meter-config-stats";
container meter-config-stats {
- //config "false";
- uses meter-types:meter-config-stats-reply;
+ //config "false";
+ uses meter-types:meter-config-stats-reply;
}
}
-
- augment "/inv:nodes/inv:node" {
+
+ augment "/inv:nodes/inv:node" {
ext:augment-identifier "node-meter-features";
container meter-features {
- //config "false";
- uses meter-types:meter-features-reply;
+ //config "false";
+ uses meter-types:meter-features-reply;
}
}
- // RPC calls
- rpc get-all-meter-statistics {
- input {
- uses inv:node;
+ // RPC calls
+ rpc get-all-meter-statistics {
+ input {
+ uses inv:node-context-ref;
}
output {
- uses meter-types:meter-statistics-reply;
- uses tr:transaction-aware;
+ uses meter-types:meter-statistics-reply;
+ uses tr:transaction-aware;
}
-
- }
-
- rpc get-meter-statistics {
- input {
- uses inv:node;
+
+ }
+
+ rpc get-meter-statistics {
+ input {
+ uses inv:node-context-ref;
leaf meter-id{
- type meter-types:meter-id;
+ type meter-types:meter-id;
}
}
output {
uses meter-types:meter-statistics-reply;
uses tr:transaction-aware;
}
-
- }
-
- rpc get-all-meter-config-statistics {
- input {
- uses inv:node;
+
+ }
+
+ rpc get-all-meter-config-statistics {
+ input {
+ uses inv:node-context-ref;
}
output {
- uses meter-types:meter-config-stats-reply;
+ uses meter-types:meter-config-stats-reply;
uses tr:transaction-aware;
}
- }
-
- rpc get-meter-features {
- input {
- uses inv:node;
+ }
+
+ rpc get-meter-features {
+ input {
+ uses inv:node-context-ref;
}
output {
- uses meter-types:meter-features-reply;
+ uses meter-types:meter-features-reply;
uses tr:transaction-aware;
}
- }
-
+ }
+
- //Notification calls
-
- notification meter-statistics-updated {
- leaf moreReplies {
- type boolean;
- }
-
- uses inv:node;
+ //Notification calls
+
+ notification meter-statistics-updated {
+ leaf moreReplies {
+ type boolean;
+ }
+
+ uses inv:node;
uses meter-types:meter-statistics-reply;
uses tr:transaction-aware;
- }
-
- notification meter-config-stats-updated {
- leaf moreReplies {
- type boolean;
- }
-
+ }
+
+ notification meter-config-stats-updated {
+ leaf moreReplies {
+ type boolean;
+ }
+
uses inv:node;
- uses meter-types:meter-config-stats-reply;
- uses tr:transaction-aware;
- }
+ uses meter-types:meter-config-stats-reply;
+ uses tr:transaction-aware;
+ }
- notification meter-features-updated {
- leaf moreReplies {
- type boolean;
- }
-
- uses inv:node;
+ notification meter-features-updated {
+ leaf moreReplies {
+ type boolean;
+ }
+
+ uses inv:node;
uses meter-types:meter-features-reply;
uses tr:transaction-aware;
- }
+ }
}
val targetCls = createClass(iface.directProxyName, supertype) [
field(DELEGATE_FIELD, iface);
implementMethodsFrom(supertype) [
- body = '''return ($r) «DELEGATE_FIELD».«it.name»($$);'''
+ body = '''
+ {
+ if(«DELEGATE_FIELD» == null) {
+ throw new java.lang.IllegalStateException("No provider is processing supplied message");
+ }
+ return ($r) «DELEGATE_FIELD».«it.name»($$);
+ }
+ '''
]
]
return targetCls.toClass(iface.classLoader).newInstance as T
/**
*
- * Use {@link #putOperationalData(Object, Object)} instead.
+ * @deprecated Use {@link #putOperationalData(Object, Object)} instead.
*
* @param path
* @param data
*/
+ @Deprecated
void putRuntimeData(P path, D data);
void putOperationalData(P path, D data);
void putConfigurationData(P path, D data);
/**
- * Use {@link #removeOperationalData(Object)}
+ * @deprecated Use {@link #removeOperationalData(Object)}
*
* @param path
*/
+ @Deprecated
void removeRuntimeData(P path);
void removeOperationalData(P path);
MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML})
public StructuredData readOperationalData(@PathParam("identifier") String identifier);
- @POST
- @Path("/operational/{identifier:.+}")
- @Produces({Draft02.MediaTypes.DATA+JSON,Draft02.MediaTypes.DATA+XML,
- MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML})
- public Response createOperationalData(@PathParam("identifier") String identifier, CompositeNode payload);
-
- @PUT
- @Path("/operational/{identifier:.+}")
- @Produces({Draft02.MediaTypes.DATA+JSON,Draft02.MediaTypes.DATA+XML,
- MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML})
- public Response updateOperationalData(@PathParam("identifier") String identifier, CompositeNode payload);
-
}
import java.util.List
import javax.ws.rs.core.Response
+import org.opendaylight.controller.md.sal.common.api.TransactionStatus
import org.opendaylight.controller.sal.rest.api.RestconfService
import org.opendaylight.yangtools.yang.data.api.CompositeNode
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus
-import javax.ws.rs.WebApplicationException
class RestconfImpl implements RestconfService {
createConfigurationData(identifier,payload);
}
- override createOperationalData(String identifier, CompositeNode payload) {
- val identifierWithSchemaNode = identifier.resolveInstanceIdentifier
- val value = resolveNodeNamespaceBySchema(payload, identifierWithSchemaNode.schemaNode)
- val status = broker.commitOperationalDataPut(identifierWithSchemaNode.instanceIdentifier,value).get();
- switch status.result {
- case TransactionStatus.COMMITED: Response.status(Response.Status.OK).build
- default: Response.status(Response.Status.INTERNAL_SERVER_ERROR).build
- }
- }
-
- override updateOperationalData(String identifier, CompositeNode payload) {
- val identifierWithSchemaNode = identifier.resolveInstanceIdentifier
- val value = resolveNodeNamespaceBySchema(payload, identifierWithSchemaNode.schemaNode)
- val status = broker.commitOperationalDataPut(identifierWithSchemaNode.instanceIdentifier,value).get();
- switch status.result {
- case TransactionStatus.COMMITED: Response.status(Response.Status.NO_CONTENT).build
- default: Response.status(Response.Status.INTERNAL_SERVER_ERROR).build
- }
- }
-
private def InstanceIdWithSchemaNode resolveInstanceIdentifier(String identifier) {
val identifierWithSchemaNode = identifier.toInstanceIdentifier
if (identifierWithSchemaNode === null) {
response = target(uri).request(MEDIA_TYPE_DRAFT02).post(entity);
assertEquals(200, response.getStatus());
- uri = createUri("/operational/", "ietf-interfaces:interfaces/interface/eth0");
+ uri = createUri("/config/", "ietf-interfaces:interfaces/interface/eth0");
response = target(uri).request(MEDIA_TYPE_DRAFT02).put(entity);
assertEquals(204, response.getStatus());
response = target(uri).request(MEDIA_TYPE_DRAFT02).post(entity);
response = target(uri).request(MEDIA_TYPE_DRAFT02).post(entity);
assertEquals(500, response.getStatus());
- uri = createUri("/operational/", "ietf-interfaces:interfaces/interface/eth0");
+ uri = createUri("/config/", "ietf-interfaces:interfaces/interface/eth0");
response = target(uri).request(MEDIA_TYPE_DRAFT02).put(entity);
assertEquals(500, response.getStatus());
response = target(uri).request(MEDIA_TYPE_DRAFT02).post(entity);
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupFeaturesOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.OpendaylightGroupStatisticsService;
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.meter.statistics.rev131111.GetAllMeterConfigStatisticsInputBuilder;
//We need to add check, so see if groups/meters are supported
//by the target node. Below check doesn't look good.
if(targetNode.getId().getValue().contains("openflow:")){
- sendAllGroupStatisticsRequest(targetNode);
+ InstanceIdentifier<Node> targetInstanceId = InstanceIdentifier.builder(Nodes.class).child(Node.class,targetNode.getKey()).toInstance();
+ NodeRef targetNodeRef = new NodeRef(targetInstanceId);
- sendAllMeterStatisticsRequest(targetNode);
+ sendAllGroupStatisticsRequest(targetNodeRef);
- sendGroupDescriptionRequest(targetNode);
+ sendAllMeterStatisticsRequest(targetNodeRef);
- sendGroupFeaturesRequest(targetNode);
+ sendGroupDescriptionRequest(targetNodeRef);
- sendMeterConfigStatisticsRequest(targetNode);
+ sendGroupFeaturesRequest(targetNodeRef);
- sendMeterFeaturesRequest(targetNode);
+ sendMeterConfigStatisticsRequest(targetNodeRef);
+
+ sendMeterFeaturesRequest(targetNodeRef);
}
}
}
- private void sendAllGroupStatisticsRequest(Node targetNode){
+ private void sendAllGroupStatisticsRequest(NodeRef targetNode){
final GetAllGroupStatisticsInputBuilder input = new GetAllGroupStatisticsInputBuilder();
- input.setId(targetNode.getId());
+ input.setNode(targetNode);
+ input.setNode(targetNode);
+ @SuppressWarnings("unused")
Future<RpcResult<GetAllGroupStatisticsOutput>> response =
groupStatsService.getAllGroupStatistics(input.build());
}
- private void sendGroupDescriptionRequest(Node targetNode){
+ private void sendGroupDescriptionRequest(NodeRef targetNode){
final GetGroupDescriptionInputBuilder input = new GetGroupDescriptionInputBuilder();
- input.setId(targetNode.getId());
-
+ input.setNode(targetNode);
+
+ @SuppressWarnings("unused")
Future<RpcResult<GetGroupDescriptionOutput>> response =
groupStatsService.getGroupDescription(input.build());
}
- private void sendGroupFeaturesRequest(Node targetNode){
+ private void sendGroupFeaturesRequest(NodeRef targetNode){
GetGroupFeaturesInputBuilder input = new GetGroupFeaturesInputBuilder();
- input.setId(targetNode.getId());
-
+ input.setNode(targetNode);
+
+ @SuppressWarnings("unused")
Future<RpcResult<GetGroupFeaturesOutput>> response =
groupStatsService.getGroupFeatures(input.build());
}
- private void sendAllMeterStatisticsRequest(Node targetNode){
+ private void sendAllMeterStatisticsRequest(NodeRef targetNode){
GetAllMeterStatisticsInputBuilder input = new GetAllMeterStatisticsInputBuilder();
- input.setId(targetNode.getId());
-
+ input.setNode(targetNode);
+
+ @SuppressWarnings("unused")
Future<RpcResult<GetAllMeterStatisticsOutput>> response =
meterStatsService.getAllMeterStatistics(input.build());
}
- private void sendMeterConfigStatisticsRequest(Node targetNode){
+ private void sendMeterConfigStatisticsRequest(NodeRef targetNode){
GetAllMeterConfigStatisticsInputBuilder input = new GetAllMeterConfigStatisticsInputBuilder();
- input.setId(targetNode.getId());
-
+ input.setNode(targetNode);
+
+ @SuppressWarnings("unused")
Future<RpcResult<GetAllMeterConfigStatisticsOutput>> response =
meterStatsService.getAllMeterConfigStatistics(input.build());
}
- private void sendMeterFeaturesRequest(Node targetNode){
+ private void sendMeterFeaturesRequest(NodeRef targetNode){
GetMeterFeaturesInputBuilder input = new GetMeterFeaturesInputBuilder();
- input.setId(targetNode.getId());
-
+ input.setNode(targetNode);
+
+ @SuppressWarnings("unused")
Future<RpcResult<GetMeterFeaturesOutput>> response =
meterStatsService.getMeterFeatures(input.build());
}
} catch (Throwable e) {
throw Exceptions.sneakyThrow(e);
}
-
}
}