import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceInitializationPhaseHandler;
import org.opendaylight.openflowplugin.api.openflow.device.handlers.MultiMsgCollector;
import org.opendaylight.openflowplugin.api.openflow.md.core.TranslatorKey;
+import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageIntelligenceAgency;
import org.opendaylight.openflowplugin.impl.common.MultipartRequestInputFactory;
import org.opendaylight.openflowplugin.impl.common.NodeStaticReplyTranslatorUtil;
import org.opendaylight.openflowplugin.impl.device.listener.OpenflowProtocolListenerFullImpl;
import org.opendaylight.openflowplugin.impl.rpc.RequestContextImpl;
import org.opendaylight.openflowplugin.impl.services.OFJResult2RequestCtxFuture;
+import org.opendaylight.openflowplugin.impl.statistics.ofpspecific.MessageIntelligenceAgencyImpl;
import org.opendaylight.openflowplugin.impl.util.DeviceStateUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder;
private NotificationProviderService notificationService;
private final List<DeviceContext> synchronizedDeviceContextsList = Collections
.<DeviceContext>synchronizedList(new ArrayList<DeviceContext>());
+ private final MessageIntelligenceAgency messageIntelligenceAgency = new MessageIntelligenceAgencyImpl();
public DeviceManagerImpl(@Nonnull final DataBroker dataBroker) {
this.dataBroker = Preconditions.checkNotNull(dataBroker);
final DeviceState deviceState = new DeviceStateImpl(connectionContext.getFeatures(), connectionContext.getNodeId());
- final DeviceContextImpl deviceContext = new DeviceContextImpl(connectionContext, deviceState, dataBroker, hashedWheelTimer);
+ final DeviceContext deviceContext = new DeviceContextImpl(connectionContext, deviceState, dataBroker, hashedWheelTimer, messageIntelligenceAgency);
deviceContext.setNotificationService(notificationService);
deviceContext.writeToTransaction(LogicalDatastoreType.OPERATIONAL, deviceState.getNodeInstanceIdentifier(), new NodeBuilder().setId(deviceState.getNodeId()).build());
+ connectionContext.setDeviceDisconnectedHandler(deviceContext);
deviceContext.setTranslatorLibrary(translatorLibrary);
final OpenflowProtocolListenerFullImpl messageListener = new OpenflowProtocolListenerFullImpl(
@Override
public void onFailure(final Throwable t) {
// FIXME : remove session
+ LOG.trace("Device capabilities gathering future failed.");
}
});
}
private ListenableFuture<RpcResult<List<MultipartReply>>> processReplyDesc(OpenflowProtocolListenerFullImpl messageListener,
- DeviceContextImpl deviceContext,
+ DeviceContext deviceContext,
DeviceState deviceState) {
final ListenableFuture<RpcResult<List<MultipartReply>>> replyDesc = getNodeStaticInfo(messageListener,
MultipartType.OFPMPDESC, deviceContext, deviceState.getNodeInstanceIdentifier(), deviceState.getVersion());
}
private ListenableFuture<List<RpcResult<List<MultipartReply>>>> createDeviceFeaturesForOF10(OpenflowProtocolListenerFullImpl messageListener,
- DeviceContextImpl deviceContext,
+ DeviceContext deviceContext,
DeviceState deviceState) {
return Futures.allAsList(Arrays.asList(processReplyDesc(messageListener, deviceContext, deviceState)));
}
private ListenableFuture<List<RpcResult<List<MultipartReply>>>> createDeviceFeaturesForOF13(OpenflowProtocolListenerFullImpl messageListener,
- final DeviceContextImpl deviceContext,
+ final DeviceContext deviceContext,
final DeviceState deviceState) {
final ListenableFuture<RpcResult<List<MultipartReply>>> replyDesc = processReplyDesc(messageListener, deviceContext, deviceState);
final ListenableFuture<RpcResult<List<MultipartReply>>> replyPortDescription = getNodeStaticInfo(messageListener,
MultipartType.OFPMPPORTDESC, deviceContext, deviceState.getNodeInstanceIdentifier(), deviceState.getVersion());
- final ListenableFuture<List<RpcResult<List<MultipartReply>>>> deviceFeaturesFuture =
- Futures.allAsList(Arrays.asList(replyDesc, replyMeterFeature, replyGroupFeatures, replyTableFeatures, replyPortDescription));
+ return Futures.allAsList(Arrays.asList(replyDesc,
+ replyMeterFeature,
+ replyGroupFeatures,
+// replyTableFeatures,
+ replyPortDescription));
- Futures.addCallback(deviceFeaturesFuture, new FutureCallback<List<RpcResult<List<MultipartReply>>>>() {
- @Override
- public void onSuccess(final List<RpcResult<List<MultipartReply>>> result) {
- deviceInitPhaseHandler.onDeviceContextLevelUp(deviceContext);
- }
-
- @Override
- public void onFailure(final Throwable t) {
- // FIXME : remove session
- }
- });
- return Futures.allAsList(Arrays.asList(replyDesc, replyMeterFeature, replyGroupFeatures, replyTableFeatures, replyPortDescription));
}
@Override
final Xid xid = deviceContext.getNextXid();
final RequestContext<List<MultipartReply>> requestContext = dummyRequestContextStack.createRequestContext();
requestContext.setXid(xid);
+
+ LOG.trace("Hooking xid {} to device context - precaution.", requestContext.getXid().getValue());
+ deviceContext.hookRequestCtx(requestContext.getXid(), requestContext);
+
multiMsgCollector.registerMultipartXid(xid.getValue());
Futures.addCallback(requestContext.getFuture(), new FutureCallback<RpcResult<List<MultipartReply>>>() {
@Override