#include #include #include #include #include #include #include "link.h" #include "sock.h" #include "str.h" uint32_t wireless_bitrate(const char *ifname) { int sock, ret; uint32_t rate_in_mbit; struct iwreq iwr; sock = af_socket(AF_INET); memset(&iwr, 0, sizeof(iwr)); strlcpy(iwr.ifr_name, ifname, IFNAMSIZ); ret = ioctl(sock, SIOCGIWRATE, &iwr); if (!ret) rate_in_mbit = iwr.u.bitrate.value / 1000000; else rate_in_mbit = 0; close(sock); return rate_in_mbit; } int wireless_sigqual(const char *ifname, struct iw_statistics *stats) { int ret, sock; struct iwreq iwr; sock = af_socket(AF_INET); memset(&iwr, 0, sizeof(iwr)); strlcpy(iwr.ifr_name, ifname, IFNAMSIZ); iwr.u.data.pointer = (caddr_t) stats; iwr.u.data.length = sizeof(*stats); iwr.u.data.flags = 1; ret = ioctl(sock, SIOCGIWSTATS, &iwr); close(sock); return ret; } int wireless_rangemax_sigqual(const char *ifname) { int ret, sock, sigqual; struct iwreq iwr; struct iw_range iwrange; sock = af_socket(AF_INET); memset(&iwrange, 0, sizeof(iwrange)); memset(&iwr, 0, sizeof(iwr)); strlcpy(iwr.ifr_name, ifname, IFNAMSIZ); iwr.u.data.pointer = (caddr_t) &iwrange; iwr.u.data.length = sizeof(iwrange); iwr.u.data.flags = 0; ret = ioctl(sock, SIOCGIWRANGE, &iwr); if (!ret) sigqual = iwrange.max_qual.qual; else sigqual = 0; close(sock); return sigqual; } uint32_t ethtool_bitrate(const char *ifname) { int ret, sock; uint32_t bitrate; struct ifreq ifr; struct ethtool_cmd ecmd; sock = af_socket(AF_INET); memset(&ecmd, 0, sizeof(ecmd)); memset(&ifr, 0, sizeof(ifr)); strlcpy(ifr.ifr_name, ifname, IFNAMSIZ); ecmd.cmd = ETHTOOL_GSET; ifr.ifr_data = (char *) &ecmd; ret = ioctl(sock, SIOCETHTOOL, &ifr); if (ret) { bitrate = 0; goto out; } bitrate = ethtool_cmd_speed(&ecmd); if (bitrate == SPEED_UNKNOWN) bitrate = 0; out: close(sock); return bitrate; } int ethtool_link(const char *ifname) { int ret, sock; struct ifreq ifr; struct ethtool_value ecmd; sock = af_socket(AF_INET); memset(&ecmd, 0, sizeof(ecmd)); memset(&ifr, 0, sizeof(ifr)); strlcpy(ifr.ifr_name, ifname, IFNAMSIZ); ecmd.cmd = ETHTOOL_GLINK; ifr.ifr_data = (char *) &ecmd; ret = ioctl(sock, SIOCETHTOOL, &ifr); if (ret) ret = -EINVAL; else ret = !!ecmd.data; close(sock); return ret; } int ethtool_drvinf(const char *ifname, struct ethtool_drvinfo *drvinf) { int ret, sock; struct ifreq ifr; sock = af_socket(AF_INET); memset(drvinf, 0, sizeof(*drvinf)); memset(&ifr, 0, sizeof(ifr)); strlcpy(ifr.ifr_name, ifname, IFNAMSIZ); drvinf->cmd = ETHTOOL_GDRVINFO; ifr.ifr_data = (char *) drvinf; ret = ioctl(sock, SIOCETHTOOL, &ifr); close(sock); return ret; } it.cgi/linux/net-next.git/commit/fs/sync.c?id=72c2d53192004845cbc19cd8a30b3212a9288140'>sync.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2013-09-22 16:27:52 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2013-10-24 23:34:54 -0400
commit72c2d53192004845cbc19cd8a30b3212a9288140 (patch)
tree31fcd924438f03d5aa09d13ffd813fb153da37c3 /fs/sync.c
parent22bd002ee76aa7d7a3393f39d977f6c106153c60 (diff)
file->f_op is never NULL...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/sync.c')