BUG-1491: handle SET_TP_SRC/SET_TP_DST actions 71/11371/10
authorTimotej Kubas <tkubas@cisco.com>
Fri, 19 Sep 2014 15:37:36 +0000 (17:37 +0200)
committermichal rehak <mirehak@cisco.com>
Thu, 23 Oct 2014 11:14:52 +0000 (11:14 +0000)
 -  set_tp_src/set_tp_dst action corrected for setting of different protocols
   (UDP,TCP, ICMPv4, ICMPv6)
 - fixed tests

Change-Id: Ia53caaccc57b13d05d9a4ce18e4bf9354e81b69b
Signed-off-by: Timotej Kubas <tkubas@cisco.com>
Signed-off-by: Michal Rehak <mirehak@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/FlowConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/IPProtocols.java [new file with mode: 0644]
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/PacketOutConvertor.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertorTest.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertorV10Test.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertorV13Test.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/PacketOutConvertorTest.java

index 796b3e716430bc502178d9122ca70e4dc196c69c..5f1e2f11103f399da8d35738d700665ab73a7eaf 100644 (file)
@@ -100,12 +100,21 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.pcp.action._case.SetVlanPcpAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.CommonPort;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsTtlAction;
@@ -144,9 +153,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Code;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Type;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Code;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Type;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpDst;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpSrc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpDst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;
@@ -158,7 +173,9 @@ import org.slf4j.LoggerFactory;
 
 import java.math.BigInteger;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author usha@ericsson Action List:This class takes data from SAL layer and
