Updated flow capable models and affected code 87/2187/3
authorTony Tkacik <ttkacik@cisco.com>
Mon, 28 Oct 2013 13:18:11 +0000 (14:18 +0100)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 28 Oct 2013 23:54:53 +0000 (23:54 +0000)
Flow Model modified to support instruction.
Match type modified. SAL Compatibility is causing compilation problems.
Table features added. Depends on Flow instructions.

Signed-off-by: Prasanna Huddar <prasanna.huddar@ericsson.com>
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
Change-Id: I9662d877ea5f2bc173e2377177f7e62f55c4904a

13 files changed:
opendaylight/md-sal/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FlowConfigMapping.xtend
opendaylight/md-sal/model/model-flow-base/src/main/yang/flow-types.yang
opendaylight/md-sal/model/model-flow-base/src/main/yang/match-types.yang
opendaylight/md-sal/model/model-flow-base/src/main/yang/table-types.yang [new file with mode: 0644]
opendaylight/md-sal/model/model-flow-management/src/main/yang/flow-config.yang
opendaylight/md-sal/model/model-flow-management/src/main/yang/table-config.yang [new file with mode: 0644]
opendaylight/md-sal/model/model-flow-service/src/main/yang/flow-service.yang
opendaylight/md-sal/model/model-flow-service/src/main/yang/table-service.yang [new file with mode: 0644]
opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/FromSalConversionsUtils.java
opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/MDFlowMapping.xtend
opendaylight/md-sal/sal-compability/src/main/java/org/opendaylight/controller/sal/compability/ToSalConversionsUtils.java
opendaylight/md-sal/sal-compability/src/test/java/org/opendaylight/controller/sal/compability/TestFromSalConversionsUtils.java
opendaylight/md-sal/sal-compability/src/test/java/org/opendaylight/controller/sal/compability/TestToSalConversionsUtils.java

