ports/net/kismet/patches/patch-packetsource_bsdrt_cc

36 lines
1.3 KiB
Text

IFM_MAKEMODE is not defined on OpenBSD, just copying it from Linux
doesn't help, since our IFM_MSHIFT etc. operate on ULL, but mode
apparently only is of type int
Index: packetsource_bsdrt.cc
--- packetsource_bsdrt.cc.orig
+++ packetsource_bsdrt.cc
@@ -138,7 +138,7 @@ int Radiotap_BSD_Controller::GetMediaOpt(int& options,
int Radiotap_BSD_Controller::SetMediaOpt(int options, int mode) {
struct ifmediareq ifmr;
struct ifreq ifr;
- int *mwords;
+ uint64_t *mwords;
if (CheckSocket() == 0)
return 0;
@@ -160,7 +160,7 @@ int Radiotap_BSD_Controller::SetMediaOpt(int options,
return 0;
}
- mwords = new int[ifmr.ifm_count];
+ mwords = new uint64_t[ifmr.ifm_count];
if (mwords == NULL) {
_MSG("BSD interface control cannot malloc interface array, out of "
"memory or other badness.", MSGFLAG_PRINTERROR);
@@ -179,6 +179,10 @@ int Radiotap_BSD_Controller::SetMediaOpt(int options,
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, dev.c_str(), sizeof(ifr.ifr_name));
ifr.ifr_media = (ifmr.ifm_current &~ IFM_OMASK) | options;
+#ifndef IFM_MAKEMODE
+#define IFM_MAKEMODE(mode) \
+ ((((unsigned long long)mode) << IFM_MSHIFT) & IFM_MMASK)
+#endif
ifr.ifr_media = (ifr.ifr_media &~ IFM_MMASK) | IFM_MAKEMODE(mode);
if (ioctl(sock, SIOCSIFMEDIA, (caddr_t) &ifr) < 0) {