scapy.contrib.oam

Operation, administration and maintenance (OAM)

author:

Sergey Matsievskiy, matsievskiysv@gmail.com

description:

This module provides Scapy layers for the OAM protocol.

normative references:
class scapy.contrib.oam.APS(_pkt, /, *, req_st=0, prot_type=<Flag 0 ()>, req_sig=0, br_sig=0, br_type=<Flag 0 ()>)[source]

Bases: Packet

Linear protective switching APS data packet

aliastypes = [<class 'scapy.contrib.oam.APS'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (APS).req_st>, <FlagsField (APS).prot_type>, <EnumField (APS).req_sig>, <EnumField (APS).br_sig>, <FlagsField (APS).br_type>]
class scapy.contrib.oam.MegId(_pkt, /, *, resv=1, format=0, length=None, values=None)[source]

Bases: Packet

MEG ID

aliastypes = [<class 'scapy.contrib.oam.MegId'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (MegId).resv>, <ByteField (MegId).format>, <scapy.fields.MultipleTypeField object>, <scapy.fields.PadField object>]
class scapy.contrib.oam.MepIdField(name, default)[source]

Bases: ShortField

Short field with insignificant three leading bytes

class scapy.contrib.oam.OAM(_pkt, /, *, mel=0, version=None, opcode=None, flags=None, period=None, tlv_offset=None, seq_num=0, trans_id=0, oui=None, subopcode=None, mep_id=0, meg_id=<MegId  |>, src_mep_id=0, rcv_mep_id=0, test_id=0, txfcf=0, rxfcb=0, rxfcf=0, txfcb=0, resv=0, ttl=0, orig_mac=None, targ_mac=None, relay_act=None, txtsf=<PTP_TIMESTAMP  |>, rxtsf=<PTP_TIMESTAMP  |>, txtsb=<PTP_TIMESTAMP  |>, rxtsb=<PTP_TIMESTAMP  |>, expct_dur=None, nom_bdw=None, curr_bdw=None, port_id=None, aps=<APS  |>, raps=<RAPS  |>, tlvs=[], opt_data=None, end_tlv=0)[source]

Bases: Packet

OAM data unit

BNM_PERIOD_FLAGS = {4: '1 frame per second', 5: '1 frame per 10 seconds', 6: '1 frame per minute'}
OPCODES = {1: 'Continuity Check Message (CCM)', 2: 'Loopback Reply (LBR)', 3: 'Loopback Message (LBM)', 4: 'Linktrace Reply (LTR)', 5: 'Linktrace Message (LTM)', 32: 'Generic Notification Message (GNM)', 33: 'Alarm Indication Signal (AIS)', 35: 'Lock Signal (LCK)', 37: 'Test Signal (TST)', 39: 'Automatic Protection Switching (APS)', 40: 'Ring-Automatic Protection Switching (R-APS)', 41: 'Maintenance Communication Channel (MCC)', 42: 'Loss Measurement Reply (LMR)', 43: 'Loss Measurement Message (LMM)', 45: 'One Way Delay Measurement (1DM)', 46: 'Delay Measurement Reply (DMR)', 47: 'Delay Measurement Message (DMM)', 48: 'Experimental OAM Reply (EXR)', 49: 'Experimental OAM Message (EXM)', 50: 'Vendor Specific Reply (VSR)', 51: 'Vendor Specific Message (VSM)', 52: 'Client Signal Fail (CSF)', 53: 'One Way Synthetic Loss Measurement (1SL)', 54: 'Synthetic Loss Reply (SLR)', 55: 'Synthetic Loss Message (SLM)'}
PERIOD_FLAGS = {4: '1 frame per second', 6: '1 frame per minute'}
TIME_FLAGS = {0: 'Invalid value', 1: 'Trans Int 3.33ms', 2: 'Trans Int 10ms', 3: 'Trans Int 100ms', 4: 'Trans Int 1s', 5: 'Trans Int 10s', 6: 'Trans Int 1min', 7: 'Trans Int 10min'}
aliastypes = [<class 'scapy.contrib.oam.OAM'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitField (OAM).mel>, <scapy.fields.MultipleTypeField object>, <EnumField (OAM).opcode>, <scapy.fields.MultipleTypeField object>, <scapy.fields.ConditionalField object>, <scapy.fields.MultipleTypeField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <ByteField (OAM).end_tlv>]
class scapy.contrib.oam.OAM_DATA_TLV(_pkt, /, *, type=3, length=None)[source]

Bases: Packet

OAM Data TLV

