26 static_assert(
sizeof(
stp_tcn_bpdu) == 4,
"stp_tcn_bpdu size is not 4 bytes");
30 static_assert(
sizeof(
stp_header) == 4,
"stp_header size is not 4 bytes");
57 static_assert(
sizeof(
stp_conf_bpdu) == 35,
"stp_conf_bpdu size is not 35 bytes");
68 static_assert(
sizeof(
rstp_conf_bpdu) == 36,
"rstp_conf_bpdu size is not 36 bytes");
93 static_assert(
sizeof(
mstp_conf_bpdu) == 102,
"mstp_conf_bpdu size is not 102 bytes");
115 static_assert(
sizeof(
msti_conf_msg) == 16,
"msti_conf_msg size is not 16 bytes");
123 :
Layer(data, dataLen, prevLayer, packet,
STP)
142 static std::vector<FieldDescriptor>
all()
146 std::copy(extra.begin(), extra.end(), std::back_inserter(result));
267 :
StpLayer(data, dataLen, prevLayer, packet)
295 return "Spanning Tree Topology Change Notification";
305 return canReinterpretAs<stp_tcn_bpdu>(data, dataLen);
333 static std::vector<FieldDescriptor>
all()
352 static std::vector<FieldDescriptor>
all()
358 std::copy(extra.begin(), extra.end(), std::back_inserter(result));
550 return "Spanning Tree Configuration";
559 return canReinterpretAs<stp_conf_bpdu>(data, dataLen);
587 static std::vector<FieldDescriptor>
all()
591 std::copy(extra.begin(), extra.end(), std::back_inserter(result));
642 return "Rapid Spanning Tree";
651 return canReinterpretAs<rstp_conf_bpdu>(data, dataLen);
677 static std::vector<FieldDescriptor>
all()
684 std::copy(extra.begin(), extra.end(), std::back_inserter(result));
856 return "Multiple Spanning Tree";
865 return canReinterpretAs<mstp_conf_bpdu>(data, dataLen);
void allocData(size_t dataLen, bool zeroInit=true)
Requests the layer to allocate a new data buffer of the specified length.
Definition: MacAddress.h:24
Definition: StpLayer.h:659
void setMstConfigRevision(uint16_t value)
uint8_t getNumberOfMSTIConfMessages() const
Definition: StpLayer.h:836
uint32_t getCISTIrpc() const
void serializeLayer(ObjectScope &serializer) const override
void setRemainingHopCount(uint8_t value)
Definition: StpLayer.h:829
void parseNextLayer() override
Parses next layer.
Definition: StpLayer.h:850
mstp_conf_bpdu * getMstpHeader() const
Definition: StpLayer.h:722
uint64_t getCISTBridgeId() const
void setCISTBridgeSystemIDExtension(uint16_t value)
uint16_t getCISTBridgePriority() const
uint16_t getMstConfigRevision() const
void setMstConfigDigest(const uint8_t *value, uint8_t len)
uint8_t getMstConfigurationFormatSelector() const
Definition: StpLayer.h:736
uint8_t * getMstConfigDigest() const
Definition: StpLayer.h:767
msti_conf_msg * getMstiConfMessages() const
void setCISTBridgeId(uint64_t value)
void setCISTBridgeSystemID(const pcpp::MacAddress &value)
void setVersion3Len(uint16_t value)
std::string getMstConfigurationName() const
void setMstConfigurationName(const std::string &value)
pcpp::MacAddress getCISTBridgeSystemID() const
Definition: StpLayer.h:811
void setCISTBridgePriority(uint16_t value)
void setCISTIrpc(uint32_t value)
uint16_t getCISTBridgeSystemIDExtension() const
MultipleStpLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: StpLayer.h:669
uint16_t getVersion3Len() const
std::string toString() const override
Definition: StpLayer.h:854
void setMstConfigurationFormatSelector(uint8_t value)
Definition: StpLayer.h:743
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: StpLayer.h:863
uint8_t getRemainingHopCount() const
Definition: StpLayer.h:822
Definition: Serializers.h:230
Definition: StpLayer.h:566
uint8_t getVersion1Len() const
Definition: StpLayer.h:616
void parseNextLayer() override
Parses next layer.
std::string toString() const override
Definition: StpLayer.h:640
void serializeLayer(ObjectScope &serializer) const override
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: StpLayer.h:649
rstp_conf_bpdu * getRstpConfHeader() const
Definition: StpLayer.h:609
RapidStpLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: StpLayer.h:579
void setVersion1Len(uint8_t value)
Definition: StpLayer.h:623
size_t getHeaderLen() const override
Definition: StpLayer.h:631
Definition: StpLayer.h:312
void setBridgePriority(uint16_t value)
StpConfigurationBPDULayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: StpLayer.h:325
uint8_t getFlag() const
Definition: StpLayer.h:406
void setPathCost(uint32_t value)
size_t getHeaderLen() const override
Definition: StpLayer.h:539
StpConfigurationBPDULayer()
uint64_t getBridgeId() const
void setRootId(uint64_t value)
void setForwardDelay(double value)
pcpp::MacAddress getRootSystemID() const
Definition: StpLayer.h:444
uint16_t getPortId() const
void setMaximumAge(double value)
double getForwardDelay() const
void parseNextLayer() override
Parses next layer.
void setRootPriority(uint16_t value)
uint16_t getBridgeSystemIDExtension() const
void setBridgeSystemIDExtension(uint16_t value)
void setBridgeSystemID(const pcpp::MacAddress &value)
void setMessageAge(double value)
double getTransmissionInterval() const
stp_conf_bpdu * getStpConfHeader() const
Definition: StpLayer.h:399
double getMessageAge() const
uint16_t getBridgePriority() const
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: StpLayer.h:557
uint16_t getRootSystemIDExtension() const
void setFlag(uint8_t value)
Definition: StpLayer.h:413
void setRootSystemID(const pcpp::MacAddress &value)
double getMaximumAge() const
void setRootSystemIDExtension(uint16_t value)
pcpp::MacAddress getBridgeSystemID() const
Definition: StpLayer.h:487
uint32_t getPathCost() const
uint64_t getRootId() const
void setTransmissionInterval(double value)
void setBridgeId(uint64_t value)
std::string toString() const override
Definition: StpLayer.h:548
void setPortId(uint16_t value)
void serializeLayer(ObjectScope &serializer) const override
uint16_t getRootPriority() const
Definition: StpLayer.h:120
static StpLayer * parseStpLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
void serializeLayer(ObjectScope &serializer) const override
uint8_t getVersion() const
Definition: StpLayer.h:192
uint8_t getType() const
Definition: StpLayer.h:206
static pcpp::MacAddress StpUplinkFastMulticastDstMAC
STP Uplink Fast protocol uses "01:00:0C:CD:CD:CD" as destination MAC.
Definition: StpLayer.h:166
void setProtoId(uint16_t value)
Definition: StpLayer.h:185
void setType(uint8_t value)
Definition: StpLayer.h:213
uint16_t getProtoId() const
Definition: StpLayer.h:177
size_t getHeaderLen() const override
Definition: StpLayer.h:221
stp_header * getStpHeader() const
Definition: StpLayer.h:170
static pcpp::MacAddress StpMulticastDstMAC
STP protocol uses "01:80:C2:00:00:00" multicast address as destination MAC.
Definition: StpLayer.h:164
OsiModelLayer getOsiModelLayer() const override
Definition: StpLayer.h:231
void setVersion(uint8_t value)
Definition: StpLayer.h:199
void computeCalculateFields() override
Does nothing for this layer.
Definition: StpLayer.h:227
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: StpLayer.h:255
StpTopologyChangeBPDULayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: StpLayer.h:266
std::string toString() const override
Definition: StpLayer.h:293
StpTopologyChangeBPDULayer()
stp_tcn_bpdu * getStpTcnHeader()
Definition: StpLayer.h:276
size_t getHeaderLen() const override
Definition: StpLayer.h:284
void parseNextLayer() override
Parses next layer.
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: StpLayer.h:303
const ProtocolType STP
Spanning Tree Protocol.
Definition: ProtocolType.h:198
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:425
@ OsiModelDataLinkLayer
Data link layer (layer 2)
Definition: ProtocolType.h:429
stp_tcn_bpdu stp_header
Spanning Tree protocol common header.
Definition: StpLayer.h:26
Definition: Serializers.h:18
static std::vector< FieldDescriptor > all()
Definition: Layer.h:214
static constexpr uint16_t MaxID
Maximum field ID used by the layer.
Definition: Layer.h:229
Fields serialized for MultipleStpLayer, including its base layer fields.
Definition: StpLayer.h:675
static const FieldDescriptor CistInternalRootPathCost
CIST internal root path cost, in host byte order.
Definition: StpLayer.h:704
static const ObjectFieldDescriptor< BridgeIdSerializedFields > CistBridgeId
CIST bridge identifier containing priority, system identifier extension and MAC address.
Definition: StpLayer.h:707
static const FieldDescriptor ConfigRevision
MST configuration revision, in host byte order.
Definition: StpLayer.h:698
static const FieldDescriptor RemainingHopCount
CIST remaining hop count.
Definition: StpLayer.h:710
static const FieldDescriptor ConfigDigest
16-byte MST configuration digest as lowercase hexadecimal without separators.
Definition: StpLayer.h:701
static constexpr uint16_t MaxMultipleFieldID
Maximum field ID used by this layer.
Definition: StpLayer.h:713
static const FieldDescriptor Version3Length
Version 3 length, in bytes and host byte order.
Definition: StpLayer.h:689
static const FieldDescriptor ConfigFormatSelector
MST configuration format selector.
Definition: StpLayer.h:692
static const FieldDescriptor ConfigName
MST configuration name, up to 32 characters, terminated at the first null byte.
Definition: StpLayer.h:695
static std::vector< FieldDescriptor > all()
Definition: StpLayer.h:677
Fields serialized for RapidStpLayer, including its base layer fields.
Definition: StpLayer.h:585
static std::vector< FieldDescriptor > all()
Definition: StpLayer.h:587
static const FieldDescriptor Version1Length
Version 1 length, in bytes.
Definition: StpLayer.h:596
static constexpr uint16_t MaxRapidFieldID
Maximum field ID used by this layer.
Definition: StpLayer.h:599
Fields describing an STP bridge identifier.
Definition: StpLayer.h:331
static std::vector< FieldDescriptor > all()
Definition: StpLayer.h:333
static const FieldDescriptor SystemId
System identifier as a MAC address string.
Definition: StpLayer.h:345
static const FieldDescriptor Priority
Bridge priority, in host byte order.
Definition: StpLayer.h:339
static const FieldDescriptor SystemIdExtension
System identifier extension, in host byte order.
Definition: StpLayer.h:342
Fields serialized for StpConfigurationBPDULayer, including its base layer fields.
Definition: StpLayer.h:350
static constexpr uint16_t MaxConfigurationFieldID
Maximum field ID used by this layer.
Definition: StpLayer.h:390
static const FieldDescriptor PathCost
Root path cost, in host byte order.
Definition: StpLayer.h:369
static const ObjectFieldDescriptor< BridgeIdSerializedFields > BridgeId
Bridge identifier containing priority, system identifier extension and MAC address.
Definition: StpLayer.h:372
static const FieldDescriptor MaximumAge
BPDU maximum age, as returned by getMaximumAge().
Definition: StpLayer.h:381
static std::vector< FieldDescriptor > all()
Definition: StpLayer.h:352
static const FieldDescriptor TransmissionInterval
BPDU transmission interval, as returned by getTransmissionInterval().
Definition: StpLayer.h:384
static const FieldDescriptor ForwardDelay
Forward delay, as returned by getForwardDelay().
Definition: StpLayer.h:387
static const ObjectFieldDescriptor< BridgeIdSerializedFields > RootId
Root bridge identifier containing priority, system identifier extension and MAC address.
Definition: StpLayer.h:366
static const FieldDescriptor PortId
Port identifier, in host byte order.
Definition: StpLayer.h:375
static const FieldDescriptor Flags
Raw BPDU flag bits.
Definition: StpLayer.h:363
static const FieldDescriptor MessageAge
BPDU message age, as returned by getMessageAge().
Definition: StpLayer.h:378
Fields serialized for StpLayer, including its base layer fields.
Definition: StpLayer.h:140
static std::vector< FieldDescriptor > all()
Definition: StpLayer.h:142
static const FieldDescriptor ProtoId
BPDU protocol identifier, as an unsigned integer in host byte order.
Definition: StpLayer.h:151
static const FieldDescriptor Type
BPDU type (0 for configuration, 2 for RSTP/MSTP, 128 for TCN).
Definition: StpLayer.h:157
static const FieldDescriptor Version
BPDU protocol version.
Definition: StpLayer.h:154
static constexpr uint16_t MaxStpFieldID
Maximum field ID used by this layer.
Definition: StpLayer.h:160
Definition: StpLayer.h:100
uint8_t portPriority
Priority value of port.
Definition: StpLayer.h:110
uint8_t bridgePriority
Priority value of switching device.
Definition: StpLayer.h:108
uint8_t flags
MSTI flags.
Definition: StpLayer.h:102
uint8_t remainingHops
Remaining hops of BPDU.
Definition: StpLayer.h:112
uint64_t regionalRootId
Regional root switching id (Priority (4 bits) + ID (12 bits) + Regional root (48 bits - MAC address))
Definition: StpLayer.h:104
uint32_t pathCost
Total path cost from local port to regional port.
Definition: StpLayer.h:106
Definition: StpLayer.h:74
uint8_t mstConfigFormatSelector
Configuration id format selector.
Definition: StpLayer.h:78
uint32_t irpc
CIST internal root path cost.
Definition: StpLayer.h:86
uint16_t version3Len
Version3 length.
Definition: StpLayer.h:76
uint8_t mstConfigName[32]
Configuration id name.
Definition: StpLayer.h:80
uint64_t cistBridgeId
CIST bridge id.
Definition: StpLayer.h:88
uint8_t remainId
CIST remaining hop count.
Definition: StpLayer.h:90
uint8_t mstConfigDigest[16]
Configuration id digest.
Definition: StpLayer.h:84
uint16_t mstConfigRevision
Configuration id revision.
Definition: StpLayer.h:82
Definition: StpLayer.h:63
uint8_t version1Len
Version1 length. The value is 0x0.
Definition: StpLayer.h:65
Definition: StpLayer.h:36
uint8_t flag
Flag for indicate purpose of BPDU.
Definition: StpLayer.h:38
uint64_t rootId
Root bridge ID.
Definition: StpLayer.h:40
uint64_t bridgeId
Bridge ID.
Definition: StpLayer.h:44
uint16_t helloTime
BPDU transmission interval.
Definition: StpLayer.h:52
uint16_t msgAge
Age of the BPDU.
Definition: StpLayer.h:48
uint16_t portId
Port ID.
Definition: StpLayer.h:46
uint16_t maxAge
Maximum age of the BPDU.
Definition: StpLayer.h:50
uint32_t pathCost
Cost of path.
Definition: StpLayer.h:42
uint16_t forwardDelay
Delay for STP.
Definition: StpLayer.h:54
Definition: StpLayer.h:17
uint8_t version
Protocol version. 0x0 for STP, 0x2 for RSTP, 0x3 for MSTP.
Definition: StpLayer.h:21
uint16_t protoId
Protocol ID. Fixed at 0x0, which represents IEEE 802.1d.
Definition: StpLayer.h:19
uint8_t type
Type of the BPDU. 0x0 for configuration, 0x2 for RSTP/MSTP, 0x80 for TCN.
Definition: StpLayer.h:23