Coverage Report

Created: 2024-02-25 06:29

/src/PcapPlusPlus/Tests/Fuzzers/ReadParsedPacket.h
Line
Count
Source
1
#pragma once
2
3
#include <Packet.h>
4
#include <IPv4Layer.h>
5
#include <TelnetLayer.h>
6
#include <BgpLayer.h>
7
#include <DhcpLayer.h>
8
#include <DhcpV6Layer.h>
9
#include <DnsLayer.h>
10
#include <IcmpLayer.h>
11
#include <NtpLayer.h>
12
#include <SSLLayer.h>
13
#include <SSLHandshake.h>
14
#include <TcpLayer.h>
15
#include <SdpLayer.h>
16
#include <VrrpLayer.h>
17
#include <Sll2Layer.h>
18
#include <FtpLayer.h>
19
#include <GreLayer.h>
20
#include <GtpLayer.h>
21
#include <SomeIpSdLayer.h>
22
23
// Call some pcpp::Packet methods that are not invoked from general virtual methods
24
// as `pcpp::Packet::toString` or `pcpp::Packet::computeCalculateFields` to trigger possible crashes.
25
// The general rule is the functions do not modify the `parsedPacket`.
26
// If you made changes to PcapPlusPlus and the code doesn't compile - fix the method call as any other unit test
27
static void readParsedPacket(pcpp::Packet parsedPacket, pcpp::Layer* layer)
28
893k
{
29
893k
    if (parsedPacket.isPacketOfType(pcpp::Telnet))
30
5.31k
    {
31
5.31k
        if (auto telnetLayer = dynamic_cast<pcpp::TelnetLayer*>(layer))
32
1.12k
        {
33
1.12k
            telnetLayer->getFirstCommand();
34
1.12k
            telnetLayer->getTotalNumberOfCommands();
35
36
1.12k
            pcpp::TelnetLayer::TelnetCommand commandVal;
37
1.12k
            do
38
11.0k
            {
39
11.0k
                commandVal = telnetLayer->getNextCommand();
40
11.0k
                std::cout << "Telnet command is '" << telnetLayer->getTelnetCommandAsString(commandVal) << "'" << std::endl;
41
11.0k
                pcpp::TelnetLayer::TelnetOption option = telnetLayer->getOption();
42
11.0k
                std::cout << "Telnet option is '" << telnetLayer->getTelnetOptionAsString(option) << "'" << std::endl;
43
44
11.0k
                telnetLayer->getDataAsString(true);
45
11.0k
                telnetLayer->getNumberOfCommands(commandVal);
46
11.0k
                telnetLayer->getOption(commandVal);
47
11.0k
                size_t length = 0;
48
11.0k
                telnetLayer->getOptionData(length);
49
11.0k
                telnetLayer->getOptionData(commandVal, length);
50
11.0k
            }
51
11.0k
            while (commandVal != pcpp::TelnetLayer::TelnetCommand::TelnetCommandEndOfPacket);
52
1.12k
        }
53
5.31k
    }
54
893k
    if (parsedPacket.isPacketOfType(pcpp::ARP))
55
17.6k
    {
56
17.6k
        if (auto arpLayer = dynamic_cast<pcpp::ArpLayer*>(layer))
57
6.91k
        {
58
6.91k
            arpLayer->isReply();
59
6.91k
            arpLayer->isRequest();
60
6.91k
        }
61
17.6k
    }
62
893k
    if (parsedPacket.isPacketOfType(pcpp::SomeIP))
63
39.5k
    {
64
39.5k
        if (auto someipLayer = dynamic_cast<pcpp::SomeIpSdLayer*>(layer))
65
3.59k
        {
66
3.59k
            auto entries = someipLayer->getEntries();
67
3.59k
            if (!entries.empty())
68
3.24k
            {
69
3.24k
                auto opts = someipLayer->getOptionsFromEntry(0);
70
3.24k
                for (auto opt : opts)
71
670
                    delete opt;
72
3.24k
            }
73
74
3.59k
            for (auto entry : entries)
75
3.86k
            {
76
3.86k
                entry->getNumOptions();
77
3.86k
                entry->getServiceId();
78
3.86k
                entry->getInstanceId();
79
3.86k
                entry->getMajorVersion();
80
3.86k
                entry->getMinorVersion();
81
3.86k
                entry->getCounter();
82
3.86k
                entry->getEventgroupId();
83
3.86k
                delete entry;
84
3.86k
            }
85
86
3.59k
            someipLayer->getFlags();
87
3.59k
            auto opts = someipLayer->getOptions();
88
3.59k
            for (auto opt : opts)
89
829
            {
90
829
                opt->getType();
91
829
                if (auto v4opt = dynamic_cast<pcpp::SomeIpSdIPv4Option*>(opt))
92
456
                {
93
456
                    v4opt->getIpAddress();
94
456
                    v4opt->getPort();
95
456
                    v4opt->getProtocol();
96
456
                }
97
373
                else if (auto v6opt = dynamic_cast<pcpp::SomeIpSdIPv6Option*>(opt))
98
19
                {
99
19
                    v6opt->getIpAddress();
100
19
                    v6opt->getPort();
101
19
                    v6opt->getProtocol();
102
19
                }
103
829
                delete opt;
104
829
            }
105
3.59k
        }
106
39.5k
    }
107
893k
    if (parsedPacket.isPacketOfType(pcpp::GTP))
108
17.1k
    {
109
17.1k
        if (auto gtpLayer = dynamic_cast<pcpp::GtpV1Layer*>(layer))
110
4.65k
        {
111
4.65k
            uint16_t value16 = 0;
112
4.65k
            gtpLayer->getSequenceNumber(value16);
113
4.65k
            uint8_t value8;
114
4.65k
            gtpLayer->getNpduNumber(value8);
115
4.65k
            gtpLayer->getMessageType();
116
4.65k
            gtpLayer->getMessageTypeAsString();
117
4.65k
            gtpLayer->isGTPUMessage();
118
4.65k
            gtpLayer->isGTPCMessage();
119
4.65k
            auto ext = gtpLayer->getNextExtension();
120
4.65k
            ext.getExtensionType();
121
4.65k
            ext.getContent();
122
4.65k
            ext.getContentLength();
123
4.65k
            ext.getNextExtension();
124
4.65k
        }
125
17.1k
    }
126
893k
    if (parsedPacket.isPacketOfType(pcpp::GRE))
127
20.9k
    {
128
20.9k
        if (auto greLayer = dynamic_cast<pcpp::GreLayer*>(layer))
129
5.06k
        {
130
5.06k
            uint32_t value32 = 0;
131
5.06k
            greLayer->getSequenceNumber(value32);
132
5.06k
        }
133
20.9k
    }
134
893k
    if (parsedPacket.isPacketOfType(pcpp::GREv0))
135
17.1k
    {
136
17.1k
        if (auto greLayer = dynamic_cast<pcpp::GREv0Layer*>(layer))
137
4.14k
        {
138
4.14k
            uint16_t value16 = 0;
139
4.14k
            greLayer->getChecksum(value16);
140
4.14k
            greLayer->getOffset(value16);
141
4.14k
            uint32_t value32 = 0;
142
4.14k
            greLayer->getKey(value32);
143
4.14k
        }
144
17.1k
    }
145
893k
    if (parsedPacket.isPacketOfType(pcpp::GREv1))
146
4.06k
    {
147
4.06k
        if (auto greLayer = dynamic_cast<pcpp::GREv1Layer*>(layer))
148
918
        {
149
918
            uint32_t value32 = 0;
150
918
            greLayer->getAcknowledgmentNum(value32);
151
918
        }
152
4.06k
    }
153
893k
    if (parsedPacket.isPacketOfType(pcpp::FTP))
154
1.40k
    {
155
1.40k
        if (auto ftpLayer = dynamic_cast<pcpp::FtpRequestLayer*>(layer))
156
146
        {
157
146
            ftpLayer->getCommandOption(false);
158
146
            ftpLayer->getCommandOption(true);
159
146
        }
160
1.26k
        else if (auto ftpLayer = dynamic_cast<pcpp::FtpResponseLayer*>(layer))
161
203
        {
162
203
            ftpLayer->getStatusCode();
163
203
            ftpLayer->getStatusOption(false);
164
203
            ftpLayer->getStatusOption(true);
165
203
        }
166
1.40k
    }
167
893k
    if (parsedPacket.isPacketOfType(pcpp::SLL2))
168
3.37k
    {
169
3.37k
        if (auto sllLayer = dynamic_cast<pcpp::Sll2Layer*>(layer))
170
1.52k
        {
171
1.52k
            sllLayer->getLinkLayerAsMacAddress();
172
1.52k
            sllLayer->getProtocolType();
173
1.52k
            sllLayer->getInterfaceIndex();
174
1.52k
            sllLayer->getArphrdType();
175
1.52k
            sllLayer->getPacketType();
176
1.52k
        }
177
3.37k
    }
178
893k
    if (parsedPacket.isPacketOfType(pcpp::VRRP))
179
10.3k
    {
180
10.3k
        if (auto vrrpLayer = dynamic_cast<pcpp::VrrpLayer*>(layer))
181
3.16k
        {
182
3.16k
            vrrpLayer->getIPAddresses();
183
3.16k
            vrrpLayer->isChecksumCorrect();
184
3.16k
            vrrpLayer->getChecksum();
185
3.16k
            vrrpLayer->getPriorityAsEnum();
186
3.16k
            vrrpLayer->getPriority();
187
3.16k
            vrrpLayer->getType();
188
3.16k
        }
189
10.3k
    }
190
893k
    if (parsedPacket.isPacketOfType(pcpp::VRRPv2))
191
2.40k
    {
192
2.40k
        if (auto vrrpLayer = dynamic_cast<pcpp::VrrpV2Layer*>(layer))
193
885
        {
194
885
            vrrpLayer->getAuthTypeAsEnum();
195
885
            vrrpLayer->getAdvInt();
196
885
        }
197
2.40k
    }
198
893k
    if (parsedPacket.isPacketOfType(pcpp::VRRPv3))
199
7.92k
    {
200
7.92k
        if (auto vrrpLayer = dynamic_cast<pcpp::VrrpV3Layer*>(layer))
201
2.27k
        {
202
2.27k
            vrrpLayer->getMaxAdvInt();
203
2.27k
        }
204
7.92k
    }
205
893k
    if (parsedPacket.isPacketOfType(pcpp::TCP))
206
478k
    {
207
478k
        if (auto tcpLayer = dynamic_cast<pcpp::TcpLayer*>(layer))
208
124k
        {
209
124k
            auto tcpLayer2 (*tcpLayer);
210
124k
            tcpLayer2.addTcpOptionAfter(pcpp::TcpOptionBuilder(pcpp::TcpOptionBuilder::NOP), pcpp::PCPP_TCPOPT_NOP);
211
124k
        }
212
478k
    }
213
893k
    if (parsedPacket.isPacketOfType(pcpp::SDP))
214
352
    {
215
352
        if (auto sdpLayer = dynamic_cast<pcpp::SdpLayer*>(layer))
216
75
        {
217
75
            sdpLayer->getOwnerIPv4Address();
218
75
            sdpLayer->getMediaPort("audio");
219
75
            sdpLayer->getFieldCount();
220
221
75
            auto sdpLayer2 = *sdpLayer;
222
75
            std::vector<std::string> audioAttributes;
223
75
            audioAttributes.push_back("rtpmap:8 PCMA/8000");
224
75
            sdpLayer2.addMediaDescription("audio", 6010, "RTP/AVP", "8 96", audioAttributes);
225
75
            sdpLayer2.addField(PCPP_SDP_PROTOCOL_VERSION_FIELD, "0");
226
75
            sdpLayer2.removeField(PCPP_SDP_PROTOCOL_VERSION_FIELD);
227
75
        }
228
352
    }
229
893k
    if (parsedPacket.isPacketOfType(pcpp::SSL))
230
171k
    {
231
171k
        if (auto handshakeLayer = dynamic_cast<pcpp::SSLHandshakeLayer*>(layer))
232
22.2k
        {
233
22.2k
            if (auto clientHelloMessage = handshakeLayer->getHandshakeMessageOfType<pcpp::SSLClientHelloMessage>())
234
9.13k
            {
235
9.13k
                clientHelloMessage->getCompressionMethodsValue();
236
9.13k
                clientHelloMessage->getSessionID();
237
9.13k
                clientHelloMessage->getHandshakeType();
238
9.13k
                clientHelloMessage->getHandshakeVersion();
239
240
9.13k
                pcpp::SSLCipherSuite::getCipherSuiteByName("TLS_RSA_WITH_NULL_MD5");
241
1.44M
                for (int i = 0; i < clientHelloMessage->getCipherSuiteCount(); i++)
242
1.43M
                {
243
1.43M
                    clientHelloMessage->getCipherSuite(i);
244
1.43M
                    bool valid;
245
1.43M
                    clientHelloMessage->getCipherSuiteID(i, valid);
246
1.43M
                }
247
9.13k
                if (auto ext = clientHelloMessage->getExtensionOfType<pcpp::SSLServerNameIndicationExtension>())
248
2.14k
                    ext->getHostName();
249
9.13k
                if (auto ext = clientHelloMessage->getExtensionOfType<pcpp::SSLSupportedVersionsExtension>())
250
1.28k
                    ext->getSupportedVersions();
251
252
9.13k
                clientHelloMessage->getExtensionOfType(pcpp::SSL_EXT_SERVER_NAME);
253
9.13k
                clientHelloMessage->getExtensionOfType((uint16_t)0);
254
255
9.13k
                auto fingerprint = clientHelloMessage->generateTLSFingerprint();
256
9.13k
                fingerprint.toMD5();
257
9.13k
            }
258
22.2k
            if (auto serverHelloMessage = handshakeLayer->getHandshakeMessageOfType<pcpp::SSLServerHelloMessage>())
259
8.28k
            {
260
8.28k
                serverHelloMessage->getCompressionMethodsValue();
261
8.28k
                serverHelloMessage->getSessionID();
262
8.28k
                serverHelloMessage->getCipherSuite();
263
264
8.28k
                serverHelloMessage->getExtensionOfType<pcpp::SSLServerNameIndicationExtension>();
265
8.28k
                serverHelloMessage->getExtensionOfType(pcpp::SSL_EXT_SERVER_NAME);
266
8.28k
                serverHelloMessage->getExtensionOfType((uint16_t)0);
267
268
8.28k
                serverHelloMessage->getHandshakeVersion();
269
8.28k
                auto fingerprint = serverHelloMessage->generateTLSFingerprint();
270
8.28k
                fingerprint.toMD5();
271
8.28k
            }
272
22.2k
            if (auto handshakeMessage = handshakeLayer->getHandshakeMessageOfType<pcpp::SSLHandshakeMessage>())
273
20.6k
            {
274
20.6k
                handshakeMessage->isMessageComplete();
275
20.6k
            }
276
22.2k
        }
277
171k
    }
278
893k
    if (parsedPacket.isPacketOfType(pcpp::NTP))
279
5.26k
    {
280
5.26k
        if (auto ntpLayer = dynamic_cast<pcpp::NtpLayer*>(layer))
281
1.34k
        {
282
1.34k
            ntpLayer->getLeapIndicator();
283
1.34k
            ntpLayer->getMode();
284
1.34k
            ntpLayer->getModeString();
285
1.34k
            ntpLayer->getStratum();
286
1.34k
            ntpLayer->getPollInterval();
287
1.34k
            ntpLayer->getPrecision();
288
1.34k
            ntpLayer->getRootDelay();
289
1.34k
            ntpLayer->getRootDispersion();
290
1.34k
            ntpLayer->getReferenceIdentifier();
291
1.34k
            ntpLayer->getReferenceIdentifierString();
292
1.34k
            ntpLayer->getReferenceTimestamp();
293
1.34k
            ntpLayer->getOriginTimestamp();
294
1.34k
            ntpLayer->getReceiveTimestamp();
295
1.34k
            ntpLayer->getTransmitTimestamp();
296
297
1.34k
            ntpLayer->getDigest();
298
1.34k
            ntpLayer->getKeyID();
299
300
1.34k
            ntpLayer->getPollIntervalInSecs();
301
1.34k
            ntpLayer->getPrecisionInSecs();
302
1.34k
            ntpLayer->getRootDelayInSecs();
303
1.34k
            ntpLayer->getRootDispersionInSecs();
304
1.34k
            ntpLayer->getReferenceTimestampInSecs();
305
1.34k
            ntpLayer->getOriginTimestampInSecs();
306
1.34k
            ntpLayer->getReceiveTimestampInSecs();
307
1.34k
            ntpLayer->getTransmitTimestampInSecs();
308
309
1.34k
            ntpLayer->getReferenceTimestampAsString();
310
1.34k
            ntpLayer->getOriginTimestampAsString();
311
1.34k
            ntpLayer->getReceiveTimestampAsString();
312
1.34k
            ntpLayer->getTransmitTimestampAsString();
313
314
1.34k
            auto ntpLayer2 (*ntpLayer);
315
1.34k
            ntpLayer2.setRootDelayInSecs(0.1);
316
1.34k
            ntpLayer2.setReferenceTimestampInSecs(0.1);
317
1.34k
        }
318
5.26k
    }
319
893k
    if (parsedPacket.isPacketOfType(pcpp::ICMP))
320
21.1k
    {
321
21.1k
        if (auto icmpLayer = dynamic_cast<pcpp::IcmpLayer*>(layer))
322
7.12k
        {
323
7.12k
            auto icmpLayer2 (*icmpLayer);
324
325
7.12k
            if (icmpLayer->isMessageOfType(pcpp::ICMP_TIMESTAMP_REPLY))
326
11
            {
327
11
                icmpLayer->getTimestampReplyData();
328
11
                timeval orig = { 16131, 171000 };
329
11
                timeval recv = { 16133, 474000 };
330
11
                timeval tran = { 16133, 474000 };
331
11
                icmpLayer2.setTimestampReplyData(14640, 0, orig, recv, tran);
332
11
            }
333
7.11k
            else if (icmpLayer->isMessageOfType(pcpp::ICMP_ADDRESS_MASK_REQUEST))
334
315
            {
335
315
                icmpLayer->getAddressMaskRequestData();
336
315
                icmpLayer2.setAddressMaskRequestData(45068, 1536, pcpp::IPv4Address::Zero);
337
315
            }
338
6.80k
            else if (icmpLayer->isMessageOfType(pcpp::ICMP_ADDRESS_MASK_REPLY))
339
94
            {
340
94
                icmpLayer->getAddressMaskReplyData();
341
94
                icmpLayer2.setAddressMaskReplyData(45068, 1536, pcpp::IPv4Address::Zero);
342
94
            }
343
6.70k
            else if (icmpLayer->isMessageOfType(pcpp::ICMP_DEST_UNREACHABLE))
344
491
            {
345
491
                icmpLayer->getDestUnreachableData();
346
491
                icmpLayer2.setDestUnreachableData(pcpp::IcmpHostUnreachable, 0, nullptr, nullptr);
347
491
            }
348
6.21k
            else if (icmpLayer->isMessageOfType(pcpp::ICMP_INFO_REPLY))
349
221
            {
350
221
                auto layerData = icmpLayer->getInfoReplyData();
351
221
                icmpLayer2.setInfoReplyData(layerData->id, layerData->sequence);
352
221
            }
353
5.99k
            else if (icmpLayer->isMessageOfType(pcpp::ICMP_INFO_REQUEST))
354
486
            {
355
486
                auto layerData = icmpLayer->getInfoRequestData();
356
486
                icmpLayer2.setInfoRequestData(layerData->id, layerData->sequence);
357
486
            }
358
5.51k
            else if (icmpLayer->isMessageOfType(pcpp::ICMP_PARAM_PROBLEM))
359
2.04k
            {
360
2.04k
                auto layerData = icmpLayer->getParamProblemData();
361
2.04k
                icmpLayer2.setParamProblemData(layerData->code, layerData->pointer, nullptr, nullptr);
362
2.04k
            }
363
3.46k
            else if (icmpLayer->isMessageOfType(pcpp::ICMP_TIME_EXCEEDED))
364
146
            {
365
146
                icmpLayer->getTimeExceededData();
366
146
                icmpLayer2.setTimeExceededData(1, nullptr, nullptr);
367
146
            }
368
3.31k
            else if (icmpLayer->isMessageOfType(pcpp::ICMP_ROUTER_ADV))
369
158
            {
370
158
                icmpLayer->getRouterAdvertisementData();
371
158
                pcpp::icmp_router_address_structure addr1;
372
158
                addr1.setRouterAddress(pcpp::IPv4Address("192.168.144.2"), (uint32_t)0x08000000);
373
158
                std::vector<pcpp::icmp_router_address_structure> routerAddresses;
374
158
                routerAddresses.push_back(addr1);
375
158
                icmpLayer2.setRouterAdvertisementData(16, 200, routerAddresses);
376
158
            }
377
7.12k
        }
378
21.1k
    }
379
893k
    if (parsedPacket.isPacketOfType(pcpp::DHCPv6))
380
6.01k
    {
381
6.01k
        if (auto dhcpLayer = dynamic_cast<pcpp::DhcpV6Layer*>(layer))
382
1.93k
        {
383
1.93k
            dhcpLayer->getTransactionID();
384
1.93k
            if (dhcpLayer->getOptionCount() > 0)
385
1.62k
            {
386
1.62k
                pcpp::DhcpV6Option opt = dhcpLayer->getFirstOptionData();
387
1.62k
                opt.getType();
388
1.62k
                opt.getTotalSize();
389
1.62k
                opt.getValueAsHexString();
390
4.21k
                for (size_t i = 0; i < dhcpLayer->getOptionCount(); i++)
391
2.58k
                {
392
2.58k
                    opt = dhcpLayer->getNextOptionData(opt);
393
2.58k
                }
394
1.62k
                dhcpLayer->getOptionData(pcpp::DHCPV6_OPT_CLIENTID);
395
1.62k
            }
396
1.93k
        }
397
6.01k
    }
398
893k
    if (parsedPacket.isPacketOfType(pcpp::DHCP))
399
9.04k
    {
400
9.04k
        if (auto dhcpLayer = dynamic_cast<pcpp::DhcpLayer*>(layer))
401
2.02k
        {
402
2.02k
            dhcpLayer->getOpCode();
403
2.02k
            dhcpLayer->getDhcpHeader();
404
2.02k
            dhcpLayer->getClientIpAddress();
405
2.02k
            dhcpLayer->getYourIpAddress();
406
2.02k
            dhcpLayer->getServerIpAddress();
407
2.02k
            dhcpLayer->getGatewayIpAddress();
408
2.02k
            dhcpLayer->getClientHardwareAddress();
409
2.02k
            if (dhcpLayer->getOptionsCount() > 0)
410
2.01k
            {
411
2.01k
                pcpp::DhcpOption opt = dhcpLayer->getFirstOptionData();
412
2.01k
                opt.getValueAsIpAddr();
413
2.01k
                opt.getValueAsString();
414
103k
                for (size_t i = 0; i < dhcpLayer->getOptionsCount(); i++)
415
101k
                {
416
101k
                    opt = dhcpLayer->getNextOptionData(opt);
417
101k
                }
418
2.01k
            }
419
2.02k
            dhcpLayer->getOptionData(pcpp::DHCPOPT_SUBNET_MASK);
420
2.02k
        }
421
9.04k
    }
422
893k
    if (parsedPacket.isPacketOfType(pcpp::BGP))
423
34.7k
    {
424
34.7k
        if (auto bgpLayer = dynamic_cast<pcpp::BgpLayer*>(layer))
425
13.7k
        {
426
13.7k
            bgpLayer->getMessageTypeAsString();
427
13.7k
            if (auto bgpOpenMsgLayer = dynamic_cast<pcpp::BgpOpenMessageLayer*>(bgpLayer))
428
3.89k
            {
429
3.89k
                std::vector<pcpp::BgpOpenMessageLayer::optional_parameter> optionalParams;
430
3.89k
                bgpOpenMsgLayer->getOptionalParameters(optionalParams);
431
3.89k
                std::vector<pcpp::BgpOpenMessageLayer::optional_parameter> optionalParams2(optionalParams);
432
3.89k
                optionalParams2.push_back(pcpp::BgpOpenMessageLayer::optional_parameter(2, "010400010001"));
433
3.89k
                optionalParams2.push_back(pcpp::BgpOpenMessageLayer::optional_parameter(2, "8000"));
434
3.89k
                optionalParams2.push_back(pcpp::BgpOpenMessageLayer::optional_parameter(2, "0200"));
435
3.89k
                optionalParams2.push_back(pcpp::BgpOpenMessageLayer::optional_parameter(2, "4600"));
436
3.89k
                optionalParams2.push_back(pcpp::BgpOpenMessageLayer::optional_parameter(2, "410400000001"));
437
3.89k
                bgpOpenMsgLayer->setOptionalParameters(optionalParams2);
438
3.89k
                bgpOpenMsgLayer->clearOptionalParameters();
439
3.89k
                bgpOpenMsgLayer->setOptionalParameters(optionalParams);
440
3.89k
            }
441
9.81k
            else if (auto bgpUpdateMsgLayer = dynamic_cast<pcpp::BgpUpdateMessageLayer*>(bgpLayer))
442
8.00k
            {
443
8.00k
                std::vector<pcpp::BgpUpdateMessageLayer::prefix_and_ip> withdrawnRoutes;
444
8.00k
                bgpUpdateMsgLayer->getWithdrawnRoutes(withdrawnRoutes);
445
8.00k
                std::vector<pcpp::BgpUpdateMessageLayer::prefix_and_ip> withdrawnRoutes2(withdrawnRoutes);
446
8.00k
                withdrawnRoutes2.push_back(pcpp::BgpUpdateMessageLayer::prefix_and_ip(24, "40.1.1.0"));
447
8.00k
                withdrawnRoutes2.push_back(pcpp::BgpUpdateMessageLayer::prefix_and_ip(24, "40.40.40.0"));
448
8.00k
                withdrawnRoutes2.push_back(pcpp::BgpUpdateMessageLayer::prefix_and_ip(16, "103.103.0.0"));
449
8.00k
                withdrawnRoutes2.push_back(pcpp::BgpUpdateMessageLayer::prefix_and_ip(24, "103.103.40.0"));
450
8.00k
                bgpUpdateMsgLayer->setWithdrawnRoutes(withdrawnRoutes2);
451
8.00k
                bgpUpdateMsgLayer->clearWithdrawnRoutes();
452
8.00k
                bgpUpdateMsgLayer->setWithdrawnRoutes(withdrawnRoutes);
453
454
8.00k
                std::vector<pcpp::BgpUpdateMessageLayer::prefix_and_ip> nlriVec;
455
8.00k
                bgpUpdateMsgLayer->getNetworkLayerReachabilityInfo(nlriVec);
456
8.00k
                std::vector<pcpp::BgpUpdateMessageLayer::prefix_and_ip> nlriVec2(nlriVec);
457
8.00k
                nlriVec2.push_back(pcpp::BgpUpdateMessageLayer::prefix_and_ip(24, "40.1.1.0"));
458
8.00k
                bgpUpdateMsgLayer->setNetworkLayerReachabilityInfo(nlriVec2);
459
8.00k
                bgpUpdateMsgLayer->clearNetworkLayerReachabilityInfo();
460
8.00k
                bgpUpdateMsgLayer->setNetworkLayerReachabilityInfo(nlriVec);
461
462
8.00k
                std::vector<pcpp::BgpUpdateMessageLayer::path_attribute> pathAttributes;
463
8.00k
                bgpUpdateMsgLayer->getPathAttributes(pathAttributes);
464
8.00k
                std::vector<pcpp::BgpUpdateMessageLayer::path_attribute> pathAttributes2(pathAttributes);
465
8.00k
                pathAttributes2.push_back(pcpp::BgpUpdateMessageLayer::path_attribute(0x40, 1, "02"));
466
8.00k
                pathAttributes2.push_back(pcpp::BgpUpdateMessageLayer::path_attribute(0x40, 2, "02030000000a0000001400000028"));
467
8.00k
                pathAttributes2.push_back(pcpp::BgpUpdateMessageLayer::path_attribute(0x40, 3, "1e031e03"));
468
8.00k
                bgpUpdateMsgLayer->setPathAttributes(pathAttributes2);
469
8.00k
                bgpUpdateMsgLayer->clearPathAttributes();
470
8.00k
                bgpUpdateMsgLayer->setPathAttributes(pathAttributes);
471
8.00k
            }
472
1.80k
            else if (auto bgpNotificationMsgLayer = dynamic_cast<pcpp::BgpNotificationMessageLayer*>(bgpLayer))
473
627
            {
474
627
                bgpNotificationMsgLayer->getNotificationDataAsHexString();
475
627
            }
476
13.7k
        }
477
34.7k
    }
478
893k
    if (parsedPacket.isPacketOfType(pcpp::DNS))
479
100k
    {
480
100k
        if (auto dnsLayer = dynamic_cast<pcpp::DnsLayer*>(layer))
481
24.9k
        {
482
24.9k
            dnsLayer->addQuery("mail-attachment.googleusercontent.com", pcpp::DNS_TYPE_A, pcpp::DNS_CLASS_IN);
483
24.9k
            dnsLayer->removeQuery("a", true);
484
24.9k
            dnsLayer->removeQuery("mail-attachment.googleusercontent.com", false);
485
24.9k
            pcpp::IPv4DnsResourceData ipv4DnsData(std::string("151.249.90.217"));
486
24.9k
            dnsLayer->addAnswer("assets.pinterest.com.cdngc.net", pcpp::DNS_TYPE_A, pcpp::DNS_CLASS_IN, 3, &ipv4DnsData);
487
24.9k
            dnsLayer->removeAnswer("a", true);
488
24.9k
            dnsLayer->removeAnswer("assets.pinterest.com.cdngc.net", false);
489
24.9k
            dnsLayer->addAuthority("Yaels-iPhone.local", pcpp::DNS_TYPE_A, pcpp::DNS_CLASS_IN, 120, &ipv4DnsData);
490
24.9k
            dnsLayer->removeAuthority("a", true);
491
24.9k
            dnsLayer->removeAuthority("Yaels-iPhone.local", false);
492
24.9k
            pcpp::GenericDnsResourceData genericData("0004000800df581faa4f3f9d");
493
24.9k
            dnsLayer->addAdditionalRecord("abc", pcpp::DNS_TYPE_OPT, 0xa005, 0x1194, &genericData);
494
24.9k
            dnsLayer->removeAdditionalRecord("a", true);
495
24.9k
            dnsLayer->removeAdditionalRecord("abc", false);
496
497
24.9k
            auto add = dnsLayer->getFirstAdditionalRecord();
498
31.6k
            while (add != nullptr)
499
6.71k
            {
500
6.71k
                add = dnsLayer->getNextAdditionalRecord(add);
501
6.71k
            }
502
503
24.9k
            auto answer = dnsLayer->getFirstAnswer();
504
46.9k
            while (answer != nullptr)
505
22.0k
            {
506
22.0k
                answer = dnsLayer->getNextAnswer(answer);
507
22.0k
            }
508
509
24.9k
            auto auth = dnsLayer->getFirstAuthority();
510
27.0k
            while (auth != nullptr)
511
2.14k
            {
512
2.14k
                auth = dnsLayer->getNextAuthority(auth);
513
2.14k
            }
514
515
24.9k
            pcpp::DnsLayer other(*dnsLayer);
516
24.9k
            other = *dnsLayer;
517
24.9k
        }
518
100k
    }
519
893k
}