mirror of
https://github.com/espressif/openthread.git
synced 2026-09-01 06:49:54 +00:00
[style] change python yapf column_limit to 119 (#5339)
This commit is contained in:
@@ -78,10 +78,7 @@ def calculate_checksum(data):
|
||||
"""
|
||||
# Create halfwords from data bytes. Example: data[0] = 0x01, data[1] =
|
||||
# 0xb2 => 0x01b2
|
||||
halfwords = [
|
||||
((byte0 << 8) | byte1)
|
||||
for byte0, byte1 in zip_longest(data[::2], data[1::2], fillvalue=0x00)
|
||||
]
|
||||
halfwords = [((byte0 << 8) | byte1) for byte0, byte1 in zip_longest(data[::2], data[1::2], fillvalue=0x00)]
|
||||
|
||||
checksum = 0
|
||||
for halfword in halfwords:
|
||||
@@ -202,11 +199,9 @@ class IPv6PseudoHeader(ConvertibleToBytes):
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, source_address, destination_address, payload_length,
|
||||
next_header):
|
||||
def __init__(self, source_address, destination_address, payload_length, next_header):
|
||||
self._source_address = self._convert_to_ipaddress(source_address)
|
||||
self._destination_address = self._convert_to_ipaddress(
|
||||
destination_address)
|
||||
self._destination_address = self._convert_to_ipaddress(destination_address)
|
||||
self.payload_length = payload_length
|
||||
self.next_header = next_header
|
||||
|
||||
@@ -261,8 +256,7 @@ class IPv6Header(ConvertibleToBytes, BuildableFromBytes):
|
||||
):
|
||||
self.version = self._version
|
||||
self._source_address = self._convert_to_ipaddress(source_address)
|
||||
self._destination_address = self._convert_to_ipaddress(
|
||||
destination_address)
|
||||
self._destination_address = self._convert_to_ipaddress(destination_address)
|
||||
self.traffic_class = traffic_class
|
||||
self.flow_label = flow_label
|
||||
self.hop_limit = hop_limit
|
||||
@@ -290,8 +284,7 @@ class IPv6Header(ConvertibleToBytes, BuildableFromBytes):
|
||||
def to_bytes(self):
|
||||
data = bytearray([
|
||||
((self.version & 0x0F) << 4) | ((self.traffic_class >> 4) & 0x0F),
|
||||
((self.traffic_class & 0x0F) << 4) |
|
||||
((self.flow_label >> 16) & 0x0F),
|
||||
((self.traffic_class & 0x0F) << 4) | ((self.flow_label >> 16) & 0x0F),
|
||||
((self.flow_label >> 8) & 0xff),
|
||||
((self.flow_label & 0xff)),
|
||||
])
|
||||
@@ -388,16 +381,12 @@ class IPv6Packet(ConvertibleToBytes):
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self,
|
||||
ipv6_header,
|
||||
upper_layer_protocol,
|
||||
extension_headers=None):
|
||||
def __init__(self, ipv6_header, upper_layer_protocol, extension_headers=None):
|
||||
self.ipv6_header = ipv6_header
|
||||
|
||||
self.upper_layer_protocol = upper_layer_protocol
|
||||
|
||||
self.extension_headers = (extension_headers
|
||||
if extension_headers is not None else [])
|
||||
self.extension_headers = (extension_headers if extension_headers is not None else [])
|
||||
|
||||
self._update_next_header_values_in_headers()
|
||||
|
||||
@@ -409,16 +398,13 @@ class IPv6Packet(ConvertibleToBytes):
|
||||
|
||||
if self.upper_layer_protocol.checksum != checksum:
|
||||
raise RuntimeError("Could not create IPv6 packet. "
|
||||
"Invalid checksum: {}!={}".format(
|
||||
self.upper_layer_protocol.checksum,
|
||||
checksum))
|
||||
"Invalid checksum: {}!={}".format(self.upper_layer_protocol.checksum, checksum))
|
||||
|
||||
self.upper_layer_protocol.checksum = checksum
|
||||
|
||||
def _update_payload_length_value_in_ipv6_header(self):
|
||||
self.ipv6_header.payload_length = len(self.upper_layer_protocol) + sum([
|
||||
len(extension_header) for extension_header in self.extension_headers
|
||||
])
|
||||
self.ipv6_header.payload_length = len(self.upper_layer_protocol) + sum(
|
||||
[len(extension_header) for extension_header in self.extension_headers])
|
||||
|
||||
def _update_next_header_values_in_headers(self):
|
||||
last_header = self.ipv6_header
|
||||
@@ -445,8 +431,7 @@ class IPv6Packet(ConvertibleToBytes):
|
||||
self.upper_layer_protocol.type,
|
||||
)
|
||||
|
||||
return calculate_checksum(pseudo_header.to_bytes() +
|
||||
upper_layer_protocol_bytes)
|
||||
return calculate_checksum(pseudo_header.to_bytes() + upper_layer_protocol_bytes)
|
||||
|
||||
def to_bytes(self):
|
||||
self._update_payload_length_value_in_ipv6_header()
|
||||
@@ -463,8 +448,7 @@ class IPv6Packet(ConvertibleToBytes):
|
||||
return ipv6_packet
|
||||
|
||||
def __repr__(self):
|
||||
return "IPv6Packet(header={}, upper_layer_protocol={})".format(
|
||||
self.ipv6_header, self.upper_layer_protocol)
|
||||
return "IPv6Packet(header={}, upper_layer_protocol={})".format(self.ipv6_header, self.upper_layer_protocol)
|
||||
|
||||
|
||||
class UDPHeader(ConvertibleToBytes, BuildableFromBytes):
|
||||
@@ -568,8 +552,7 @@ class ICMPv6Header(ConvertibleToBytes, BuildableFromBytes):
|
||||
self.checksum = checksum
|
||||
|
||||
def to_bytes(self):
|
||||
return bytearray([self.type, self.code]) + struct.pack(
|
||||
">H", self.checksum)
|
||||
return bytearray([self.type, self.code]) + struct.pack(">H", self.checksum)
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
@@ -643,11 +626,7 @@ class FragmentHeader(ExtensionHeader):
|
||||
def offset(self):
|
||||
return self._fragm_offset
|
||||
|
||||
def __init__(self,
|
||||
next_header=None,
|
||||
fragm_offset=0,
|
||||
more_flag=False,
|
||||
identification=0):
|
||||
def __init__(self, next_header=None, fragm_offset=0, more_flag=False, identification=0):
|
||||
super(FragmentHeader, self).__init__(next_header, 0)
|
||||
self._fragm_offset = fragm_offset
|
||||
self._more_flag = more_flag
|
||||
@@ -658,10 +637,7 @@ class FragmentHeader(ExtensionHeader):
|
||||
|
||||
def to_bytes(self):
|
||||
data = bytearray([self.next_header, 0x00])
|
||||
data += bytearray([
|
||||
self._fragm_offset >> 5,
|
||||
((self._fragm_offset << 3) | self._more_flag) & 0xff
|
||||
])
|
||||
data += bytearray([self._fragm_offset >> 5, ((self._fragm_offset << 3) | self._more_flag) & 0xff])
|
||||
data += struct.pack(">I", self._identification)
|
||||
|
||||
return data
|
||||
@@ -783,8 +759,7 @@ class HopByHopOptionHeader(ConvertibleToBytes, BuildableFromBytes):
|
||||
return self._header_length
|
||||
|
||||
def __repr__(self):
|
||||
return "HopByHopOptionHeader(type={}, length={})".format(
|
||||
self.type, self.length)
|
||||
return "HopByHopOptionHeader(type={}, length={})".format(self.type, self.length)
|
||||
|
||||
|
||||
class HopByHopOption(ConvertibleToBytes):
|
||||
@@ -814,8 +789,7 @@ class HopByHopOption(ConvertibleToBytes):
|
||||
return len(self.header) + len(self.value)
|
||||
|
||||
def __repr__(self):
|
||||
return "HopByHopOption(header={}, value={})".format(
|
||||
self.header, self.value)
|
||||
return "HopByHopOption(header={}, value={})".format(self.header, self.value)
|
||||
|
||||
|
||||
class MPLOption(ConvertibleToBytes):
|
||||
@@ -833,8 +807,7 @@ class MPLOption(ConvertibleToBytes):
|
||||
self.seed_id = seed_id
|
||||
|
||||
def to_bytes(self):
|
||||
smv = (((self.S & 0x03) << 6) | ((self.M & 0x01) << 5) |
|
||||
((self.V & 0x01) << 4))
|
||||
smv = (((self.S & 0x03) << 6) | ((self.M & 0x01) << 5) | ((self.V & 0x01) << 4))
|
||||
|
||||
return bytearray([smv, self.sequence]) + self.seed_id
|
||||
|
||||
@@ -855,8 +828,8 @@ class MPLOption(ConvertibleToBytes):
|
||||
return self._header_length + self._seed_id_length[self.S]
|
||||
|
||||
def __repr__(self):
|
||||
return "MPLOption(S={}, M={}, V={}, sequence={}, seed_id={})".format(
|
||||
self.S, self.M, self.V, self.sequence, hexlify(self.seed_id))
|
||||
return "MPLOption(S={}, M={}, V={}, sequence={}, seed_id={})".format(self.S, self.M, self.V, self.sequence,
|
||||
hexlify(self.seed_id))
|
||||
|
||||
|
||||
class IPv6PacketFactory(PacketFactory):
|
||||
@@ -919,17 +892,13 @@ class IPv6PacketFactory(PacketFactory):
|
||||
try:
|
||||
return self._ehf[next_header]
|
||||
except KeyError:
|
||||
raise RuntimeError(
|
||||
"Could not get Extension Header factory for next_header={}.".
|
||||
format(next_header))
|
||||
raise RuntimeError("Could not get Extension Header factory for next_header={}.".format(next_header))
|
||||
|
||||
def _get_upper_layer_protocol_factory_for(self, next_header):
|
||||
try:
|
||||
return self._ulpf[next_header]
|
||||
except KeyError:
|
||||
raise RuntimeError(
|
||||
"Could not get Upper Layer Protocol factory for next_header={}."
|
||||
.format(next_header))
|
||||
raise RuntimeError("Could not get Upper Layer Protocol factory for next_header={}.".format(next_header))
|
||||
|
||||
def _parse_extension_headers(self, data, next_header, message_info):
|
||||
extension_headers = []
|
||||
@@ -956,11 +925,9 @@ class IPv6PacketFactory(PacketFactory):
|
||||
message_info.source_ipv6 = ipv6_header.source_address
|
||||
message_info.destination_ipv6 = ipv6_header.destination_address
|
||||
|
||||
next_header, extension_headers = self._parse_extension_headers(
|
||||
data, ipv6_header.next_header, message_info)
|
||||
next_header, extension_headers = self._parse_extension_headers(data, ipv6_header.next_header, message_info)
|
||||
|
||||
upper_layer_protocol = self._parse_upper_layer_protocol(
|
||||
data, next_header, message_info)
|
||||
upper_layer_protocol = self._parse_upper_layer_protocol(data, next_header, message_info)
|
||||
|
||||
return IPv6Packet(ipv6_header, upper_layer_protocol, extension_headers)
|
||||
|
||||
@@ -972,16 +939,13 @@ class HopByHopOptionsFactory(object):
|
||||
_many_bytes_padding = 0x01
|
||||
|
||||
def __init__(self, options_factories=None):
|
||||
self._options_factories = (options_factories
|
||||
if options_factories is not None else {})
|
||||
self._options_factories = (options_factories if options_factories is not None else {})
|
||||
|
||||
def _get_HopByHopOption_value_factory(self, _type):
|
||||
try:
|
||||
return self._options_factories[_type]
|
||||
except KeyError:
|
||||
raise RuntimeError(
|
||||
"Could not find HopByHopOption value factory for type={}.".
|
||||
format(_type))
|
||||
raise RuntimeError("Could not find HopByHopOption value factory for type={}.".format(_type))
|
||||
|
||||
def parse(self, data, message_info):
|
||||
options = []
|
||||
@@ -998,8 +962,7 @@ class HopByHopOptionsFactory(object):
|
||||
data.read(option_header.length)
|
||||
|
||||
else:
|
||||
factory = self._get_HopByHopOption_value_factory(
|
||||
option_header.type)
|
||||
factory = self._get_HopByHopOption_value_factory(option_header.type)
|
||||
|
||||
option_data = data.read(option_header.length)
|
||||
|
||||
@@ -1029,13 +992,11 @@ class HopByHopFactory(PacketFactory):
|
||||
|
||||
# Note! Two bytes were read (next_header and hdr_ext_len) so they must
|
||||
# be substracted from header length
|
||||
hop_by_hop_length = (
|
||||
self._calculate_extension_header_length(hdr_ext_len) - 2)
|
||||
hop_by_hop_length = (self._calculate_extension_header_length(hdr_ext_len) - 2)
|
||||
|
||||
hop_by_hop_data = data.read(hop_by_hop_length)
|
||||
|
||||
options = self._hop_by_hop_options_factory.parse(
|
||||
io.BytesIO(hop_by_hop_data), message_info)
|
||||
options = self._hop_by_hop_options_factory.parse(io.BytesIO(hop_by_hop_data), message_info)
|
||||
|
||||
hop_by_hop = HopByHop(next_header, options, hdr_ext_len)
|
||||
|
||||
@@ -1103,8 +1064,7 @@ class UDPDatagramFactory(PacketFactory):
|
||||
header = self._udp_header_factory.parse(data, message_info)
|
||||
|
||||
# Update message payload length: UDP header (8B) + payload length
|
||||
message_info.payload_length += len(header) + (len(data.getvalue()) -
|
||||
data.tell())
|
||||
message_info.payload_length += len(header) + (len(data.getvalue()) - data.tell())
|
||||
|
||||
message_info.src_port = header.src_port
|
||||
message_info.dst_port = header.dst_port
|
||||
@@ -1118,8 +1078,7 @@ class ICMPv6Factory(PacketFactory):
|
||||
""" Factory that produces ICMPv6 messages from data. """
|
||||
|
||||
def __init__(self, body_factories=None):
|
||||
self._body_factories = (body_factories
|
||||
if body_factories is not None else {})
|
||||
self._body_factories = (body_factories if body_factories is not None else {})
|
||||
|
||||
def _get_icmpv6_body_factory(self, _type):
|
||||
try:
|
||||
@@ -1127,9 +1086,8 @@ class ICMPv6Factory(PacketFactory):
|
||||
|
||||
except KeyError:
|
||||
if "default" not in self._body_factories:
|
||||
raise RuntimeError(
|
||||
"Could not find specialized factory to parse ICMP body. "
|
||||
"Unsupported ICMP type: {}".format(_type))
|
||||
raise RuntimeError("Could not find specialized factory to parse ICMP body. "
|
||||
"Unsupported ICMP type: {}".format(_type))
|
||||
|
||||
default_factory = self._body_factories["default"]
|
||||
|
||||
@@ -1143,8 +1101,7 @@ class ICMPv6Factory(PacketFactory):
|
||||
|
||||
factory = self._get_icmpv6_body_factory(header.type)
|
||||
|
||||
message_info.payload_length += len(header) + (len(data.getvalue()) -
|
||||
data.tell())
|
||||
message_info.payload_length += len(header) + (len(data.getvalue()) - data.tell())
|
||||
|
||||
return ICMPv6(header, factory.parse(data, message_info))
|
||||
|
||||
@@ -1233,8 +1190,7 @@ class ICMPv6DestinationUnreachable(ConvertibleToBytes, BuildableFromBytes):
|
||||
unused = struct.unpack(">I", data.read(4))[0]
|
||||
if unused != 0:
|
||||
raise RuntimeError(
|
||||
"Invalid value of unused field in the ICMPv6 Destination Unreachable data. Expected value: 0."
|
||||
)
|
||||
"Invalid value of unused field in the ICMPv6 Destination Unreachable data. Expected value: 0.")
|
||||
|
||||
return cls(bytearray(data.read()))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user