17 static int open_skfd() {
19 skfd = iw_sockets_open();
21 perror("iw_sockets_open");
28 static void close_skfd() {
36 const char *get_wireless_essid(const char *interface) {
37 static char part[512];
42 if (iw_get_basic_config(skfd, interface, &wcfg) >= 0)
43 snprintf(part, sizeof(part), "%s", wcfg.essid);
49 int get_wireless_quality_max(const char *interface) {
53 if (iw_get_range_info(skfd, interface, &range) >= 0)
54 return range.max_qual.qual;
61 * Just parses /proc/net/wireless looking for lines beginning with
62 * wlan_interface, extracting the quality of the link and adding the
63 * current IP address of wlan_interface.
66 void print_wireless_info(const char *interface, const char *format_up, const char *format_down) {
71 memset(buf, 0, sizeof(buf));
73 if (!slurp("/proc/net/wireless", buf, sizeof(buf)))
74 die("Could not open \"/proc/net/wireless\"\n");
76 interfaces = skip_character(buf, '\n', 1) + 1;
77 while ((interfaces = skip_character(interfaces, '\n', 1)+1) < buf+strlen(buf)) {
78 while (isspace((int)*interfaces))
80 if (!BEGINS_WITH(interfaces, interface))
82 if (sscanf(interfaces, "%*[^:]: 0000 %d", &quality) != 1)
87 if ((quality == UCHAR_MAX) || (quality == 0)) {
89 printf("%s", color("#FF0000"));
91 printf("%s", color("#00FF00"));
95 for (; *walk != '\0'; walk++) {
101 if (BEGINS_WITH(walk+1, "quality")) {
102 int max_qual = get_wireless_quality_max(interface);
103 if (max_qual && max_qual >= quality)
104 printf("%03d%%", (int)(quality * (100.0 / max_qual)));
106 printf("%d dBm", quality);
107 walk += strlen("quality");
110 if (BEGINS_WITH(walk+1, "essid")) {
111 (void)printf("%s", get_wireless_essid(interface));
112 walk += strlen("essid");
115 if (BEGINS_WITH(walk+1, "ip")) {
116 const char *ip_address = get_ip_addr(interface);
117 if (ip_address != NULL)
118 (void)printf("%s", get_ip_addr(interface));
119 else (void)printf("no IP");
120 walk += strlen("ip");
128 (void)printf("%s", endcolor());