diff --git a/packages/p/pcapplusplus/patches/v24.09/vla.patch b/packages/p/pcapplusplus/patches/v24.09/vla.patch new file mode 100644 index 000000000..bd40c10a3 --- /dev/null +++ b/packages/p/pcapplusplus/patches/v24.09/vla.patch @@ -0,0 +1,23 @@ +diff --git a/Pcap++/src/PcapLiveDevice.cpp b/Pcap++/src/PcapLiveDevice.cpp +index 7ac0f79e..5faa7c4d 100644 +--- a/Pcap++/src/PcapLiveDevice.cpp ++++ b/Pcap++/src/PcapLiveDevice.cpp +@@ -1011,15 +1011,15 @@ namespace pcpp + return; + } + +- uint8_t buf[len]; ++ std::vector buf(len); + +- if (sysctl(mib, 6, buf, &len, nullptr, 0) < 0) ++ if (sysctl(mib, 6, buf.data(), &len, nullptr, 0) < 0) + { + PCPP_LOG_DEBUG("Error in retrieving MAC address: sysctl 2 error"); + return; + } + +- struct if_msghdr* ifm = (struct if_msghdr*)buf; ++ struct if_msghdr* ifm = (struct if_msghdr*)buf.data(); + struct sockaddr_dl* sdl = (struct sockaddr_dl*)(ifm + 1); + uint8_t* ptr = (uint8_t*)LLADDR(sdl); + m_MacAddress = MacAddress(ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5]); diff --git a/packages/p/pcapplusplus/xmake.lua b/packages/p/pcapplusplus/xmake.lua index 310acfaa2..9943e7663 100644 --- a/packages/p/pcapplusplus/xmake.lua +++ b/packages/p/pcapplusplus/xmake.lua @@ -9,22 +9,28 @@ package("pcapplusplus") add_versions("v24.09", "0a9d80d09a906c08a1df5f5a937134355c7cb3fc8a599bf1a0f10002cf0285be") add_versions("v23.09", "f2b92d817df6138363be0d144a61716f8ecc43216f0008135da2e0e15727d35a") + add_patches("v24.09", "patches/v24.09/vla.patch", "8c380468c78118b6d85f6b3856cd49c4d890fd326dde3400b8c47c01c885cef4") + add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true}) add_links("Pcap++", "Packet++", "Common++") - if is_plat("windows") then - add_syslinks("ws2_32") + if is_plat("windows", "mingw") then + add_syslinks("ws2_32", "iphlpapi") + elseif is_plat("macosx") then + add_frameworks("CoreFoundation", "SystemConfiguration") + elseif is_plat("linux", "bsd") then + add_syslinks("pthread") end add_deps("cmake") - if is_plat("windows") then + if is_plat("windows", "mingw") then add_deps("npcap_sdk") - elseif is_plat("linux") then + elseif is_plat("linux", "macosx", "android", "bsd") then add_deps("libpcap") end - on_install("windows", "linux", function (package) + on_install("windows", "mingw", "linux", "macosx", "android", "bsd", function (package) local configs = { "-DPCAPPP_BUILD_EXAMPLES=OFF", "-DPCAPPP_BUILD_TESTS=OFF", @@ -35,11 +41,19 @@ package("pcapplusplus") on_test(function (package) assert(package:check_cxxsnippets({test = [[ + #include #include "pcapplusplus/IPv4Layer.h" #include "pcapplusplus/Packet.h" #include "pcapplusplus/PcapFileDevice.h" - void test() { + #include "pcapplusplus/PcapLiveDeviceList.h" + + void testPcapFileReaderDevice() { pcpp::PcapFileReaderDevice reader("1_packet.pcap"); } + + void testPcapLiveDeviceList() { + std::vector devList = + pcpp::PcapLiveDeviceList::getInstance().getPcapLiveDevicesList(); + } ]]}, {configs = {languages = "c++17"}})) end)