Class ConnectionAdapterImpl
- java.lang.Object
-
- org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl
-
- All Implemented Interfaces:
ConnectionAdapter,ConnectionFacade,MessageConsumer,OpenflowProtocolService,org.opendaylight.yangtools.yang.binding.RpcService
public class ConnectionAdapterImpl extends Object implements ConnectionFacade
Handles messages (notifications + rpcs) and connections.- Author:
- mirehak, michal.polkorab
-
-
Field Summary
Fields Modifier and Type Field Description protected InetSocketAddressaddressprotected io.netty.channel.Channelchannelprotected booleandisconnectOccuredprotected org.opendaylight.openflowjava.protocol.impl.core.connection.ChannelOutboundQueueoutputprotected static com.google.common.cache.RemovalListener<RpcResponseKey,org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?>>REMOVAL_LISTENERprotected com.google.common.cache.Cache<RpcResponseKey,org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?>>responseCacheexpiring cache for future rpcResponses.
-
Constructor Summary
Constructors Constructor Description ConnectionAdapterImpl(io.netty.channel.Channel channel, InetSocketAddress address, boolean useBarrier, int channelOutboundQueueSize)Default constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<BarrierOutput>>barrier(BarrierInput input)InvokebarrierRPC.voidcheckListeners()Throws exception if any of required listeners is missing.voidconsume(org.opendaylight.yangtools.yang.binding.DataObject message)Invoked to consume a message.voidconsumeDeviceMessage(org.opendaylight.yangtools.yang.binding.DataObject message)Method is equivalent toMessageConsumer.consume(DataObject)to prevent missing method in every children ofAbstractConnectionAdapterStatisticsclass, because we overriding original method forStatisticsCounters.Future<Boolean>disconnect()Disconnect corresponding switch.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<EchoOutput>>echo(EchoInput input)InvokeechoRPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<EchoReplyOutput>>echoReply(EchoReplyInput input)Invokeecho-replyRPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<ExperimenterOutput>>experimenter(ExperimenterInput input)InvokeexperimenterRPC.protected org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?>findRpcResponse(RpcResponseKey key)Return cached RpcListener ornullif not cached.voidfireConnectionReadyNotification()Notify listener about connection ready-to-use event.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<FlowModOutput>>flowMod(FlowModInput input)Invokeflow-modRPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetAsyncOutput>>getAsync(GetAsyncInput input)Invokeget-asyncRPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetConfigOutput>>getConfig(GetConfigInput input)Invokeget-configRPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetFeaturesOutput>>getFeatures(GetFeaturesInput input)Invokeget-featuresRPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetQueueConfigOutput>>getQueueConfig(GetQueueConfigInput input)Invokeget-queue-configRPC.InetSocketAddressgetRemoteAddress()Returns the address of the connected switch.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GroupModOutput>>groupMod(GroupModInput input)Invokegroup-modRPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<HelloOutput>>hello(HelloInput input)InvokehelloRPC.booleanisAlive()Determines if the connection to the switch is alive.booleanisAutoRead()Determines if the channel is configured to auto-read.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<MeterModOutput>>meterMod(MeterModInput input)Invokemeter-modRPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<MultipartRequestOutput>>multipartRequest(MultipartRequestInput input)Invokemultipart-requestRPC.voidonSwitchCertificateIdentified(List<X509Certificate> certificateChain)Notify listener about switch certificate information.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<PacketOutOutput>>packetOut(PacketOutInput input)Invokepacket-outRPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<PortModOutput>>portMod(PortModInput input)Invokeport-modRPC.<T extends OutboundQueueHandler>
OutboundQueueHandlerRegistration<T>registerOutboundQueueHandler(T handler, int maxQueueDepth, long maxBarrierNanos)Registers a new bypass outbound queue.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<RoleRequestOutput>>roleRequest(RoleRequestInput input)Invokerole-requestRPC.protected <I extends OfHeader,O extends OfHeader>
com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<O>>sendToSwitchExpectRpcResultFuture(I input, Class<O> responseClazz, String failureInfo)Sends given message to switch, sending result or switch response will be reported via return value.protected <O extends org.opendaylight.yangtools.yang.binding.DataObject>
com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<O>>sendToSwitchFuture(Object input, String failureInfo)Sends given message to switch, sending result will be reported via return value.voidsetAlienMessageListener(AlienMessageListener alienMessageListener)Set handler for alien messages received from device.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<SetAsyncOutput>>setAsync(SetAsyncInput input)Invokeset-asyncRPC.voidsetAutoRead(boolean autoRead)Sets option for automatic channel reading - if set to false, incoming messages won't be read.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<SetConfigOutput>>setConfig(SetConfigInput input)Invokeset-configRPC.voidsetConnectionReadyListener(ConnectionReadyListener connectionReadyListener)Set listener for connection became ready-to-use event.voidsetDatapathId(BigInteger datapathId)Set datapathId for the dpn.voidsetExecutorService(ExecutorService executorService)Sets executorService.voidsetMessageListener(OpenflowProtocolListener messageListener)Sets the protocol message listener.voidsetPacketInFiltering(boolean enabled)Set filtering of PacketIn messages.voidsetSystemListener(SystemNotificationsListener systemListener)Sets the system message listener.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<TableModOutput>>tableMod(TableModInput input)Invoketable-modRPC.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter
disconnect, getRemoteAddress, isAlive, isAutoRead, setAutoRead
-
Methods inherited from interface org.opendaylight.openflowjava.protocol.impl.core.connection.MessageConsumer
consume
-
Methods inherited from interface org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OpenflowProtocolService
barrier, echo, echoReply, experimenter, flowMod, getAsync, getConfig, getFeatures, getQueueConfig, groupMod, hello, meterMod, multipartRequest, packetOut, portMod, roleRequest, setAsync, setConfig, tableMod
-
-
-
-
Field Detail
-
REMOVAL_LISTENER
protected static final com.google.common.cache.RemovalListener<RpcResponseKey,org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?>> REMOVAL_LISTENER
-
channel
protected final io.netty.channel.Channel channel
-
address
protected final InetSocketAddress address
-
disconnectOccured
protected boolean disconnectOccured
-
output
protected final org.opendaylight.openflowjava.protocol.impl.core.connection.ChannelOutboundQueue output
-
responseCache
protected com.google.common.cache.Cache<RpcResponseKey,org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?>> responseCache
expiring cache for future rpcResponses.
-
-
Constructor Detail
-
ConnectionAdapterImpl
public ConnectionAdapterImpl(io.netty.channel.Channel channel, InetSocketAddress address, boolean useBarrier, int channelOutboundQueueSize)Default constructor.- Parameters:
channel- the channel to be set - used for communicationaddress- client address (used only in case of UDP communication, as there is no need to store address over tcp (stable channel))useBarrier- value is configurable by configSubsytem
-
-
Method Detail
-
setMessageListener
public void setMessageListener(OpenflowProtocolListener messageListener)
Description copied from interface:ConnectionAdapterSets the protocol message listener.- Specified by:
setMessageListenerin interfaceConnectionAdapter- Parameters:
messageListener- here will be pushed all messages from switch
-
setConnectionReadyListener
public void setConnectionReadyListener(ConnectionReadyListener connectionReadyListener)
Description copied from interface:ConnectionAdapterSet listener for connection became ready-to-use event.- Specified by:
setConnectionReadyListenerin interfaceConnectionAdapter- Parameters:
connectionReadyListener- listens to connection ready event
-
setSystemListener
public void setSystemListener(SystemNotificationsListener systemListener)
Description copied from interface:ConnectionAdapterSets the system message listener.- Specified by:
setSystemListenerin interfaceConnectionAdapter- Parameters:
systemListener- here will be pushed all system messages from library
-
setAlienMessageListener
public void setAlienMessageListener(AlienMessageListener alienMessageListener)
Description copied from interface:ConnectionAdapterSet handler for alien messages received from device.- Specified by:
setAlienMessageListenerin interfaceConnectionAdapter- Parameters:
alienMessageListener- here will be pushed all alien messages from switch
-
consumeDeviceMessage
public void consumeDeviceMessage(org.opendaylight.yangtools.yang.binding.DataObject message)
Method is equivalent toMessageConsumer.consume(DataObject)to prevent missing method in every children ofAbstractConnectionAdapterStatisticsclass, because we overriding original method forStatisticsCounters.- Parameters:
message- from device to processing
-
checkListeners
public void checkListeners()
Description copied from interface:ConnectionAdapterThrows exception if any of required listeners is missing.- Specified by:
checkListenersin interfaceConnectionAdapter
-
fireConnectionReadyNotification
public void fireConnectionReadyNotification()
Description copied from interface:ConnectionAdapterNotify listener about connection ready-to-use event.- Specified by:
fireConnectionReadyNotificationin interfaceConnectionAdapter
-
onSwitchCertificateIdentified
public void onSwitchCertificateIdentified(List<X509Certificate> certificateChain)
Description copied from interface:ConnectionAdapterNotify listener about switch certificate information.- Specified by:
onSwitchCertificateIdentifiedin interfaceConnectionAdapter- Parameters:
certificateChain- X509 certificate chain presented by the switch
-
registerOutboundQueueHandler
public <T extends OutboundQueueHandler> OutboundQueueHandlerRegistration<T> registerOutboundQueueHandler(T handler, int maxQueueDepth, long maxBarrierNanos)
Description copied from interface:ConnectionAdapterRegisters a new bypass outbound queue.- Specified by:
registerOutboundQueueHandlerin interfaceConnectionAdapter- Type Parameters:
T- handler type- Parameters:
handler- queue handlermaxQueueDepth- max amount of not confirmed messaged in queue (i.e. edge for barrier message)maxBarrierNanos- regular base for barrier message- Returns:
- An
OutboundQueueHandlerRegistration
-
setPacketInFiltering
public void setPacketInFiltering(boolean enabled)
Description copied from interface:ConnectionAdapterSet filtering of PacketIn messages. By default these messages are not filtered.- Specified by:
setPacketInFilteringin interfaceConnectionAdapter- Parameters:
enabled- True if PacketIn messages should be filtered, false if they should be reported.
-
setDatapathId
public void setDatapathId(BigInteger datapathId)
Description copied from interface:ConnectionAdapterSet datapathId for the dpn.- Specified by:
setDatapathIdin interfaceConnectionAdapter- Parameters:
datapathId- of the dpn
-
setExecutorService
public void setExecutorService(ExecutorService executorService)
Description copied from interface:ConnectionAdapterSets executorService.- Specified by:
setExecutorServicein interfaceConnectionAdapter- Parameters:
executorService- for all dpns
-
flowMod
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<FlowModOutput>> flowMod(FlowModInput input)
Description copied from interface:OpenflowProtocolServiceInvokeflow-modRPC.- Specified by:
flowModin interfaceOpenflowProtocolService- Parameters:
input- offlow-mod- Returns:
- output of
flow-mod
-
sendToSwitchExpectRpcResultFuture
protected <I extends OfHeader,O extends OfHeader> com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<O>> sendToSwitchExpectRpcResultFuture(I input, Class<O> responseClazz, String failureInfo)
Sends given message to switch, sending result or switch response will be reported via return value.- Parameters:
input- message to sendresponseClazz- type of responsefailureInfo- describes, what type of message caused failure by sending- Returns:
- future object,
- if send fails,
RpcResultwill contain errors and failed status - else
RpcResultwill be stored in responseCache and wait for particular timeout (AbstractConnectionAdapter.RPC_RESPONSE_EXPIRATION),- either switch will manage to answer and then corresponding response message will be set into returned future
- or response in cache will expire and returned future will be cancelled
- if send fails,
-
sendToSwitchFuture
protected <O extends org.opendaylight.yangtools.yang.binding.DataObject> com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<O>> sendToSwitchFuture(Object input, String failureInfo)
Sends given message to switch, sending result will be reported via return value.- Parameters:
input- message to sendfailureInfo- describes, what type of message caused failure by sending- Returns:
- future object,
- if send successful,
RpcResultwithout errors and successful status will be returned, - else
RpcResultwill contain errors and failed status
- if send successful,
-
consume
public void consume(org.opendaylight.yangtools.yang.binding.DataObject message)
Description copied from interface:MessageConsumerInvoked to consume a message.- Specified by:
consumein interfaceMessageConsumer- Parameters:
message- to process
-
disconnect
public Future<Boolean> disconnect()
Description copied from interface:ConnectionAdapterDisconnect corresponding switch.- Specified by:
disconnectin interfaceConnectionAdapter- Returns:
- future set to true, when disconnect completed
-
barrier
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<BarrierOutput>> barrier(BarrierInput input)
Description copied from interface:OpenflowProtocolServiceInvokebarrierRPC.- Specified by:
barrierin interfaceOpenflowProtocolService- Parameters:
input- ofbarrier- Returns:
- output of
barrier
-
echo
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<EchoOutput>> echo(EchoInput input)
Description copied from interface:OpenflowProtocolServiceInvokeechoRPC.- Specified by:
echoin interfaceOpenflowProtocolService- Parameters:
input- ofecho- Returns:
- output of
echo
-
echoReply
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<EchoReplyOutput>> echoReply(EchoReplyInput input)
Description copied from interface:OpenflowProtocolServiceInvokeecho-replyRPC.- Specified by:
echoReplyin interfaceOpenflowProtocolService- Parameters:
input- ofecho-reply- Returns:
- output of
echo-reply
-
experimenter
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<ExperimenterOutput>> experimenter(ExperimenterInput input)
Description copied from interface:OpenflowProtocolServiceInvokeexperimenterRPC.Send experimenter message to device, reply is not solicitated.- Specified by:
experimenterin interfaceOpenflowProtocolService- Parameters:
input- ofexperimenter- Returns:
- output of
experimenter
-
getConfig
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetConfigOutput>> getConfig(GetConfigInput input)
Description copied from interface:OpenflowProtocolServiceInvokeget-configRPC.- Specified by:
getConfigin interfaceOpenflowProtocolService- Parameters:
input- ofget-config- Returns:
- output of
get-config
-
getFeatures
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetFeaturesOutput>> getFeatures(GetFeaturesInput input)
Description copied from interface:OpenflowProtocolServiceInvokeget-featuresRPC.- Specified by:
getFeaturesin interfaceOpenflowProtocolService- Parameters:
input- ofget-features- Returns:
- output of
get-features
-
getQueueConfig
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetQueueConfigOutput>> getQueueConfig(GetQueueConfigInput input)
Description copied from interface:OpenflowProtocolServiceInvokeget-queue-configRPC.- Specified by:
getQueueConfigin interfaceOpenflowProtocolService- Parameters:
input- ofget-queue-config- Returns:
- output of
get-queue-config
-
groupMod
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GroupModOutput>> groupMod(GroupModInput input)
Description copied from interface:OpenflowProtocolServiceInvokegroup-modRPC.- Specified by:
groupModin interfaceOpenflowProtocolService- Parameters:
input- ofgroup-mod- Returns:
- output of
group-mod
-
hello
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<HelloOutput>> hello(HelloInput input)
Description copied from interface:OpenflowProtocolServiceInvokehelloRPC.- Specified by:
helloin interfaceOpenflowProtocolService- Parameters:
input- ofhello- Returns:
- output of
hello
-
meterMod
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<MeterModOutput>> meterMod(MeterModInput input)
Description copied from interface:OpenflowProtocolServiceInvokemeter-modRPC.- Specified by:
meterModin interfaceOpenflowProtocolService- Parameters:
input- ofmeter-mod- Returns:
- output of
meter-mod
-
packetOut
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<PacketOutOutput>> packetOut(PacketOutInput input)
Description copied from interface:OpenflowProtocolServiceInvokepacket-outRPC.- Specified by:
packetOutin interfaceOpenflowProtocolService- Parameters:
input- ofpacket-out- Returns:
- output of
packet-out
-
multipartRequest
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<MultipartRequestOutput>> multipartRequest(MultipartRequestInput input)
Description copied from interface:OpenflowProtocolServiceInvokemultipart-requestRPC.- Specified by:
multipartRequestin interfaceOpenflowProtocolService- Parameters:
input- ofmultipart-request- Returns:
- output of
multipart-request
-
portMod
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<PortModOutput>> portMod(PortModInput input)
Description copied from interface:OpenflowProtocolServiceInvokeport-modRPC.- Specified by:
portModin interfaceOpenflowProtocolService- Parameters:
input- ofport-mod- Returns:
- output of
port-mod
-
roleRequest
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<RoleRequestOutput>> roleRequest(RoleRequestInput input)
Description copied from interface:OpenflowProtocolServiceInvokerole-requestRPC.- Specified by:
roleRequestin interfaceOpenflowProtocolService- Parameters:
input- ofrole-request- Returns:
- output of
role-request
-
setConfig
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<SetConfigOutput>> setConfig(SetConfigInput input)
Description copied from interface:OpenflowProtocolServiceInvokeset-configRPC.- Specified by:
setConfigin interfaceOpenflowProtocolService- Parameters:
input- ofset-config- Returns:
- output of
set-config
-
tableMod
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<TableModOutput>> tableMod(TableModInput input)
Description copied from interface:OpenflowProtocolServiceInvoketable-modRPC.- Specified by:
tableModin interfaceOpenflowProtocolService- Parameters:
input- oftable-mod- Returns:
- output of
table-mod
-
getAsync
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetAsyncOutput>> getAsync(GetAsyncInput input)
Description copied from interface:OpenflowProtocolServiceInvokeget-asyncRPC.- Specified by:
getAsyncin interfaceOpenflowProtocolService- Parameters:
input- ofget-async- Returns:
- output of
get-async
-
setAsync
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<SetAsyncOutput>> setAsync(SetAsyncInput input)
Description copied from interface:OpenflowProtocolServiceInvokeset-asyncRPC.- Specified by:
setAsyncin interfaceOpenflowProtocolService- Parameters:
input- ofset-async- Returns:
- output of
set-async
-
isAlive
public boolean isAlive()
Description copied from interface:ConnectionAdapterDetermines if the connection to the switch is alive.- Specified by:
isAlivein interfaceConnectionAdapter- Returns:
- true, if connection to switch is alive
-
isAutoRead
public boolean isAutoRead()
Description copied from interface:ConnectionAdapterDetermines if the channel is configured to auto-read.- Specified by:
isAutoReadin interfaceConnectionAdapter- Returns:
- true, if channel is configured to auto-read
-
setAutoRead
public void setAutoRead(boolean autoRead)
Description copied from interface:ConnectionAdapterSets option for automatic channel reading - if set to false, incoming messages won't be read.- Specified by:
setAutoReadin interfaceConnectionAdapter- Parameters:
autoRead- target value to be switched to
-
getRemoteAddress
public InetSocketAddress getRemoteAddress()
Description copied from interface:ConnectionAdapterReturns the address of the connected switch.- Specified by:
getRemoteAddressin interfaceConnectionAdapter- Returns:
- address of the remote end - address of a switch if connected
-
findRpcResponse
protected org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?> findRpcResponse(RpcResponseKey key)
Return cached RpcListener ornullif not cached.
-
-