mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 02:42:09 +02:00
Wifi: add basic Linux support using iw
This commit is contained in:
@@ -1,14 +1,59 @@
|
||||
#include "wifi.h"
|
||||
|
||||
#include "common/io.h"
|
||||
#include <linux/nl80211.h>
|
||||
#include "common/processing.h"
|
||||
#include "common/properties.h"
|
||||
|
||||
#include <net/if.h>
|
||||
|
||||
static const char* detectInf(uint32_t ifIndex, FFWifiResult* wifi)
|
||||
static const char* detectInf(char* ifName, FFWifiResult* wifi)
|
||||
{
|
||||
//TODO: play with netlink
|
||||
FF_UNUSED(ifIndex, wifi);
|
||||
return "Unimplemented";
|
||||
const char* error = NULL;
|
||||
FF_STRBUF_AUTO_DESTROY output;
|
||||
ffStrbufInit(&output);
|
||||
if((error = ffProcessAppendStdOut(&output, (char* const[]){
|
||||
"iw",
|
||||
"dev",
|
||||
ifName,
|
||||
"link",
|
||||
NULL
|
||||
})))
|
||||
return error;
|
||||
|
||||
if(output.length == 0)
|
||||
return "iw command execution failed";
|
||||
|
||||
if(!ffParsePropLines(output.chars, "Connected to ", &wifi->conn.macAddress))
|
||||
{
|
||||
ffStrbufAppendS(&wifi->conn.status, "Disconnected");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
FF_STRBUF_AUTO_DESTROY temp;
|
||||
ffStrbufInit(&temp);
|
||||
|
||||
ffStrbufAppendS(&wifi->conn.status, "Connected");
|
||||
ffStrbufSubstrBefore(&wifi->conn.macAddress, ' ');
|
||||
ffParsePropLines(output.chars, "SSID: ", &wifi->conn.ssid);
|
||||
|
||||
if(ffParsePropLines(output.chars, "signal: ", &temp))
|
||||
wifi->conn.signalQuality = ffStrbufToDouble(&temp);
|
||||
|
||||
if(ffParsePropLines(output.chars, "tx bitrate: ", &temp))
|
||||
{
|
||||
if(ffStrbufContainS(&temp, " HE-MCS "))
|
||||
ffStrbufAppendS(&wifi->conn.phyType, "802.11ax (Wi-Fi 6)");
|
||||
else if(ffStrbufContainS(&temp, " VHT-MCS "))
|
||||
ffStrbufAppendS(&wifi->conn.phyType, "802.11ac (Wi-Fi 5)");
|
||||
else if(ffStrbufContainS(&temp, " MCS "))
|
||||
ffStrbufAppendS(&wifi->conn.phyType, "802.11n (Wi-Fi 4)");
|
||||
else
|
||||
ffStrbufAppendS(&wifi->conn.phyType, "802.11a/b/g");
|
||||
}
|
||||
|
||||
wifi->security.enabled = true; //FIXME: Unable to find this info. Set it true so that fastfetch won't print `insecure`
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char* ffDetectWifi(const FFinstance* instance, FFlist* result)
|
||||
@@ -46,10 +91,7 @@ const char* ffDetectWifi(const FFinstance* instance, FFlist* result)
|
||||
if(!ffAppendFileBuffer(path.chars, &item->inf.status) || !ffStrbufEqualS(&item->inf.status, "up"))
|
||||
continue;
|
||||
|
||||
ffStrbufSetF(&path, "/sys/class/net/%s/address", i->if_name);
|
||||
ffAppendFileBuffer(path.chars, &item->conn.macAddress);
|
||||
|
||||
detectInf(i->if_index, item);
|
||||
detectInf(i->if_name, item);
|
||||
}
|
||||
if_freenameindex(infs);
|
||||
ffStrbufDestroy(&path);
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
|
||||
void ffPrintWifi(FFinstance* instance)
|
||||
{
|
||||
FFlist result;
|
||||
FF_LIST_AUTO_DESTROY result;
|
||||
ffListInit(&result, sizeof(FFWifiResult));
|
||||
|
||||
const char* error = ffDetectWifi(instance, &result);
|
||||
|
||||
Reference in New Issue
Block a user