Skip to content

Commit a4fa94b

Browse files
authored
Fix FreeBSD CI (#2028)
1 parent b91640f commit a4fa94b

File tree

3 files changed

+64
-81
lines changed

3 files changed

+64
-81
lines changed

.github/workflows/build_and_test.yml

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -289,12 +289,6 @@ jobs:
289289
cd Tests/Packet++Test
290290
Bin/Packet++Test
291291
292-
- name: Test Pcap++
293-
if: env.avx512 == 'true'
294-
run: |
295-
cd Tests/Pcap++Test
296-
Bin/Pcap++Test
297-
298292
- name: Tests skipped (no AVX-512 hardware support)
299293
if: env.avx512 == 'false'
300294
run: echo "Skipping tests since AVX-512 is not supported on the current runner"
@@ -501,7 +495,7 @@ jobs:
501495
name: Determine Windows Pcap Backend Matrix
502496
runs-on: ubuntu-latest
503497
outputs:
504-
npcap-or-default: ${{ steps.generate-backends.outputs.npcap_or_default}}
498+
npcap-or-default: ${{ steps.generate-backends.outputs.npcap_or_default}}
505499
steps:
506500
- name: Initialize NPcap backend variable
507501
run: echo "npcap_available=false" >> $GITHUB_ENV
@@ -711,36 +705,38 @@ jobs:
711705
matrix:
712706
version: ["14.1", "13.4"]
713707
steps:
714-
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
715-
- name: Test in FreeBSD
716-
id: test
717-
uses: vmactions/freebsd-vm@8873d98fd1413b5977cb2f7348fe329775159892 # v1.1.9
718-
with:
719-
release: ${{ matrix.version }}
720-
usesh: true
721-
prepare: |
722-
pkg install -y python bash cmake git gmake gsed libpcap tcpreplay libffi openssl py311-cryptography
723-
724-
run: |
725-
echo "Building PcapPlusPlus"
726-
chmod a+rw /dev/bpf*
727-
cmake -S . -B Dist
728-
cmake --build Dist -j$(sysctl -n hw.ncpu)
729-
730-
echo "Setting up the network interface for the tests"
731-
# Get the first interface name that is not 'lo'
732-
interface_name=$(ifconfig -l | tr ' ' '\n' | grep -v '^lo' | head -n 1)
733-
ifconfig "$interface_name" promisc
734-
735-
echo "Testing PcapPlusPlus"
736-
python -m ensurepip
737-
python -m pip install -r ci/run_tests/requirements.txt
738-
python ci/run_tests/run_tests.py --interface "$interface_name"
739-
740-
echo "Testing PcapPlusPlus examples"
741-
cd Tests/ExamplesTest
742-
python -m pip install -r requirements.txt
743-
python -m pytest --interface "$interface_name" --root-path=../../Dist/examples_bin
708+
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
709+
- name: Test in FreeBSD
710+
id: test
711+
uses: vmactions/freebsd-vm@8873d98fd1413b5977cb2f7348fe329775159892 # v1.1.9
712+
with:
713+
release: ${{ matrix.version }}
714+
usesh: true
715+
prepare: |
716+
pkg install -y python bash cmake git gmake gsed libpcap tcpreplay libffi openssl py311-cryptography
717+
sysctl kern.ipc.maxsockbuf=16777216
718+
run: |
719+
set -e
720+
721+
echo "Building PcapPlusPlus"
722+
chmod a+rw /dev/bpf*
723+
cmake -S . -B Dist
724+
cmake --build Dist -j$(sysctl -n hw.ncpu)
725+
726+
echo "Setting up the network interface for the tests"
727+
# Get the first interface name that is not 'lo'
728+
interface_name=$(ifconfig -l | tr ' ' '\n' | grep -v '^lo' | head -n 1)
729+
ifconfig "$interface_name" promisc
730+
731+
echo "Testing PcapPlusPlus"
732+
python -m ensurepip
733+
python -m pip install -r ci/run_tests/requirements.txt
734+
python ci/run_tests/run_tests.py --interface "$interface_name"
735+
736+
echo "Testing PcapPlusPlus examples"
737+
cd Tests/ExamplesTest
738+
python -m pip install -r requirements.txt
739+
python -m pytest --interface "$interface_name" --root-path=../../Dist/examples_bin
744740
745741
android:
746742
strategy:

Common++/header/PointerVector.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,12 @@ namespace pcpp
320320
return m_Vector.at(index);
321321
}
322322

323+
/// @return A pointer to the underlying array serving as the vector’s storage
324+
T** data()
325+
{
326+
return m_Vector.data();
327+
}
328+
323329
private:
324330
/// Performs a copy of the vector along with its elements.
325331
/// The caller is responsible of freeing the copied elements.

Tests/Pcap++Test/Tests/LiveDeviceTests.cpp

Lines changed: 25 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -774,46 +774,30 @@ PTF_TEST_CASE(TestSendPacket)
774774
PTF_ASSERT_TRUE(fileReaderDev.open());
775775

776776
PTF_ASSERT_GREATER_THAN(liveDev->getMtu(), 0);
777-
uint32_t mtu = liveDev->getMtu();
777+
auto mtu = liveDev->getMtu();
778778
int buffLen = mtu + 1 + sizeof(pcpp::ether_header);
779-
uint8_t* buff = new uint8_t[buffLen];
780-
memset(buff, 0, buffLen);
779+
std::vector<uint8_t> buff(buffLen, 0);
781780
pcpp::Logger::getInstance().suppressLogs();
782-
PTF_ASSERT_FALSE(liveDev->sendPacket(buff, buffLen, true));
781+
PTF_ASSERT_FALSE(liveDev->sendPacket(buff.data(), buffLen, true));
783782
pcpp::Logger::getInstance().enableLogs();
784783

