NXM: Add MFTunId class

This is to handle TUN_ID and TUN_ID_W NXM fields.
This will be used when sending NXT_FLOW_MOD messages.

Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
Simon Horman 2012-03-13 09:06:16 +09:00 committed by FUJITA Tomonori
parent cda7026742
commit bb7d3e8dd2
2 changed files with 23 additions and 0 deletions

View File

@ -41,6 +41,7 @@ class Flow(object):
class FlowWildcards(object):
def __init__(self):
self.tun_id_mask = 0
self.wildcards = FWW_ALL
@ -53,6 +54,14 @@ class ClsRule(object):
self.wc.wildcards &= ~FWW_IN_PORT
self.flow.in_port = port
def set_tun_id(self, tun_id):
self.set_tun_id_masked(tun_id, UINT64_MAX)
def set_tun_id_masked(self, tun_id, mask):
self.wc.tun_id_mask = mask
self.flow.tun_id = tun_id & mask
def _set_nxm_headers(nxm_headers):
'''Annotate corresponding NXM header'''
def _set_nxm_headers(self):
@ -116,6 +125,17 @@ class MFInPort(MFField):
return self._put(buf, offset, rule.flow.in_port)
@_register_make
@_set_nxm_headers([ofproto_v1_0.NXM_NX_TUN_ID, ofproto_v1_0.NXM_NX_TUN_ID_W])
class MFTunId(MFField):
@classmethod
def make(cls):
return cls(MF_PACK_STRING_BE64)
def put(self, buf, offset, rule):
return self.putm(buf, offset, rule.flow.tun_id, rule.wc.tun_id_mask)
def serialize_nxm_match(rule, buf, offset):
old_offset = offset

View File

@ -517,4 +517,7 @@ def nxm_header_w(vendor, field, length):
NXM_OF_IN_PORT = nxm_header(0x0000, 0, 2)
NXM_NX_TUN_ID = nxm_header(0x0001, 16, 8)
NXM_NX_TUN_ID_W = nxm_header_w(0x0001, 16, 8)
NXM_HEADER_PACK_STRING = '!I'