mirror of
https://github.com/faucetsdn/ryu.git
synced 2026-05-12 08:06:49 +02:00
ofproto v1.3: implement MeterBand parsers
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
parent
090f6a5b9a
commit
9746e523e9
@ -2630,9 +2630,12 @@ class OFPMeterBand(StringifyMixin):
|
||||
|
||||
|
||||
class OFPMeterBandHeader(OFPMeterBand):
|
||||
_METER_BAND = {}
|
||||
|
||||
@staticmethod
|
||||
def register_meter_band_type(type_, len_):
|
||||
def _register_meter_band_type(cls):
|
||||
OFPMeterBandHeader._METER_BAND[type_] = cls
|
||||
cls.cls_meter_band_type = type_
|
||||
cls.cls_meter_band_len = len_
|
||||
return cls
|
||||
@ -2645,9 +2648,11 @@ class OFPMeterBandHeader(OFPMeterBand):
|
||||
|
||||
@classmethod
|
||||
def parser(cls, buf, offset):
|
||||
band_header = struct.unpack_from(
|
||||
type_, len_, _rate, _burst_size = struct.unpack_from(
|
||||
ofproto_v1_3.OFP_METER_BAND_HEADER_PACK_STR, buf, offset)
|
||||
return cls(*band_header)
|
||||
cls_ = cls._METER_BAND[type_]
|
||||
assert cls_.cls_meter_band_len == len_
|
||||
return cls_.parser(buf, offset)
|
||||
|
||||
|
||||
@OFPMeterBandHeader.register_meter_band_type(
|
||||
@ -2662,6 +2667,14 @@ class OFPMeterBandDrop(OFPMeterBandHeader):
|
||||
msg_pack_into(ofproto_v1_3.OFP_METER_BAND_DROP_PACK_STR, buf, offset,
|
||||
self.type, self.len, self.rate, self.burst_size)
|
||||
|
||||
@classmethod
|
||||
def parser(cls, buf, offset):
|
||||
type_, len_, rate, burst_size = struct.unpack_from(
|
||||
ofproto_v1_3.OFP_METER_BAND_DROP_PACK_STR, buf, offset)
|
||||
assert cls.cls_meter_band_type == type_
|
||||
assert cls.cls_meter_band_len == len_
|
||||
return cls(rate, burst_size)
|
||||
|
||||
|
||||
@OFPMeterBandHeader.register_meter_band_type(
|
||||
ofproto_v1_3.OFPMBT_DSCP_REMARK,
|
||||
@ -2678,7 +2691,13 @@ class OFPMeterBandDscpRemark(OFPMeterBandHeader):
|
||||
offset, self.type, self.len, self.rate, self.burst_size,
|
||||
self.prec_level)
|
||||
|
||||
# TODO: Add parser method here
|
||||
@classmethod
|
||||
def parser(cls, buf, offset):
|
||||
type_, len_, rate, burst_size, prec_level = struct.unpack_from(
|
||||
ofproto_v1_3.OFP_METER_BAND_DSCP_REMARK_PACK_STR, buf, offset)
|
||||
assert cls.cls_meter_band_type == type_
|
||||
assert cls.cls_meter_band_len == len_
|
||||
return cls(rate, burst_size, prec_level)
|
||||
|
||||
|
||||
@OFPMeterBandHeader.register_meter_band_type(
|
||||
@ -2696,7 +2715,13 @@ class OFPMeterBandExperimenter(OFPMeterBandHeader):
|
||||
offset, self.type, self.len, self.rate, self.burst_size,
|
||||
self.experimenter)
|
||||
|
||||
# TODO: Add parser method here
|
||||
@classmethod
|
||||
def parser(cls, buf, offset):
|
||||
type_, len_, rate, burst_size, experimenter = struct.unpack_from(
|
||||
ofproto_v1_3.OFP_METER_BAND_EXPERIMENTER_PACK_STR, buf, offset)
|
||||
assert cls.cls_meter_band_type == type_
|
||||
assert cls.cls_meter_band_len == len_
|
||||
return cls(rate, burst_size, experimenter)
|
||||
|
||||
|
||||
class OFPMeterConfigStats(StringifyMixin):
|
||||
@ -2719,11 +2744,10 @@ class OFPMeterConfigStats(StringifyMixin):
|
||||
meter_config.bands = []
|
||||
length = ofproto_v1_3.OFP_METER_CONFIG_SIZE
|
||||
while length < meter_config._length:
|
||||
band_header = OFPMeterBandHeader.parser(buf, offset)
|
||||
#TODO: Parse all types of MeterBands, not only common header
|
||||
meter_config.bands.append(band_header)
|
||||
offset += band_header.len
|
||||
length += band_header.len
|
||||
band = OFPMeterBandHeader.parser(buf, offset)
|
||||
meter_config.bands.append(band)
|
||||
offset += band.len
|
||||
length += band.len
|
||||
|
||||
return meter_config
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user