[Olsr-dev] [PATCH] Implement a simpler way to detect wireless interfaces on *BSD.

Ferry Huberts (spam-protected)
Sun Jun 4 12:59:41 CEST 2017



On 04/06/17 11:48, Stefan Sperling wrote:
> On Sun, May 14, 2017 at 05:02:52PM +0200, Stefan Sperling wrote:
>> The media type of an interface can be used to tell wireless interfaces
>> apart. The SIOCGIFMEDIA ioctl works the same way across all BSDs,
>> whereas the net80211 ioctls used previously differ.
>>
>> Tested on OpenBSD only. I am confident it will work elsewhere.
>>
>>   ---- Interface configuration ----
>>
>> Checking ral0:
>>          Wireless interface detected
> 
> Ping. Is anybody interested in such diffs?
> 
> I would eventually send more, but if they're just being ignored
> I'm not sure if it's worth the effort.
> 
> It's probably just a matter of someone (Ferry?) finding some
> spare time to look at them, isn't it?


Can you (also) submit them as pull requests on the github repo?
That makes it a bit easier to look at.

Note that I have absolutely no way to test or even compile them since I 
have no BSD system. That makes integrating them rather tricky for me.
I'd propose that you take ownership of the BSD related parts of the code 
once I start to integrate your patches so that when any problem comes up 
for BSD that they will be looked at promptly  by someone with a BSD system.



Ferry

> 
> Thanks :)
> 
>> ---
>>   src/bsd/net.c | 45 ++++++---------------------------------------
>>   1 file changed, 6 insertions(+), 39 deletions(-)
>>
>> diff --git a/src/bsd/net.c b/src/bsd/net.c
>> index d3b67fef..c8c910d2 100644
>> --- a/src/bsd/net.c
>> +++ b/src/bsd/net.c
>> @@ -65,6 +65,7 @@
>>   #include <string.h>
>>   #include <unistd.h>
>>   #include <net/if.h>
>> +#include <net/if_media.h>
>>   #include <sys/ioctl.h>
>>   #include <fcntl.h>
>>   #include <syslog.h>
>> @@ -87,7 +88,6 @@
>>   #ifdef __NetBSD__
>>   #include <net/if_ether.h>
>>   #include <netinet6/in6_var.h>   /* For struct in6_ifreq */
>> -#include <net80211/ieee80211_ioctl.h>
>>   #include <ifaddrs.h>
>>   #endif /* __NetBSD__ */
>>   
>> @@ -101,8 +101,6 @@
>>   #include <netinet6/in6_var.h>   /* For struct in6_ifreq */
>>   #include <ifaddrs.h>
>>   #include <sys/uio.h>
>> -#include <net80211/ieee80211.h>
>> -#include <net80211/ieee80211_ioctl.h>
>>   #endif /* __OpenBSD__ */
>>   
>>   #if defined __FreeBSD__ || defined __FreeBSD_kernel__
>> @@ -110,10 +108,6 @@
>>   #include <net/ethernet.h>
>>   #include <netinet/in_var.h>
>>   #include <ifaddrs.h>
>> -#ifndef FBSD_NO_80211
>> -#include <net80211/ieee80211.h>
>> -#include <net80211/ieee80211_ioctl.h>
>> -#endif /* FBSD_NO_80211 */
>>   #endif /* defined __FreeBSD__ || defined __FreeBSD_kernel__ */
>>   
>>   #ifdef __APPLE__
>> @@ -748,39 +742,12 @@ olsr_select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, s
>>   int
>>   check_wireless_interface(char *ifname)
>>   {
>> -#if (defined __FreeBSD__ || defined __FreeBSD_kernel__ ) &&  !defined FBSD_NO_80211
>> -
>> -/* From FreeBSD ifconfig/ifieee80211.c ieee80211_status() */
>> -  struct ieee80211req ireq;
>> -  u_int8_t data[32];
>> -
>> -  memset(&ireq, 0, sizeof(ireq));
>> -  strscpy(ireq.i_name, ifname, sizeof(ireq.i_name));
>> -  ireq.i_data = &data;
>> -  ireq.i_type = IEEE80211_IOC_SSID;
>> -  ireq.i_val = -1;
>> -  return (ioctl(olsr_cnf->ioctl_s, SIOCG80211, &ireq) >= 0) ? 1 : 0;
>> -#elif defined __OpenBSD__
>> -  struct ieee80211_nodereq nr;
>> -  bzero(&nr, sizeof(nr));
>> -  strscpy(nr.nr_ifname, ifname, sizeof(nr.nr_ifname));
>> -  return (ioctl(olsr_cnf->ioctl_s, SIOCG80211FLAGS, &nr) >= 0) ? 1 : 0;
>> -#elif defined __NetBSD__
>> -  struct ifreq ireq;
>> -  struct ieee80211_nwid data;
>> +  struct ifmediareq ifmr;
>>     int ret;
>> -
>> -  memset(&ireq, 0, sizeof(ireq));
>> -  strscpy(ireq.ifr_name, ifname, sizeof(ireq.ifr_name));
>> -  ireq.ifr_data = &data;
>> -  ret = ioctl(olsr_cnf->ioctl_s, SIOCG80211NWID, &ireq);
>> -  if(ret == 0)
>> -	  return 1;
>> -  return 0;
>> -#else /* defined __NetBSD__ */
>> -  ifname = NULL;                /* squelsh compiler warning */
>> -  return 0;
>> -#endif /* defined __NetBSD__ */
>> +  bzero(&ifmr, sizeof(ifmr));
>> +  strscpy(ifmr.ifm_name, ifname, sizeof(ifmr.ifm_name));
>> +  ret = ioctl(olsr_cnf->ioctl_s, SIOCGIFMEDIA, (caddr_t)&ifmr);
>> +  return (ret == 0 && IFM_TYPE(ifmr.ifm_current) == IFM_IEEE80211);
>>   }
>>   
>>   #include <sys/sockio.h>
>> -- 
>> 2.12.2
>>
>>
>> -- 
>> Olsr-dev mailing list
>> (spam-protected)
>> https://lists.olsr.org/mailman/listinfo/olsr-dev
> 

-- 
Ferry Huberts



More information about the Olsr-dev mailing list