Because the Nicira Experimenter OXMs are independent of the OpenFlow
version, this patch separates the NX OXMs definitions into nx_match.py
and enable to use the NX OXM in all OpenFlow 1.2+.

Signed-off-by: IWASE Yusuke <[email protected]>
---
 ryu/ofproto/nx_match.py     | 35 ++++++++++++++++++++++++++++++++++-
 ryu/ofproto/ofproto_v1_2.py | 10 +++++++++-
 ryu/ofproto/ofproto_v1_3.py | 27 +++------------------------
 ryu/ofproto/ofproto_v1_4.py | 11 +++++++----
 ryu/ofproto/ofproto_v1_5.py | 10 ++--------
 5 files changed, 55 insertions(+), 38 deletions(-)

diff --git a/ryu/ofproto/nx_match.py b/ryu/ofproto/nx_match.py
index 86d39a8..b48888d 100644
--- a/ryu/ofproto/nx_match.py
+++ b/ryu/ofproto/nx_match.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2011, 2012 Nippon Telegraph and Telephone Corporation.
+# Copyright (C) 2011-2015 Nippon Telegraph and Telephone Corporation.
 # Copyright (C) 2011, 2012 Isaku Yamahata <yamahata at valinux co jp>
 # Copyright (C) 2012 Simon Horman <horms ad verge net au>
 #
@@ -19,10 +19,12 @@ import struct
 
 from ryu import exception
 from ryu.lib import mac
+from ryu.lib import type_desc
 from ryu.lib.pack_utils import msg_pack_into
 from ryu.ofproto import ofproto_parser
 from ryu.ofproto import ofproto_v1_0
 from ryu.ofproto import inet
+from ryu.ofproto import oxm_fields
 
 import logging
 LOG = logging.getLogger('ryu.ofproto.nx_match')
@@ -1186,3 +1188,34 @@ class NXMatch(object):
         msg_pack_into(ofproto_v1_0.NXM_HEADER_PACK_STRING,
                       buf, offset, self.header)
         return struct.calcsize(ofproto_v1_0.NXM_HEADER_PACK_STRING)
+
+
+#
+# The followings are implementations for OpenFlow 1.2+
+#
+
+oxm_types = [
+    oxm_fields.NiciraExtended0('eth_dst_nxm', 1, type_desc.MacAddr),
+    oxm_fields.NiciraExtended0('eth_src_nxm', 2, type_desc.MacAddr),
+    oxm_fields.NiciraExtended1('tunnel_id_nxm', 16, type_desc.Int8),
+    oxm_fields.NiciraExtended1('tun_ipv4_src', 31, type_desc.IPv4Addr),
+    oxm_fields.NiciraExtended1('tun_ipv4_dst', 32, type_desc.IPv4Addr),
+    oxm_fields.NiciraExtended1('pkt_mark', 33, type_desc.Int4),
+    oxm_fields.NiciraExtended1('conj_id', 37, type_desc.Int4),
+
+    # The following definition is merely for testing 64-bit experimenter OXMs.
+    # Following Open vSwitch, we use dp_hash for this purpose.
+    # Prefix the name with '_' to indicate this is not intended to be used
+    # in wild.
+    oxm_fields.NiciraExperimenter('_dp_hash', 0, type_desc.Int4),
+
+    # Support for matching/setting NX registers 0-7
+    oxm_fields.NiciraExtended1('reg0', 0, type_desc.Int4),
+    oxm_fields.NiciraExtended1('reg1', 1, type_desc.Int4),
+    oxm_fields.NiciraExtended1('reg2', 2, type_desc.Int4),
+    oxm_fields.NiciraExtended1('reg3', 3, type_desc.Int4),
+    oxm_fields.NiciraExtended1('reg4', 4, type_desc.Int4),
+    oxm_fields.NiciraExtended1('reg5', 5, type_desc.Int4),
+    oxm_fields.NiciraExtended1('reg6', 6, type_desc.Int4),
+    oxm_fields.NiciraExtended1('reg7', 7, type_desc.Int4),
+]
diff --git a/ryu/ofproto/ofproto_v1_2.py b/ryu/ofproto/ofproto_v1_2.py
index a53b4bf..adf131c 100644
--- a/ryu/ofproto/ofproto_v1_2.py
+++ b/ryu/ofproto/ofproto_v1_2.py
@@ -19,6 +19,7 @@ OpenFlow 1.2 definitions.
 """
 
 from ryu.lib import type_desc
+from ryu.ofproto import nx_match
 from ryu.ofproto import ofproto_utils
 from ryu.ofproto import oxm_fields
 
@@ -828,7 +829,14 @@ oxm_types = [
     oxm_fields.OpenFlowBasic('ipv6_nd_tll', 33, type_desc.MacAddr),
     oxm_fields.OpenFlowBasic('mpls_label', 34, type_desc.Int4),
     oxm_fields.OpenFlowBasic('mpls_tc', 35, type_desc.Int1),
-]
+    # EXT-256 Old version of ONF Extension
+    oxm_fields.OldONFExperimenter('pbb_uca', 2560, type_desc.Int1),
+    # EXT-109 TCP flags match field Extension
+    oxm_fields.ONFExperimenter('tcp_flags', 42, type_desc.Int2),
+    # EXT-233 Output match Extension
+    # NOTE(yamamoto): The spec says uint64_t but I assume it's an error.
+    oxm_fields.ONFExperimenter('actset_output', 43, type_desc.Int4),
+] + nx_match.oxm_types
 
 oxm_fields.generate(__name__)
 
diff --git a/ryu/ofproto/ofproto_v1_3.py b/ryu/ofproto/ofproto_v1_3.py
index cf7a48d..6b31ec2 100644
--- a/ryu/ofproto/ofproto_v1_3.py
+++ b/ryu/ofproto/ofproto_v1_3.py
@@ -19,6 +19,7 @@ OpenFlow 1.3 definitions.
 """
 
 from ryu.lib import type_desc
