import java.util.List;
import java.util.concurrent.Future;
+import org.opendaylight.controller.sal.common.util.Arguments;
import org.opendaylight.controller.sal.common.util.Rpcs;
+import org.opendaylight.openflowjava.protocol.api.util.BinContent;
+import org.opendaylight.openflowplugin.openflow.md.OFConstants;
import org.opendaylight.openflowplugin.openflow.md.core.SwitchConnectionDistinguisher;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.FlowConvertor;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterConvertor;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.PortConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.TableFeaturesConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchReactor;
import org.opendaylight.openflowplugin.openflow.md.core.session.IMessageDispatchService;
import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext;
+import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowOutputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForAllFlowsInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForAllFlowsOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForAllFlowsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllFlowStatisticsFromFlowTableInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllFlowStatisticsFromFlowTableOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllFlowStatisticsFromFlowTableOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllFlowStatisticsInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllFlowStatisticsOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllFlowsStatisticsFromAllFlowTablesInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllFlowsStatisticsFromAllFlowTablesOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllFlowsStatisticsFromAllFlowTablesOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllNodeConnectorStatisticsInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllNodeConnectorStatisticsOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsFromFlowTableInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsFromFlowTableOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsFromFlowTableOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowTableStatisticsInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowTableStatisticsOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetNodeConnectorStatisticsInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetNodeConnectorStatisticsOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.GetFlowTablesStatisticsInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.GetFlowTablesStatisticsOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.GetFlowTablesStatisticsOutputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.port.mod.port.Port;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupOutputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterStatisticsInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterStatisticsOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterStatisticsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsListBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowWildcardsV10;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Group;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Meter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.v10.grouping.MatchV10Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.MatchEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortModInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortModInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.match.grouping.Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.match.grouping.MatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupDescBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupFeaturesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterFeaturesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupDescCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupFeaturesCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterFeaturesCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeaturesCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.aggregate._case.MultipartRequestAggregateBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlowBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter.config._case.MultipartRequestMeterConfigBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.port.stats._case.MultipartRequestPortStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueueBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table._case.MultipartRequestTableBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features._case.MultipartRequestTableFeaturesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features._case.multipart.request.table.features.TableFeatures;
import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.port.service.rev131107.GetPortOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.port.service.rev131107.UpdatePortInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.port.service.rev131107.UpdatePortOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.port.service.rev131107.UpdatePortOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.GetAllPortsStatisticsInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.GetAllPortsStatisticsOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.GetAllPortsStatisticsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.GetPortStatisticsInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.GetPortStatisticsOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.GetPortStatisticsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromAllPortsInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromAllPortsOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromAllPortsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromGivenPortInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromGivenPortOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromGivenPortOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetQueueStatisticsFromGivenPortInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetQueueStatisticsFromGivenPortOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetQueueStatisticsFromGivenPortOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.UpdateTableInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.UpdateTableOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.UpdateTableOutputBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.slf4j.Logger;
+import com.google.common.base.Objects;
import com.google.common.util.concurrent.Futures;
/**
version = context.getPrimaryConductor().getVersion();
}
+
@Override
public Future<RpcResult<AddFlowOutput>> addFlow(AddFlowInput input) {
// Convert the AddFlowInput to FlowModInput
FlowModInput ofFlowModInput = FlowConvertor.toFlowModInput(input, version);
+ BarrierInputBuilder barrierInput = new BarrierInputBuilder();
+ barrierInput.setVersion(version);
// For Flow provisioning, the SwitchConnectionDistinguisher is set to null so
// the request can be routed through any connection to the switch
SwitchConnectionDistinguisher cookie = null ;
+ if (Objects.firstNonNull(input.isBarrier(), Boolean.FALSE)) {
+ Future<RpcResult<BarrierOutput>> barrierOFLib = messageService.barrier(barrierInput.build(), cookie);
+ }
LOG.debug("Calling the FlowMod RPC method on MessageDispatchService");
Future<RpcResult<UpdateFlowOutput>> resultFromOFLib = messageService.flowMod(ofFlowModInput, cookie) ;
// Convert the AddMeterInput to MeterModInput
MeterModInput ofMeterModInput = MeterConvertor.toMeterModInput(input, version);
-
// For Meter provisioning, the SwitchConnectionDistinguisher is set to null so
// the request can be routed through any connection to the switch
public Future<RpcResult<RemoveFlowOutput>> removeFlow(RemoveFlowInput input) {
// Convert the RemoveFlowInput to FlowModInput
FlowModInput ofFlowModInput = FlowConvertor.toFlowModInput(input, version);
-
+ BarrierInputBuilder barrierInput = new BarrierInputBuilder();
+ barrierInput.setVersion(version);
// For Flow provisioning, the SwitchConnectionDistinguisher is set to null so
// the request can be routed through any connection to the switch
SwitchConnectionDistinguisher cookie = null ;
-
+ if (Objects.firstNonNull(input.isBarrier(), Boolean.FALSE)) {
+ Future<RpcResult<BarrierOutput>> barrierOFLib = messageService.barrier(barrierInput.build(), cookie);
+ }
+
LOG.debug("Calling the FlowMod RPC method on MessageDispatchService");
Future<RpcResult<UpdateFlowOutput>> resultFromOFLib = messageService.flowMod(ofFlowModInput, cookie) ;
@Override
public Future<RpcResult<Void>> transmitPacket(TransmitPacketInput input) {
- // TODO Auto-generated method stub
- return null;
+ LOG.info("TransmitPacket - {}",input);
+ // Convert TransmitPacket to PacketOutInput
+
+ // TODO VD create PacketConvertor and move convert logic there
+
+ // Build Port ID from TransmitPacketInput.Ingress
+ PortNumber inPortNr = null;
+
+ List<PathArgument> inArgs = input.getIngress().getValue().getPath();
+ if (inArgs.size() >= 3) {
+ InstanceIdentifier.IdentifiableItem item = Arguments.checkInstanceOf(inArgs.get(2), InstanceIdentifier.IdentifiableItem.class);
+ NodeConnectorKey key = Arguments.checkInstanceOf(item.getKey(), NodeConnectorKey.class);
+ String[] split = key.getId().getValue().split(":");
+ Long port = Long.decode(split[split.length-1]);
+ inPortNr = new PortNumber(port);
+ } else {
+ // TODO Ed could by in this way or Exception or something else ?
+ inPortNr = new PortNumber(0xfffffffdL);
+ }
+
+ // Build Buffer ID from TransmitPacketInput.Ingress
+ // TODO VD P! find how to fix PacketIn to add BufferID to augmetation
+ Long bufferId = OFConstants.OFP_NO_BUFFER;
+
+ PortNumber outPort = null;
+ NodeConnectorRef outRef = input.getEgress();
+ List<PathArgument> outArgs = outRef.getValue().getPathArguments();
+ if (outArgs.size() >= 3) {
+ InstanceIdentifier.IdentifiableItem item = Arguments.checkInstanceOf(outArgs.get(2), InstanceIdentifier.IdentifiableItem.class);
+ NodeConnectorKey key = Arguments.checkInstanceOf(item.getKey(), NodeConnectorKey.class);
+ String[] split = key.getId().getValue().split(":");
+ Long port = Long.decode(split[split.length-1]);
+ outPort = new PortNumber(port);
+ } else {
+ new Exception("PORT NR not exist in Egress"); //TODO : P4 search for some normal exception
+ }
+
+ // TODO VD P! wait for way to move Actions (e.g. augmentation)
+
+ // TODO VD implementation for testing PacketIn (REMOVE IT)
+ List<ActionsList> actions = new ArrayList<ActionsList>();
+ ActionsListBuilder asBuild = new ActionsListBuilder();
+ ActionBuilder aBuild = new ActionBuilder();
+ aBuild.setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output.class);
+ PortActionBuilder paBuild = new PortActionBuilder();
+ paBuild.setPort(outPort);
+ aBuild.addAugmentation(PortAction.class, paBuild.build());
+ MaxLengthActionBuilder mlBuild = new MaxLengthActionBuilder();
+ mlBuild.setMaxLength(0xffff);
+ aBuild.addAugmentation(MaxLengthAction.class, mlBuild.build());
+ asBuild.setAction(aBuild.build());
+ actions.add(asBuild.build());
+
+ PacketOutInputBuilder builder = new PacketOutInputBuilder();
+ builder.setActionsList(actions);
+ builder.setData(input.getPayload());
+ builder.setVersion(version);
+ builder.setXid(sessionContext.getNextXid());
+ builder.setInPort(inPortNr);
+ builder.setBufferId(bufferId);
+ // --------------------------------------------------------
+
+ PacketOutInput message = builder.build();
+
+ // TODO VD NULL for yet - find how to translate cookie from TransmitPacketInput
+// SwitchConnectionDistinguisher cookie = ( "what is need to do" ) input.getCookie();
+ SwitchConnectionDistinguisher cookie = null ;
+
+ LOG.debug("Calling the transmitPacket RPC method");
+ return messageService.packetOut(message, cookie);
}
private FlowModInputBuilder toFlowModInputBuilder(Flow source) {
public Future<RpcResult<UpdateFlowOutput>> updateFlow(UpdateFlowInput input) {
// Convert the UpdateFlowInput to FlowModInput
FlowModInput ofFlowModInput = FlowConvertor.toFlowModInput(input.getUpdatedFlow(), version);
-
+ BarrierInputBuilder barrierInput = new BarrierInputBuilder();
+ barrierInput.setVersion(version);
// Call the RPC method on MessageDispatchService
// For Flow provisioning, the SwitchConnectionDistinguisher is set to null so
// the request can be routed through any connection to the switch
SwitchConnectionDistinguisher cookie = null ;
-
+ if (Objects.firstNonNull(input.getUpdatedFlow().isBarrier(), Boolean.FALSE)) {
+ Future<RpcResult<BarrierOutput>> barrierOFLib = messageService.barrier(barrierInput.build(), cookie);
+ }
+
LOG.debug("Calling the FlowMod RPC method on MessageDispatchService");
Future<RpcResult<UpdateFlowOutput>> resultFromOFLib = messageService.flowMod(ofFlowModInput, cookie) ;
mprInput.setFlags(new MultipartRequestFlags(false));
// Create multipart request body for fetch all the group stats
+ MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder();
MultipartRequestGroupBuilder mprGroupBuild = new MultipartRequestGroupBuilder();
- mprGroupBuild.setGroupId((long) Group.OFPGALL.getIntValue());
-
+ mprGroupBuild.setGroupId(new GroupId(BinContent.intToUnsignedLong(Group.OFPGALL.getIntValue())));
+ caseBuilder.setMultipartRequestGroup(mprGroupBuild.build());
+
//Set request body to main multipart request
- mprInput.setMultipartRequestBody(mprGroupBuild.build());
+ mprInput.setMultipartRequestBody(caseBuilder.build());
//Send the request, no cookies associated, use any connection
LOG.debug("Send group statistics request to the switch :{}",mprGroupBuild);
mprInput.setFlags(new MultipartRequestFlags(false));
// Create multipart request body for fetch all the group description stats
- MultipartRequestGroupDescBuilder mprGroupDescBuild = new MultipartRequestGroupDescBuilder();
+ MultipartRequestGroupDescCaseBuilder mprGroupDescBuild = new MultipartRequestGroupDescCaseBuilder();
//Set request body to main multipart request
mprInput.setMultipartRequestBody(mprGroupDescBuild.build());
mprInput.setFlags(new MultipartRequestFlags(false));
// Create multipart request body for fetch all the group description stats
- MultipartRequestGroupFeaturesBuilder mprGroupFeaturesBuild = new MultipartRequestGroupFeaturesBuilder();
+ MultipartRequestGroupFeaturesCaseBuilder mprGroupFeaturesBuild = new MultipartRequestGroupFeaturesCaseBuilder();
//Set request body to main multipart request
mprInput.setMultipartRequestBody(mprGroupFeaturesBuild.build());
mprInput.setFlags(new MultipartRequestFlags(false));
// Create multipart request body for fetch all the group stats
+ MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder();
MultipartRequestGroupBuilder mprGroupBuild = new MultipartRequestGroupBuilder();
- mprGroupBuild.setGroupId(input.getGroupId().getValue());
-
+ mprGroupBuild.setGroupId(new GroupId(input.getGroupId().getValue()));
+ caseBuilder.setMultipartRequestGroup(mprGroupBuild.build());
+
//Set request body to main multipart request
- mprInput.setMultipartRequestBody(mprGroupBuild.build());
+ mprInput.setMultipartRequestBody(caseBuilder.build());
//Send the request, no cookies associated, use any connection
LOG.debug("Send group statistics request :{}",mprGroupBuild);
mprInput.setFlags(new MultipartRequestFlags(false));
// Create multipart request body for fetch all the meter stats
+ MultipartRequestMeterConfigCaseBuilder caseBuilder = new MultipartRequestMeterConfigCaseBuilder();
MultipartRequestMeterConfigBuilder mprMeterConfigBuild = new MultipartRequestMeterConfigBuilder();
- mprMeterConfigBuild.setMeterId((long) Meter.OFPMALL.getIntValue());
-
+ mprMeterConfigBuild.setMeterId(new MeterId(BinContent.intToUnsignedLong(Meter.OFPMALL.getIntValue())));
+ caseBuilder.setMultipartRequestMeterConfig(mprMeterConfigBuild.build());
+
//Set request body to main multipart request
- mprInput.setMultipartRequestBody(mprMeterConfigBuild.build());
+ mprInput.setMultipartRequestBody(caseBuilder.build());
//Send the request, no cookies associated, use any connection
LOG.debug("Send meter statistics request :{}",mprMeterConfigBuild);
mprInput.setFlags(new MultipartRequestFlags(false));
// Create multipart request body for fetch all the meter stats
+ MultipartRequestMeterCaseBuilder caseBuilder = new MultipartRequestMeterCaseBuilder();
MultipartRequestMeterBuilder mprMeterBuild = new MultipartRequestMeterBuilder();
- mprMeterBuild.setMeterId((long) Meter.OFPMALL.getIntValue());
-
+ mprMeterBuild.setMeterId(new MeterId(BinContent.intToUnsignedLong(Meter.OFPMALL.getIntValue())));
+ caseBuilder.setMultipartRequestMeter(mprMeterBuild.build());
+
//Set request body to main multipart request
- mprInput.setMultipartRequestBody(mprMeterBuild.build());
+ mprInput.setMultipartRequestBody(caseBuilder.build());
//Send the request, no cookies associated, use any connection
LOG.debug("Send meter statistics request :{}",mprMeterBuild);
mprInput.setFlags(new MultipartRequestFlags(false));
// Create multipart request body for fetch all the group description stats
- MultipartRequestMeterFeaturesBuilder mprMeterFeaturesBuild = new MultipartRequestMeterFeaturesBuilder();
+ MultipartRequestMeterFeaturesCaseBuilder mprMeterFeaturesBuild = new MultipartRequestMeterFeaturesCaseBuilder();
//Set request body to main multipart request
mprInput.setMultipartRequestBody(mprMeterFeaturesBuild.build());
mprInput.setFlags(new MultipartRequestFlags(false));
// Create multipart request body for fetch all the meter stats
+ MultipartRequestMeterCaseBuilder caseBuilder = new MultipartRequestMeterCaseBuilder();
MultipartRequestMeterBuilder mprMeterBuild = new MultipartRequestMeterBuilder();
//Select specific meter
- mprMeterBuild.setMeterId(input.getMeterId().getValue());
-
+ mprMeterBuild.setMeterId(new MeterId(input.getMeterId().getValue()));
+ caseBuilder.setMultipartRequestMeter(mprMeterBuild.build());
+
//Set request body to main multipart request
- mprInput.setMultipartRequestBody(mprMeterBuild.build());
+ mprInput.setMultipartRequestBody(caseBuilder.build());
//Send the request, no cookies associated, use any connection
LOG.debug("Send meter statistics request :{}",mprMeterBuild);
RpcResult<GetMeterStatisticsOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
return Futures.immediateFuture(rpcResult);
}
+
+ @Override
+ public Future<RpcResult<GetAllPortsStatisticsOutput>> getAllPortsStatistics(GetAllPortsStatisticsInput arg0) {
+
+ //Generate xid to associate it with the request
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.info("Prepare port statistics request for all ports of node {} - TrasactionId - {}",arg0.getNode().getValue(),xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPPORTSTATS);
+ mprInput.setVersion(version);
+ mprInput.setXid(xid);
+ mprInput.setFlags(new MultipartRequestFlags(false));
+
+ // Create multipart request body to fetch stats for all the port of the node
+ MultipartRequestPortStatsCaseBuilder caseBuilder = new MultipartRequestPortStatsCaseBuilder();
+ MultipartRequestPortStatsBuilder mprPortStatsBuilder = new MultipartRequestPortStatsBuilder();
+ //Select all ports
+ mprPortStatsBuilder.setPortNo(OFConstants.OFPP_ANY);
+ caseBuilder.setMultipartRequestPortStats(mprPortStatsBuilder.build());
+
+ //Set request body to main multipart request
+ mprInput.setMultipartRequestBody(caseBuilder.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send port statistics request :{}",mprPortStatsBuilder.build().toString());
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+ // Prepare rpc return output. Set xid and send it back.
+ GetAllPortsStatisticsOutputBuilder output = new GetAllPortsStatisticsOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<GetAllPortsStatisticsOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+ }
+
+ @Override
+ public Future<RpcResult<GetPortStatisticsOutput>> getPortStatistics(GetPortStatisticsInput arg0) {
+ //Generate xid to associate it with the request
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.info("Prepare port statistics request for port {} of node {} - TrasactionId - {}",arg0.getNodeConnectorId(), arg0.getNode().getValue(),xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPPORTSTATS);
+ mprInput.setVersion(version);
+ mprInput.setXid(xid);
+ mprInput.setFlags(new MultipartRequestFlags(false));
+
+ // Create multipart request body to fetch stats for all the port of the node
+ MultipartRequestPortStatsCaseBuilder caseBuilder = new MultipartRequestPortStatsCaseBuilder();
+ MultipartRequestPortStatsBuilder mprPortStatsBuilder = new MultipartRequestPortStatsBuilder();
+
+ //Set specific port
+ mprPortStatsBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId(arg0.getNodeConnectorId()));
+ caseBuilder.setMultipartRequestPortStats(mprPortStatsBuilder.build());
+
+ //Set request body to main multipart request
+ mprInput.setMultipartRequestBody(caseBuilder.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send port statistics request :{}",mprPortStatsBuilder.build().toString());
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+ // Prepare rpc return output. Set xid and send it back.
+ GetPortStatisticsOutputBuilder output = new GetPortStatisticsOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<GetPortStatisticsOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+ }
private TransactionId generateTransactionId(Long xid){
String stringXid =xid.toString();
}
- @Override
- public Future<RpcResult<GetPortOutput>> getPort() {
- // TODO Auto-generated method stub
- return null;
- }
+ @Override
+ public Future<RpcResult<GetPortOutput>> getPort() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
- @Override
- public Future<RpcResult<UpdatePortOutput>> updatePort(UpdatePortInput input) {
- PortModInput ofPortModInput = null ;
- RpcResult<UpdatePortOutput> rpcResultFromOFLib = null ;
+ @Override
+ public Future<RpcResult<UpdatePortOutput>> updatePort(UpdatePortInput input) {
+ PortModInput ofPortModInput = null ;
+ RpcResult<UpdatePortOutput> rpcResultFromOFLib = null ;
- // For Flow provisioning, the SwitchConnectionDistinguisher is set to null so
+ // For Flow provisioning, the SwitchConnectionDistinguisher is set to null so
// the request can be routed through any connection to the switch
SwitchConnectionDistinguisher cookie = null ;
- // NSF sends a list of port and the ModelDrivenSwitch will
+ // NSF sends a list of port and the ModelDrivenSwitch will
// send one port at a time towards the switch ( mutiple RPCs calls)
- List<Port> inputPorts = input.getUpdatedPort().getPort().getPort() ;
+ List<Port> inputPorts = input.getUpdatedPort().getPort().getPort() ;
- // Get the Xid. The same Xid has to be sent in all the RPCs
- Long Xid = sessionContext.getNextXid();
+ // Get the Xid. The same Xid has to be sent in all the RPCs
+ Long Xid = sessionContext.getNextXid();
- for( Port inputPort : inputPorts) {
+ for( Port inputPort : inputPorts) {
- // Convert the UpdateGroupInput to GroupModInput
- ofPortModInput = PortConvertor.toPortModInput(inputPort, version) ;
+ // Convert the UpdateGroupInput to GroupModInput
+ ofPortModInput = PortConvertor.toPortModInput(inputPort, version) ;
- // Insert the Xid ( transaction Id) before calling the RPC on the OFLibrary
-
- PortModInputBuilder mdInput = new PortModInputBuilder();
- mdInput.setXid(Xid);
- mdInput.setVersion(ofPortModInput.getVersion()) ;
- mdInput.setPortNo(ofPortModInput.getPortNo()) ;
- mdInput.setMaskV10(ofPortModInput.getMaskV10()) ;
- mdInput.setMask(ofPortModInput.getMask()) ;
- mdInput.setHwAddress(ofPortModInput.getHwAddress());
- mdInput.setConfigV10(ofPortModInput.getConfigV10()) ;
- mdInput.setConfig(ofPortModInput.getConfig()) ;
- mdInput.setAdvertiseV10(ofPortModInput.getAdvertiseV10()) ;
- mdInput.setAdvertise(ofPortModInput.getAdvertise()) ;
-
- LOG.debug("Calling the PortMod RPC method on MessageDispatchService");
- Future<RpcResult<UpdatePortOutput>> resultFromOFLib = messageService.portMod(ofPortModInput, cookie) ;
-
- try {
- rpcResultFromOFLib = resultFromOFLib.get();
- } catch( Exception ex ) {
- LOG.error( " Error while getting result for updatePort RPC" + ex.getMessage());
- }
-
- // The Future response value for all the RPCs except the last one is ignored
+ // Insert the Xid ( transaction Id) before calling the RPC on the OFLibrary
- }
-
- //Extract the Xid only from the Future for the last RPC and
- // send it back to the NSF
- UpdatePortOutput updatePortOutputOFLib = rpcResultFromOFLib.getResult() ;
-
- UpdatePortOutputBuilder updatePortOutput = new UpdatePortOutputBuilder() ;
- updatePortOutput.setTransactionId(updatePortOutputOFLib.getTransactionId()) ;
- UpdatePortOutput result = updatePortOutput.build();
-
- Collection<RpcError> errors = rpcResultFromOFLib.getErrors() ;
- RpcResult<UpdatePortOutput> rpcResult = Rpcs.getRpcResult(true, result, errors);
-
- LOG.debug("Returning the Update Group RPC result to MD-SAL");
- return Futures.immediateFuture(rpcResult);
-
+ PortModInputBuilder mdInput = new PortModInputBuilder();
+ mdInput.setXid(Xid);
+ mdInput.setVersion(ofPortModInput.getVersion()) ;
+ mdInput.setPortNo(ofPortModInput.getPortNo()) ;
+ mdInput.setMaskV10(ofPortModInput.getMaskV10()) ;
+ mdInput.setMask(ofPortModInput.getMask()) ;
+ mdInput.setHwAddress(ofPortModInput.getHwAddress());
+ mdInput.setConfigV10(ofPortModInput.getConfigV10()) ;
+ mdInput.setConfig(ofPortModInput.getConfig()) ;
+ mdInput.setAdvertiseV10(ofPortModInput.getAdvertiseV10()) ;
+ mdInput.setAdvertise(ofPortModInput.getAdvertise()) ;
+
+ LOG.debug("Calling the PortMod RPC method on MessageDispatchService");
+ Future<RpcResult<UpdatePortOutput>> resultFromOFLib = messageService.portMod(ofPortModInput, cookie) ;
+
+ try {
+ rpcResultFromOFLib = resultFromOFLib.get();
+ } catch( Exception ex ) {
+ LOG.error( " Error while getting result for updatePort RPC" + ex.getMessage());
+ }
+
+ // The Future response value for all the RPCs except the last one is ignored
+
}
+ //Extract the Xid only from the Future for the last RPC and
+ // send it back to the NSF
+ UpdatePortOutput updatePortOutputOFLib = rpcResultFromOFLib.getResult() ;
+
+ UpdatePortOutputBuilder updatePortOutput = new UpdatePortOutputBuilder() ;
+ updatePortOutput.setTransactionId(updatePortOutputOFLib.getTransactionId()) ;
+ UpdatePortOutput result = updatePortOutput.build();
+
+ Collection<RpcError> errors = rpcResultFromOFLib.getErrors() ;
+ RpcResult<UpdatePortOutput> rpcResult = Rpcs.getRpcResult(true, result, errors);
+
+ LOG.debug("Returning the Update Group RPC result to MD-SAL");
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+ @Override
+ public Future<RpcResult<UpdateTableOutput>> updateTable(
+ UpdateTableInput input) {
+
+ // Get the Xid. The same Xid has to be sent in all the Multipart requests
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.debug("Prepare the Multipart Table Mod requests for Transaction Id {} ",xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPTABLEFEATURES);
+ mprInput.setVersion((short)0x04);
+ mprInput.setXid(xid);
+
+ //Convert the list of all MD-SAL table feature object into OF library object
+ List<TableFeatures> ofTableFeatureList = TableFeaturesConvertor.toTableFeaturesRequest(input.getUpdatedTable()) ;
+
+
+ MultipartRequestTableFeaturesCaseBuilder caseRequest = new MultipartRequestTableFeaturesCaseBuilder();
+ MultipartRequestTableFeaturesBuilder tableFeaturesRequest = new MultipartRequestTableFeaturesBuilder();
+
+ mprInput.setFlags(new MultipartRequestFlags(true));
+
+ tableFeaturesRequest.setTableFeatures(ofTableFeatureList) ;
+
+ //Set request body to main multipart request
+ caseRequest.setMultipartRequestTableFeatures(tableFeaturesRequest.build());
+ mprInput.setMultipartRequestBody(caseRequest.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send Table Feature request :{}",ofTableFeatureList);
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+
+ //Extract the Xid only from the Future for the last RPC and
+ // send it back to the NSF
+ LOG.debug("Returning the result and transaction id to NSF");
+ LOG.debug("Return results and transaction id back to caller");
+ UpdateTableOutputBuilder output = new UpdateTableOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<UpdateTableOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+ }
+
+ @Override
+ public Future<RpcResult<GetAllFlowStatisticsFromFlowTableOutput>> getAllFlowStatisticsFromFlowTable(
+ GetAllFlowStatisticsFromFlowTableInput arg0) {
+
+ //Generate xid to associate it with the request
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.debug("Prepare statistics request to get flow stats for switch tables {} - Transaction id - {}"
+ ,arg0.getTableId().getValue(),xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPFLOW);
+ mprInput.setVersion(version);
+ mprInput.setXid(xid);
+ mprInput.setFlags(new MultipartRequestFlags(false));
+
+ // Create multipart request body for fetch all the group stats
+ MultipartRequestFlowCaseBuilder multipartRequestFlowCaseBuilder = new MultipartRequestFlowCaseBuilder ();
+ MultipartRequestFlowBuilder mprFlowRequestBuilder = new MultipartRequestFlowBuilder();
+ mprFlowRequestBuilder.setTableId(arg0.getTableId().getValue());
+ mprFlowRequestBuilder.setOutPort(OFConstants.OFPP_ANY);
+ mprFlowRequestBuilder.setOutGroup(OFConstants.OFPG_ANY);
+ mprFlowRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
+ mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
+
+ if(version == OFConstants.OFP_VERSION_1_0){
+ LOG.info("Target node is running openflow version 1.0");
+ FlowWildcardsV10 wildCard = new FlowWildcardsV10(true,true,true,true,true,true,true,true,true,true);
+ mprFlowRequestBuilder.setMatchV10(new MatchV10Builder().setWildcards(wildCard).build());
+ }
+ if(version == OFConstants.OFP_VERSION_1_3){
+ LOG.info("Target node is running openflow version 1.3+");
+ mprFlowRequestBuilder.setMatch(new MatchBuilder().setType(OxmMatchType.class).build());
+ }
+
+
+ //Set request body to main multipart request
+ multipartRequestFlowCaseBuilder.setMultipartRequestFlow(mprFlowRequestBuilder.build());
+ mprInput.setMultipartRequestBody(multipartRequestFlowCaseBuilder.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send flow statistics request to the switch :{}",mprFlowRequestBuilder);
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+ // Prepare rpc return output. Set xid and send it back.
+ LOG.debug("Return results and transaction id back to caller");
+ GetAllFlowStatisticsFromFlowTableOutputBuilder output =
+ new GetAllFlowStatisticsFromFlowTableOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+ output.setFlowAndStatisticsMapList(null);
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<GetAllFlowStatisticsFromFlowTableOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+ }
+
+ @Override
+ public Future<RpcResult<GetAllFlowsStatisticsFromAllFlowTablesOutput>> getAllFlowsStatisticsFromAllFlowTables(
+ GetAllFlowsStatisticsFromAllFlowTablesInput arg0) {
+
+ //Generate xid to associate it with the request
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.info("Prepare statistics request to get flow stats of all switch tables - Transaction id - {}",xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPFLOW);
+ mprInput.setVersion(version);
+ mprInput.setXid(xid);
+ mprInput.setFlags(new MultipartRequestFlags(false));
+
+ // Create multipart request body for fetch all the group stats
+ MultipartRequestFlowCaseBuilder multipartRequestFlowCaseBuilder = new MultipartRequestFlowCaseBuilder();
+ MultipartRequestFlowBuilder mprFlowRequestBuilder = new MultipartRequestFlowBuilder();
+ mprFlowRequestBuilder.setTableId(OFConstants.OFPTT_ALL);
+ mprFlowRequestBuilder.setOutPort(OFConstants.OFPP_ANY);
+ mprFlowRequestBuilder.setOutGroup(OFConstants.OFPG_ANY);
+ mprFlowRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
+ mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
+ mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
+
+ //TODO: repeating code
+ if(version == OFConstants.OFP_VERSION_1_0){
+ FlowWildcardsV10 wildCard = new FlowWildcardsV10(true,true,true,true,true,true,true,true,true,true);
+ mprFlowRequestBuilder.setMatchV10(new MatchV10Builder().setWildcards(wildCard).build());
+ }
+ if(version == OFConstants.OFP_VERSION_1_3){
+ mprFlowRequestBuilder.setMatch(new MatchBuilder().setType(OxmMatchType.class).build());
+ }
+ //Set request body to main multipart request
+ multipartRequestFlowCaseBuilder.setMultipartRequestFlow(mprFlowRequestBuilder.build());
+ mprInput.setMultipartRequestBody(multipartRequestFlowCaseBuilder.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send flow statistics request to the switch :{}",mprFlowRequestBuilder);
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+ // Prepare rpc return output. Set xid and send it back.
+ GetAllFlowsStatisticsFromAllFlowTablesOutputBuilder output =
+ new GetAllFlowsStatisticsFromAllFlowTablesOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+ output.setFlowAndStatisticsMapList(null);
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<GetAllFlowsStatisticsFromAllFlowTablesOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+ @Override
+ public Future<RpcResult<GetFlowStatisticsFromFlowTableOutput>> getFlowStatisticsFromFlowTable(
+ GetFlowStatisticsFromFlowTableInput arg0) {
+ //Generate xid to associate it with the request
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.info("Prepare statistics request to get stats for flow {} for switch tables {} - Transaction id - {}"
+ ,arg0.getMatch().toString(),arg0.getTableId(),xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPFLOW);
+ mprInput.setVersion(version);
+ mprInput.setXid(xid);
+ mprInput.setFlags(new MultipartRequestFlags(false));
+
+ // Create multipart request body for fetch all the group stats
+ MultipartRequestFlowCaseBuilder multipartRequestFlowCaseBuilder = new MultipartRequestFlowCaseBuilder();
+ MultipartRequestFlowBuilder mprFlowRequestBuilder = new MultipartRequestFlowBuilder();
+ mprFlowRequestBuilder.setTableId(arg0.getTableId());
+ mprFlowRequestBuilder.setOutPort(arg0.getOutPort().longValue());
+ mprFlowRequestBuilder.setOutGroup(OFConstants.OFPG_ANY);
+ mprFlowRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
+ mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
+
+ // convert and inject match
+ MatchReactor.getInstance().convert(arg0.getMatch(), version, mprFlowRequestBuilder);
+ //TODO: repeating code
+ if(version == OFConstants.OFP_VERSION_1_3){
+ mprFlowRequestBuilder.setCookie(arg0.getCookie());
+ mprFlowRequestBuilder.setCookieMask(arg0.getCookieMask());
+ mprFlowRequestBuilder.setOutGroup(arg0.getOutGroup());
+ }
+
+ //Set request body to main multipart request
+ multipartRequestFlowCaseBuilder.setMultipartRequestFlow(mprFlowRequestBuilder.build());
+ mprInput.setMultipartRequestBody(multipartRequestFlowCaseBuilder.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send flow statistics request to the switch :{}",mprFlowRequestBuilder);
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+ // Prepare rpc return output. Set xid and send it back.
+ GetFlowStatisticsFromFlowTableOutputBuilder output =
+ new GetFlowStatisticsFromFlowTableOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+ output.setFlowAndStatisticsMapList(null);
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<GetFlowStatisticsFromFlowTableOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+ }
+
+ @Override
+ public Future<RpcResult<GetAggregateFlowStatisticsFromFlowTableForAllFlowsOutput>> getAggregateFlowStatisticsFromFlowTableForAllFlows(
+ GetAggregateFlowStatisticsFromFlowTableForAllFlowsInput arg0) {
+ //Generate xid to associate it with the request
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.info("Prepare aggregate flow statistics request to get aggregate flow stats for all the flow installed on switch table {} - Transaction id - {}"
+ ,arg0.getTableId().getValue(),xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPAGGREGATE);
+ mprInput.setVersion(version);
+ mprInput.setXid(xid);
+ mprInput.setFlags(new MultipartRequestFlags(false));
+
+ // Create multipart request body for fetch all the group stats
+ MultipartRequestAggregateCaseBuilder multipartRequestAggregateCaseBuilder = new MultipartRequestAggregateCaseBuilder ();
+ MultipartRequestAggregateBuilder mprAggregateRequestBuilder = new MultipartRequestAggregateBuilder();
+ mprAggregateRequestBuilder.setTableId(arg0.getTableId().getValue());
+ mprAggregateRequestBuilder.setOutPort(OFConstants.OFPP_ANY);
+ mprAggregateRequestBuilder.setOutGroup(OFConstants.OFPG_ANY);
+ mprAggregateRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
+ mprAggregateRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
+
+ //TODO: repeating code
+ if(version == OFConstants.OFP_VERSION_1_0){
+ FlowWildcardsV10 wildCard = new FlowWildcardsV10(true,true,true,true,true,true,true,true,true,true);
+ mprAggregateRequestBuilder.setMatchV10(new MatchV10Builder().setWildcards(wildCard).build());
+ }
+ if(version == OFConstants.OFP_VERSION_1_3){
+ mprAggregateRequestBuilder.setMatch(new MatchBuilder().setType(OxmMatchType.class).build());
+ }
+
+
+ //Set request body to main multipart request
+ multipartRequestAggregateCaseBuilder.setMultipartRequestAggregate(mprAggregateRequestBuilder.build());
+ mprInput.setMultipartRequestBody(multipartRequestAggregateCaseBuilder.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send request to the switch :{}",multipartRequestAggregateCaseBuilder.build().toString());
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+ // Prepare rpc return output. Set xid and send it back.
+ GetAggregateFlowStatisticsFromFlowTableForAllFlowsOutputBuilder output =
+ new GetAggregateFlowStatisticsFromFlowTableForAllFlowsOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<GetAggregateFlowStatisticsFromFlowTableForAllFlowsOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+ }
+
+ @Override
+ public Future<RpcResult<GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutput>> getAggregateFlowStatisticsFromFlowTableForGivenMatch(
+ GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput arg0) {
+
+ //Generate xid to associate it with the request
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.debug("Prepare agregate statistics request to get aggregate stats for flows matching {} and installed in flow tables {} - Transaction id - {}"
+ ,arg0.getMatch().toString(),arg0.getTableId(),xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPAGGREGATE);
+ mprInput.setVersion(version);
+ mprInput.setXid(xid);
+ mprInput.setFlags(new MultipartRequestFlags(false));
+
+ // Create multipart request body for fetch all the group stats
+ MultipartRequestAggregateCaseBuilder multipartRequestAggregateCaseBuilder = new MultipartRequestAggregateCaseBuilder ();
+ MultipartRequestAggregateBuilder mprAggregateRequestBuilder = new MultipartRequestAggregateBuilder();
+ mprAggregateRequestBuilder.setTableId(arg0.getTableId());
+ mprAggregateRequestBuilder.setOutPort(arg0.getOutPort().longValue());
+ mprAggregateRequestBuilder.setOutGroup(OFConstants.OFPG_ANY);
+ mprAggregateRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
+ mprAggregateRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
+
+
+ MatchReactor.getInstance().convert(arg0.getMatch(), version, mprAggregateRequestBuilder);
+ //TODO: repeating code
+ if(version == OFConstants.OFP_VERSION_1_3){
+ mprAggregateRequestBuilder.setCookie(arg0.getCookie());
+ mprAggregateRequestBuilder.setCookieMask(arg0.getCookieMask());
+ mprAggregateRequestBuilder.setOutGroup(arg0.getOutGroup());
+ }
+
+ //Set request body to main multipart request
+ multipartRequestAggregateCaseBuilder.setMultipartRequestAggregate(mprAggregateRequestBuilder.build());
+ mprInput.setMultipartRequestBody(multipartRequestAggregateCaseBuilder.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send request to the switch :{}",multipartRequestAggregateCaseBuilder.build().toString());
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+ // Prepare rpc return output. Set xid and send it back.
+ GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutputBuilder output =
+ new GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+ }
+
+ @Override
+ public Future<RpcResult<GetFlowTablesStatisticsOutput>> getFlowTablesStatistics(GetFlowTablesStatisticsInput arg0) {
+ //Generate xid to associate it with the request
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.info("Prepare flow table statistics request to get flow table stats for all tables " +
+ "from node {}- Transaction id - {}",arg0.getNode(),xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPTABLE);
+ mprInput.setVersion(version);
+ mprInput.setXid(xid);
+ mprInput.setFlags(new MultipartRequestFlags(false));
+
+ // Create multipart request body for fetch all the group stats
+ MultipartRequestTableCaseBuilder multipartRequestTableCaseBuilder = new MultipartRequestTableCaseBuilder ();
+ MultipartRequestTableBuilder multipartRequestTableBuilder = new MultipartRequestTableBuilder();
+ multipartRequestTableBuilder.setEmpty(true);
+ multipartRequestTableCaseBuilder.setMultipartRequestTable(multipartRequestTableBuilder.build());
+
+ //Set request body to main multipart request
+ mprInput.setMultipartRequestBody(multipartRequestTableCaseBuilder.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send request to the switch :{}",multipartRequestTableCaseBuilder.build().toString());
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+ // Prepare rpc return output. Set xid and send it back.
+ GetFlowTablesStatisticsOutputBuilder output = new GetFlowTablesStatisticsOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<GetFlowTablesStatisticsOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+ }
+
+ @Override
+ public Future<RpcResult<GetAllQueuesStatisticsFromAllPortsOutput>> getAllQueuesStatisticsFromAllPorts(
+ GetAllQueuesStatisticsFromAllPortsInput arg0) {
+ //Generate xid to associate it with the request
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.info("Prepare queue statistics request to collect stats for all queues attached to all the ports of node {} - TrasactionId - {}",arg0.getNode().getValue(),xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPQUEUE);
+ mprInput.setVersion(version);
+ mprInput.setXid(xid);
+ mprInput.setFlags(new MultipartRequestFlags(false));
+
+ // Create multipart request body to fetch stats for all the port of the node
+ MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
+ MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder();
+ //Select all ports
+ mprQueueBuilder.setPortNo(OFConstants.OFPP_ANY);
+ //Select all the ports
+ mprQueueBuilder.setQueueId(OFConstants.OFPQ_ANY);
+
+ caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build());
+
+ //Set request body to main multipart request
+ mprInput.setMultipartRequestBody(caseBuilder.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send queue statistics request :{}",mprQueueBuilder.build().toString());
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+ // Prepare rpc return output. Set xid and send it back.
+ GetAllQueuesStatisticsFromAllPortsOutputBuilder output = new GetAllQueuesStatisticsFromAllPortsOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+ output.setQueueIdAndStatisticsMap(null);
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<GetAllQueuesStatisticsFromAllPortsOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+ }
+
+ @Override
+ public Future<RpcResult<GetAllQueuesStatisticsFromGivenPortOutput>> getAllQueuesStatisticsFromGivenPort(
+ GetAllQueuesStatisticsFromGivenPortInput arg0) {
+ //Generate xid to associate it with the request
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.info("Prepare queue statistics request to collect stats for " +
+ "all queues attached to given port {} of node {} - TrasactionId - {}",arg0.getNodeConnectorId().toString(),arg0.getNode().getValue(),xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPQUEUE);
+ mprInput.setVersion(version);
+ mprInput.setXid(xid);
+ mprInput.setFlags(new MultipartRequestFlags(false));
+
+ // Create multipart request body to fetch stats for all the port of the node
+ MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
+ MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder();
+ //Select all queues
+ mprQueueBuilder.setQueueId(OFConstants.OFPQ_ANY);
+ //Select specific port
+ mprQueueBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId(arg0.getNodeConnectorId()));
+
+ caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build());
+
+ //Set request body to main multipart request
+ mprInput.setMultipartRequestBody(caseBuilder.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send queue statistics request :{}",mprQueueBuilder.build().toString());
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+ // Prepare rpc return output. Set xid and send it back.
+ GetAllQueuesStatisticsFromGivenPortOutputBuilder output = new GetAllQueuesStatisticsFromGivenPortOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+ output.setQueueIdAndStatisticsMap(null);
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<GetAllQueuesStatisticsFromGivenPortOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+ }
+
+ @Override
+ public Future<RpcResult<GetQueueStatisticsFromGivenPortOutput>> getQueueStatisticsFromGivenPort(
+ GetQueueStatisticsFromGivenPortInput arg0) {
+ //Generate xid to associate it with the request
+ Long xid = this.getSessionContext().getNextXid();
+
+ LOG.info("Prepare queue statistics request to collect stats for " +
+ "given queue attached to given port {} of node {} - TrasactionId - {}",arg0.getQueueId().toString(),arg0.getNodeConnectorId().toString(),arg0.getNode().getValue(),xid);
+
+ // Create multipart request header
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPQUEUE);
+ mprInput.setVersion(version);
+ mprInput.setXid(xid);
+ mprInput.setFlags(new MultipartRequestFlags(false));
+
+ // Create multipart request body to fetch stats for all the port of the node
+ MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
+ MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder();
+ //Select specific queue
+ mprQueueBuilder.setQueueId(arg0.getQueueId().getValue());
+ //Select specific port
+ mprQueueBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId(arg0.getNodeConnectorId()));
+
+ caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build());
+
+ //Set request body to main multipart request
+ mprInput.setMultipartRequestBody(caseBuilder.build());
+
+ //Send the request, no cookies associated, use any connection
+ LOG.debug("Send queue statistics request :{}",mprQueueBuilder.build().toString());
+ this.messageService.multipartRequest(mprInput.build(), null);
+
+ // Prepare rpc return output. Set xid and send it back.
+ GetQueueStatisticsFromGivenPortOutputBuilder output = new GetQueueStatisticsFromGivenPortOutputBuilder();
+ output.setTransactionId(generateTransactionId(xid));
+ output.setQueueIdAndStatisticsMap(null);
+
+ Collection<RpcError> errors = Collections.emptyList();
+ RpcResult<GetQueueStatisticsFromGivenPortOutput> rpcResult = Rpcs.getRpcResult(true, output.build(), errors);
+ return Futures.immediateFuture(rpcResult);
+ }
+
+ @Override
+ public Future<RpcResult<GetAllFlowStatisticsOutput>> getAllFlowStatistics(GetAllFlowStatisticsInput arg0) {
+ //TODO: Depricated, need to clean it up. Sal-Compatibility layes is dependent on it.
+ // Once sal-compatibility layer is fixed this rpc call can be removed from yang file
+ return null;
+ }
+
+ @Override
+ public Future<RpcResult<GetAllNodeConnectorStatisticsOutput>> getAllNodeConnectorStatistics(
+ GetAllNodeConnectorStatisticsInput arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Future<RpcResult<GetFlowStatisticsOutput>> getFlowStatistics(GetFlowStatisticsInput arg0) {
+ //TODO: Depricated, need to clean it up. Sal-Compatibility layes is dependent on it.
+ // Once sal-compatibility layer is fixed this rpc call can be removed from yang file
+ return null;
+ }
+
+ @Override
+ public Future<RpcResult<GetFlowTableStatisticsOutput>> getFlowTableStatistics(GetFlowTableStatisticsInput arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Future<RpcResult<GetNodeConnectorStatisticsOutput>> getNodeConnectorStatistics(
+ GetNodeConnectorStatisticsInput arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}