Bug-4442 : PacketOut action headers are not implemented or ignored 95/28195/2
authorKamal Rameshan <kramesha@cisco.com>
Fri, 9 Oct 2015 05:44:26 +0000 (22:44 -0700)
committerKamal Rameshan <kramesha@cisco.com>
Thu, 15 Oct 2015 16:42:11 +0000 (16:42 +0000)
Change-Id: I5a31898035e857ef677fc163dc3670cb977e8b4e
Signed-off-by: Kamal Rameshan <kramesha@cisco.com>
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/PacketOutConvertor.java

index 5779c1cf045df3a04769e85aaf90677c571e2bdb..ed64fa58ccc3fa0c5d7105105ac8b8893ea35552 100644 (file)
@@ -307,6 +307,7 @@ public final class ActionConvertor {
                                 version);
                 ConvertorActionToOFJava<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, Action> convertor =
                         OFSessionUtil.getExtensionConvertorProvider().getConverter(key);
+                LOG.trace("OFP Extension action, key:{}, converter:{}", key, convertor);
                 if (convertor != null) {
                     ofAction = convertor.convert(action);
                 }
index 971a89359db4bba2b73263ad8d89783716d03199..d67412703c04b1de53caa4205c4fb0d8ad5d1879 100644 (file)
@@ -47,10 +47,10 @@ public final class PacketOutConvertor {
     public static PacketOutInput toPacketOutInput(final TransmitPacketInput inputPacket, final short version, final Long xid,
                                                   final BigInteger datapathid) {
 
+        LOG.trace("toPacketOutInput for datapathId:{}, xid:{}", datapathid, xid);
         // Build Port ID from TransmitPacketInput.Ingress
         PortNumber inPortNr = null;
         Long bufferId = OFConstants.OFP_NO_BUFFER;
-        List<Action> actions = new ArrayList<>();
         Iterable<PathArgument> inArgs = null;
         PacketOutInputBuilder builder = new PacketOutInputBuilder();
         if (inputPacket.getIngress() != null) {
@@ -78,23 +78,33 @@ public final class PacketOutConvertor {
             new Exception("PORT NR not exist in Egress");
         }
 
-        // TODO VD P! wait for way to move Actions (e.g. augmentation)
-        ActionBuilder aBuild = new ActionBuilder();
+        List<Action> actions = null;
+        List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> inputActions =
+                inputPacket.getAction();
+        if (inputActions != null) {
+            actions = ActionConvertor.getActions(inputActions, version, datapathid, null);
 
-        OutputActionCaseBuilder outputActionCaseBuilder =
-                new OutputActionCaseBuilder();
+        } else {
+            actions = new ArrayList<>();
+            // TODO VD P! wait for way to move Actions (e.g. augmentation)
+            ActionBuilder aBuild = new ActionBuilder();
+
+            OutputActionCaseBuilder outputActionCaseBuilder =
+                    new OutputActionCaseBuilder();
 
-        OutputActionBuilder outputActionBuilder =
-                new OutputActionBuilder();
+            OutputActionBuilder outputActionBuilder =
+                    new OutputActionBuilder();
 
-        outputActionBuilder.setPort(outPort);
-        outputActionBuilder.setMaxLength(OFConstants.OFPCML_NO_BUFFER);
+            outputActionBuilder.setPort(outPort);
+            outputActionBuilder.setMaxLength(OFConstants.OFPCML_NO_BUFFER);
 
-        outputActionCaseBuilder.setOutputAction(outputActionBuilder.build());
+            outputActionCaseBuilder.setOutputAction(outputActionBuilder.build());
 
-        aBuild.setActionChoice(outputActionCaseBuilder.build());
+            aBuild.setActionChoice(outputActionCaseBuilder.build());
+
+            actions.add(aBuild.build());
+        }
 
-        actions.add(aBuild.build());
         builder.setAction(actions);
         builder.setData(inputPacket.getPayload());
         builder.setVersion(version);