index 602b626452b66be4678a727112515f58c59e1070..c567dc00973e6ac50f69e8c1bcccda23dfc4f586 100644 (file)
@@ -16,16 +16,15 @@ import org.opendaylight.yangtools.yang.binding.Identifiable
 class FlowConfigMapping {
 
     static def toConfigurationFlow(FlowConfig sourceCfg) {
-        val it = new FlowBuilder();
         val source = flowAdded(sourceCfg.flow);
-
-        action = source.action;
+        val it = new FlowBuilder();
+        instructions = source.instructions;
         cookie = source.cookie;
         hardTimeout = source.hardTimeout
         idleTimeout = source.idleTimeout
         match = source.match
         node = source.node
-        key = new FlowKey(sourceCfg.name, node)
+        key = new FlowKey(sourceCfg.name,node);
         return it.build();
     }
 
index 9688e75c625497638898f21b108651b3d2e882ab..5382daf45431b30feb0ed9e2a1c296384c59fe8a 100644 (file)
@@ -7,7 +7,7 @@ module opendaylight-flow-types {
     import ietf-yang-types {prefix yang;}
     import opendaylight-l2-types {prefix l2t;}
 
-    revision "2013-08-19" {
+    revision "2013-10-26" {
         description "Initial revision of flow service";
     }
     
@@ -16,6 +16,17 @@ module opendaylight-flow-types {
            type int32;    
     }
     
+    
+    grouping action-list {
+        list action {
+            key "order";
+            leaf order {
+                type int32;
+            }
+            uses action;
+        }
+    }
+    
     grouping address {
         choice address {
             case ipv4 {
@@ -31,12 +42,66 @@ module opendaylight-flow-types {
         }
     }    
 
+    grouping instruction-list {
+            list instruction {
+                key "order";
+                leaf order {
+                    type int32;
+                }
+                uses instruction;
+            }
+    }
+
+    grouping instruction {
+        choice instruction {
+            case go-to-table {
+                leaf table_id {
+                    type uint8;
+                }
+            }
+            
+            case write-metadata {
+                leaf metadata {
+                    type uint64;
+                }
+                
+                leaf metadata-mask {
+                    type uint64;
+                }
+            }
+            
+            case write-actions {
+                uses action-list;
+            }
+            
+            case apply-actions {
+                uses action-list;
+            }
+            
+            case clear-actions {
+                uses action-list;
+            }
+            
+            case meter {
+                leaf meter {
+                    type string;
+                }
+            }   
+        }
+    }
+    
     grouping action {
         choice action {
             case output-action {
                 leaf-list output-node-connector {
                     type inet:uri;
                 }
+                
+                leaf max-length {
+                    type uint16 {
+                        range "0..65294";
+                    }
+                }                
             }
 
             case controller-action {
@@ -49,13 +114,13 @@ module opendaylight-flow-types {
 
             case set-queue-action {
                 leaf queue {
-                    type string; // TODO: define queues
+                    type string; 
                 }
             }
 
             case pop-mpls-action {
                 leaf ethernet-type {
-                        type uint16; // TODO: define ethertype type
+                    type uint16; // TODO: define ethertype type
                 }
             }
 
@@ -72,13 +137,27 @@ module opendaylight-flow-types {
             }
 
             case push-pbb-action {
-
+                leaf ethernet-type {
+                    type uint16; // TODO: define ethertype type
+                }
             }
 
+            case pop-pbb-action {
+                
+            }
+            
             case push-mpls-action {
-
+                leaf ethernet-type {
+                    type uint16; // TODO: define ethertype type
+                }
             }
-
+            
+            case dec-mpls-ttl {
+            }
+            
+            case dec-nw-ttl {
+            }
+            
             case drop-action {
             }
             
@@ -115,6 +194,13 @@ module opendaylight-flow-types {
 //                leaf header {            //header = [TPID + TCI] 
 //                }
             }
+            
+            case copy-ttl-out {
+            }
+            
+            case copy-ttl-in {
+            }
+            
             case set-dl-dst-action {
                 leaf address {
                     type yang:mac-address;
@@ -126,20 +212,30 @@ module opendaylight-flow-types {
                     type yang:mac-address;
                 }
             }
+            case group-action {
+                leaf group {
+                    type string;
+                }
+            }
+            
             case set-dl-type-action {
                 leaf dl-type {
                     type l2t:ether-type;
                 }
             }
+            
             case set-next-hop-action {
                 uses address;
             }
+            
             case set-nw-dst-action {
                 uses address;            
             }
+            
             case set-nw-src-action{
                 uses address;            
             }
+            
             case set-nw-tos-action {
                 leaf tos {
                     type int32;
@@ -161,20 +257,21 @@ module opendaylight-flow-types {
                     type vlan-cfi;
                 }
             }
+            
             case set-vlan-id-action {
                 leaf vlan-id {
                     type l2t:vlan-id;
                 } 
             }
+            
             case set-vlan-pcp-action {
                 leaf vlan-pcp {
                     type l2t:vlan-pcp;
                 }            
             }
-            case sw-path-action {            
-            }
-            
             
+            case sw-path-action {            
+            }  
         }
     }
 
@@ -191,13 +288,11 @@ module opendaylight-flow-types {
         container match {
             uses match:match;
         }
-        list action {
-            key "order";
-            leaf order {
-                type int32;
-            }
-            uses action;
+        
+        container instructions {
+            uses instruction-list;
         }
+                
         leaf priority {
             type uint16;
         }
@@ -223,7 +318,7 @@ module opendaylight-flow-types {
         }
         
         leaf table_id {
-            type uint64;
+            type uint8;
         }
         
         leaf buffer_id {
index 757686c662ab747baced122af0d5218a170f061a..bee439ac021475c536d943f9b4fc627e800d2d52 100644 (file)
@@ -6,8 +6,8 @@ module opendaylight-match-types {
     import ietf-yang-types {prefix yang;}
     import opendaylight-l2-types {prefix l2t;}
 
-    revision "2013-08-19" {
-        description "Initial revision of flow service";
+    revision "2013-10-26" {
+        description "Initial revision of macth types";
     }
 
     grouping "mac-address-filter" {
@@ -75,10 +75,16 @@ module opendaylight-match-types {
             description "IP DSCP (6 bits in ToS field).";
             type inet:dscp; 
         }
+        
         leaf ip-ecn {
             description "IP ECN (2 bits in ToS field).";
             type uint8; 
         }
+        
+        leaf ip-proto {
+            description "IP Proto (IPv4 or IPv6 Protocol Number).";
+            type inet:ip-version; 
+        }
     }
 
     grouping "ipv4-match-fields" {
@@ -97,10 +103,35 @@ module opendaylight-match-types {
             description "IPv6 source address.";
             type inet:ipv6-prefix;
         }
+        
         leaf ipv6-destination {
             description "IPv6 destination address.";
             type inet:ipv6-prefix;
         }
+        
+        leaf ipv6-nd-target {
+            description "IPv6 target address for neighbour discovery message";
+            type inet:ipv6-prefix;
+        }
+        
+        leaf ipv6-flabel {
+            type inet:ipv6-flow-label;
+        }
+        
+        leaf ipv6-nd-sll {
+            description "Link layer source address for neighbour discovery message";
+            type yang:mac-address;
+        }
+        
+        leaf ipv6-nd-tll {
+            description "Link layer target address for neighbour discovery message";
+            type yang:mac-address;
+        }
+            
+        leaf ipv6-exthdr {
+            description "IPv6 Extension Header field";
+            type uint16;
+        }
     }
 
     grouping "udp-match-fields" {
@@ -114,6 +145,29 @@ module opendaylight-match-types {
         }
     }
 
+    grouping "protocol-match-fields" {
+        leaf mpls-label {
+            description "Label in the first MPLS shim header";
+            type uint32;
+        }
+        
+        leaf mpls-tc {
+            description "TC in the first MPLS shim header";
+            type uint8;
+        }
+        
+        leaf mpls-bos {
+            description "BoS bit in the first MPLS shim header";
+            type uint8;
+        }
+        
+        leaf pbb-isid {
+            description "I-SID in the first PBB service instance tag";
+            type uint32;
+        }   
+        
+    }
+    
     grouping "tcp-match-fields" {
         leaf tcp-source-port {
             description "TCP source port.";
@@ -146,8 +200,23 @@ module opendaylight-match-types {
             type uint8; // Define ICMP Code
         }
     }
+    
+    grouping "icmpv6-match-fields" {
+        leaf icmpv6-type {
+        description "ICMP type.";
+            type uint8; // Define ICMP Type
+        }
+        description "ICMP code.";
+        leaf icmpv6-code {
+            type uint8; // Define ICMP Code
+        }
+    }
 
     grouping "arp-match-fields" {
+        leaf arp-op {
+            type uint16;
+        }
+        
         leaf arp-source-transport-address {
             description "ARP source IPv4 address.";
             type inet:ipv4-prefix;
@@ -160,79 +229,41 @@ module opendaylight-match-types {
         container arp-source-hardware-address {
             description "ARP source hardware address.";
             presence "Match field is active and set";
-        uses mac-address-filter;
+            uses mac-address-filter;
         }
         container arp-target-hardware-address {
             description "ARP target hardware address.";
             presence "Match field is active and set";
-        uses mac-address-filter;
-        }
-    }
-
-    grouping action {
-        choice action {
-            case output-action {
-                leaf-list output-node-connector {
-                    type string;
-                }
-            }
-
-            case controller-action {
-                leaf max-length {
-                    type uint16 {
-                        range "0..65294";
-                    }
-                }
-            }
-
-            case set-queue-action {
-                leaf queue {
-                    type string; // TODO: define queues
-                }
-            }
-
-            case pop-mpls-action {
-                container pop-mpls {
-                    leaf ethernet-type {
-                        type uint16; // TODO: define ethertype type
-                    }
-                }
-            }
-
-            case set-mpls-ttl-action {
-                leaf mpls-ttl {
-                    type uint8;
-                }
-            }
-
-            case set-nw-ttl-action {
-                leaf nw-ttl {
-                    type uint8;
-                }
-            }
-
-            case push-pbb-action {
-
-            }
-
-            case push-mpls-action {
-
-            }
-
-            case push-vlan-action {
-
-            }
+            uses mac-address-filter;
         }
     }
-
-
+    
     grouping match {
+        leaf in-port {
+            type uint32;
+        }
+        
+        leaf in-phy-port {
+            type uint32;
+        }
+        
+        leaf metadata {
+            type uint64;
+        }
+        
+        leaf tunnel-id {
+            description "Metadata associated in the logical port";
+            type uint64;
+        }
+        
         container "ethernet-match" {
             uses "ethernet-match-fields";
         }
+        
         container "vlan-match" {
             uses "vlan-match-fields";
         }
+        
         container "ip-match" {
             uses "ip-match-fields";
         }
@@ -260,8 +291,17 @@ module opendaylight-match-types {
                 uses "sctp-match-fields";
             }
         }
+        
         container "icmpv4-match" {
             uses "icmpv4-match-fields";
         }
+        
+        container "icmpv6-match" {
+            uses "icmpv6-match-fields";
+        }
+        
+        container "protocol-match-fields" {
+            uses "protocol-match-fields";
+        }
     }
 }
\ No newline at end of file
diff --git a/opendaylight/md-sal/model/model-flow-base/src/main/yang/table-types.yang b/opendaylight/md-sal/model/model-flow-base/src/main/yang/table-types.yang
new file mode 100644 (file)
index 0000000..0b77d75
--- /dev/null
@@ -0,0 +1,181 @@
+module opendaylight-table-types {
+    namespace "urn:opendaylight:table:types";
+    prefix table;
+
+    import ietf-inet-types {prefix inet;}
+    import ietf-yang-types {prefix yang;}
+    import opendaylight-flow-types {prefix flow;}
+
+
+    revision "2013-10-26" {
+        description "Initial revision of table service";
+    }
+
+    typedef table-ref {
+        type instance-identifier;
+    }
+    
+    typedef table-config {
+        type bits {
+            bit DEPRECATED-MASK;
+        }
+    }  
+      
+    grouping table-feature-prop-type {
+        choice table-feature-prop-type {
+            case instructions { 
+                container instructions {
+                    uses flow:instruction-list;
+                } 
+            }
+            
+            case instructions-miss {   
+                container instructions-miss {
+                    uses flow:instruction-list;
+                } 
+            }
+
+            case next-table {   
+                container tables {
+                    list table-id {
+                        key "table";                        
+                        
+                        leaf table-id {
+                            type table-ref;
+                        } 
+                    }
+                } 
+            }
+            
+            case next-table-miss {   
+                container tables {
+                    list table-id {
+                        key "table-id";                        
+                        
+                        leaf table-id {
+                            type table-ref;
+                        } 
+                    }
+                } 
+            }
+            
+            case write-actions {   
+                container write-actions {
+                    uses flow:action-list;
+                } 
+            }
+            
+            case write-actions-miss {   
+                container write-actions-miss {
+                    uses flow:action-list;
+                } 
+            }
+            
+            case apply-actions {   
+                container apply-actions {
+                    uses flow:action-list;
+                } 
+            }
+            
+            case apply-actions-miss {   
+                container apply-actions-miss {
+                    uses flow:action-list;
+                } 
+            }
+            
+            case match {   
+                container matches {
+                    leaf-list match {                                              
+                        type uint32;
+                    }
+                } 
+            }
+            
+            case wildcards {   
+                container wildcards {
+                    leaf-list wildcard {                                              
+                        type uint32;
+                    }
+                } 
+            }
+            
+            case write-setfield {   
+                container write-setfield {
+                    leaf-list setfield {                                              
+                        type uint32;
+                    }
+                } 
+            }
+            
+            case write-setfield-miss {   
+                container write-setfield-miss {
+                    leaf-list setfield {                                              
+                        type uint32;
+                    }
+                } 
+            }
+            
+            case apply-setfield {   
+                container apply-setfield {
+                    leaf-list setfield {                                              
+                        type uint32;
+                    }
+                } 
+            }
+            
+            case apply-setfield-miss {   
+                container apply-setfield-miss {
+                    leaf-list setfield {                                              
+                        type uint32;
+                    }
+                } 
+            }
+        }
+    } 
+    
+    grouping table-features {
+        list table-features {
+            key "table-id";
+            
+            leaf table-id {
+                type table-ref;
+            }      
+            
+            leaf name {
+                description "Name of the table";
+                type string;               
+            }
+            
+            leaf metadata-match {
+                description "Bits of metadata table can match";
+                type uint64;                
+            }
+            
+            leaf metadata-write {
+                description "Bits of metadata table can write";
+                type uint64;                
+            }
+            
+            leaf max-entries {
+                description "Max number of entries supported";
+                type uint32;                
+            }
+            
+            leaf config {
+                description "Bitmap of OFPTC_ values";
+                type table-config;
+            }
+            
+            container table-properties {
+                list instruction-id {
+                    key "order";
+                    leaf order {
+                        type int32;
+                    }
+                    
+                    uses table-feature-prop-type;
+                }
+            }
+        }
+    }    
+}
\ No newline at end of file
index 5e6b59a0189d1735e3d926dccc681be0dc0dc032..aa0409551fc1da73483316a7958a8b72240a3023 100644 (file)
@@ -20,8 +20,8 @@ module flow-management {
 
     container flows {
         list flow {
-            key "id node";
-            
+            key "node id"; 
+
             leaf id {
                 type string;
             }
diff --git a/opendaylight/md-sal/model/model-flow-management/src/main/yang/table-config.yang b/opendaylight/md-sal/model/model-flow-management/src/main/yang/table-config.yang
new file mode 100644 (file)
index 0000000..003f152
--- /dev/null
@@ -0,0 +1,32 @@
+module table-management {
+    namespace "urn:opendaylight:table:config";
+    prefix table-cfg;
+    
+    import opendaylight-inventory {prefix inv;}
+    import opendaylight-table-types {prefix table;}
+
+    revision "2013-10-24" {
+        description "Initial revision of table service";
+    }
+
+    grouping table-entry {
+    
+        leaf node {
+            type inv:node-ref;
+        }
+        
+        uses table:table-features;
+    }   
+     
+    container tables {
+        list table {
+            key "id node"; 
+                        
+            leaf id {
+                type string;
+            }                    
+            
+            uses table-entry;
+        }
+    }    
+}
\ No newline at end of file
index 147b64689e8d879cf2f998c6be0ba1ee62ce28a6..19f56db30e039f20edb3f55aff7fdc30ac2f2084 100644 (file)
@@ -71,16 +71,4 @@ module sal-flow {
     notification flow-removed {
         uses node-flow;
     }
-
-    augment "/inv:nodes/inv:node" {
-        ext:augment-identifier "flow-capable-node";
-        container flow-tables {
-            list table {
-                key "id";
-                leaf "id" {
-                    type inet:uri;
-                }
-            }
-        }
-    }
 }
\ No newline at end of file
diff --git a/opendaylight/md-sal/model/model-flow-service/src/main/yang/table-service.yang b/opendaylight/md-sal/model/model-flow-service/src/main/yang/table-service.yang
new file mode 100644 (file)
index 0000000..1e46b3f
--- /dev/null
@@ -0,0 +1,32 @@
+module sal-table {
+    namespace "urn:opendaylight:table:service";
+    prefix table;
+
+    import yang-ext {prefix ext;}
+    import opendaylight-inventory {prefix inv;}    
+    import opendaylight-table-types {prefix table-type;}
+
+    revision "2013-10-26" {
+        description "Initial revision of table service";
+    }        
+    
+    /** Base configuration structure **/
+    grouping table-update {
+        container original-table {
+            uses table-type:table-features;
+        }
+        container updated-table {
+            uses table-type:table-features;
+        }
+    }
+    
+    rpc update-table {
+        input {
+            leaf node {
+                ext:context-reference "inv:node-context";
+                type inv:node-ref;
+            }
+            uses table-update;
+        }
+    }     
+}
\ No newline at end of file
index 0bbe15dce985382500a708fcae0cd573dea01b17..6503a3031e96461e89240d637d6f90e7c768a5d0 100644 (file)
@@ -12,58 +12,50 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import org.opendaylight.controller.sal.action.*;
 import org.opendaylight.controller.sal.core.NodeConnector;
-import org.opendaylight.controller.sal.core.Node;
 
 
-import org.opendaylight.controller.sal.flowprogrammer.Flow;
+
 import org.opendaylight.controller.sal.match.Match;
 import org.opendaylight.controller.sal.match.MatchField;
 import org.opendaylight.controller.sal.match.MatchType;
 import org.opendaylight.controller.sal.utils.NetUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.*;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAdded;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAddedBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder;
+
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.*;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.VlanCfi;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.*;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.Address;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv4Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv6Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv4Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv6Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpSourceHardwareAddressBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpTargetHardwareAddressBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.ethernet.match.fields.EthernetDestinationBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.ethernet.match.fields.EthernetSourceBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.ethernet.match.fields.EthernetTypeBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.*;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.ArpMatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv4MatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv6MatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.SctpMatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.TcpMatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.UdpMatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.vlan.match.fields.VlanIdBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.*;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
 
 import com.google.common.net.InetAddresses;
 
 
 
 
+
+
+
+
 import static org.opendaylight.controller.sal.compability.ProtocolConstants.*;
 import static org.opendaylight.controller.sal.compability.NodeMapping.*;
 
@@ -100,10 +92,10 @@ public class FromSalConversionsUtils {
         return null;
     }
 
-    public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Match toMatch(
+    public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match toMatch(
             Match sourceMatch) {
         if (sourceMatch != null) {
-            org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.MatchBuilder targetBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.MatchBuilder();
+            MatchBuilder targetBuilder = new MatchBuilder();
 
             targetBuilder.setEthernetMatch(ethernetMatch(sourceMatch));
             targetBuilder.setIpMatch(ipMatch(sourceMatch));
index ac4d99f10fcd9f3d34e4a1caabdcfca202b0c5ef..be9ec83f3709e84cf41cae9ea07c99b369755794 100644 (file)
@@ -41,34 +41,34 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.Flow
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsInputBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.VlanCfi
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.ControllerActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.DropActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.FloodActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.FloodAllActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.HwPathActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.LoopbackActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.OutputActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.PopVlanActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.PushVlanActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetDlDstActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetDlSrcActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetDlTypeActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNextHopActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNwDstActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNwSrcActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNwTosActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetTpDstActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetTpSrcActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetVlanCfiActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetVlanIdActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetVlanPcpActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SwPathActionBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.Address
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv4Builder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv6Builder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.ActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.VlanCfi
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.ControllerActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.DropActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.FloodActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.FloodAllActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.HwPathActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.LoopbackActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.OutputActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.PopVlanActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.PushVlanActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetDlDstActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetDlSrcActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetDlTypeActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetNextHopActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetNwDstActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetNwSrcActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetNwTosActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetTpDstActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetTpSrcActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetVlanCfiActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetVlanIdActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetVlanPcpActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SwPathActionBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.Address
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv4Builder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv6Builder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.list.Action
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.list.ActionBuilder
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp
@@ -77,6 +77,12 @@ import static extension org.opendaylight.controller.sal.compability.FromSalConve
 import static extension org.opendaylight.controller.sal.compability.NodeMapping.*
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlowBuilder
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder
+import java.util.Collections
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder
 
 public class MDFlowMapping {
 
@@ -99,70 +105,46 @@ public class MDFlowMapping {
         for (sourceAction : sourceActions) {
             targetActions.add(sourceAction.toAction());
         }
-        action = targetActions;
+        instructions = targetActions.toApplyInstruction();
         match = sourceFlow.match.toMatch();
         return it.build();
 
     }
+    
+    public static def Instructions toApplyInstruction(ArrayList<Action> actions) {
+        val it = new InstructionsBuilder;
+        val applyActions = new InstructionBuilder;
+        applyActions.instruction = new ApplyActionsBuilder().setAction(actions).build()
+        instruction = Collections.<Instruction>singletonList(applyActions.build)
+        return it.build;
+    }
 
     public static def flowStatisticsInput(Node sourceNode, Flow sourceFlow) {
-        val it = new GetFlowStatisticsInputBuilder();
         val source = flowAdded(sourceFlow);
-        action = (source.getAction());
-        cookie = (source.getCookie());
-        hardTimeout = (source.getHardTimeout());
-        match = (source.getMatch());
-        priority = (source.getPriority());
+        val it = new GetFlowStatisticsInputBuilder(source);
         node = sourceNode.toNodeRef();
         return it.build();
     }
 
     public static def removeFlowInput(Node sourceNode, Flow sourceFlow) {
-        val it = new RemoveFlowInputBuilder();
         val source = flowAdded(sourceFlow);
-        action = (source.getAction());
-        cookie = (source.getCookie());
-        hardTimeout = (source.getHardTimeout());
-        match = (source.getMatch());
-        priority = (source.getPriority());
-        node = sourceNode.toNodeRef();
+        val it = new RemoveFlowInputBuilder(source);
         return it.build();
     }
 
     public static def addFlowInput(Node sourceNode, Flow sourceFlow) {
-        val it = new AddFlowInputBuilder();
         val source = flowAdded(sourceFlow);
-        action = (source.getAction());
-        cookie = (source.getCookie());
-        hardTimeout = (source.getHardTimeout());
-        match = (source.getMatch());
-        priority = (source.getPriority());
-        node = sourceNode.toNodeRef()
+        val it = new AddFlowInputBuilder(source);
         return it.build();
     }
 
     public static def updateFlowInput(Node sourceNode, Flow oldFlow, Flow newFlow) {
         val it = new UpdateFlowInputBuilder();
-
-        val original = new OriginalFlowBuilder();
-
         val sourceOld = flowAdded(newFlow);
 
-        original.action = (sourceOld.getAction());
-        original.cookie = (sourceOld.getCookie());
-        original.hardTimeout = (sourceOld.getHardTimeout());
-        original.match = (sourceOld.getMatch());
-        original.priority = (sourceOld.getPriority());
-
-        val updated = new UpdatedFlowBuilder();
+        val original = new OriginalFlowBuilder(sourceOld);
         val sourceNew = flowAdded(newFlow);
-
-        updated.action = (sourceNew.getAction());
-        updated.cookie = (sourceNew.getCookie());
-        updated.hardTimeout = (sourceNew.getHardTimeout());
-        updated.match = (sourceNew.getMatch());
-        updated.priority = (sourceNew.getPriority());
-
+        val updated = new UpdatedFlowBuilder(sourceNew);
         originalFlow = original.build()
         updatedFlow = updated.build();
         node = sourceNode.toNodeRef()
index 45884bb10f6d62701f2175492ef0026d47d0a8ec..702bd31aeb72651edfb1619531f41980c3158d1c 100644 (file)
@@ -18,6 +18,7 @@ import static org.opendaylight.controller.sal.match.MatchType.TP_SRC;
 
 import java.net.InetAddress;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.opendaylight.controller.sal.action.*;
@@ -26,27 +27,28 @@ import org.opendaylight.controller.sal.flowprogrammer.Flow;
 import org.opendaylight.controller.sal.match.Match;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.*;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeFlow;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.VlanCfi;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.*;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.Address;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv4;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv6;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.ActionList;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.VlanCfi;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.*;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv4;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv6;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.list.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.MacAddressFilter;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpSourceHardwareAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpTargetHardwareAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.ethernet.match.fields.EthernetType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.*;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.ArpMatch;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv4Match;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv6Match;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.SctpMatch;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.TcpMatch;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.UdpMatch;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.vlan.match.fields.VlanId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.MacAddressFilter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.*;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanId;
 
 import com.google.common.net.InetAddresses;
 
@@ -56,7 +58,7 @@ public class ToSalConversionsUtils {
 
     }
 
-    public static Flow toFlow(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.Flow source) {
+    public static Flow toFlow(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow source) {
         final Flow target = new Flow();
 
         Integer hardTimeout = source.getHardTimeout();
@@ -76,7 +78,7 @@ public class ToSalConversionsUtils {
 
         target.setMatch(toMatch(source.getMatch()));
 
-        List<Action> actions = source.getAction();
+        List<Action> actions = getAction(source);
         if (actions != null) {
             target.setActions(actionFrom(actions));
         }
@@ -85,10 +87,23 @@ public class ToSalConversionsUtils {
         return target;
     }
 
+    public static List<Action> getAction(
+            org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow source) {
+        if (source.getInstructions() != null) {
+            for (Instruction instruction : source.getInstructions().getInstruction()) {
+                if (instruction.getInstruction() instanceof ActionList) {
+                    return (((ActionList) instruction.getInstruction()).getAction());
+                }
+            }
+        }
+        // TODO Auto-generated method stub
+        return Collections.emptyList();
+    }
+
     public static List<org.opendaylight.controller.sal.action.Action> actionFrom(List<Action> actions) {
         List<org.opendaylight.controller.sal.action.Action> targetAction = new ArrayList<>();
         for (Action action : actions) {
-            org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.Action sourceAction = action
+            org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.Action sourceAction = action
                     .getAction();
 
             if (sourceAction instanceof ControllerAction) {
@@ -136,13 +151,13 @@ public class ToSalConversionsUtils {
             } else if (sourceAction instanceof SetDlDstAction) {
                 MacAddress addressL2Dest = ((SetDlDstAction) sourceAction).getAddress();
                 if (addressL2Dest != null) {
-                        targetAction.add(new SetDlDst(bytesFrom(addressL2Dest)));
+                    targetAction.add(new SetDlDst(bytesFrom(addressL2Dest)));
                 }
             } else if (sourceAction instanceof SetDlSrcAction) {
                 MacAddress addressL2Src = ((SetDlSrcAction) sourceAction).getAddress();
                 if (addressL2Src != null) {
-                        targetAction.add(new SetDlSrc(bytesFrom(addressL2Src)));
-                    
+                    targetAction.add(new SetDlSrc(bytesFrom(addressL2Src)));
+
                 }
             } else if (sourceAction instanceof SetDlTypeAction) {
                 EtherType dlType = ((SetDlTypeAction) sourceAction).getDlType();
@@ -271,7 +286,7 @@ public class ToSalConversionsUtils {
         return null;
     }
 
-    public static Match toMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Match source) {
+    public static Match toMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match source) {
         Match target = new Match();
         if (source != null) {
             fillFrom(target, source.getVlanMatch());
@@ -494,8 +509,8 @@ public class ToSalConversionsUtils {
 
     private static byte[] bytesFrom(MacAddress address) {
         String[] mac = address.getValue().split(":");
-        byte[] macAddress = new byte[6];        // mac.length == 6 bytes
-        for(int i = 0; i < mac.length; i++) {
+        byte[] macAddress = new byte[6]; // mac.length == 6 bytes
+        for (int i = 0; i < mac.length; i++) {
             macAddress[i] = Integer.decode("0x" + mac[i]).byteValue();
         }
         return macAddress;
index 53f0f7e4fd42630cf8b19245d63300bffa2c4dd6..3baa1bd0748c08785654935babd5049b5e080f83 100644 (file)
@@ -17,17 +17,17 @@ import org.opendaylight.controller.sal.flowprogrammer.Flow;
 import org.opendaylight.controller.sal.match.Match;
 import org.opendaylight.controller.sal.match.MatchType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeFlow;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.*;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.Address;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv4;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.Layer3Match;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.Layer4Match;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.ArpMatch;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv4Match;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv6Match;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.SctpMatch;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.TcpMatch;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.UdpMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.*;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv4;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer3Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer4Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch;
 
 import com.google.common.net.InetAddresses;
 
@@ -66,7 +66,7 @@ public class TestFromSalConversionsUtils {
         checkOdMatch(odNodeFlow.getMatch(), MtchType.udp);
     }
 
-    private void checkOdMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Match match,
+    private void checkOdMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match match,
             MtchType mt) {
         switch (mt) {
         case arp:
@@ -172,11 +172,11 @@ public class TestFromSalConversionsUtils {
         assertEquals("Iddle timeout is incorrect.", 32766, odNodeFlow.getIdleTimeout().shortValue());
         assertEquals("Priority is incorrect.", 32767, odNodeFlow.getPriority().shortValue());
 
-        checkOdActions(odNodeFlow.getAction());
+        checkOdActions(ToSalConversionsUtils.getAction(odNodeFlow));
     }
 
     private void checkOdActions(
-            List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action> actions) {
+            List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.list.Action> actions) {
         checkOdAction(actions, FloodAction.class, false);
         checkOdAction(actions, FloodAllAction.class, false);
         checkOdAction(actions, HwPathAction.class, false);
@@ -199,11 +199,11 @@ public class TestFromSalConversionsUtils {
     }
 
     private void checkOdAction(
-            List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action> actions, Class<?> cl,
+            List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.list.Action> actions, Class<?> cl,
             boolean b) {
         int numOfFoundActions = 0;
-        for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action action : actions) {
-            org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.Action innerAction = action
+        for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.list.Action action : actions) {
+            org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.Action innerAction = action
                     .getAction();
             if (cl.isInstance(innerAction)) {
                 numOfFoundActions++;
index f47f96ab9f96d5e357749a79cbeb6e3c060d392f..229fcc8806bed2ee25e317d220492c2829bc91b8 100644 (file)
@@ -8,6 +8,7 @@ import java.net.Inet4Address;
 import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.junit.Test;
@@ -18,31 +19,38 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAddedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeFlow;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.VlanCfi;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.*;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.Address;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv4Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv6Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.ActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Match;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.VlanCfi;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.*;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv4Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv6Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.list.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpSourceHardwareAddressBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpTargetHardwareAddressBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.ethernet.match.fields.*;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.*;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.ArpMatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv4MatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv6MatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.SctpMatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.TcpMatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.UdpMatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.vlan.match.fields.VlanIdBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.*;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.*;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActions;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsBuilder;
 
 import com.google.common.net.InetAddresses;
+
 import static org.opendaylight.controller.sal.compability.ProtocolConstants.ETHERNET_ARP;
 import static org.opendaylight.controller.sal.compability.ProtocolConstants.SCTP;
 import static org.opendaylight.controller.sal.compability.ProtocolConstants.TCP;
@@ -254,7 +262,7 @@ public class TestToSalConversionsUtils {
         odNodeFlowBuilder.setHardTimeout(32767);
         odNodeFlowBuilder.setIdleTimeout(32767);
         odNodeFlowBuilder.setPriority(32767);
-        odNodeFlowBuilder.setAction(prepareOdActions());
+        odNodeFlowBuilder.setInstructions(prepareOdActions());
         return odNodeFlowBuilder;
     }
 
@@ -263,7 +271,7 @@ public class TestToSalConversionsUtils {
         return odNodeFlowBuilder.build();
     }
 
-    private List<Action> prepareOdActions() {
+    private Instructions prepareOdActions() {
         List<Action> odActions = new ArrayList<>();
 
         ControllerActionBuilder controllerActionBuilder = new ControllerActionBuilder();
@@ -333,7 +341,15 @@ public class TestToSalConversionsUtils {
         odActions.add(new ActionBuilder().setAction(setVlanPcpActionBuilder.build()).build());
         odActions.add(new ActionBuilder().setAction(swPathActionBuilder.build()).build());
 
-        return odActions;
+        
+        ApplyActions innerInst = new ApplyActionsBuilder().setAction(odActions).build();
+        Instruction applyActions = new InstructionBuilder().setInstruction(innerInst).build();
+        List<Instruction> instructions = Collections.singletonList(applyActions );
+        InstructionsBuilder instBuilder = new InstructionsBuilder();
+        
+        instBuilder.setInstruction(instructions);
+        
+        return instBuilder.build();
     }
 
     private void prepareActionSetVlanPcp(SetVlanPcpActionBuilder setVlanPcpActionBuilder) {