aliastypes = [<class 'scapy.contrib.oam.OAM_DATA_TLV'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (OAM_DATA_TLV).type>, <LenField (OAM_DATA_TLV).length>]
class scapy.contrib.oam.OAM_LTM_TLV(_pkt, /, *, type=7, length=8, egress_id=0)[source]

Bases: Packet

OAM LTM TLV data

aliastypes = [<class 'scapy.contrib.oam.OAM_LTM_TLV'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (OAM_LTM_TLV).type>, <LenField (OAM_LTM_TLV).length>, <LongField (OAM_LTM_TLV).egress_id>]
class scapy.contrib.oam.OAM_LTR_EG_TLV(_pkt, /, *, type=6, length=7, egress_act=0, egress_mac=None)[source]

Bases: Packet

OAM LTR TLV data

aliastypes = [<class 'scapy.contrib.oam.OAM_LTR_EG_TLV'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (OAM_LTR_EG_TLV).type>, <LenField (OAM_LTR_EG_TLV).length>, <ByteField (OAM_LTR_EG_TLV).egress_act>, <MACField (OAM_LTR_EG_TLV).egress_mac>]
class scapy.contrib.oam.OAM_LTR_IG_TLV(_pkt, /, *, type=5, length=7, ingress_act=0, ingress_mac=None)[source]

Bases: Packet

OAM LTR TLV data

aliastypes = [<class 'scapy.contrib.oam.OAM_LTR_IG_TLV'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (OAM_LTR_IG_TLV).type>, <LenField (OAM_LTR_IG_TLV).length>, <ByteField (OAM_LTR_IG_TLV).ingress_act>, <MACField (OAM_LTR_IG_TLV).ingress_mac>]
class scapy.contrib.oam.OAM_LTR_TLV(_pkt, /, *, type=8, length=16, last_egress_id=0, next_egress_id=0)[source]

Bases: Packet

OAM LTR TLV data

aliastypes = [<class 'scapy.contrib.oam.OAM_LTR_TLV'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (OAM_LTR_TLV).type>, <LenField (OAM_LTR_TLV).length>, <LongField (OAM_LTR_TLV).last_egress_id>, <LongField (OAM_LTR_TLV).next_egress_id>]
class scapy.contrib.oam.OAM_TEST_ID_TLV(_pkt, /, *, type=36, length=32, test_id=0)[source]

Bases: Packet

OAM Test ID TLV data

aliastypes = [<class 'scapy.contrib.oam.OAM_TEST_ID_TLV'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (OAM_TEST_ID_TLV).type>, <LenField (OAM_TEST_ID_TLV).length>, <IntField (OAM_TEST_ID_TLV).test_id>]
class scapy.contrib.oam.OAM_TEST_TLV(_pkt, /, *, type=32, length=None, pat_type=0, crc=None)[source]

Bases: Packet

OAM test TLV data

aliastypes = [<class 'scapy.contrib.oam.OAM_TEST_TLV'>, <class 'scapy.packet.Packet'>]
do_dissect(s)[source]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (OAM_TEST_TLV).type>, <scapy.fields.MultipleTypeField object>, <EnumField (OAM_TEST_TLV).pat_type>, <scapy.fields.ConditionalField object>]
post_build(p, pay)[source]
class scapy.contrib.oam.OAM_TLV(_pkt, /, *, type=1, length=None)[source]

Bases: Packet

OAM TLV

aliastypes = [<class 'scapy.contrib.oam.OAM_TLV'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (OAM_TLV).type>, <LenField (OAM_TLV).length>]
class scapy.contrib.oam.PTP_TIMESTAMP(_pkt, /, *, seconds=0, nanoseconds=0)[source]

Bases: Packet

PTP timestamp

aliastypes = [<class 'scapy.contrib.oam.PTP_TIMESTAMP'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<IntField (PTP_TIMESTAMP).seconds>, <IntField (PTP_TIMESTAMP).nanoseconds>]
class scapy.contrib.oam.RAPS(_pkt, /, *, req_st=0, sub_code=None, status=<Flag 0 ()>, node_id=None, resv=0)[source]

Bases: Packet

Ring protective switching R-APS data packet

aliastypes = [<class 'scapy.contrib.oam.RAPS'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (RAPS).req_st>, <scapy.fields.MultipleTypeField object>, <FlagsField (RAPS).status>, <MACField (RAPS).node_id>, <NBytesField (RAPS).resv>]
scapy.contrib.oam.guess_tlv_type(pkt, lst, cur, remain)[source]