package org.opendaylight.openflowjava.protocol.impl.core;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.SettableFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
import org.opendaylight.openflowjava.protocol.api.connection.ConnectionConfiguration;
import org.opendaylight.openflowjava.protocol.api.connection.SwitchConnectionHandler;
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
-import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;
-import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralDeserializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralSerializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
+import org.opendaylight.openflowjava.protocol.api.keys.ActionSerializerKey;
+import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterActionDeserializerKey;
+import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterDeserializerKey;
+import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterIdDeserializerKey;
+import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterIdSerializerKey;
+import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterInstructionDeserializerKey;
+import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterSerializerKey;
+import org.opendaylight.openflowjava.protocol.api.keys.InstructionSerializerKey;
import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey;
import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionDeserializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionSerializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterDeserializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdDeserializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdSerializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterInstructionDeserializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterInstructionSerializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterSerializerKey;
+import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
+import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializationFactory;
import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;
import org.opendaylight.openflowjava.protocol.impl.serialization.SerializationFactory;
import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.config.rev140630.TransportProtocol;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmClassBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmClassBase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.SettableFuture;
-
/**
- * Exposed class for server handling <br/>
- * C - {@link MatchEntrySerializerKey} parameter representing oxm_class (see specification) <br/>
+ * Exposed class for server handling<br>
+ * C - {@link MatchEntrySerializerKey} parameter representing oxm_class (see specification)<br>
* F - {@link MatchEntrySerializerKey} parameter representing oxm_field (see specification)
* @author mirehak
* @author michal.polkorab
*/
-public class SwitchConnectionProviderImpl implements SwitchConnectionProvider {
+public class SwitchConnectionProviderImpl implements SwitchConnectionProvider, ConnectionInitializer {
private static final Logger LOGGER = LoggerFactory
.getLogger(SwitchConnectionProviderImpl.class);
private SwitchConnectionHandler switchConnectionHandler;
private ServerFacade serverFacade;
private ConnectionConfiguration connConfig;
- private SerializationFactory serializationFactory;
- private SerializerRegistry serializerRegistry;
- private DeserializerRegistry deserializerRegistry;
- private DeserializationFactory deserializationFactory;
+ private final SerializationFactory serializationFactory;
+ private final SerializerRegistry serializerRegistry;
+ private final DeserializerRegistry deserializerRegistry;
+ private final DeserializationFactory deserializationFactory;
+ private TcpConnectionInitializer connectionInitializer;
/** Constructor */
public SwitchConnectionProviderImpl() {
}
@Override
- public void setConfiguration(ConnectionConfiguration connConfig) {
+ public void setConfiguration(final ConnectionConfiguration connConfig) {
this.connConfig = connConfig;
}
@Override
- public void setSwitchConnectionHandler(SwitchConnectionHandler switchConnectionHandler) {
+ public void setSwitchConnectionHandler(final SwitchConnectionHandler switchConnectionHandler) {
LOGGER.debug("setSwitchConnectionHandler");
this.switchConnectionHandler = switchConnectionHandler;
}
}
new Thread(serverFacade).start();
result = serverFacade.getIsOnlineFuture();
- } catch (Exception e) {
- SettableFuture<Boolean> exResult = SettableFuture.create();
+ } catch (final Exception e) {
+ final SettableFuture<Boolean> exResult = SettableFuture.create();
exResult.setException(e);
result = exResult;
}
private ServerFacade createAndConfigureServer() {
LOGGER.debug("Configuring ..");
ServerFacade server = null;
- ChannelInitializerFactory factory = new ChannelInitializerFactory();
+ final ChannelInitializerFactory factory = new ChannelInitializerFactory();
factory.setSwitchConnectionHandler(switchConnectionHandler);
factory.setSwitchIdleTimeout(connConfig.getSwitchIdleTimeout());
factory.setTlsConfig(connConfig.getTlsConfiguration());
factory.setSerializationFactory(serializationFactory);
factory.setDeserializationFactory(deserializationFactory);
- TransportProtocol transportProtocol = (TransportProtocol) connConfig.getTransferProtocol();
+ factory.setUseBarrier(connConfig.useBarrier());
+ final TransportProtocol transportProtocol = (TransportProtocol) connConfig.getTransferProtocol();
if (transportProtocol.equals(TransportProtocol.TCP) || transportProtocol.equals(TransportProtocol.TLS)) {
server = new TcpHandler(connConfig.getAddress(), connConfig.getPort());
- ((TcpHandler) server).setChannelInitializer(factory.createPublishingChannelInitializer());
+ final TcpChannelInitializer channelInitializer = factory.createPublishingChannelInitializer();
+ ((TcpHandler) server).setChannelInitializer(channelInitializer);
+ ((TcpHandler) server).initiateEventLoopGroups(connConfig.getThreadConfiguration());
+
+ final NioEventLoopGroup workerGroupFromTcpHandler = ((TcpHandler) server).getWorkerGroup();
+ connectionInitializer = new TcpConnectionInitializer(workerGroupFromTcpHandler);
+ connectionInitializer.setChannelInitializer(channelInitializer);
+ connectionInitializer.run();
} else if (transportProtocol.equals(TransportProtocol.UDP)){
server = new UdpHandler(connConfig.getAddress(), connConfig.getPort());
((UdpHandler) server).setChannelInitializer(factory.createUdpChannelInitializer());
}
@Override
- public boolean unregisterSerializer(ExperimenterSerializerKey key) {
+ public boolean unregisterSerializer(final ExperimenterSerializerKey key) {
return serializerRegistry.unregisterSerializer((MessageTypeKey<?>) key);
}
@Override
- public boolean unregisterDeserializer(ExperimenterDeserializerKey key) {
+ public boolean unregisterDeserializer(final ExperimenterDeserializerKey key) {
return deserializerRegistry.unregisterDeserializer((MessageCodeKey) key);
}
@Override
- public void registerActionSerializer(ExperimenterActionSerializerKey key,
- OFGeneralSerializer serializer) {
+ public void registerActionSerializer(final ActionSerializerKey<?> key,
+ final OFGeneralSerializer serializer) {
serializerRegistry.registerSerializer(key, serializer);
}
@Override
- public void registerActionDeserializer(ExperimenterActionDeserializerKey key,
- OFGeneralDeserializer deserializer) {
+ public void registerActionDeserializer(final ExperimenterActionDeserializerKey key,
+ final OFGeneralDeserializer deserializer) {
deserializerRegistry.registerDeserializer(key, deserializer);
}
@Override
- public void registerInstructionSerializer(ExperimenterInstructionSerializerKey key,
- OFGeneralSerializer serializer) {
+ public void registerInstructionSerializer(final InstructionSerializerKey<?> key,
+ final OFGeneralSerializer serializer) {
serializerRegistry.registerSerializer(key, serializer);
}
@Override
- public void registerInstructionDeserializer(ExperimenterInstructionDeserializerKey key,
- OFGeneralDeserializer deserializer) {
+ public void registerInstructionDeserializer(final ExperimenterInstructionDeserializerKey key,
+ final OFGeneralDeserializer deserializer) {
deserializerRegistry.registerDeserializer(key, deserializer);
}
@Override
- public <C extends OxmClassBase, F extends MatchField> void registerMatchEntrySerializer(MatchEntrySerializerKey<C, F> key,
- OFGeneralSerializer serializer) {
+ public <C extends OxmClassBase, F extends MatchField> void registerMatchEntrySerializer(final MatchEntrySerializerKey<C, F> key,
+ final OFGeneralSerializer serializer) {
serializerRegistry.registerSerializer(key, serializer);
}
@Override
- public void registerMatchEntryDeserializer(MatchEntryDeserializerKey key,
- OFGeneralDeserializer deserializer) {
+ public void registerMatchEntryDeserializer(final MatchEntryDeserializerKey key,
+ final OFGeneralDeserializer deserializer) {
deserializerRegistry.registerDeserializer(key, deserializer);
}
@Override
- public void registerErrorDeserializer(ExperimenterIdDeserializerKey key,
- OFDeserializer<ErrorMessage> deserializer) {
+ public void registerErrorDeserializer(final ExperimenterIdDeserializerKey key,
+ final OFDeserializer<ErrorMessage> deserializer) {
deserializerRegistry.registerDeserializer(key, deserializer);
}
@Override
public void registerExperimenterMessageDeserializer(ExperimenterIdDeserializerKey key,
- OFDeserializer<ExperimenterMessage> deserializer) {
+ OFDeserializer<? extends ExperimenterDataOfChoice> deserializer) {
deserializerRegistry.registerDeserializer(key, deserializer);
}
@Override
public void registerMultipartReplyMessageDeserializer(ExperimenterIdDeserializerKey key,
- OFDeserializer<MultipartReplyMessage> deserializer) {
+ OFDeserializer<? extends ExperimenterDataOfChoice> deserializer) {
deserializerRegistry.registerDeserializer(key, deserializer);
}
@Override
- public void registerMultipartReplyTFDeserializer(ExperimenterIdDeserializerKey key,
- OFGeneralDeserializer deserializer) {
+ public void registerMultipartReplyTFDeserializer(final ExperimenterIdDeserializerKey key,
+ final OFGeneralDeserializer deserializer) {
deserializerRegistry.registerDeserializer(key, deserializer);
}
@Override
- public void registerQueuePropertyDeserializer(ExperimenterIdDeserializerKey key,
- OFDeserializer<QueueProperty> deserializer) {
+ public void registerQueuePropertyDeserializer(final ExperimenterIdDeserializerKey key,
+ final OFDeserializer<QueueProperty> deserializer) {
deserializerRegistry.registerDeserializer(key, deserializer);
}
@Override
- public void registerMeterBandDeserializer(ExperimenterIdDeserializerKey key,
- OFDeserializer<MeterBandExperimenterCase> deserializer) {
+ public void registerMeterBandDeserializer(final ExperimenterIdDeserializerKey key,
+ final OFDeserializer<MeterBandExperimenterCase> deserializer) {
deserializerRegistry.registerDeserializer(key, deserializer);
}
@Override
- public void registerExperimenterMessageSerializer(ExperimenterIdSerializerKey<ExperimenterInput> key,
- OFSerializer<ExperimenterInput> serializer) {
+ public void registerExperimenterMessageSerializer(ExperimenterIdSerializerKey<? extends ExperimenterDataOfChoice> key,
+ OFSerializer<? extends ExperimenterDataOfChoice> serializer) {
serializerRegistry.registerSerializer(key, serializer);
}
@Override
- public void registerMultipartRequestSerializer(ExperimenterIdSerializerKey<MultipartRequestExperimenterCase> key,
- OFSerializer<MultipartRequestExperimenterCase> serializer) {
+ public void registerMultipartRequestSerializer(ExperimenterIdSerializerKey<? extends ExperimenterDataOfChoice> key,
+ OFSerializer<? extends ExperimenterDataOfChoice> serializer) {
serializerRegistry.registerSerializer(key, serializer);
}
@Override
- public void registerMultipartRequestTFSerializer(ExperimenterIdSerializerKey<TableFeatureProperties> key,
- OFGeneralSerializer serializer) {
+ public void registerMultipartRequestTFSerializer(final ExperimenterIdSerializerKey<TableFeatureProperties> key,
+ final OFGeneralSerializer serializer) {
serializerRegistry.registerSerializer(key, serializer);
}
@Override
- public void registerMeterBandSerializer(ExperimenterIdSerializerKey<MeterBandExperimenterCase> key,
- OFSerializer<MeterBandExperimenterCase> serializer) {
+ public void registerMeterBandSerializer(final ExperimenterIdSerializerKey<MeterBandExperimenterCase> key,
+ final OFSerializer<MeterBandExperimenterCase> serializer) {
serializerRegistry.registerSerializer(key, serializer);
}
-}
\ No newline at end of file
+
+ @Override
+ public void initiateConnection(final String host, final int port) {
+ connectionInitializer.initiateConnection(host, port);
+ }
+
+}