of14: Add port mod message support
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:
parent
cfc6c34e97
commit
9e999fad23
@ -4561,6 +4561,93 @@ class OFPGroupMod(MsgBase):
|
|||||||
offset += b.len
|
offset += b.len
|
||||||
|
|
||||||
|
|
||||||
|
class OFPPortModPropEthernet(StringifyMixin):
|
||||||
|
_PACK_STR = '!HHI' # type, len, advertise
|
||||||
|
|
||||||
|
def __init__(self, type_=None, length=None, advertise=None):
|
||||||
|
self.type = type_
|
||||||
|
self.advertise = advertise
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
# fixup
|
||||||
|
self.length = struct.calcsize(self._PACK_STR)
|
||||||
|
|
||||||
|
buf = bytearray()
|
||||||
|
msg_pack_into(self._PACK_STR, buf, 0, self.type, self.length,
|
||||||
|
self.advertise)
|
||||||
|
return buf
|
||||||
|
|
||||||
|
|
||||||
|
@_set_msg_type(ofproto.OFPT_PORT_MOD)
|
||||||
|
class OFPPortMod(MsgBase):
|
||||||
|
"""
|
||||||
|
Port modification message
|
||||||
|
|
||||||
|
The controller sneds this message to modify the behavior of the port.
|
||||||
|
|
||||||
|
================ ======================================================
|
||||||
|
Attribute Description
|
||||||
|
================ ======================================================
|
||||||
|
port_no Port number to modify
|
||||||
|
hw_addr The hardware address that must be the same as hw_addr
|
||||||
|
of ``OFPPort`` of ``OFPSwitchFeatures``
|
||||||
|
config Bitmap of configuration flags.
|
||||||
|
OFPPC_PORT_DOWN
|
||||||
|
OFPPC_NO_RECV
|
||||||
|
OFPPC_NO_FWD
|
||||||
|
OFPPC_NO_PACKET_IN
|
||||||
|
mask Bitmap of configuration flags above to be changed
|
||||||
|
properties List of ``OFPPortProp`` subclass instance
|
||||||
|
================ ======================================================
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
def send_port_mod(self, datapath):
|
||||||
|
ofp = datapath.ofproto
|
||||||
|
ofp_parser = datapath.ofproto_parser
|
||||||
|
|
||||||
|
port_no = 3
|
||||||
|
hw_addr = 'fa:c8:e8:76:1d:7e'
|
||||||
|
config = 0
|
||||||
|
mask = (ofp.OFPPC_PORT_DOWN | ofp.OFPPC_NO_RECV |
|
||||||
|
ofp.OFPPC_NO_FWD | ofp.OFPPC_NO_PACKET_IN)
|
||||||
|
advertise = (ofp.OFPPF_10MB_HD | ofp.OFPPF_100MB_FD |
|
||||||
|
ofp.OFPPF_1GB_FD | ofp.OFPPF_COPPER |
|
||||||
|
ofp.OFPPF_AUTONEG | ofp.OFPPF_PAUSE |
|
||||||
|
ofp.OFPPF_PAUSE_ASYM)
|
||||||
|
properties = ofp_parser.OFPPortModPropEthernet(advertise)
|
||||||
|
req = ofp_parser.OFPPortMod(datapath, port_no, hw_addr, config,
|
||||||
|
mask, properties)
|
||||||
|
datapath.send_msg(req)
|
||||||
|
"""
|
||||||
|
|
||||||
|
_TYPE = {
|
||||||
|
'ascii': [
|
||||||
|
'hw_addr',
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, datapath, port_no, hw_addr, config, mask, properties):
|
||||||
|
super(OFPPortMod, self).__init__(datapath)
|
||||||
|
self.port_no = port_no
|
||||||
|
self.hw_addr = hw_addr
|
||||||
|
self.config = config
|
||||||
|
self.mask = mask
|
||||||
|
self.properties = properties
|
||||||
|
|
||||||
|
def _serialize_body(self):
|
||||||
|
bin_props = bytearray()
|
||||||
|
for p in self.properties:
|
||||||
|
bin_props += p.serialize()
|
||||||
|
|
||||||
|
msg_pack_into(ofproto.OFP_PORT_MOD_PACK_STR, self.buf,
|
||||||
|
ofproto.OFP_HEADER_SIZE,
|
||||||
|
self.port_no, addrconv.mac.text_to_bin(self.hw_addr),
|
||||||
|
self.config,
|
||||||
|
self.mask)
|
||||||
|
self.buf += bin_props
|
||||||
|
|
||||||
|
|
||||||
class OFPBucket(StringifyMixin):
|
class OFPBucket(StringifyMixin):
|
||||||
def __init__(self, weight, watch_port, watch_group, actions, len_=None):
|
def __init__(self, weight, watch_port, watch_group, actions, len_=None):
|
||||||
super(OFPBucket, self).__init__()
|
super(OFPBucket, self).__init__()
|
||||||
|
Loading…
Reference in New Issue
Block a user