Merge "Fixing OF Multipart messages 1) So we have a MultipartRequestDesc message...
authorAdam Brcek <adam.brcek@pantheon.sk>
Sat, 16 Nov 2013 21:44:21 +0000 (21:44 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Sat, 16 Nov 2013 21:44:21 +0000 (21:44 +0000)
openflow-protocol-api/src/main/yang/openflow-protocol.yang
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/connection/ConnectionAdapterImpl.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MultipartRequestMessageFactory.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MultipartRequestMessageFactoryTest.java

index 518d1973d37fab30ddb1d40b826e4681233dd0ba..659cc1edb88b5b46d3fcc948a812830c1b4c1dd8 100644 (file)
@@ -541,6 +541,11 @@ module openflow-protocol {
                     type oft:multipart-request-flags;\r
                 }      \r
                 choice multipart-request-body {\r
+                    case multipart-request-desc {\r
+                        leaf desc {\r
+                            type empty;\r
+                        }\r
+                    }\r
                     case multipart-request-flow {\r
                         leaf table-id {\r
                             type uint8;\r
@@ -1306,9 +1311,16 @@ module openflow-protocol {
         /* Multipart messages. */\r
             //FIXME: Arent this wire protocol specific?\r
 \r
+            rpc send-multipart-request-message {\r
+                input {\r
+                    uses multipart-request;\r
+                }\r
+            }\r
+\r
             notification multipart-request-message {\r
                 uses multipart-request;\r
                 // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"\r
+                // TODO: This should probably be deprecated as I think it should have been an rpc - eaw@cisco.com\r
                 \r
             } /* Controller/switch message */\r
             notification multipart-reply-message {\r
index 68f1420b487bc2f1c7aa6fd485046caeb476c827..3c83945b93798d2dec8d116345826dbe47d790c0 100644 (file)
@@ -48,6 +48,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.RoleRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.RoleRequestOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SendMultipartRequestMessageInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetConfigInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.TableModInput;
@@ -77,13 +78,13 @@ import com.google.common.util.concurrent.SettableFuture;
  * @author michal.polkorab
  */
 public class ConnectionAdapterImpl implements ConnectionFacade {
-    
+
     /** after this time, rpc future response objects will be thrown away (in minutes) */
     public static final int RPC_RESPONSE_EXPIRATION = 1;
 
     protected static final Logger LOG = LoggerFactory
             .getLogger(ConnectionAdapterImpl.class);
-    
+
     private static final String APPLICATION_TAG = "OPENFLOW_LIBRARY";
     private static final String TAG = "OPENFLOW";
     private Channel channel;
@@ -96,7 +97,7 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
     protected ConnectionReadyListener connectionReadyListener;
 
     /**
-     * default ctor 
+     * default ctor
      */
     public ConnectionAdapterImpl() {
         responseCache = CacheBuilder.newBuilder()
@@ -105,7 +106,7 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
                 .removalListener(new ResponseRemovalListener()).build();
         LOG.debug("ConnectionAdapter created");
     }
-    
+
     /**
      * @param channel the channel to be set - used for communication
      */
@@ -180,6 +181,11 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
         return sendToSwitchFuture(input, "packet-out-input sending failed");
     }
 
+    @Override
+    public Future<RpcResult<Void>> sendMultipartRequestMessage(SendMultipartRequestMessageInput input) {
+        return sendToSwitchFuture(input, "multi-part-request sending failed");
+    }
+
     @Override
     public Future<RpcResult<Void>> portMod(PortModInput input) {
         return sendToSwitchFuture(input, "port-mod-input sending failed");
@@ -234,7 +240,7 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
     public void setMessageListener(OpenflowProtocolListener messageListener) {
         this.messageListener = messageListener;
     }
-    
+
     @Override
     public void consume(DataObject message) {
         LOG.debug("ConsumeIntern msg");
@@ -297,38 +303,38 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
     /**
      * sends given message to switch, sending result will be reported via return value
      * @param input message to send
-     * @param failureInfo describes, what type of message caused failure by sending 
+     * @param failureInfo describes, what type of message caused failure by sending
      * @return future object, <ul>
-     *  <li>if send successful, {@link RpcResult} without errors and successful 
+     *  <li>if send successful, {@link RpcResult} without errors and successful
      *  status will be returned, </li>
      *  <li>else {@link RpcResult} will contain errors and failed status</li>
-     *  </ul>    
+     *  </ul>
      */
     private SettableFuture<RpcResult<Void>> sendToSwitchFuture(
             DataObject input, final String failureInfo) {
         LOG.debug("going to flush");
         ChannelFuture resultFuture = channel.writeAndFlush(input);
         LOG.debug("flushed");
-        
+
         ErrorSeverity errorSeverity = ErrorSeverity.ERROR;
         String errorMessage = "check switch connection";
         return handleRpcChannelFuture(resultFuture, failureInfo, errorSeverity, errorMessage);
     }
-    
+
     /**
      * sends given message to switch, sending result or switch response will be reported via return value
      * @param input message to send
      * @param responseClazz type of response
-     * @param failureInfo describes, what type of message caused failure by sending 
+     * @param failureInfo describes, what type of message caused failure by sending
      * @return future object, <ul>
      *  <li>if send fails, {@link RpcResult} will contain errors and failed status </li>
-     *  <li>else {@link RpcResult} will be stored in responseCache and wait for particular timeout 
-     *  ({@link ConnectionAdapterImpl#RPC_RESPONSE_EXPIRATION}), 
+     *  <li>else {@link RpcResult} will be stored in responseCache and wait for particular timeout
+     *  ({@link ConnectionAdapterImpl#RPC_RESPONSE_EXPIRATION}),
      *  <ul><li>either switch will manage to answer
      *  and then corresponding response message will be set into returned future</li>
      *  <li>or response in cache will expire and returned future will be cancelled</li></ul>
      *  </li>
-     *  </ul>     
+     *  </ul>
      */
     private <IN extends OfHeader, OUT extends OfHeader> SettableFuture<RpcResult<OUT>> sendToSwitchExpectRpcResultFuture(
             IN input, Class<OUT> responseClazz, final String failureInfo) {
@@ -338,11 +344,11 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
         responseCache.put(key, rpcResult);
         ChannelFuture resultFuture = channel.writeAndFlush(input);
         LOG.debug("flushed");
-        
+
         ErrorSeverity errorSeverity = ErrorSeverity.ERROR;
         String errorMessage = "check switch connection";
-        
-        return handleRpcChannelFutureWithResponse(resultFuture, failureInfo, errorSeverity, 
+
+        return handleRpcChannelFutureWithResponse(resultFuture, failureInfo, errorSeverity,
                 errorMessage, input, responseClazz, rpcResult, key);
     }
 
@@ -352,37 +358,37 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
      * @return
      */
     private SettableFuture<RpcResult<Void>> handleRpcChannelFuture(
-            ChannelFuture resultFuture, final String failureInfo, 
+            ChannelFuture resultFuture, final String failureInfo,
             final ErrorSeverity errorSeverity, final String errorMessage) {
-        
+
         final SettableFuture<RpcResult<Void>> rpcResult = SettableFuture.create();
         LOG.debug("handlerpcchannelfuture");
         resultFuture.addListener(new GenericFutureListener<io.netty.util.concurrent.Future<? super Void>>() {
-            
+
             @Override
             public void operationComplete(
                     io.netty.util.concurrent.Future<? super Void> future)
                     throws Exception {
                 LOG.debug("operation complete");
                 Collection<RpcError> errors = Collections.emptyList();
-                
+
                 if (future.cause() != null) {
                     LOG.debug("future.cause != null");
-                    RpcError rpcError = buildRpcError(failureInfo, 
+                    RpcError rpcError = buildRpcError(failureInfo,
                             errorSeverity, errorMessage, future.cause());
                     errors = Lists.newArrayList(rpcError);
                 }
-                
+
                 rpcResult.set(Rpcs.getRpcResult(
-                        future.isSuccess(), 
-                        (Void) null, 
+                        future.isSuccess(),
+                        (Void) null,
                         errors)
                 );
             }
         });
         return rpcResult;
     }
-    
+
     /**
      * @param resultFuture
      * @param failureInfo
@@ -398,24 +404,24 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
             final ErrorSeverity errorSeverity, final String errorMessage,
             final IN input, Class<OUT> responseClazz, final SettableFuture<RpcResult<OUT>> rpcResult, final RpcResponseKey key) {
         LOG.debug("handleRpcchanfuture with response");
-        
+
         resultFuture.addListener(new GenericFutureListener<io.netty.util.concurrent.Future<? super Void>>() {
-            
+
             @Override
             public void operationComplete(
                     io.netty.util.concurrent.Future<? super Void> future)
                     throws Exception {
-                
+
                 LOG.debug("operation complete");
                 Collection<RpcError> errors = Collections.emptyList();
                 if (future.cause() != null) {
                     LOG.debug("ChannelFuture.cause != null");
-                    RpcError rpcError = buildRpcError(failureInfo, 
+                    RpcError rpcError = buildRpcError(failureInfo,
                             errorSeverity, errorMessage, future.cause());
                     errors = Lists.newArrayList(rpcError);
                     rpcResult.set(Rpcs.getRpcResult(
-                            future.isSuccess(), 
-                            (OUT) null, 
+                            future.isSuccess(),
+                            (OUT) null,
                             errors)
                             );
                     responseCache.invalidate(key);
@@ -433,18 +439,18 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
     /**
      * @param resultFuture
      * @param failureInfo
-     * @param errorSeverity 
-     * @param message 
+     * @param errorSeverity
+     * @param message
      * @return
      */
     private static SettableFuture<Boolean> handleTransportChannelFuture(
-            ChannelFuture resultFuture, final String failureInfo, 
+            ChannelFuture resultFuture, final String failureInfo,
             final ErrorSeverity errorSeverity, final String message) {
-        
+
         final SettableFuture<Boolean> transportResult = SettableFuture.create();
-        
+
         resultFuture.addListener(new GenericFutureListener<io.netty.util.concurrent.Future<? super Void>>() {
-            
+
             @Override
             public void operationComplete(
                     io.netty.util.concurrent.Future<? super Void> future)
@@ -462,20 +468,20 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
      * @param cause
      * @return
      */
-    protected RpcError buildRpcError(String info, ErrorSeverity severity, String message, 
+    protected RpcError buildRpcError(String info, ErrorSeverity severity, String message,
             Throwable cause) {
-        RpcError error = RpcErrors.getRpcError(APPLICATION_TAG, TAG, info, severity, message, 
+        RpcError error = RpcErrors.getRpcError(APPLICATION_TAG, TAG, info, severity, message,
                 ErrorType.RPC, cause);
         return error;
     }
-    
+
     /**
      * @param cause
      * @return
      */
-    protected RpcError buildTransportError(String info, ErrorSeverity severity, String message, 
+    protected RpcError buildTransportError(String info, ErrorSeverity severity, String message,
             Throwable cause) {
-        RpcError error = RpcErrors.getRpcError(APPLICATION_TAG, TAG, info, severity, message, 
+        RpcError error = RpcErrors.getRpcError(APPLICATION_TAG, TAG, info, severity, message,
                 ErrorType.TRANSPORT, cause);
         return error;
     }
@@ -500,7 +506,7 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
     public void setSystemListener(SystemNotificationsListener systemListener) {
         this.systemListener = systemListener;
     }
-    
+
     @Override
     public void checkListeners() {
         StringBuffer buffer =  new StringBuffer();
@@ -513,7 +519,7 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
         if (connectionReadyListener == null) {
             buffer.append("ConnectionReadyListener ");
         }
-        
+
         if (buffer.length() > 0) {
             throw new IllegalStateException("Missing listeners: " + buffer.toString());
         }
@@ -541,7 +547,7 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
             return null;
         }
     }
-    
+
     @Override
     public void fireConnectionReadyNotification() {
         new Thread(new Runnable() {
@@ -551,12 +557,12 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
             }
         }).start();
     }
-    
-    
+
+
     @Override
     public void setConnectionReadyListener(
             ConnectionReadyListener connectionReadyListener) {
         this.connectionReadyListener = connectionReadyListener;
     }
-    
+
 }
index 16bf6a91a4aa4a91ad22620cbc1a21fe0f91e540..f223c56203beecb0a000c97ee77e150d15831c6c 100644 (file)
@@ -28,6 +28,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestMessage;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregate;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDesc;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenter;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlow;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroup;\r
@@ -49,12 +50,12 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
     private static final int MESSAGE_LENGTH = 16;\r
     private static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;\r
     private static final byte TABLE_FEAT_HEADER_LENGTH = 4;\r
-    private static MultipartRequestMessageFactory instance; \r
-    \r
+    private static MultipartRequestMessageFactory instance;\r
+\r
     private MultipartRequestMessageFactory() {\r
         // singleton\r
     }\r
-    \r
+\r
     /**\r
      * @return singleton factory\r
      */\r
@@ -64,7 +65,7 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
         }\r
         return instance;\r
     }\r
-    \r
+\r
     @Override\r
     public void messageToBuffer(short version, ByteBuf out,\r
             MultipartRequestMessage message) {\r
@@ -72,8 +73,10 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
         out.writeShort(message.getType().getIntValue());\r
         out.writeShort(createMultipartRequestFlagsBitmask(message.getFlags()));\r
         ByteBufUtils.padBuffer(PADDING_IN_MULTIPART_REQUEST_MESSAGE, out);\r
-        \r
-        if (message.getMultipartRequestBody() instanceof MultipartRequestFlow) {\r
+\r
+        if (message.getMultipartRequestBody() instanceof MultipartRequestDesc ){\r
+            encodeDescBody(message.getMultipartRequestBody(), out);\r
+        } else if (message.getMultipartRequestBody() instanceof MultipartRequestFlow) {\r
             encodeFlowBody(message.getMultipartRequestBody(), out);\r
         } else if (message.getMultipartRequestBody() instanceof MultipartRequestAggregate) {\r
             encodeAggregateBody(message.getMultipartRequestBody(), out);\r
@@ -93,7 +96,7 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
             encodeExperimenterBody(message.getMultipartRequestBody(), out);\r
         }\r
     }\r
-    \r
+\r
     @Override\r
     public int computeLength(MultipartRequestMessage message) {\r
         return MESSAGE_LENGTH + computeBodyLength(message);\r
@@ -102,9 +105,9 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
     public byte getMessageType() {\r
         return MESSAGE_TYPE;\r
     }\r
-    \r
+\r
     /**\r
-     * \r
+     *\r
      * @param message\r
      * @return length of MultipartRequestMessage\r
      */\r
@@ -190,16 +193,22 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
         }\r
         return length;\r
     }\r
-    \r
+\r
     private static int createMultipartRequestFlagsBitmask(MultipartRequestFlags flags) {\r
         int multipartRequestFlagsBitmask = 0;\r
         Map<Integer, Boolean> multipartRequestFlagsMap = new HashMap<>();\r
         multipartRequestFlagsMap.put(0, flags.isOFPMPFREQMORE());\r
-        \r
+\r
         multipartRequestFlagsBitmask = ByteBufUtils.fillBitMaskFromMap(multipartRequestFlagsMap);\r
         return multipartRequestFlagsBitmask;\r
     }\r
-    \r
+\r
+    private void encodeDescBody(MultipartRequestBody multipartRequestBody,\r
+            ByteBuf output) {\r
+        // The body of MultiPartRequestDesc is empty\r
+\r
+    }\r
+\r
     private static void encodeFlowBody(MultipartRequestBody multipartRequestBody, ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3;\r
         final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4;\r
@@ -209,11 +218,11 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
         output.writeInt(flow.getOutPort().intValue());\r
         output.writeInt(flow.getOutGroup().intValue());\r
         ByteBufUtils.padBuffer(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02, output);\r
-        output.writeLong(flow.getCookie().longValue()); \r
+        output.writeLong(flow.getCookie().longValue());\r
         output.writeLong(flow.getCookieMask().longValue());\r
         MatchSerializer.encodeMatch(flow.getMatch(), output);\r
     }\r
-    \r
+\r
     private static void encodeAggregateBody(MultipartRequestBody multipartRequestBody, ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_AGREGGATE_BODY_01 = 3;\r
         final byte PADDING_IN_MULTIPART_REQUEST_AGREGGATE_BODY_02 = 4;\r
@@ -223,45 +232,45 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
         output.writeInt(aggregate.getOutPort().intValue());\r
         output.writeInt(aggregate.getOutGroup().intValue());\r
         ByteBufUtils.padBuffer(PADDING_IN_MULTIPART_REQUEST_AGREGGATE_BODY_02, output);\r
-        output.writeLong(aggregate.getCookie().longValue()); \r
+        output.writeLong(aggregate.getCookie().longValue());\r
         output.writeLong(aggregate.getCookieMask().longValue());\r
         MatchSerializer.encodeMatch(aggregate.getMatch(), output);\r
     }\r
-    \r
+\r
     private static void encodePortStatsBody(MultipartRequestBody multipartRequestBody, ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY = 4;\r
         MultipartRequestPortStats portstats = (MultipartRequestPortStats) multipartRequestBody;\r
         output.writeInt(portstats.getPortNo().intValue());\r
         ByteBufUtils.padBuffer(PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY, output);\r
     }\r
-    \r
+\r
     private static void encodeQueueBody(MultipartRequestBody multipartRequestBody, ByteBuf output) {\r
         MultipartRequestQueue queue = (MultipartRequestQueue) multipartRequestBody;\r
         output.writeInt(queue.getPortNo().intValue());\r
         output.writeInt(queue.getQueueId().intValue());\r
     }\r
-    \r
+\r
     private static void encodeGroupStatsBody(MultipartRequestBody multipartRequestBody, ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_GROUP_BODY = 4;\r
         MultipartRequestGroup groupStats = (MultipartRequestGroup) multipartRequestBody;\r
         output.writeInt(groupStats.getGroupId().intValue());\r
         ByteBufUtils.padBuffer(PADDING_IN_MULTIPART_REQUEST_GROUP_BODY, output);\r
     }\r
-    \r
+\r
     private static void encodeMeterBody(MultipartRequestBody multipartRequestBody, ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_METER_BODY = 4;\r
         MultipartRequestMeter meter = (MultipartRequestMeter) multipartRequestBody;\r
         output.writeInt(meter.getMeterId().intValue());\r
         ByteBufUtils.padBuffer(PADDING_IN_MULTIPART_REQUEST_METER_BODY, output);\r
     }\r
-    \r
+\r
     private static void encodeMeterConfigBody(MultipartRequestBody multipartRequestBody, ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY = 4;\r
         MultipartRequestMeterConfig meterConfig = (MultipartRequestMeterConfig) multipartRequestBody;\r
         output.writeInt(meterConfig.getMeterId().intValue());\r
         ByteBufUtils.padBuffer(PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY, output);\r
     }\r
-    \r
+\r
     private static void encodeExperimenterBody(MultipartRequestBody multipartRequestBody, ByteBuf output) {\r
         MultipartRequestExperimenter experimenter = (MultipartRequestExperimenter) multipartRequestBody;\r
         output.writeInt(experimenter.getExperimenter().intValue());\r
@@ -271,7 +280,7 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
             output.writeBytes(data);\r
         }\r
     }\r
-    \r
+\r
     private static void encodeTableFeaturesBody(MultipartRequestBody multipartRequestBody, ByteBuf output) {\r
         if (multipartRequestBody != null) {\r
             MultipartRequestTableFeatures tableFeatures = (MultipartRequestTableFeatures) multipartRequestBody;\r
@@ -289,7 +298,7 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
             }\r
         }\r
     }\r
-    \r
+\r
     private static void writeTableFeatureProperties(ByteBuf output, List<TableFeatureProperties> props) {\r
         if (props != null) {\r
             for (TableFeatureProperties property : props) {\r
@@ -342,7 +351,7 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
                 } else if (type.equals(TableFeaturesPropType.OFPTFPTEXPERIMENTERMISS)) {\r
                     final int EXPERIMENTER_MISS_CODE = 65535; // 0xFFFF\r
                     writeExperimenterRelatedTableProperty(output, property, EXPERIMENTER_MISS_CODE);\r
-                } \r
+                }\r
             }\r
         }\r
     }\r
@@ -361,7 +370,7 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
             output.writeShort(length);\r
         }\r
     }\r
-    \r
+\r
     private static void writeNextTableRelatedTableProperty(ByteBuf output,\r
             TableFeatureProperties property, byte code) {\r
         output.writeShort(code);\r
@@ -377,7 +386,7 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
             output.writeShort(length);\r
         }\r
     }\r
-    \r
+\r
     private static void writeActionsRelatedTableProperty(ByteBuf output,\r
             TableFeatureProperties property, byte code) {\r
         output.writeShort(code);\r
@@ -392,7 +401,7 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
             output.writeShort(length);\r
         }\r
     }\r
-    \r
+\r
     private static void writeOxmRelatedTableProperty(ByteBuf output,\r
             TableFeatureProperties property, byte code) {\r
         output.writeShort(code);\r
@@ -407,7 +416,7 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
             output.writeShort(length);\r
         }\r
     }\r
-    \r
+\r
     private static void writeExperimenterRelatedTableProperty(ByteBuf output,\r
             TableFeatureProperties property, int code) {\r
         output.writeShort(code);\r
@@ -426,12 +435,12 @@ public class MultipartRequestMessageFactory implements OFSerializer<MultipartReq
             output.writeInt(exp.getExpType().intValue());\r
         }\r
     }\r
-    \r
+\r
     private static int createTableConfigBitmask(TableConfig tableConfig) {\r
         int tableConfigBitmask = 0;\r
         Map<Integer, Boolean> tableConfigMap = new HashMap<>();\r
         tableConfigMap.put(3, tableConfig.isOFPTCDEPRECATEDMASK());\r
-        \r
+\r
         tableConfigBitmask = ByteBufUtils.fillBitMaskFromMap(tableConfigMap);\r
         return tableConfigBitmask;\r
     }\r
index 68b7ca09e93d166a5f6d3300d965ff44db87c4d5..2c22529b20bfd0acf92724f56908076212d3ae29 100644 (file)
@@ -18,8 +18,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableConfig;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestMessage;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestMessageBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregate;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenter;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlow;\r
@@ -45,7 +47,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  */\r
 public class MultipartRequestMessageFactoryTest {\r
     private static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;\r
-    \r
+\r
     /**\r
      * @throws Exception\r
      * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
@@ -58,18 +60,18 @@ public class MultipartRequestMessageFactoryTest {
         builder.setFlags(new MultipartRequestFlags(true));\r
         builder.setMultipartRequestBody(createRequestFlow());\r
         MultipartRequestMessage message = builder.build();\r
-        \r
+\r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
         MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-        \r
+\r
         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
         Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
         Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
         out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
         Assert.assertEquals("Wrong flow", message.getMultipartRequestBody(), decodeRequestFlow(out));\r
     }\r
-    \r
+\r
     private static MultipartRequestFlow createRequestFlow() {\r
         MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();\r
         builder.setTableId((short) 8);\r
@@ -83,7 +85,7 @@ public class MultipartRequestMessageFactoryTest {
         //TODO match field\r
         return flow;\r
     }\r
-    \r
+\r
     private static MultipartRequestFlow decodeRequestFlow(ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3;\r
         final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4;\r
@@ -102,7 +104,7 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestFlow flow = builder.build();\r
         return flow;\r
     }\r
-    \r
+\r
     /**\r
      * @throws Exception\r
      * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
@@ -115,24 +117,24 @@ public class MultipartRequestMessageFactoryTest {
         builder.setFlags(new MultipartRequestFlags(true));\r
         builder.setMultipartRequestBody(createRequestAggregate());\r
         MultipartRequestMessage message = builder.build();\r
-        \r
+\r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
         MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-        \r
+\r
         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
         Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
         Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
         out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
         Assert.assertEquals("Wrong aggregate", message.getMultipartRequestBody(), decodeRequestAggregate(out));\r
     }\r
-    \r
+\r
     private static MultipartRequestFlags decodeMultipartRequestFlags(short input){\r
         final Boolean _oFPMPFREQMORE = (input & (1 << 0)) > 0;\r
         return new MultipartRequestFlags(_oFPMPFREQMORE);\r
     }\r
-    \r
-    \r
+\r
+\r
     private static MultipartRequestAggregate createRequestAggregate() {\r
         MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();\r
         builder.setTableId((short) 8);\r
@@ -146,7 +148,7 @@ public class MultipartRequestMessageFactoryTest {
       //TODO match field\r
         return aggregate;\r
     }\r
-    \r
+\r
     private static MultipartRequestAggregate decodeRequestAggregate(ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01 = 3;\r
         final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02 = 4;\r
@@ -165,7 +167,7 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestAggregate flow = builder.build();\r
         return flow;\r
     }\r
-    \r
+\r
     /**\r
      * @throws Exception\r
      * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
@@ -178,17 +180,17 @@ public class MultipartRequestMessageFactoryTest {
         builder.setFlags(new MultipartRequestFlags(true));\r
         //multipart request for table does not have body\r
         MultipartRequestMessage message = builder.build();\r
-        \r
+\r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
         MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-        \r
+\r
         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
         Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
         Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
         out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
     }\r
-    \r
+\r
     /**\r
      * @throws Exception\r
      * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
@@ -201,25 +203,25 @@ public class MultipartRequestMessageFactoryTest {
         builder.setFlags(new MultipartRequestFlags(true));\r
         builder.setMultipartRequestBody(createRequestPortStats());\r
         MultipartRequestMessage message = builder.build();\r
-        \r
+\r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
         MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-        \r
+\r
         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
         Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
         Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
         out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
         Assert.assertEquals("Wrong portStatsBody", message.getMultipartRequestBody(), decodeRequestPortStats(out));\r
     }\r
-    \r
+\r
     private static MultipartRequestPortStats createRequestPortStats() {\r
         MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();\r
         builder.setPortNo(2251L);\r
         MultipartRequestPortStats portStats = builder.build();\r
         return portStats;\r
     }\r
-    \r
+\r
     private static MultipartRequestPortStats decodeRequestPortStats(ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY = 4;\r
         MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();\r
@@ -228,7 +230,7 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestPortStats portRequest = builder.build();\r
         return portRequest;\r
     }\r
-    \r
+\r
     /**\r
      * @throws Exception\r
      * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
@@ -241,18 +243,18 @@ public class MultipartRequestMessageFactoryTest {
         builder.setFlags(new MultipartRequestFlags(true));\r
         builder.setMultipartRequestBody(createRequestQueue());\r
         MultipartRequestMessage message = builder.build();\r
-        \r
+\r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
         MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-        \r
+\r
         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
         Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
         Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
         out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
         Assert.assertEquals("Wrong queueBody", message.getMultipartRequestBody(), decodeRequestQueue(out));\r
     }\r
-    \r
+\r
     private static MultipartRequestQueue createRequestQueue() {\r
         MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();\r
         builder.setPortNo(2256L);\r
@@ -260,7 +262,7 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestQueue queue = builder.build();\r
         return queue;\r
     }\r
-    \r
+\r
     private static MultipartRequestQueue decodeRequestQueue(ByteBuf output) {\r
         MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();\r
         builder.setPortNo(output.readUnsignedInt());\r
@@ -268,7 +270,7 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestQueue queue = builder.build();\r
         return queue;\r
     }\r
-    \r
+\r
     /**\r
      * @throws Exception\r
      * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
@@ -281,25 +283,25 @@ public class MultipartRequestMessageFactoryTest {
         builder.setFlags(new MultipartRequestFlags(true));\r
         builder.setMultipartRequestBody(createRequestGroup());\r
         MultipartRequestMessage message = builder.build();\r
-        \r
+\r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
         MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-        \r
+\r
         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
         Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
         Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
         out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
         Assert.assertEquals("Wrong groupBody", message.getMultipartRequestBody(), decodeRequestGroup(out));\r
     }\r
-    \r
+\r
     private static MultipartRequestGroup createRequestGroup() {\r
         MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();\r
         builder.setGroupId(2258L);\r
         MultipartRequestGroup group = builder.build();\r
         return group;\r
     }\r
-    \r
+\r
     private static MultipartRequestGroup decodeRequestGroup(ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_GROUP_BODY = 4;\r
         MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();\r
@@ -308,7 +310,7 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestGroup group = builder.build();\r
         return group;\r
     }\r
-    \r
+\r
     /**\r
      * @throws Exception\r
      * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
@@ -321,25 +323,25 @@ public class MultipartRequestMessageFactoryTest {
         builder.setFlags(new MultipartRequestFlags(true));\r
         builder.setMultipartRequestBody(createRequestMeter());\r
         MultipartRequestMessage message = builder.build();\r
-        \r
+\r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
         MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-        \r
+\r
         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
         Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
         Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
         out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
         Assert.assertEquals("Wrong meterBody", message.getMultipartRequestBody(), decodeRequestMeter(out));\r
     }\r
-    \r
+\r
     private static MultipartRequestMeter createRequestMeter() {\r
         MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();\r
         builder.setMeterId(1121L);\r
         MultipartRequestMeter meter = builder.build();\r
         return meter;\r
     }\r
-    \r
+\r
     private static MultipartRequestMeter decodeRequestMeter(ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_METER_BODY = 4;\r
         MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();\r
@@ -348,7 +350,7 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestMeter meter = builder.build();\r
         return meter;\r
     }\r
-    \r
+\r
     /**\r
      * @throws Exception\r
      * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
@@ -361,25 +363,25 @@ public class MultipartRequestMessageFactoryTest {
         builder.setFlags(new MultipartRequestFlags(true));\r
         builder.setMultipartRequestBody(createRequestMeterConfig());\r
         MultipartRequestMessage message = builder.build();\r
-        \r
+\r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
         MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-        \r
+\r
         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
         Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
         Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
         out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
         Assert.assertEquals("Wrong meterConfigBody", message.getMultipartRequestBody(), decodeRequestMeterConfig(out));\r
     }\r
-    \r
+\r
     private static MultipartRequestMeterConfig createRequestMeterConfig() {\r
         MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();\r
         builder.setMeterId(1133L);\r
         MultipartRequestMeterConfig meterConfig = builder.build();\r
         return meterConfig;\r
     }\r
-    \r
+\r
     private static MultipartRequestMeterConfig decodeRequestMeterConfig(ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY = 4;\r
         MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();\r
@@ -388,7 +390,7 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestMeterConfig meterConfig = builder.build();\r
         return meterConfig;\r
     }\r
-    \r
+\r
     /**\r
      * @throws Exception\r
      * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
@@ -401,18 +403,18 @@ public class MultipartRequestMessageFactoryTest {
         builder.setFlags(new MultipartRequestFlags(true));\r
         builder.setMultipartRequestBody(createRequestExperimenter());\r
         MultipartRequestMessage message = builder.build();\r
-        \r
+\r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
         MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-        \r
+\r
         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
         Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());\r
         Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
         out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
         Assert.assertEquals("Wrong experimenterBody", message.getMultipartRequestBody(), decodeRequestExperimenter(out));\r
     }\r
-    \r
+\r
     private static MultipartRequestExperimenter createRequestExperimenter() {\r
         MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();\r
         builder.setExperimenter(1133L);\r
@@ -420,7 +422,7 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestExperimenter experimenter = builder.build();\r
         return experimenter;\r
     }\r
-    \r
+\r
     private static MultipartRequestExperimenter decodeRequestExperimenter(ByteBuf output) {\r
         MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();\r
         builder.setExperimenter(output.readUnsignedInt());\r
@@ -428,7 +430,34 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestExperimenter experimenter = builder.build();\r
         return experimenter;\r
     }\r
-    \r
+\r
+    /**\r
+     * @throws Exception\r
+     * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
+     */\r
+    @Test\r
+    public void testMultipartRequestDescMessageFactory() throws Exception {\r
+        MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();\r
+        BufferHelper.setupHeader(builder);\r
+        builder.setType(MultipartType.forValue(0));\r
+        builder.setFlags(new MultipartRequestFlags(true));\r
+        builder.setMultipartRequestBody(createRequestDesc());\r
+        MultipartRequestMessage message = builder.build();\r
+\r
+        ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
+        MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
+        factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
+\r
+        BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
+        Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());\r
+        Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
+    }\r
+\r
+    private MultipartRequestBody createRequestDesc() {\r
+        MultipartRequestDescBuilder builder = new MultipartRequestDescBuilder();\r
+        return builder.build();\r
+    }\r
+\r
     /**\r
      * @throws Exception\r
      * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
@@ -441,24 +470,24 @@ public class MultipartRequestMessageFactoryTest {
         builder.setFlags(new MultipartRequestFlags(true));\r
         builder.setMultipartRequestBody(createRequestTableFeatures());\r
         MultipartRequestMessage message = builder.build();\r
-        \r
+\r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
         MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-        \r
+\r
         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
         Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());\r
         Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
         out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
-        \r
+\r
         MultipartRequestTableFeatures messageTableFeatures = (MultipartRequestTableFeatures) message.getMultipartRequestBody();\r
         Assert.assertEquals("Wrong tableFeaturesBody", messageTableFeatures.getTableFeatures(), decodeRequestTableFeatures(out).getTableFeatures());\r
     }\r
-    \r
+\r
     private static MultipartRequestTableFeatures createRequestTableFeatures() {\r
         MultipartRequestTableFeaturesBuilder builder = new MultipartRequestTableFeaturesBuilder();\r
         List<TableFeatures> tableFeaturesList = new ArrayList<>();\r
-        TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder(); \r
+        TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();\r
         tableFeaturesBuilder.setTableId((short) 8);\r
         tableFeaturesBuilder.setName("AAAABBBBCCCCDDDDEEEEFFFFGGGG");\r
         tableFeaturesBuilder.setMetadataMatch(new BigInteger(new byte[] {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));\r
@@ -471,7 +500,7 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestTableFeatures tableFeaturesRequest = builder.build();\r
         return tableFeaturesRequest;\r
     }\r
-    \r
+\r
     private static MultipartRequestTableFeatures decodeRequestTableFeatures(ByteBuf output) {\r
         final byte PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY = 5;\r
         final byte OFP_MAX_TABLE_NAME_LEN = 32;\r
@@ -498,10 +527,10 @@ public class MultipartRequestMessageFactoryTest {
         MultipartRequestTableFeatures tableFeaturesRequest = builder.build();\r
         return tableFeaturesRequest;\r
     }\r
-    \r
+\r
     private static TableConfig decodeTableConfig(int input) {\r
-        final Boolean _oFPTCDEPRECATEDMASK = (input & (1 << 3)) > 0;        \r
+        final Boolean _oFPTCDEPRECATEDMASK = (input & (1 << 3)) > 0;\r
         return new TableConfig(_oFPTCDEPRECATEDMASK);\r
     }\r
-    \r
+\r
 }\r