When would payload_length differ from payload_length_? Seems like they should have the same value so why not use payload_length everywhere?
-Shaun On 02/06/2013 23:50, "YAMAMOTO Takashi" <[email protected]> wrote: >> The patch teaches packet library to truncate padding octets. >> The protocol class that knows its payload length should set its payload >> length as payload_length_ > 0 attributes. >> Then, the packet.parser truncates its payload. >> payload_length_ is used to avoid name clash with ipv6.payload_length. >> >> Cc: Shaun Crampton <[email protected]> >> Signed-off-by: Isaku Yamahata <[email protected]> >> --- >> ryu/lib/packet/ipv4.py | 2 ++ >> ryu/lib/packet/ipv6.py | 2 ++ >> ryu/lib/packet/lldp.py | 1 + >> ryu/lib/packet/packet.py | 4 ++++ >> ryu/lib/packet/packet_base.py | 1 + >> ryu/lib/packet/udp.py | 2 ++ >> 6 files changed, 12 insertions(+) >> >> diff --git a/ryu/lib/packet/ipv4.py b/ryu/lib/packet/ipv4.py >> index 09ed734..f6054f4 100644 >> --- a/ryu/lib/packet/ipv4.py >> +++ b/ryu/lib/packet/ipv4.py >> @@ -83,6 +83,8 @@ class ipv4(packet_base.PacketBase): >> self.length = header_length * 4 >> self.option = option >> >> + self.payoad_length_ = total_length > >typo? > >> + >> @classmethod >> def parser(cls, buf): >> (version, tos, total_length, identification, flags, ttl, >>proto, csum, >> diff --git a/ryu/lib/packet/ipv6.py b/ryu/lib/packet/ipv6.py >> index a1cb203..988bcaf 100644 >> --- a/ryu/lib/packet/ipv6.py >> +++ b/ryu/lib/packet/ipv6.py >> @@ -65,6 +65,8 @@ class ipv6(packet_base.PacketBase): >> self.dst = dst >> self.length = 40 >> >> + self.payload_length_ = payload_length >> + >> @classmethod >> def parser(cls, buf): >> (v_tc_flow, plen, nxt, hlim, src, dst) = struct.unpack_from( >> diff --git a/ryu/lib/packet/lldp.py b/ryu/lib/packet/lldp.py >> index f343359..21373b7 100644 >> --- a/ryu/lib/packet/lldp.py >> +++ b/ryu/lib/packet/lldp.py >> @@ -116,6 +116,7 @@ class lldp(packet_base.PacketBase): >> length += LLDP_TLV_SIZE + tlv.len >> >> self.length = length >> + self.payload_length_ = length >> >> # at least it must have chassis id, port id, ttl and end >> def _tlvs_len_valid(self): >> diff --git a/ryu/lib/packet/packet.py b/ryu/lib/packet/packet.py >> index 84e5bf8..7289865 100644 >> --- a/ryu/lib/packet/packet.py >> +++ b/ryu/lib/packet/packet.py >> @@ -47,6 +47,10 @@ class Packet(object): >> if proto: >> self.parsed_bytes += proto.length >> self.protocols.append(proto) >> + if proto.payload_length_ > 0: >> + truncation_length = (self.parsed_bytes + >> + proto.payload_length_) >> + self.data = self.data[:truncation_length] >> >> if len(self.data) > self.parsed_bytes: >> self.protocols.append(self.data[self.parsed_bytes:]) >> diff --git a/ryu/lib/packet/packet_base.py >>b/ryu/lib/packet/packet_base.py >> index b0aeca0..7472d33 100644 >> --- a/ryu/lib/packet/packet_base.py >> +++ b/ryu/lib/packet/packet_base.py >> @@ -37,6 +37,7 @@ class PacketBase(object): >> def __init__(self): >> super(PacketBase, self).__init__() >> self.length = 0 >> + self.payload_length_ = 0 # '_' to avoid name clash >> self.protocol_name = self.__class__.__name__ >> >> @classmethod >> diff --git a/ryu/lib/packet/udp.py b/ryu/lib/packet/udp.py >> index c1bb10c..df2eb4f 100644 >> --- a/ryu/lib/packet/udp.py >> +++ b/ryu/lib/packet/udp.py >> @@ -49,6 +49,8 @@ class udp(packet_base.PacketBase): >> self.csum = csum >> self.length = udp._MIN_LEN >> >> + self.payload_length_ = total_length >> + >> @classmethod >> def parser(cls, buf): >> (src_port, dst_port, total_length, csum) = struct.unpack_from( >> -- >> 1.7.10.4 >> >> >> >>------------------------------------------------------------------------- >>----- >> Get 100% visibility into Java/.NET code with AppDynamics Lite >> It's a free troubleshooting tool designed for production >> Get down to code-level detail for bottlenecks, with <2% overhead. >> Download for free and get started troubleshooting in minutes. >> http://p.sf.net/sfu/appdyn_d2d_ap2 >> _______________________________________________ >> Ryu-devel mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/ryu-devel ------------------------------------------------------------------------------ How ServiceNow helps IT people transform IT departments: 1. A cloud service to automate IT design, transition and operations 2. Dashboards that offer high-level views of enterprise services 3. A single system of record for all IT processes http://p.sf.net/sfu/servicenow-d2d-j _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