785-
pcpp::RawPacket rawPacket;
786-
int packetsSent = 0;
787-
int packetsRead = 0;
788-
while (fileReaderDev.getNextPacket(rawPacket))
784+
pcpp::RawPacketVector rawPackets;
785+
PTF_ASSERT_EQUAL(fileReaderDev.getNextPackets(rawPackets, 10), 10);
786+
for (const auto& rawPacket : rawPackets)
789787
{
790-
packetsRead++;
791-
792-
// send packet as RawPacket
793-
PTF_ASSERT_TRUE(liveDev->sendPacket(rawPacket));
794-
795-
// send packet as raw data
796-
PTF_ASSERT_TRUE(liveDev->sendPacket(rawPacket.getRawData(), rawPacket.getRawDataLen()));
797-
798-
// send packet as parsed EthPacekt
799-
pcpp::Packet packet(&rawPacket);
788+
PTF_ASSERT_TRUE(liveDev->sendPacket(*rawPacket));
789+
PTF_ASSERT_TRUE(liveDev->sendPacket(rawPacket->getRawData(), rawPacket->getRawDataLen()));
790+
pcpp::Packet packet(rawPacket);
800791
PTF_ASSERT_TRUE(liveDev->sendPacket(packet));
801-
802-
packetsSent++;
803792
}
804793

805-
PTF_ASSERT_EQUAL(packetsRead, packetsSent);
806-
807-
liveDev->close();
808794
fileReaderDev.close();
809-
810-
delete[] buff;
811795
} // TestSendPacket
812796

813797
PTF_TEST_CASE(TestSendPackets)
814798
{
815799
pcpp::PcapLiveDevice* liveDev = nullptr;
816-
pcpp::IPv4Address ipToSearch(PcapTestGlobalArgs.ipToSendReceivePackets.c_str());
800+
pcpp::IPv4Address ipToSearch(PcapTestGlobalArgs.ipToSendReceivePackets);
817801
liveDev = pcpp::PcapLiveDeviceList::getInstance().getDeviceByIp(ipToSearch);
818802
PTF_ASSERT_NOT_NULL(liveDev);
819803
PTF_ASSERT_TRUE(liveDev->open());
@@ -822,28 +806,25 @@ PTF_TEST_CASE(TestSendPackets)
822806
pcpp::PcapFileReaderDevice fileReaderDev(EXAMPLE_PCAP_PATH);
823807
PTF_ASSERT_TRUE(fileReaderDev.open());
824808

825-
std::vector<pcpp::RawPacket> rawPacketArr(10000);
826-
pcpp::PointerVector<pcpp::Packet> packetVec;
827-
int packetsRead = 0;
828-
while (fileReaderDev.getNextPacket(rawPacketArr[packetsRead]))
829-
{
830-
packetVec.pushBack(new pcpp::Packet(&rawPacketArr[packetsRead]));
831-
packetsRead++;
832-
}
809+
int expectedPacketCount = 10;
810+
pcpp::RawPacketVector rawPacketPtrVec;
811+
PTF_ASSERT_EQUAL(fileReaderDev.getNextPackets(rawPacketPtrVec, expectedPacketCount), expectedPacketCount);
833812

834-
// send packets as RawPacket array
835-
int packetsSentAsRaw = liveDev->sendPackets(rawPacketArr.data(), packetsRead);
813+
PTF_ASSERT_EQUAL(liveDev->sendPackets(rawPacketPtrVec), expectedPacketCount);
836814

837-
// send packets as parsed EthPacekt array
838-
std::vector<pcpp::Packet*> packetArr;
839-
packetArr.reserve(10000);
840-
std::copy(packetVec.begin(), packetVec.end(), std::back_inserter(packetArr));
841-
int packetsSentAsParsed = liveDev->sendPackets(packetArr.data(), packetsRead);
815+
std::vector<pcpp::RawPacket> rawPacketVec;
816+
rawPacketVec.reserve(rawPacketPtrVec.size());
817+
std::transform(rawPacketPtrVec.begin(), rawPacketPtrVec.end(), std::back_inserter(rawPacketVec),
818+
[](const auto& rawPacketPtr) { return *rawPacketPtr; });
819+
PTF_ASSERT_EQUAL(liveDev->sendPackets(rawPacketVec.data(), expectedPacketCount), expectedPacketCount);
842820

843-
PTF_ASSERT_EQUAL(packetsSentAsRaw, packetsRead);
844-
PTF_ASSERT_EQUAL(packetsSentAsParsed, packetsRead);
821+
pcpp::PointerVector<pcpp::Packet> packetPtrVec;
822+
for (const auto& rawPacket : rawPacketPtrVec)
823+
{
824+
packetPtrVec.pushBack(new pcpp::Packet(rawPacket));
825+
}
826+
PTF_ASSERT_EQUAL(liveDev->sendPackets(packetPtrVec.data(), expectedPacketCount), expectedPacketCount);
845827

846-
liveDev->close();
847828
fileReaderDev.close();
848829
} // TestSendPackets
849830

0 commit comments

Comments
 (0)