@@ -179,11 +196,12 @@ public final class ActionConvertor {
      * @param actions    SAL actions
      * @param version    Openflow protocol version used
      * @param datapathid
+     * @param flow TODO
      * @return OF Library actions
      */
     public static List<Action> getActions(
             List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actions,
-            short version, BigInteger datapathid) {
+            short version, BigInteger datapathid, Flow flow) {
         List<Action> actionsList = new ArrayList<>();
         Action ofAction;
 
@@ -254,10 +272,14 @@ public final class ActionConvertor {
                 ofAction = SalToOFSetNwSrc(action, actionBuilder, version);
             else if (action instanceof SetNwDstActionCase)
                 ofAction = SalToOFSetNwDst(action, actionBuilder, version);
-            else if (action instanceof SetTpSrcActionCase)
-                ofAction = SalToOFSetTpSrc(action, actionBuilder, version);
-            else if (action instanceof SetTpDstActionCase)
-                ofAction = SalToOFSetTpDst(action, actionBuilder, version);
+            else if (action instanceof SetTpSrcActionCase) {
+                ofAction = SalToOFSetTpSrc(action, actionBuilder, version, IPProtocols.fromProtocolNum(flow.getMatch().
+                        getIpMatch().getIpProtocol()));
+            }
+            else if (action instanceof SetTpDstActionCase) {
+                ofAction = SalToOFSetTpDst(action, actionBuilder, version, IPProtocols.fromProtocolNum(flow.getMatch().
+                        getIpMatch().getIpProtocol()));
+            }
             else if (action instanceof SetNwTosActionCase)
                 ofAction = SalToOFSetNwTos(action, actionBuilder, version);
             else if (action instanceof GeneralExtensionGrouping) {
@@ -633,7 +655,7 @@ public final class ActionConvertor {
 
     private static Action SalToOFSetTpSrc(
             org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
-            ActionBuilder actionBuilder, short version) {
+            ActionBuilder actionBuilder, short version, IPProtocols protocol) {
 
         if (version == OFConstants.OFP_VERSION_1_0) {
             SetTpSrcActionCase settpsrccase = (SetTpSrcActionCase) action;
@@ -654,10 +676,36 @@ public final class ActionConvertor {
             MatchEntriesBuilder matchEntriesBuilder = new MatchEntriesBuilder();
             matchEntriesBuilder.setOxmClass(OpenflowBasicClass.class);
             matchEntriesBuilder.setHasMask(false);
-            matchEntriesBuilder.setOxmMatchField(TcpSrc.class);
             PortMatchEntryBuilder portMatchEntryBuilder = new PortMatchEntryBuilder();
-            portMatchEntryBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(settpsrcaction.getPort().getValue().intValue()));
-            matchEntriesBuilder.addAugmentation(PortMatchEntry.class, portMatchEntryBuilder.build());
+            int port = settpsrcaction.getPort().getValue().intValue();
+            int type = 0x0f & port;
+            
+            switch(protocol) {
+            case ICMP: 
+                matchEntriesBuilder.setOxmMatchField(Icmpv4Type.class);
+                Icmpv4TypeMatchEntryBuilder icmpv4TypeMatchEntryBuilder = new Icmpv4TypeMatchEntryBuilder();
+                icmpv4TypeMatchEntryBuilder.setIcmpv4Type((short) type);
+                matchEntriesBuilder.addAugmentation(Icmpv4TypeMatchEntry.class, icmpv4TypeMatchEntryBuilder.build());
+                break;
+            case ICMPV6: 
+                matchEntriesBuilder.setOxmMatchField(Icmpv6Type.class);
+                Icmpv6TypeMatchEntryBuilder icmpv6TypeMatchEntryBuilder = new Icmpv6TypeMatchEntryBuilder();
+                icmpv6TypeMatchEntryBuilder.setIcmpv6Type((short) type);
+                matchEntriesBuilder.addAugmentation(Icmpv6TypeMatchEntry.class, icmpv6TypeMatchEntryBuilder.build());
+                break;
+            case TCP: 
+                matchEntriesBuilder.setOxmMatchField(TcpSrc.class);
+                portMatchEntryBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(port));
+                matchEntriesBuilder.addAugmentation(PortMatchEntry.class, portMatchEntryBuilder.build());
+                break;
+            case UDP: 
+                matchEntriesBuilder.setOxmMatchField(UdpSrc.class);
+                portMatchEntryBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(port));
+                matchEntriesBuilder.addAugmentation(PortMatchEntry.class, portMatchEntryBuilder.build());
+                break;
+            default: logger.warn("Unknown protocol with combination of SetSourcePort: {}", protocol);
+                break;
+            }
             
             actionBuilder
             .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField.class);
@@ -676,7 +724,7 @@ public final class ActionConvertor {
 
     private static Action SalToOFSetTpDst(
             org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
-            ActionBuilder actionBuilder, short version) {
+            ActionBuilder actionBuilder, short version, IPProtocols protocol) {
 
         if (version == OFConstants.OFP_VERSION_1_0) {
             SetTpDstActionCase settpdstcase = (SetTpDstActionCase) action;
@@ -696,10 +744,36 @@ public final class ActionConvertor {
             MatchEntriesBuilder matchEntriesBuilder = new MatchEntriesBuilder();
             matchEntriesBuilder.setOxmClass(OpenflowBasicClass.class);
             matchEntriesBuilder.setHasMask(false);
-            matchEntriesBuilder.setOxmMatchField(TcpDst.class);
             PortMatchEntryBuilder portMatchEntryBuilder = new PortMatchEntryBuilder();
-            portMatchEntryBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(settpdstaction.getPort().getValue().intValue()));
-            matchEntriesBuilder.addAugmentation(PortMatchEntry.class, portMatchEntryBuilder.build());
+            int port = settpdstaction.getPort().getValue().intValue();
+            int code = 0x0f & port;
+            
+            switch(protocol) {
+            case ICMP: 
+                matchEntriesBuilder.setOxmMatchField(Icmpv4Code.class);
+                Icmpv4CodeMatchEntryBuilder icmpv4CodeMatchEntryBuilder = new Icmpv4CodeMatchEntryBuilder();
+                icmpv4CodeMatchEntryBuilder.setIcmpv4Code((short) code);
+                matchEntriesBuilder.addAugmentation(Icmpv4CodeMatchEntry.class, icmpv4CodeMatchEntryBuilder.build());
+                break;
+            case ICMPV6: 
+                matchEntriesBuilder.setOxmMatchField(Icmpv6Code.class);
+                Icmpv6CodeMatchEntryBuilder icmpv6CodeMatchEntryBuilder = new Icmpv6CodeMatchEntryBuilder();
+                icmpv6CodeMatchEntryBuilder.setIcmpv6Code((short) code);
+                matchEntriesBuilder.addAugmentation(Icmpv6CodeMatchEntry.class, icmpv6CodeMatchEntryBuilder.build());
+                break;
+            case TCP: 
+                matchEntriesBuilder.setOxmMatchField(TcpDst.class);
+                portMatchEntryBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(port));
+                matchEntriesBuilder.addAugmentation(PortMatchEntry.class, portMatchEntryBuilder.build());
+                break;
+            case UDP: 
+                matchEntriesBuilder.setOxmMatchField(UdpDst.class);
+                portMatchEntryBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(port));
+                matchEntriesBuilder.addAugmentation(PortMatchEntry.class, portMatchEntryBuilder.build());
+                break;
+            default: logger.warn("Unknown protocol with combination of SetDestinationPort: {}", protocol);
+                break;
+            }
             
             actionBuilder
             .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField.class);
@@ -1032,7 +1106,6 @@ public final class ActionConvertor {
 
         QueueIdAction queueId = action.getAugmentation(QueueIdAction.class);
         setQueueAction.setQueueId(queueId.getQueueId());
-
         return new SetQueueActionCaseBuilder().setSetQueueAction(setQueueAction.build()).build();
     }
 
@@ -1067,4 +1140,38 @@ public final class ActionConvertor {
         return new PushPbbActionCaseBuilder().setPushPbbAction(pushPbbAction.build()).build();
     }
 
+    //TODO make a model in YANG for protocols 
+    /*private enum IPProtocols {
+        ICMP(1), 
+        TCP(6), 
+        UDP(17), 
+        ICMPV6(58);
+
+        private int protocol;
+        
+        private static Map<Integer, IPProtocols> valueMap;
+        static {
+            valueMap = new HashMap<>();
+            for(IPProtocols protocols : IPProtocols.values()) {
+                valueMap.put(protocols.protocol, protocols);
+            }
+        }
+        
+        private IPProtocols(int value) {
+            this.protocol = value;
+        }
+
+        private byte getValue() {
+            return (byte) this.protocol;
+        }
+        
+        private Short getShortValue() {
+            return new Short((short) protocol);
+        }
+        
+        private IPProtocols fromProtocolNum(Short protocolNum) {
+            return valueMap.get(protocolNum);
+        }
+    }    */
+    
 }
index e2c6ddae20259a34ec343de4596938083e73805a..b6e37717e6f2279d54161ba77b830634dce954d5 100644 (file)
@@ -206,8 +206,8 @@ public class FlowConvertor {
         MatchReactor.getInstance().convert(flow.getMatch(), version, flowMod,datapathid);
 
         if (flow.getInstructions() != null) {
-            flowMod.setInstruction(toInstructions(flow.getInstructions(), version,datapathid));
-            flowMod.setAction(getActions(flow.getInstructions(), version,datapathid));
+            flowMod.setInstruction(toInstructions(flow, version,datapathid));
+            flowMod.setAction(getActions(version,datapathid, flow));
         }
         flowMod.setVersion(version);
         
@@ -215,10 +215,11 @@ public class FlowConvertor {
     }
 
     private static List<Instruction> toInstructions(
-            org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions instructions,
+            Flow flow,
             short version,BigInteger datapathid) {
         List<Instruction> instructionsList = new ArrayList<>();
 
+        org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions instructions = flow.getInstructions();
         for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction instruction : instructions
                 .getInstruction()) {
             InstructionBuilder instructionBuilder = new InstructionBuilder();
@@ -257,7 +258,7 @@ public class FlowConvertor {
                         .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteActions.class);
                 ActionsInstructionBuilder actionsInstructionBuilder = new ActionsInstructionBuilder();
                 actionsInstructionBuilder.setAction(ActionConvertor.getActions(writeActions.getAction(),
-                        version,datapathid));
+                        version,datapathid, flow));
                 instructionBuilder.addAugmentation(ActionsInstruction.class, actionsInstructionBuilder.build());
                 instructionsList.add(instructionBuilder.build());
             }
@@ -269,7 +270,7 @@ public class FlowConvertor {
                         .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ApplyActions.class);
                 ActionsInstructionBuilder actionsInstructionBuilder = new ActionsInstructionBuilder();
                 actionsInstructionBuilder.setAction(ActionConvertor.getActions(applyActions.getAction(),
-                        version,datapathid));
+                        version,datapathid, flow));
                 instructionBuilder.addAugmentation(ActionsInstruction.class, actionsInstructionBuilder.build());
                 instructionsList.add(instructionBuilder.build());
             }