+from ryu.ofproto import nx_match
 from ryu.ofproto import ofproto_utils
 from ryu.ofproto import oxm_fields
 
@@ -1151,9 +1152,7 @@ oxm_types = [
     oxm_fields.OpenFlowBasic('in_phy_port', 1, type_desc.Int4),
     oxm_fields.OpenFlowBasic('metadata', 2, type_desc.Int8),
     oxm_fields.OpenFlowBasic('eth_dst', 3, type_desc.MacAddr),
-    oxm_fields.NiciraExtended0('eth_dst_nxm', 1, type_desc.MacAddr),
     oxm_fields.OpenFlowBasic('eth_src', 4, type_desc.MacAddr),
-    oxm_fields.NiciraExtended0('eth_src_nxm', 2, type_desc.MacAddr),
     oxm_fields.OpenFlowBasic('eth_type', 5, type_desc.Int2),
     oxm_fields.OpenFlowBasic('vlan_vid', 6, type_desc.Int2),
     oxm_fields.OpenFlowBasic('vlan_pcp', 7, type_desc.Int1),
@@ -1188,35 +1187,15 @@ oxm_types = [
     oxm_fields.OpenFlowBasic('mpls_bos', 36, type_desc.Int1),
     oxm_fields.OpenFlowBasic('pbb_isid', 37, type_desc.Int3),
     oxm_fields.OpenFlowBasic('tunnel_id', 38, type_desc.Int8),
-    oxm_fields.NiciraExtended1('tunnel_id_nxm', 16, type_desc.Int8),
     oxm_fields.OpenFlowBasic('ipv6_exthdr', 39, type_desc.Int2),
+    # EXT-256 Old version of ONF Extension
     oxm_fields.OldONFExperimenter('pbb_uca', 2560, type_desc.Int1),
     # EXT-109 TCP flags match field Extension
     oxm_fields.ONFExperimenter('tcp_flags', 42, type_desc.Int2),
     # EXT-233 Output match Extension
     # NOTE(yamamoto): The spec says uint64_t but I assume it's an error.
     oxm_fields.ONFExperimenter('actset_output', 43, type_desc.Int4),
-    oxm_fields.NiciraExtended1('tun_ipv4_src', 31, type_desc.IPv4Addr),
-    oxm_fields.NiciraExtended1('tun_ipv4_dst', 32, type_desc.IPv4Addr),
-    oxm_fields.NiciraExtended1('pkt_mark', 33, type_desc.Int4),
-    oxm_fields.NiciraExtended1('conj_id', 37, type_desc.Int4),
-
-    # The following definition is merely for testing 64-bit experimenter OXMs.
-    # Following Open vSwitch, we use dp_hash for this purpose.
-    # Prefix the name with '_' to indicate this is not intended to be used
-    # in wild.
-    oxm_fields.NiciraExperimenter('_dp_hash', 0, type_desc.Int4),
-
-    # Support for matching/setting NX registers 1-7
-    oxm_fields.NiciraExtended1('reg0', 0, type_desc.Int4),
-    oxm_fields.NiciraExtended1('reg1', 1, type_desc.Int4),
-    oxm_fields.NiciraExtended1('reg2', 2, type_desc.Int4),
-    oxm_fields.NiciraExtended1('reg3', 3, type_desc.Int4),
-    oxm_fields.NiciraExtended1('reg4', 4, type_desc.Int4),
-    oxm_fields.NiciraExtended1('reg5', 5, type_desc.Int4),
-    oxm_fields.NiciraExtended1('reg6', 6, type_desc.Int4),
-    oxm_fields.NiciraExtended1('reg7', 7, type_desc.Int4),
-]
+] + nx_match.oxm_types
 
 oxm_fields.generate(__name__)
 
