Skip to content

Commit d7629b6

Browse files
authored
Adding AccurateECN flag to TCP struct (#1869)
1 parent 92c6b5a commit d7629b6

File tree

6 files changed

+28
-2
lines changed

6 files changed

+28
-2
lines changed

Packet++/header/TcpLayer.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ namespace pcpp
2828
/// Acknowledgment number
2929
uint32_t ackNumber;
3030
#if (BYTE_ORDER == LITTLE_ENDIAN)
31-
uint16_t reserved : 4;
31+
/// Accurate ECN flag
32+
uint16_t accurateEcnFlag : 1;
33+
/// Reserved bits
34+
uint16_t reserved : 3;
3235
/// Specifies the size of the TCP header in 32-bit words
3336
uint16_t dataOffset : 4;
3437
/// FIN flag
@@ -51,7 +54,9 @@ namespace pcpp
5154
/// Specifies the size of the TCP header in 32-bit words
5255
uint16_t dataOffset : 4;
5356
/// Reserved
54-
uint16_t reserved : 4;
57+
uint16_t reserved : 3;
58+
/// Accurate ECN flag
59+
uint16_t accurateEcnFlag : 1;
5560
/// CWR flag
5661
uint16_t cwrFlag : 1;
5762
/// ECE flag
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
6cf049b2de6e30469a23fbfa080045000115a80040003c06ecd4d4c7ca450a0000010050ebe4beab364af9ffb58e51182d3c4c030000485454502f312e3120333031204d6f766564205065726d616e656e746c790d0a5365727665723a20416b616d616947486f73740d0a436f6e74656e742d4c656e6774683a20300d0a4c6f636174696f6e3a202f686f6d652f302c373334302c4c2d382c30302e68746d6c0d0a43616368652d436f6e74726f6c3a206d61782d6167653d300d0a457870697265733a204672692c2032362053657020323031342032323a32333a323420474d540d0a446174653a204672692c2032362053657020323031342032323a32333a323420474d540d0a436f6e6e656374696f6e3a206b6565702d616c6976650d0a0d0a
331 Bytes
Binary file not shown.

Tests/Packet++Test/TestDefinition.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ PTF_TEST_CASE(IPv6ExtensionsTest);
3333
// Implemented in TcpTests.cpp
3434
PTF_TEST_CASE(TcpPacketNoOptionsParsing);
3535
PTF_TEST_CASE(TcpPacketWithOptionsParsing);
36+
PTF_TEST_CASE(TcpPacketWithAccurateEcnParsing);
3637
PTF_TEST_CASE(TcpPacketWithOptionsParsing2);
3738
PTF_TEST_CASE(TcpMalformedPacketParsing);
3839
PTF_TEST_CASE(TcpPacketCreation);

Tests/Packet++Test/Tests/TcpTests.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ PTF_TEST_CASE(TcpPacketNoOptionsParsing)
4646
PTF_ASSERT_EQUAL(tcpLayer->getTcpHeader()->rstFlag, 0);
4747
PTF_ASSERT_EQUAL(tcpLayer->getTcpHeader()->eceFlag, 0);
4848
PTF_ASSERT_EQUAL(tcpLayer->getTcpHeader()->reserved, 0);
49+
PTF_ASSERT_EQUAL(tcpLayer->getTcpHeader()->accurateEcnFlag, 0);
4950

5051
// TCP options
5152
PTF_ASSERT_EQUAL(tcpLayer->getTcpOptionCount(), 0);
@@ -63,6 +64,23 @@ PTF_TEST_CASE(TcpPacketNoOptionsParsing)
6364
PTF_ASSERT_EQUAL(afterTcpLayer->getProtocol(), pcpp::HTTPResponse, enum);
6465
} // TcpPacketNoOptionsParsing
6566

67+
PTF_TEST_CASE(TcpPacketWithAccurateEcnParsing)
68+
{
69+
timeval time;
70+
gettimeofday(&time, nullptr);
71+
72+
READ_FILE_AND_CREATE_PACKET(1, "PacketExamples/TcpPacketNoOptionsAccEcn.dat");
73+
74+
pcpp::Packet TcpPacketWithAccurateEcn(&rawPacket1);
75+
PTF_ASSERT_TRUE(TcpPacketWithAccurateEcn.isPacketOfType(pcpp::TCP));
76+
77+
pcpp::TcpLayer* tcpLayer = TcpPacketWithAccurateEcn.getLayerOfType<pcpp::TcpLayer>();
78+
PTF_ASSERT_NOT_NULL(tcpLayer);
79+
80+
PTF_ASSERT_EQUAL(tcpLayer->getTcpHeader()->reserved, 0);
81+
PTF_ASSERT_EQUAL(tcpLayer->getTcpHeader()->accurateEcnFlag, 1);
82+
} // TcpPacketWithAccurateEcnParsing
83+
6684
PTF_TEST_CASE(TcpPacketWithOptionsParsing)
6785
{
6886
timeval time;

Tests/Packet++Test/main.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ int main(int argc, char* argv[])
136136
PTF_RUN_TEST(IPv6ExtensionsTest, "ipv6");
137137

138138
PTF_RUN_TEST(TcpPacketNoOptionsParsing, "tcp");
139+
PTF_RUN_TEST(TcpPacketWithAccurateEcnParsing, "tcp");
139140
PTF_RUN_TEST(TcpPacketWithOptionsParsing, "tcp");
140141
PTF_RUN_TEST(TcpPacketWithOptionsParsing2, "tcp");
141142
PTF_RUN_TEST(TcpPacketCreation, "tcp");

0 commit comments

Comments
 (0)