mirror of
https://github.com/Llewellynvdm/conky.git
synced 2024-12-26 20:31:17 +00:00
Add WiFi signal level detection support on FreeBSD (patch by
Stepan Zastupov). git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@711 7f574dfc-610e-0410-a909-a81674777703
This commit is contained in:
parent
e2d80ba894
commit
00e92953b6
3
AUTHORS
3
AUTHORS
@ -163,6 +163,9 @@ Roman Bogorodskiy <novel at clublife dot ru>
|
|||||||
FreeBSD support
|
FreeBSD support
|
||||||
BMPx support
|
BMPx support
|
||||||
|
|
||||||
|
Stepan Zastupov <redchrom at gmail dot com>
|
||||||
|
WiFi signal level detection support on FreeBSD
|
||||||
|
|
||||||
Szymon Boniecki
|
Szymon Boniecki
|
||||||
Reads current LC_TIME
|
Reads current LC_TIME
|
||||||
|
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
|
2006-10-18
|
||||||
|
* Implement WiFi signal level detection on FreeBSD (patch
|
||||||
|
by Stepan Zastupov)
|
||||||
|
|
||||||
2006-10-04
|
2006-10-04
|
||||||
* Fix buffer overflow in parsing LC_ALL, LC_CTYPE and LANG
|
* Fix buffer overflow in parsing LC_ALL, LC_CTYPE and LANG
|
||||||
environment variables and fix crash for users with locale
|
environment variables and fix crash for users with locale
|
||||||
|
@ -14,9 +14,13 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/vmmeter.h>
|
#include <sys/vmmeter.h>
|
||||||
#include <sys/user.h>
|
#include <sys/user.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
#include <net/if_mib.h>
|
#include <net/if_mib.h>
|
||||||
|
#include <net/if_media.h>
|
||||||
|
#include <net/if_var.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
|
||||||
#include <devstat.h>
|
#include <devstat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@ -27,6 +31,8 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <dev/wi/if_wavelan_ieee.h>
|
||||||
|
|
||||||
#include "conky.h"
|
#include "conky.h"
|
||||||
|
|
||||||
#define GETSYSCTL(name, var) getsysctl(name, &(var), sizeof (var))
|
#define GETSYSCTL(name, var) getsysctl(name, &(var), sizeof (var))
|
||||||
@ -511,7 +517,7 @@ get_freq(char *p_client_buffer, size_t client_buffer_size,
|
|||||||
|
|
||||||
if (!p_client_buffer || client_buffer_size <= 0 ||
|
if (!p_client_buffer || client_buffer_size <= 0 ||
|
||||||
!p_format || divisor <= 0)
|
!p_format || divisor <= 0)
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
if (GETSYSCTL(freq_sysctl, freq) == 0)
|
if (GETSYSCTL(freq_sysctl, freq) == 0)
|
||||||
snprintf(p_client_buffer, client_buffer_size,
|
snprintf(p_client_buffer, client_buffer_size,
|
||||||
@ -532,7 +538,66 @@ update_top()
|
|||||||
void
|
void
|
||||||
update_wifi_stats()
|
update_wifi_stats()
|
||||||
{
|
{
|
||||||
/* XXX */
|
struct ifreq ifr; /* interface stats */
|
||||||
|
struct wi_req wireq;
|
||||||
|
struct net_stat * ns;
|
||||||
|
struct ifaddrs *ifap, *ifa;
|
||||||
|
struct ifmediareq ifmr;
|
||||||
|
int s;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get iface table
|
||||||
|
*/
|
||||||
|
if (getifaddrs(&ifap) < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
|
||||||
|
ns = get_net_stat((const char *) ifa->ifa_name);
|
||||||
|
|
||||||
|
if (!strcmp(ifa->ifa_name, "lo0") ||
|
||||||
|
!strncmp(ifa->ifa_name, "fwe", 3) ||
|
||||||
|
!strncmp(ifa->ifa_name, "tun", 3))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||||
|
|
||||||
|
/* Get media type */
|
||||||
|
bzero(&ifmr, sizeof(ifmr));
|
||||||
|
strncpy(ifmr.ifm_name, ifa->ifa_name, strlen(ifmr.ifm_name) - 1);
|
||||||
|
ifmr.ifm_name[sizeof(ifmr.ifm_name) - 1] = '\0';
|
||||||
|
if (ioctl(s, SIOCGIFMEDIA, (caddr_t) &ifmr) < 0) {
|
||||||
|
perror("ioctl (getting media type)");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* We can monitor only wireless interfaces
|
||||||
|
* which not in hostap mode
|
||||||
|
*/
|
||||||
|
if ((ifmr.ifm_active & IFM_IEEE80211) &&
|
||||||
|
!(ifmr.ifm_active & IFM_IEEE80211_HOSTAP)) {
|
||||||
|
/* Get wi status */
|
||||||
|
bzero(&ifr, sizeof(ifr));
|
||||||
|
strncpy(ifr.ifr_name, ifa->ifa_name, strlen(ifr.ifr_name) - 1);
|
||||||
|
ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0';
|
||||||
|
wireq.wi_type = WI_RID_COMMS_QUALITY;
|
||||||
|
wireq.wi_len = WI_MAX_DATALEN;
|
||||||
|
ifr.ifr_data = (void *) &wireq;
|
||||||
|
|
||||||
|
if (ioctl(s, SIOCGWAVELAN, (caddr_t) &ifr) < 0) {
|
||||||
|
perror("ioctl (getting wi status)");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* wi_val[0] = quality
|
||||||
|
* wi_val[1] = signal
|
||||||
|
* wi_val[2] = noise
|
||||||
|
*/
|
||||||
|
ns->linkstatus = (int) wireq.wi_val[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
close(s);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
update_diskio()
|
update_diskio()
|
||||||
|
Loading…
Reference in New Issue
Block a user