diff --git a/ryu/ofproto/ofproto_v1_4.py b/ryu/ofproto/ofproto_v1_4.py
index 250c0e1..3f107eb 100644
--- a/ryu/ofproto/ofproto_v1_4.py
+++ b/ryu/ofproto/ofproto_v1_4.py
@@ -19,6 +19,7 @@ OpenFlow 1.4 definitions.
 """
 
 from ryu.lib import type_desc
+from ryu.ofproto import nx_match
 from ryu.ofproto import ofproto_utils
 from ryu.ofproto import oxm_fields
 
@@ -390,10 +391,12 @@ oxm_types = [
     oxm_fields.OpenFlowBasic('tunnel_id', 38, type_desc.Int8),
     oxm_fields.OpenFlowBasic('ipv6_exthdr', 39, type_desc.Int2),
     oxm_fields.OpenFlowBasic('pbb_uca', 41, type_desc.Int1),
-    oxm_fields.NiciraExtended1('tun_ipv4_src', 31, type_desc.IPv4Addr),
-    oxm_fields.NiciraExtended1('tun_ipv4_dst', 32, type_desc.IPv4Addr),
-    oxm_fields.NiciraExtended1('pkt_mark', 33, type_desc.Int4),
-]
+    # EXT-109 TCP flags match field Extension
+    oxm_fields.ONFExperimenter('tcp_flags', 42, type_desc.Int2),
+    # EXT-233 Output match Extension
+    # NOTE(yamamoto): The spec says uint64_t but I assume it's an error.
+    oxm_fields.ONFExperimenter('actset_output', 43, type_desc.Int4),
+] + nx_match.oxm_types
 
 oxm_fields.generate(__name__)
 
diff --git a/ryu/ofproto/ofproto_v1_5.py b/ryu/ofproto/ofproto_v1_5.py
index 9e58e79..45191dd 100644
--- a/ryu/ofproto/ofproto_v1_5.py
+++ b/ryu/ofproto/ofproto_v1_5.py
@@ -19,6 +19,7 @@ OpenFlow 1.5 definitions.
 """
 
 from ryu.lib import type_desc
+from ryu.ofproto import nx_match
 from ryu.ofproto import ofproto_utils
 from ryu.ofproto import oxm_fields
 from ryu.ofproto import oxs_fields
@@ -390,9 +391,7 @@ oxm_types = [
     oxm_fields.OpenFlowBasic('in_phy_port', 1, type_desc.Int4),
     oxm_fields.OpenFlowBasic('metadata', 2, type_desc.Int8),
     oxm_fields.OpenFlowBasic('eth_dst', 3, type_desc.MacAddr),
-    oxm_fields.NiciraExtended0('eth_dst_nxm', 1, type_desc.MacAddr),
     oxm_fields.OpenFlowBasic('eth_src', 4, type_desc.MacAddr),
-    oxm_fields.NiciraExtended0('eth_src_nxm', 2, type_desc.MacAddr),
     oxm_fields.OpenFlowBasic('eth_type', 5, type_desc.Int2),
     oxm_fields.OpenFlowBasic('vlan_vid', 6, type_desc.Int2),
     oxm_fields.OpenFlowBasic('vlan_pcp', 7, type_desc.Int1),
@@ -427,17 +426,12 @@ oxm_types = [
     oxm_fields.OpenFlowBasic('mpls_bos', 36, type_desc.Int1),
     oxm_fields.OpenFlowBasic('pbb_isid', 37, type_desc.Int3),
     oxm_fields.OpenFlowBasic('tunnel_id', 38, type_desc.Int8),
-    oxm_fields.NiciraExtended1('tunnel_id_nxm', 16, type_desc.Int8),
     oxm_fields.OpenFlowBasic('ipv6_exthdr', 39, type_desc.Int2),
     oxm_fields.OpenFlowBasic('pbb_uca', 41, type_desc.Int1),
     oxm_fields.OpenFlowBasic('tcp_flags', 42, type_desc.Int2),
     oxm_fields.OpenFlowBasic('actset_output', 43, type_desc.Int4),
     oxm_fields.OpenFlowBasic('packet_type', 44, type_desc.Int4),
-    oxm_fields.NiciraExtended1('tun_ipv4_src', 31, type_desc.IPv4Addr),
-    oxm_fields.NiciraExtended1('tun_ipv4_dst', 32, type_desc.IPv4Addr),
-    oxm_fields.NiciraExtended1('pkt_mark', 33, type_desc.Int4),
-    oxm_fields.NiciraExtended1('conj_id', 37, type_desc.Int4),
-]
+] + nx_match.oxm_types
 
 oxm_fields.generate(__name__)
 
-- 
1.9.1


------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to