int mac80211_get_coverageclass(char *interface) { struct nlattr *tb[NL80211_ATTR_MAX + 1]; struct nl_msg *msg; struct genlmsghdr *gnlh; int phy; unsigned char coverage=0; phy = mac80211_get_phyidx_by_vifname(interface); if (phy == -1) return 0; msg = unl_genl_msg(&unl, NL80211_CMD_GET_WIPHY, false); NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, phy); if (unl_genl_request_single(&unl, msg, &msg) < 0) return 0; if (!msg) return 0; gnlh=nlmsg_data(nlmsg_hdr(msg)); nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL); if (tb[NL80211_ATTR_WIPHY_COVERAGE_CLASS]) { coverage = nla_get_u8(tb[NL80211_ATTR_WIPHY_COVERAGE_CLASS]); /* See handle_distance() for an explanation where the '450' comes from */ // printf("\tCoverage class: %d (up to %dm)\n", coverage, 450 * coverage); } // printf ("%d\n", coverage); nlmsg_free(msg); return coverage; nla_put_failure: nlmsg_free(msg); return 0; }
static void getNoise_mac80211_internal(char *interface,struct mac80211_info *mac80211_info) { struct nl_msg *msg; int wdev = if_nametoindex(interface); msg = unl_genl_msg(&unl, NL80211_CMD_GET_SURVEY, true); NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, wdev); unl_genl_request(&unl, msg, mac80211_cb_survey, mac80211_info); return; nla_put_failure: nlmsg_free(msg); return; }
int getFrequency_mac80211(char *interface) { struct nl_msg *msg; struct mac80211_info mac80211_info; int wdev = if_nametoindex(interface); memset(&mac80211_info, 0, sizeof(mac80211_info)); msg = unl_genl_msg(&unl, NL80211_CMD_GET_SURVEY, true); NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, wdev); unl_genl_request(&unl, msg, mac80211_cb_survey, &mac80211_info); return mac80211_info.frequency; nla_put_failure: nlmsg_free(msg); return(0); }
int unl_nl80211_wdev_to_phy(struct unl *unl, int wdev) { struct nl_msg *msg; struct nlattr *attr; int ret = -1; msg = unl_genl_msg(unl, NL80211_CMD_GET_INTERFACE, false); if (!msg) return -1; NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, wdev); if (unl_genl_request_single(unl, msg, &msg) < 0) return -1; attr = unl_find_attr(unl, msg, NL80211_ATTR_WIPHY); if (!attr) goto out; ret = nla_get_u32(attr); out: nla_put_failure: nlmsg_free(msg); return ret; }