14 static const char *get_wireless_essid(const char *interface) {
15 static char part[512];
18 if ((skfd = iw_sockets_open()) < 0) {
22 struct wireless_config wcfg;
23 if (iw_get_basic_config(skfd, interface, &wcfg) >= 0)
24 snprintf(part, sizeof(part), "%s", wcfg.essid);
34 * Just parses /proc/net/wireless looking for lines beginning with
35 * wlan_interface, extracting the quality of the link and adding the
36 * current IP address of wlan_interface.
39 void print_wireless_info(const char *interface, const char *format_up, const char *format_down) {
44 memset(buf, 0, sizeof(buf));
46 if (!slurp("/proc/net/wireless", buf, sizeof(buf)))
47 die("Could not open \"/proc/net/wireless\"\n");
49 interfaces = skip_character(buf, '\n', 1) + 1;
50 while ((interfaces = skip_character(interfaces, '\n', 1)+1) < buf+strlen(buf)) {
51 while (isspace((int)*interfaces))
53 if (!BEGINS_WITH(interfaces, interface))
55 if (sscanf(interfaces, "%*[^:]: 0000 %d", &quality) != 1)
60 /* Interface could not be found */
64 if ((quality == UCHAR_MAX) || (quality == 0)) {
66 printf("%s", color("#FF0000"));
68 printf("%s", color("#00FF00"));
72 for (; *walk != '\0'; walk++) {
78 if (BEGINS_WITH(walk+1, "quality")) {
79 (void)printf("%03d%%", quality);
80 walk += strlen("quality");
83 if (BEGINS_WITH(walk+1, "essid")) {
84 (void)printf("%s", get_wireless_essid(interface));
85 walk += strlen("essid");
88 if (BEGINS_WITH(walk+1, "ip")) {
89 const char *ip_address = get_ip_addr(interface);
90 if (ip_address != NULL)
91 (void)printf("%s", get_ip_addr(interface));
92 else (void)printf("no IP");
97 (void)printf("%s", endcolor());