scapy.contrib.mac_control
MACControl
- author:
Thomas Tannhaeuser, hecke@naberius.de
- description:
- This module provides Scapy layers for the MACControl protocol messages:
Pause
Gate
Report
Register/REQ/ACK
Class Based Flow Control
- normative references:
IEEE 802.3x
- NOTES:
this is based on the MACControl dissector used by Wireshark (https://github.com/wireshark/wireshark/blob/master/epan/dissectors/packet-maccontrol.c)
- class scapy.contrib.mac_control.MACControl(_pkt, /)[source]
Bases:
Packet- DEFAULT_DST_MAC = '01:80:c2:00:00:01'
- FLAG_ACK = 3
- FLAG_DEREGISTER = 2
- FLAG_NACK = 4
- FLAG_REGISTER = 1
- OP_CODES = {1: 'pause', 2: 'gate', 3: 'report', 4: 'register req', 5: 'register', 6: 'register_ack', 257: 'class based flow control'}
flags used by Register* messages
- OP_CODE_CLASS_BASED_FLOW_CONTROL = 257
- OP_CODE_GATE = 2
- OP_CODE_PAUSE = 1
- OP_CODE_REGISTER = 5
- OP_CODE_REGISTER_ACK = 6
- OP_CODE_REGISTER_REQ = 4
- OP_CODE_REPORT = 3
- REGISTER_FLAGS = {1: 'register', 2: 'deregister', 3: 'ack', 4: 'nack'}
- aliastypes = [<class 'scapy.contrib.mac_control.MACControl'>, <class 'scapy.packet.Packet'>]
- class scapy.contrib.mac_control.MACControlClassBasedFlowControl(_pkt, /, *, _op_code=257, _reserved=0, c7_enabled=0, c6_enabled=0, c5_enabled=0, c4_enabled=0, c3_enabled=0, c2_enabled=0, c1_enabled=0, c0_enabled=0, c0_pause_time=0, c1_pause_time=0, c2_pause_time=0, c3_pause_time=0, c4_pause_time=0, c5_pause_time=0, c6_pause_time=0, c7_pause_time=0)[source]
Bases:
MACControl- aliastypes = [<class 'scapy.contrib.mac_control.MACControlClassBasedFlowControl'>, <class 'scapy.contrib.mac_control.MACControl'>, <class 'scapy.packet.Packet'>]
- fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortField (MACControlClassBasedFlowControl)._op_code>, <ByteField (MACControlClassBasedFlowControl)._reserved>, <BitField (MACControlClassBasedFlowControl).c7_enabled>, <BitField (MACControlClassBasedFlowControl).c6_enabled>, <BitField (MACControlClassBasedFlowControl).c5_enabled>, <BitField (MACControlClassBasedFlowControl).c4_enabled>, <BitField (MACControlClassBasedFlowControl).c3_enabled>, <BitField (MACControlClassBasedFlowControl).c2_enabled>, <BitField (MACControlClassBasedFlowControl).c1_enabled>, <BitField (MACControlClassBasedFlowControl).c0_enabled>, <ShortField (MACControlClassBasedFlowControl).c0_pause_time>, <ShortField (MACControlClassBasedFlowControl).c1_pause_time>, <ShortField (MACControlClassBasedFlowControl).c2_pause_time>, <ShortField (MACControlClassBasedFlowControl).c3_pause_time>, <ShortField (MACControlClassBasedFlowControl).c4_pause_time>, <ShortField (MACControlClassBasedFlowControl).c5_pause_time>, <ShortField (MACControlClassBasedFlowControl).c6_pause_time>, <ShortField (MACControlClassBasedFlowControl).c7_pause_time>]
- class scapy.contrib.mac_control.MACControlGate(_pkt, /, *, _op_code=2, timestamp=0)[source]
Bases:
MACControl- aliastypes = [<class 'scapy.contrib.mac_control.MACControlGate'>, <class 'scapy.contrib.mac_control.MACControl'>, <class 'scapy.packet.Packet'>]
- exception scapy.contrib.mac_control.MACControlInvalidSpeedException[source]
Bases:
Scapy_Exception
- class scapy.contrib.mac_control.MACControlPause(_pkt, /, *, _op_code=1, pause_time=0)[source]
Bases:
MACControl- aliastypes = [<class 'scapy.contrib.mac_control.MACControlPause'>, <class 'scapy.contrib.mac_control.MACControl'>, <class 'scapy.packet.Packet'>]
- fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortField (MACControlPause)._op_code>, <ShortField (MACControlPause).pause_time>]
- get_pause_time(speed=4)[source]
get pause time for given link speed in seconds
- Parameters:
speed – select link speed to get the pause time for, must be ETHER_SPEED_MBIT_[10,100,1000] # noqa: E501
- Returns:
pause time in seconds
- Raises:
MACControlInvalidSpeedException – on invalid speed selector
- class scapy.contrib.mac_control.MACControlRegister(_pkt, /, *, _op_code=5, timestamp=0, flags=0, echoed_assigned_port=0, echoed_sync_time=0)[source]
Bases:
MACControl- aliastypes = [<class 'scapy.contrib.mac_control.MACControlRegister'>, <class 'scapy.contrib.mac_control.MACControl'>, <class 'scapy.packet.Packet'>]
- fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortField (MACControlRegister)._op_code>, <IntField (MACControlRegister).timestamp>, <ByteEnumField (MACControlRegister).flags>, <ShortField (MACControlRegister).echoed_assigned_port>, <ShortField (MACControlRegister).echoed_sync_time>]
- class scapy.contrib.mac_control.MACControlRegisterAck(_pkt, /, *, _op_code=6, timestamp=0, flags=0, echoed_assigned_port=0, echoed_sync_time=0)[source]
Bases:
MACControl- aliastypes = [<class 'scapy.contrib.mac_control.MACControlRegisterAck'>, <class 'scapy.contrib.mac_control.MACControl'>, <class 'scapy.packet.Packet'>]
- fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortField (MACControlRegisterAck)._op_code>, <IntField (MACControlRegisterAck).timestamp>, <ByteEnumField (MACControlRegisterAck).flags>, <ShortField (MACControlRegisterAck).echoed_assigned_port>, <ShortField (MACControlRegisterAck).echoed_sync_time>]
- class scapy.contrib.mac_control.MACControlRegisterReq(_pkt, /, *, _op_code=4, timestamp=0, assigned_port=0, flags=0, sync_time=0, echoed_pending_grants=0)[source]
Bases:
MACControl- aliastypes = [<class 'scapy.contrib.mac_control.MACControlRegisterReq'>, <class 'scapy.contrib.mac_control.MACControl'>, <class 'scapy.packet.Packet'>]
- fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortField (MACControlRegisterReq)._op_code>, <IntField (MACControlRegisterReq).timestamp>, <ShortField (MACControlRegisterReq).assigned_port>, <ByteEnumField (MACControlRegisterReq).flags>, <ShortField (MACControlRegisterReq).sync_time>, <ByteField (MACControlRegisterReq).echoed_pending_grants>]
- class scapy.contrib.mac_control.MACControlReport(_pkt, /, *, _op_code=3, timestamp=0, flags=0, pending_grants=0)[source]
Bases:
MACControl- aliastypes = [<class 'scapy.contrib.mac_control.MACControlReport'>, <class 'scapy.contrib.mac_control.MACControl'>, <class 'scapy.packet.Packet'>]