summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2012-05-07 21:34:45 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2012-05-07 21:34:45 +0900
commit3e84089d2c64167046d6a817b5a5d292098bebd1 (patch)
tree8a4fae5c7458686a151a3e901857f94f4645e864
parent875ebcb90107f980a7f4975975dc831331ab5a36 (diff)
add Nicira Extension NXAST_MULTIPATH action
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/ofproto/ofproto_v1_0.py15
-rw-r--r--ryu/ofproto/ofproto_v1_0_parser.py21
2 files changed, 36 insertions, 0 deletions
diff --git a/ryu/ofproto/ofproto_v1_0.py b/ryu/ofproto/ofproto_v1_0.py
index dff4c3a7..43e41162 100644
--- a/ryu/ofproto/ofproto_v1_0.py
+++ b/ryu/ofproto/ofproto_v1_0.py
@@ -235,6 +235,7 @@ OFP_ACTION_PACK_STR = '!H'
NXAST_RESUBMIT = 1
NXAST_SET_TUNNEL = 2
NXAST_SET_TUNNEL64 = 9
+NXAST_MULTIPATH = 10
NXAST_RESUBMIT_TABLE = 14
NX_ACTION_RESUBMIT_PACK_STR = '!HHIHHB3x'
@@ -249,6 +250,10 @@ NX_ACTION_SET_TUNNEL64_PACK_STR = '!HHIH6xQ'
NX_ACTION_SET_TUNNEL64_SIZE = 24
assert calcsize(NX_ACTION_SET_TUNNEL64_PACK_STR) == NX_ACTION_SET_TUNNEL64_SIZE
+NX_ACTION_MULTIPATH_PACK_STR = '!HHIHHH2xHHI2xHI'
+NX_ACTION_MULTIPATH_SIZE = 32
+assert calcsize(NX_ACTION_MULTIPATH_PACK_STR) == NX_ACTION_MULTIPATH_SIZE
+
NX_ACTION_HEADER_PACK_STR = '!H'
NX_ACTION_HEADER_SIZE = 10
assert (OFP_ACTION_VENDOR_HEADER_SIZE +
@@ -566,3 +571,13 @@ NXM_NX_TUN_ID_W = nxm_header_w(0x0001, 16, 8)
NXM_NX_IP_ECN = nxm_header(0x0001, 28, 1)
NXM_HEADER_PACK_STRING = '!I'
+
+# enum nx_hash_fields
+NX_HASH_FIELDS_ETH_SRC = 0
+NX_HASH_FIELDS_SYMMETRIC_L4 = 1
+
+# enum nx_mp_algorithm
+NX_MP_ALG_MODULO_N = 0
+NX_MP_ALG_HASH_THRESHOLD = 1
+NX_MP_ALG_HRW = 2
+NX_MP_ALG_ITER_HASH = 3
diff --git a/ryu/ofproto/ofproto_v1_0_parser.py b/ryu/ofproto/ofproto_v1_0_parser.py
index 8ea3321d..069354bd 100644
--- a/ryu/ofproto/ofproto_v1_0_parser.py
+++ b/ryu/ofproto/ofproto_v1_0_parser.py
@@ -420,6 +420,27 @@ class NXActionSetTunnel64(NXActionHeader):
msg_pack_into(ofproto_v1_0.NX_ACTION_SET_TUNNEL64_PACK_STR, buf,
offset, self.type, self.len, self.vendor, self.subtype,
self.tun_id)
+
+
+class NXActionMultipath(NXActionHeader):
+ def __init__(self, fields, basis, algorithm, max_link, arg,
+ ofs_nbits, dst):
+ super(NXActionMultipath, self).__init__(
+ ofproto_v1_0.NXAST_MULTIPATH,
+ ofproto_v1_0.NX_ACTION_MULTIPATH_SIZE)
+ self.fields = fields
+ self.basis = basis
+ self.algorithm = algorithm
+ self.max_link = max_link
+ self.arg = arg
+ self.ofs_nbits = ofs_nbits
+ self.dst = dst
+
+ def serialize(self, buf, offset):
+ msg_pack_into(ofproto_v1_0.NX_ACTION_MULTIPATH_PACK_STR, buf,
+ offset, self.type, self.len, self.vendor, self.subtype,
+ self.fields, self.basis, self.algorithm, self.max_link,
+ self.arg, self.ofs_nbits, self.dst)
class OFPDescStats(collections.namedtuple('OFPDescStats',