Add support for NXT_SET_FLOW_FORMAT

This message may be used to request that the NXM
flow format may be used. NXM is used as the match
in NX vendor extension messages such as NXT_FLOW_MOD.

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:13 +09:00 committed by FUJITA Tomonori
parent 0f8c795c99
commit 85fe60abe0
3 changed files with 40 additions and 0 deletions

View File

@ -98,6 +98,7 @@ class Datapath(object):
self.xid = random.randint(0, self.ofproto.MAX_XID)
self.id = None # datapath_id is unknown yet
self.ports = None
self.flow_format = ofproto_v1_0.NXFF_OPENFLOW10
def close(self):
"""
@ -228,6 +229,21 @@ class Datapath(object):
barrier_request = self.ofproto_parser.OFPBarrierRequest(self)
self.send_msg(barrier_request)
def send_nxt_set_flow_format(self, format):
assert (format == ofproto_v1_0.NXFF_OPENFLOW10 or
format == ofproto_v1_0.NXFF_NXM)
if self.flow_format == format:
# Nothing to do
return
self.flow_format = format
set_format = self.ofproto_parser.NXTSetFlowFormat(self, format)
# FIXME: If NXT_SET_FLOW_FORMAT or NXFF_NXM is not supported by
# the switch then an error message will be received. It may be
# handled by setting self.flow_format to
# ofproto_v1_0.NXFF_OPENFLOW10 but currently isn't.
self.send_msg(set_format)
self.send_barrier()
def datapath_connection_factory(socket, address):
LOG.debug('connected socket:%s address:%s', socket, address)

View File

@ -485,7 +485,19 @@ assert (calcsize(OFP_QUEUE_PROP_MIN_RATE_PACK_STR) +
NX_VENDOR_ID = 0x00002320
# enum nicira_type (abridged)
NXT_SET_FLOW_FORMAT = 12
# enum nx_flow_format
NXFF_OPENFLOW10 = 0
NXFF_NXM = 2
NICIRA_HEADER_PACK_STR = '!II'
NICIRA_HEADER_SIZE = 16
assert (calcsize(NICIRA_HEADER_PACK_STR) +
OFP_HEADER_SIZE == NICIRA_HEADER_SIZE)
NX_SET_FLOW_FORMAT_PACK_STR = '!I'
NX_SET_FLOW_FORMAT_SIZE = 20
assert (calcsize(NX_SET_FLOW_FORMAT_PACK_STR) +
NICIRA_HEADER_SIZE == NX_SET_FLOW_FORMAT_SIZE)

View File

@ -661,6 +661,18 @@ class NXTRequest(OFPVendor):
self.vendor, self.subtype)
class NXTSetFlowFormat(NXTRequest):
def __init__(self, datapath, format):
super(NXTSetFlowFormat, self).__init__(datapath)
self.subtype = ofproto_v1_0.NXT_SET_FLOW_FORMAT
self.format = format
def _serialize_body(self):
self.serialize_header()
msg_pack_into(ofproto_v1_0.NX_SET_FLOW_FORMAT_PACK_STR,
self.buf, ofproto_v1_0.NICIRA_HEADER_SIZE, self.format)
#
# asymmetric message (datapath -> controller)
# parser only