# -*- coding: utf-8 -*-
"""data model for HOPOPT protocol"""
from typing import TYPE_CHECKING
from pcapkit.corekit.infoclass import Info
if TYPE_CHECKING:
from datetime import timedelta
from ipaddress import IPv4Address, IPv6Address
from typing import Optional
from pcapkit.const.ipv6.option import Option as RegType_Option
from pcapkit.const.ipv6.qs_function import QSFunction
from pcapkit.const.ipv6.router_alert import RouterAlert
from pcapkit.const.ipv6.seed_id import SeedID
from pcapkit.const.ipv6.smf_dpd_mode import SMFDPDMode
from pcapkit.const.ipv6.tagger_id import TaggerID
from pcapkit.const.reg.transtype import TransType
from pcapkit.corekit.multidict import OrderedMultiDict
__all__ = [
'HOPOPT',
'RPLFlags', 'MPLFlags', 'DFFFlags',
'UnassignedOption', 'PadOption', 'TunnelEncapsulationLimitOption',
'RouterAlertOption', 'CALIPSOOption', 'SMFIdentificationBasedDPDOption',
'SMFHashBasedDPDOption', 'PDMOption', 'QuickStartOption',
'RPLOption', 'MPLOption', 'ILNPOption',
'LineIdentificationOption', 'JumboPayloadOption', 'HomeAddressOption',
'IPDFFOption',
]
[docs]class Option(Info):
"""Data model for HOPOPT option data."""
#: Option type.
type: 'RegType_Option'
#: Unknown option cation.
action: 'int'
#: Change flag.
change: 'bool'
#: Content length.
length: 'int'
[docs]class HOPOPT(Info):
"""Data model for HOPOPT protocol."""
#: Next header.
next: 'TransType'
#: Header extension length.
length: 'int'
#: HOPOPT options.
options: 'OrderedMultiDict[RegType_Option, Option]'
if TYPE_CHECKING:
def __init__(self, next: 'TransType', length: 'int', options: 'OrderedMultiDict[RegType_Option, Option]') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class UnassignedOption(Option):
"""Data model for HOPOPT unassigned option."""
#: Option data.
data: 'bytes'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', data: 'bytes') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class PadOption(Option):
"""Data model for HOPOPT padding options."""
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class TunnelEncapsulationLimitOption(Option):
"""Data model for HOPOPT tunnel encapsulation limit option."""
#: Tunnel encapsulation limit.
limit: 'int'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', limit: 'int') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class RouterAlertOption(Option):
"""Data model for HOPOPT router alter option."""
#: Router alter value.
value: 'RouterAlert'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', value: 'RouterAlert') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class CALIPSOOption(Option):
"""Data model for HOPOPT Common Architecture Label IPv6 Security Option (CALIPSO) option."""
#: CALIPSO domain of interpretation.
domain: 'int'
#: Compartment length.
cmpt_len: 'int'
#: Sensitivity level.
level: 'int'
#: Checksum.
checksum: 'bytes'
if TYPE_CHECKING:
#: Compartment bitmap.
cmpt_bitmap: 'tuple[int, ...]'
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', domain: 'int', cmpt_len: 'int', level: 'int', checksum: 'bytes') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class SMFDPDOption(Option):
"""Data model for HOPOPT Simplified Multicast Forwarding Duplicate Packet Detection (``SMF_DPD``) option."""
#: DPD type.
dpd_type: 'SMFDPDMode'
#: TaggerID type.
tid_type: 'TaggerID'
[docs]class SMFIdentificationBasedDPDOption(SMFDPDOption):
"""Data model for HOPOPT **I-DPD** (Identification-Based DPD) option."""
#: TaggerID length.
tid_len: 'int'
#: TaggerID.
tid: 'Optional[int | IPv4Address | IPv6Address]'
#: Identifier.
id: 'int'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', dpd_type: 'SMFDPDMode', tid_type: 'TaggerID', tid_len: 'int', tid: 'Optional[int | IPv4Address | IPv6Address]', id: 'int') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class SMFHashBasedDPDOption(SMFDPDOption):
"""Data model for HOPOPT **H-DPD** (Hash-Based DPD) option."""
#: Hash assist value.
hav: 'bytes'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', dpd_type: 'SMFDPDMode', tid_type: 'TaggerID', hav: 'bytes') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class PDMOption(Option):
"""Data model for HOPOPT Performance Diagnostic Metrics (PDM) option."""
#: Scale delta time last received.
scaledtlr: 'timedelta'
#: Scale delta time last sent.
scaledtls: 'timedelta'
#: Packet sequence number this packet.
psntp: 'int'
#: Packet sequence number last received.
psnlr: 'int'
#: Delta time last received.
deltatlr: 'timedelta'
#: Delta time last sent.
deltatls: 'timedelta'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', scaledtlr: 'timedelta', scaledtls: 'timedelta', psntp: 'int', psnlr: 'int', deltatlr: 'timedelta', deltatls: 'timedelta') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class QuickStartOption(Option):
"""Data model for HOPOPT Quick Start option."""
#: QS function.
func: 'QSFunction'
#: Rate request/report.
rate: 'int'
#: TTL.
ttl: 'Optional[timedelta]'
#: Nounce.
nounce: 'int'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', func: 'QSFunction', rate: 'int', ttl: 'Optional[timedelta]', nounce: 'int') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class RPLFlags(Info):
"""Data model for HOPOPT RPL option flags fields."""
#: Down flag.
down: 'bool'
#: Rank error flag.
rank_err: 'bool'
#: Forwarding error flag.
fwd_err: 'bool'
if TYPE_CHECKING:
def __init__(self, down: 'bool', rank_err: 'bool', fwd_err: 'bool') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class RPLOption(Option):
"""Data model for HOPOPT Routing Protocol for Low-Power and Lossy Networks (RPL) option."""
#: Flags.
flags: 'RPLFlags'
#: RPL instance ID.
id: 'int'
#: Sender rank.
rank:' int'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', flags: 'RPLFlags', id: 'int', rank: 'int') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class MPLFlags(Info):
"""Data model for HOPOPT MPL option flags fields."""
#: Max flag.
max: 'bool'
#: Verification flag.
verification: 'bool'
if TYPE_CHECKING:
def __init__(self, max: 'bool', verification: 'bool') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class MPLOption(Option):
"""Data model for HOPOPT Multicast Protocol for Low-Power and Lossy Networks (MPL) option."""
#: Seed length.
seed_type: 'SeedID'
#: Flags.
flags: 'MPLFlags'
#: Sequence number.
seq: 'int'
#: Seed ID.
seed_id: 'Optional[int]'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', seed_type: 'int', flags: 'MPLFlags', seq: 'int', seed_id: 'Optional[int]') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class ILNPOption(Option):
"""Data model for HOPOPT Identifier-Locator Network Protocol (ILNP) Nonce option."""
#: Nonce value.
nounce: 'bytes'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', nounce: 'bytes') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class LineIdentificationOption(Option):
"""Data model for HOPOPT Line-Identification option."""
#: Line ID length.
line_id_len: 'int'
#: Line ID.
line_id: 'int'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', line_id_len: 'int', line_id: 'int') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class JumboPayloadOption(Option):
"""Data model for Jumbo Payload option."""
#: Jumbo payload length.
payload_len: 'int'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', payload_len: 'int') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class HomeAddressOption(Option):
"""Data model for HOPOPT Home Address option."""
#: Home address.
address: 'IPv6Address'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', address: 'IPv6Address') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class DFFFlags(Info):
"""Data model for HOPOPT ``IP_DFF`` option flags."""
#: Duplicate flag.
dup: 'bool'
#: Return flag.
ret: 'bool'
if TYPE_CHECKING:
def __init__(self, dup: 'bool', ret: 'bool') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long
[docs]class IPDFFOption(Option):
"""Data model for HOPOPT Depth-First Forwarding (``IP_DFF``) option."""
#: Version.
version: 'int'
#:Flags.
flags: 'DFFFlags'
#: Sequence number.
seq: 'int'
if TYPE_CHECKING:
def __init__(self, type: 'RegType_Option', action: 'int', change: 'bool', length: 'int', version: 'int', flags: 'DFFFlags', seq: 'int') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,redefined-builtin,multiple-statements,line-too-long