This patch just ignores any unsupported feature, so the controller is
still able to connect to the switch and use the currently supported
features.
Without this change, the connection gets dropped if the switch
implements a new feature, e.g. experimenter action, that is not yet
supported by the controller.
Change-Id: Ibb8d3e5d5bde35903277df923aeb226a42ff947b
Signed-off-by: Renato Aguiar <renato.aguiar@hpe.com>
(cherry picked from commit
fa1866fd90861d8652f3868a99ad86d9929d72dc)
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.HeaderDeserializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.HeaderDeserializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
+import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* @author michal.polkorab
*
*/
public final class ListDeserializer {
/**
* @author michal.polkorab
*
*/
public final class ListDeserializer {
+ private static final Logger LOG = LoggerFactory.getLogger(ListDeserializer.class);
private ListDeserializer() {
throw new UnsupportedOperationException("Utility class shouldn't be instantiated");
private ListDeserializer() {
throw new UnsupportedOperationException("Utility class shouldn't be instantiated");
- * Deserializes headers of items into list
+ * Deserializes headers of items into list (used in MultipartReplyMessage - Table features)
* @param version openflow wire version
* @param length length of list in ByteBuf (bytes)
* @param input input buffer
* @param version openflow wire version
* @param length length of list in ByteBuf (bytes)
* @param input input buffer
items = new ArrayList<>();
int startIndex = input.readerIndex();
while ((input.readerIndex() - startIndex) < length){
items = new ArrayList<>();
int startIndex = input.readerIndex();
while ((input.readerIndex() - startIndex) < length){
- HeaderDeserializer<E> deserializer = registry.getDeserializer(keyMaker.make(input));
+ HeaderDeserializer<E> deserializer;
+ MessageCodeKey key = keyMaker.make(input);
+ try {
+ deserializer = registry.getDeserializer(key);
+ } catch (IllegalStateException e) {
+ LOG.warn("Problem during reading table feature property. Skipping unknown feature property: {}", key);
+ input.skipBytes(2 * EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
+ continue;
+ }
E item = deserializer.deserializeHeader(input);
items.add(item);
}
E item = deserializer.deserializeHeader(input);
items.add(item);
}