Source code for pcapkit.const.ipv6.option
# -*- coding: utf-8 -*-
# pylint: disable=line-too-long,consider-using-f-string
"""Destination Options and Hop-by-Hop Options
================================================
This module contains the constant enumeration for **Destination Options and Hop-by-Hop Options**,
which is automatically generated from :class:`pcapkit.vendor.ipv6.option.Option`.
"""
from aenum import IntEnum, extend_enum
__all__ = ['Option']
[docs]class Option(IntEnum):
"""[Option] Destination Options and Hop-by-Hop Options"""
#: Pad1 [:rfc:`2460`]
Pad1 = 0x00
#: PadN [:rfc:`2460`]
PadN = 0x01
#: Jumbo Payload [:rfc:`2675`]
Jumbo_Payload = 0xC2
#: RPL Option [:rfc:`9008`]
RPL_Option_0x23 = 0x23
#: RPL Option (DEPRECATED) [:rfc:`6553`][:rfc:`9008`]
RPL_Option_0x63 = 0x63
#: Tunnel Encapsulation Limit [:rfc:`2473`]
Tunnel_Encapsulation_Limit = 0x04
#: Router Alert [:rfc:`2711`]
Router_Alert = 0x05
#: Quick-Start [:rfc:`4782`][RFC Errata 2034]
Quick_Start = 0x26
#: CALIPSO [:rfc:`5570`]
CALIPSO = 0x07
#: SMF_DPD [:rfc:`6621`]
SMF_DPD = 0x08
#: Home Address [:rfc:`6275`]
Home_Address = 0xC9
#: Endpoint Identification (DEPRECATED) [CHARLES LYNN]
Endpoint_Identification = 0x8A
#: ILNP Nonce [:rfc:`6744`]
ILNP_Nonce = 0x8B
#: Line-Identification Option [:rfc:`6788`]
Line_Identification_Option = 0x8C
#: Deprecated [:rfc:`7731`]
Deprecated = 0x4D
#: MPL Option [:rfc:`7731`]
MPL_Option = 0x6D
#: IP_DFF [:rfc:`6971`]
IP_DFF = 0xEE
#: Performance and Diagnostic Metrics (PDM) [:rfc:`8250`]
PDM = 0x0F
#: Path MTU Record Option [RFC-ietf-6man-mtu-option-15]
Path_MTU_Record_Option = 0x30
#: IOAM (TEMPORARY - registered 2020-04-16, extension registered 2022-04-12,
#: expires 2023-04-16) [draft-ietf-ippm-ioam-ipv6-options-05]
IOAM_0x11 = 0x11
#: IOAM (TEMPORARY - registered 2020-04-16, extension registered 2022-04-12,
#: expires 2023-04-16) [draft-ietf-ippm-ioam-ipv6-options-05]
IOAM_0x31 = 0x31
#: RFC3692-style Experiment [:rfc:`4727`]
RFC3692_style_Experiment_0x1E = 0x1E
#: RFC3692-style Experiment [:rfc:`4727`]
RFC3692_style_Experiment_0x3E = 0x3E
#: RFC3692-style Experiment [:rfc:`4727`]
RFC3692_style_Experiment_0x5E = 0x5E
#: RFC3692-style Experiment [:rfc:`4727`]
RFC3692_style_Experiment_0x7E = 0x7E
#: RFC3692-style Experiment [:rfc:`4727`]
RFC3692_style_Experiment_0x9E = 0x9E
#: RFC3692-style Experiment [:rfc:`4727`]
RFC3692_style_Experiment_0xBE = 0xBE
#: RFC3692-style Experiment [:rfc:`4727`]
RFC3692_style_Experiment_0xDE = 0xDE
#: RFC3692-style Experiment [:rfc:`4727`]
RFC3692_style_Experiment_0xFE = 0xFE
@staticmethod
def get(key: 'int | str', default: 'int' = -1) -> 'Option':
"""Backport support for original codes.
Args:
key: Key to get enum item.
default: Default value if not found.
"""
if isinstance(key, int):
return Option(key)
if key not in Option._member_map_: # pylint: disable=no-member
extend_enum(Option, key, default)
return Option[key] # type: ignore[misc]
[docs] @classmethod
def _missing_(cls, value: 'int') -> 'Option':
"""Lookup function used when value is not found.
Args:
value: Value to get enum item.
"""
if not (isinstance(value, int) and 0x00 <= value <= 0xFF):
raise ValueError('%r is not a valid %s' % (value, cls.__name__))
extend_enum(cls, 'Unassigned_0x%s' % hex(value)[2:].upper().zfill(2), value)
return cls(value)