mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-18 01:30:07 +02:00
52 lines
1.4 KiB
Plaintext
52 lines
1.4 KiB
Plaintext
From e025ba1728337329298f54cb2cca4ebb0f931948 Mon Sep 17 00:00:00 2001
|
|
From: Jerome Duval <jerome.duval@gmail.com>
|
|
Date: Sat, 17 Feb 2024 17:26:58 +0100
|
|
Subject: libpcap: switch to DLT_RAW for loop and tunnel devices
|
|
|
|
backported to 1.10 from upstream 1.11
|
|
|
|
diff --git a/pcap-haiku.cpp b/pcap-haiku.cpp
|
|
index 8ae9119..2afca60 100644
|
|
--- a/pcap-haiku.cpp
|
|
+++ b/pcap-haiku.cpp
|
|
@@ -189,8 +189,6 @@ pcap_activate_haiku(pcap_t *handle)
|
|
}
|
|
|
|
handle->offset = 0;
|
|
- handle->linktype = DLT_EN10MB;
|
|
- // TODO: check interface type!
|
|
|
|
return 0;
|
|
}
|
|
@@ -240,6 +238,16 @@ pcap_create_interface(const char *device, char *errorBuffer)
|
|
return NULL;
|
|
}
|
|
|
|
+ // get address
|
|
+ if (ioctl(socket, SIOCGIFADDR, &request, sizeof(struct ifreq)) < 0) {
|
|
+ snprintf(errorBuffer, PCAP_ERRBUF_SIZE, "Cannot get address: %s\n",
|
|
+ strerror(errno));
|
|
+ close(socket);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ uint8 sdl_type = ((sockaddr_dl&)request.ifr_addr).sdl_type;
|
|
+
|
|
// start monitoring
|
|
if (ioctl(socket, SIOCSPACKETCAP, &request, sizeof(struct ifreq)) < 0) {
|
|
snprintf(errorBuffer, PCAP_ERRBUF_SIZE, "Cannot start monitoring: %s\n",
|
|
@@ -261,6 +269,10 @@ pcap_create_interface(const char *device, char *errorBuffer)
|
|
|
|
handle->selectable_fd = socket;
|
|
handle->fd = socket;
|
|
+#ifndef IFT_TUNNEL
|
|
+#define IFT_TUNNEL IFT_TUN
|
|
+#endif
|
|
+ handle->linktype = (sdl_type == IFT_LOOP || sdl_type == IFT_TUNNEL) ? DLT_RAW : DLT_EN10MB;
|
|
|
|
handle->activate_op = pcap_activate_haiku;
|
|
|
|
--
|
|
2.42.1
|
|
|