/src/PcapPlusPlus/Packet++/src/LLCLayer.cpp
Line | Count | Source |
1 | | #define LOG_MODULE PacketLogModuleLLCLayer |
2 | | |
3 | | #include "LLCLayer.h" |
4 | | #include "PayloadLayer.h" |
5 | | #include "StpLayer.h" |
6 | | |
7 | | #include <cstring> |
8 | | |
9 | | namespace pcpp |
10 | | { |
11 | | |
12 | | LLCLayer::LLCLayer(uint8_t dsap, uint8_t ssap, uint8_t control) |
13 | 0 | { |
14 | 0 | allocData(sizeof(llc_header)); |
15 | 0 | m_Protocol = LLC; |
16 | | |
17 | | // Set values |
18 | 0 | llc_header* header = getLlcHeader(); |
19 | 0 | header->dsap = dsap; |
20 | 0 | header->ssap = ssap; |
21 | 0 | header->control = control; |
22 | 0 | } |
23 | | |
24 | | void LLCLayer::parseNextLayer() |
25 | 3.98k | { |
26 | 3.98k | if (m_DataLen <= sizeof(llc_header)) |
27 | 1.27k | return; |
28 | | |
29 | 2.71k | llc_header* hdr = getLlcHeader(); |
30 | 2.71k | uint8_t* payload = m_Data + sizeof(llc_header); |
31 | 2.71k | size_t payloadLen = m_DataLen - sizeof(llc_header); |
32 | | |
33 | 2.71k | if (hdr->dsap == 0x42 && hdr->ssap == 0x42 && StpLayer::isDataValid(payload, payloadLen)) |
34 | 0 | { |
35 | 0 | constructNextLayerFromFactory(StpLayer::parseStpLayer, payload, payloadLen); |
36 | 0 | } |
37 | | |
38 | 2.71k | if (!hasNextLayer()) |
39 | 2.71k | { |
40 | 2.71k | constructNextLayer<PayloadLayer>(payload, payloadLen); |
41 | 2.71k | } |
42 | 2.71k | } |
43 | | |
44 | | std::string LLCLayer::toString() const |
45 | 2.04k | { |
46 | 2.04k | return "Logical Link Control"; |
47 | 2.04k | } |
48 | | |
49 | | bool LLCLayer::isDataValid(const uint8_t* data, size_t dataLen) |
50 | 4.23k | { |
51 | 4.23k | return dataLen >= sizeof(llc_header) && !(data[0] == 0xFF && data[1] == 0xFF); |
52 | 4.23k | } |
53 | | |
54 | | } // namespace pcpp |