@Override public void onSwitchConnected(ConnectionAdapter connectionAdapter) { LOG.info("CREATING NEW LISTENER FOR {}", connectionAdapter.getRemoteAddress()); ShimMessageListener listener = new ShimMessageListener(coreConnector, connectionAdapter, shimRelay, this, notificationProviderService); mapListeners.put(connectionAdapter.getRemoteAddress(), listener); listener.registerConnectionAdaptersRegistry(connectionRegistry); listener.registerHandshakeListener(this); connectionRegistry.registerConnectionAdapter(connectionAdapter, null); connectionAdapter.setMessageListener(listener); connectionAdapter.setSystemListener(listener); connectionAdapter.setConnectionReadyListener(listener); handshake(connectionAdapter); }
@Override public Future<RpcResult<BarrierOutput>> barrier(BarrierInput input, SwitchConnectionDistinguisher cookie) { try { return getConnectionAdapter(cookie).barrier(input); } catch (ConnectionException e) { return RpcResultUtil.getRpcErrorFuture(e); } }
@Override public void onHighWaterMark() { connectionAdapter.setAutoRead(false); LOG.debug("AutoRead is set on false: {}", connectionAdapter.getRemoteAddress()); }
Future<RpcResult<BarrierOutput>> reply = connectionAdapter.barrier((BarrierInput) msg); sendResponseToCore(reply, coreConnector, ofVersion, ((BarrierInput) msg).getXid(), datapathId, moduleId); Future<RpcResult<EchoOutput>> reply = connectionAdapter.echo((EchoInput) msg); sendResponseToCore(reply, coreConnector, ofVersion, ((EchoInput) msg).getXid(), datapathId, moduleId); builder.setVersion(echoRequestMessage.getVersion()); builder.setXid(echoRequestMessage.getXid()); Future<RpcResult<EchoOutput>> reply = connectionAdapter.echo(builder.build()); sendResponseToCore(reply, coreConnector, ofVersion, echoRequestMessage.getXid(), datapathId, moduleId); builder.setXid(((EchoOutput) msg).getXid()); builder.setData(((EchoOutput) msg).getData()); connectionAdapter.echoReply(builder.build()); connectionAdapter.experimenter((ExperimenterInput) msg); connectionAdapter.flowMod((FlowModInput) msg); Future<RpcResult<GetAsyncOutput>> reply = connectionAdapter.getAsync((GetAsyncInput) msg); sendResponseToCore(reply, coreConnector, ofVersion, ((GetAsyncInput) msg).getXid(), datapathId, moduleId); Future<RpcResult<GetConfigOutput>> reply = connectionAdapter.getConfig((GetConfigInput) msg); sendResponseToCore(reply, coreConnector, ofVersion, ((GetConfigInput) msg).getXid(), datapathId, moduleId); Future<RpcResult<GetFeaturesOutput>> reply = connectionAdapter.getFeatures((GetFeaturesInput) msg); sendResponseToCore(reply, coreConnector, ofVersion, ((GetFeaturesInput) msg).getXid(), datapathId, moduleId);
@Override public void onFailure(Throwable t) { LOG.info("getting feature failed seriously [addr:{}]: {}", connectionAdapter.getRemoteAddress(), t.getMessage()); } });
@Override public Future<RpcResult<GetFeaturesOutput>> getFeatures(GetFeaturesInput input, SwitchConnectionDistinguisher cookie) { try { return getConnectionAdapter(cookie).getFeatures(input); } catch (ConnectionException e) { return RpcResultUtil.getRpcErrorFuture(e); } }
@Override public void run() { LOG.debug("echo request received: " + echoRequestMessage.getXid()); EchoReplyInputBuilder builder = new EchoReplyInputBuilder(); builder.setVersion(echoRequestMessage.getVersion()); builder.setXid(echoRequestMessage.getXid()); builder.setData(echoRequestMessage.getData()); getConnectionAdapter().echoReply(builder.build()); } }).start();
@Override public Future<RpcResult<GetAsyncOutput>> getAsync(GetAsyncInput input, SwitchConnectionDistinguisher cookie) { try { return getConnectionAdapter(cookie).getAsync(input); } catch (ConnectionException e) { return RpcResultUtil.getRpcErrorFuture(e); } }
@Override public Future<RpcResult<GetQueueConfigOutput>> getQueueConfig(GetQueueConfigInput input, SwitchConnectionDistinguisher cookie) { try { return getConnectionAdapter(cookie).getQueueConfig(input); } catch (ConnectionException e) { return RpcResultUtil.getRpcErrorFuture(e); } }
@Override public Future<RpcResult<Void>> experimenter(ExperimenterInput input, SwitchConnectionDistinguisher cookie) { try { return getConnectionAdapter(cookie).experimenter(input); } catch (ConnectionException e) { return RpcResultUtil.getRpcErrorFuture(e); } }
@Override public Future<RpcResult<GetConfigOutput>> getConfig(GetConfigInput input, SwitchConnectionDistinguisher cookie) { try { return getConnectionAdapter(cookie).getConfig(input); } catch (ConnectionException e) { return RpcResultUtil.getRpcErrorFuture(e); } }
@Override public Future<RpcResult<UpdateFlowOutput>> flowMod(final FlowModInput input, SwitchConnectionDistinguisher cookie) { LOG.debug("Calling OFLibrary flowMod"); Future<RpcResult<Void>> response = null; try { response = getConnectionAdapter(cookie).flowMod(input); } catch (ConnectionException e) { return RpcResultUtil.getRpcErrorFuture(e); } // appending xid ListenableFuture<RpcResult<UpdateFlowOutput>> xidResult = Futures.transform( JdkFutureAdapters.listenInPoolThread(response), new Function<RpcResult<Void>, RpcResult<UpdateFlowOutput>>() { @Override public RpcResult<UpdateFlowOutput> apply(final RpcResult<Void> inputArg) { UpdateFlowOutputBuilder flowModOutput = new UpdateFlowOutputBuilder(); BigInteger bigIntXid = BigInteger.valueOf(input.getXid()); flowModOutput.setTransactionId(new TransactionId(bigIntXid)); UpdateFlowOutput result = flowModOutput.build(); RpcResult<UpdateFlowOutput> rpcResult = RpcResultBuilder .<UpdateFlowOutput>status(inputArg.isSuccessful()) .withResult(result).withRpcErrors(inputArg.getErrors()) .build(); return rpcResult; } }); return xidResult; }
.echo(builder.build());
@Override public void onFailure(Throwable t) { LOG.warn("getting feature failed seriously [{}, addr:{}]: {}", xid, connectionAdapter.getRemoteAddress(), t.getMessage()); LOG.trace("DETAIL of sending of hello failure:", t); } });
@Override public void onLowWaterMark() { connectionAdapter.setAutoRead(true); LOG.debug("AutoRead is set on true: {}", connectionAdapter.getRemoteAddress()); } }
LOG.debug("sending feature request for version={} and xid={}", version, xid); Future<RpcResult<GetFeaturesOutput>> featuresFuture = connectionAdapter .getFeatures(featuresBuilder.build());
@Override public void onEchoRequestMessage(EchoRequestMessage arg0) { BigInteger datapathId = this.connectionRegistry.getDatapathID(this.switchConnection); if (datapathId == null) { EchoReplyInputBuilder builder = new EchoReplyInputBuilder(); builder.setVersion(arg0.getVersion()); builder.setXid(arg0.getXid() + 1L); builder.setData(arg0.getData()); this.switchConnection.echoReply(builder.build()); connectionHandler.sendGetFeaturesOuputToCore(arg0.getVersion(), 0, switchConnection); } else { shimRelay.sendOpenFlowMessageToCore(coreConnector, arg0, arg0.getVersion(), arg0.getXid(), datapathId.longValue(), 0); } }
private static IpAddress getIpAddressOf(final ConnectionAdapter connectionAdapter) { InetSocketAddress remoteAddress = connectionAdapter.getRemoteAddress(); if (remoteAddress == null) { LOG.warn("IP address of the node cannot be obtained. No connection with switch."); return null; } return resolveIpAddress(remoteAddress.getAddress()); }
public void sendGetFeaturesToSwitch(final Short proposedVersion, final Long xid, final ConnectionAdapter connectionAdapter) { GetFeaturesInputBuilder featuresBuilder = new GetFeaturesInputBuilder(); featuresBuilder.setVersion(proposedVersion).setXid(xid); Future<RpcResult<GetFeaturesOutput>> featuresFuture = connectionAdapter.getFeatures(featuresBuilder.build()); collectGetFeaturesOuput(featuresFuture, connectionAdapter); }
Future<RpcResult<BarrierOutput>> barrierResult = session.getPrimaryConductor().getConnectionAdapter().barrier(barrierInput); try { barrierResult.get(TIMEOUT, TIMEOUT_UNIT); Future<RpcResult<BarrierOutput>> barrierResult = session.getPrimaryConductor().getConnectionAdapter().barrier(barrierInput); try { barrierResult.get(TIMEOUT, TIMEOUT_UNIT);