@@ -297,10 +298,12 @@ public class FlowConvertor {
         return instructionsList;
     }
     
-    private static List<Action> getActions(
+    /*private static List<Action> getActions(
             org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions instructions,
-            short version,BigInteger datapathid) {
-
+            short version,BigInteger datapathid) {*/
+    private static List<Action> getActions(short version,BigInteger datapathid, Flow flow) {
+        
+        org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions instructions = flow.getInstructions();
         List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction> sortedInstructions =
             Ordering.from(OrderComparator.<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction>toInstance())
                 .sortedCopy(instructions.getInstruction());
@@ -312,7 +315,7 @@ public class FlowConvertor {
             if (curInstruction instanceof ApplyActionsCase) {
                 ApplyActionsCase applyActionscase = (ApplyActionsCase) curInstruction;
                 ApplyActions applyActions = applyActionscase.getApplyActions();
-                return ActionConvertor.getActions(applyActions.getAction(), version,datapathid);
+                return ActionConvertor.getActions(applyActions.getAction(), version,datapathid, flow);
             }
         }
         return null;
index 5647d16e4f8f28bb47347197ea5e22cf5d371c03..26842fbcab864ac31e92eea4bce9bdc1bfa41816 100644 (file)
@@ -139,7 +139,7 @@ public final class GroupConvertor {
                 bucketBuilder.setWatchPort(new PortNumber(BinContent.intToUnsignedLong(DEFAULT_WATCH_PORT.intValue())));
             }
 
-            List<Action> bucketActionList = ActionConvertor.getActions(groupBucket.getAction(), version,datapathid);
+            List<Action> bucketActionList = ActionConvertor.getActions(groupBucket.getAction(), version,datapathid, null);
             bucketBuilder.setAction(bucketActionList);
             BucketsList bucket = bucketBuilder.build();
             bucketLists.add(bucket);
diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/IPProtocols.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/IPProtocols.java
new file mode 100644 (file)
index 0000000..a9b1365
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author tkubas
+ *
+ */
+
+//TODO make a model in YANG for protocols 
+public enum IPProtocols {
+    ICMP((short) 1), 
+    TCP((short) 6), 
+    UDP((short) 17), 
+    ICMPV6((short) 58);
+
+    private short protocol;
+    
+    private static Map<Short, IPProtocols> valueMap;
+    static {
+        valueMap = new HashMap<>();
+        for(IPProtocols protocols : IPProtocols.values()) {
+            valueMap.put(protocols.protocol, protocols);
+        }
+    }
+    
+    private IPProtocols(short value) {
+        this.protocol = value;
+    }
+
+    private byte getValue() {
+        return (byte) this.protocol;
+    }
+    
+    public static IPProtocols fromProtocolNum(Short protocolNum) {
+        return valueMap.get(protocolNum);
+    }
+}
index 33a501f2f97876bedfefab3f4c1de3a29fff2cef..2eeb584f33a95e0bff6d2cee7e1089a3bfbfc468 100644 (file)
@@ -97,7 +97,7 @@ public class PacketOutConvertor {
             actions.add(aBuild.build());
             builder.setAction(actions);
         } else {
-            builder.setAction(ActionConvertor.getActions(inputPacket.getAction(), version, datapathid));
+            builder.setAction(ActionConvertor.getActions(inputPacket.getAction(), version, datapathid, null));
         }
 
         builder.setData(inputPacket.getPayload());
index e6d81db25afc27e32984e0ff0538f430e46abbe9..c9d4f09690e6e3330e22d05ed581a0dcc20ca65d 100644 (file)
@@ -128,7 +128,7 @@ public class ActionConvertorTest {
         setFieldData();
         setExperimenterData();
         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731
-        .actions.grouping.Action> OFActionsList = ActionConvertor.getActions(actions, (short) 0X4, BigInteger.ONE);
+        .actions.grouping.Action> OFActionsList = ActionConvertor.getActions(actions, (short) 0X4, BigInteger.ONE, null);
 
        // OutputActions(OFActionsList);
 
index da9c3c86ac41d2dcd439d1ca7285b3b90ae7301b..38d698a9e497cb9ac1b67a93bc20f06c24b714d3 100644 (file)
@@ -18,6 +18,7 @@ import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;\r
 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;\r
 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpVersion;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
@@ -45,8 +46,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressAction;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthActionBuilder;\r
@@ -153,8 +157,11 @@ public class ActionConvertorV10Test {
         actionBuilder.setOrder(9);\r
         salActions.add(actionBuilder.build());\r
         \r
+        IpMatchBuilder ipMatchBld = new IpMatchBuilder().setIpProto(IpVersion.Ipv4);\r
+        MatchBuilder matchBld = new MatchBuilder().setIpMatch(ipMatchBld.build());\r
+        FlowBuilder flowBld = new FlowBuilder().setMatch(matchBld.build());\r
         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping\r
-        .Action> actions = ActionConvertor.getActions(salActions, EncodeConstants.OF10_VERSION_ID, new BigInteger("42"));\r
+        .Action> actions = ActionConvertor.getActions(salActions, EncodeConstants.OF10_VERSION_ID, new BigInteger("42"), flowBld.build());\r
         \r
         Assert.assertEquals("Wrong number of actions", 10, actions.size());\r
         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping\r
index ed60aeba4bcb30935be7ac7d2f771376d32ff093..ed31683ccbcef3f17ea1f49d4637ae9ee4f2bc01 100644 (file)
@@ -53,8 +53,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.strip.vlan.action._case.StripVlanActionBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv6Builder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntry;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeActionBuilder;\r
@@ -425,8 +428,11 @@ public class ActionConvertorV13Test {
         actionBuilder.setOrder(11);\r
         salActions.add(actionBuilder.build());\r
         \r
+        IpMatchBuilder ipMatchBld = new IpMatchBuilder().setIpProtocol((short) 6);\r
+        MatchBuilder matchBld = new MatchBuilder().setIpMatch(ipMatchBld.build());\r
+        FlowBuilder flowBld = new FlowBuilder().setMatch(matchBld.build());\r
         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping\r
-        .Action> actions = ActionConvertor.getActions(salActions, EncodeConstants.OF13_VERSION_ID, new BigInteger("42"));\r
+        .Action> actions = ActionConvertor.getActions(salActions, EncodeConstants.OF13_VERSION_ID, new BigInteger("42"), flowBld.build());\r
         \r
         Assert.assertEquals("Wrong number of actions", 12, actions.size());\r
         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping\r
index 418e4ae26c6f9d37268e0a4accbaca4207e67461..be3dd90b53c093bcdbe8b18fedd2fdbddc428d2c 100644 (file)
@@ -175,7 +175,7 @@ public class PacketOutConvertorTest{
                 Short.valueOf(message.getVersion()));\r
         Assert.assertEquals(xid, message.getXid());\r
         Assert.assertEquals(\r
-                ActionConvertor.getActions(actionList, version, datapathId),\r
+                ActionConvertor.getActions(actionList, version, datapathId, null),\r
                 message.getAction());\r
         Assert.assertEquals(transmitPacketInput.getPayload(), message.getData());\r
     }\r