Merge pull request #1239 from mazunki/default-gateway

Added support for {gwaddr} as a variable
This commit is contained in:
Alex 2021-09-18 13:47:32 +02:00 committed by GitHub
commit 6938921e92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 17 additions and 4 deletions

View File

@ -16,5 +16,8 @@ install: build
run: build run: build
./build/waybar ./build/waybar
debug-run: build-debug
./build/waybar --log-level debug
clean: clean:
rm -rf build rm -rf build

View File

@ -67,6 +67,7 @@ class Network : public ALabel {
bool carrier_; bool carrier_;
std::string ifname_; std::string ifname_;
std::string ipaddr_; std::string ipaddr_;
std::string gwaddr_;
std::string netmask_; std::string netmask_;
int cidr_; int cidr_;
int32_t signal_strength_dbm_; int32_t signal_strength_dbm_;

View File

@ -131,6 +131,8 @@ Addressed by *network*
*{ipaddr}*: The first IP of the interface. *{ipaddr}*: The first IP of the interface.
*{gwaddr}*: The default gateway for the interface
*{netmask}*: The subnetmask corresponding to the IP. *{netmask}*: The subnetmask corresponding to the IP.
*{cidr}*: The subnetmask corresponding to the IP in CIDR notation. *{cidr}*: The subnetmask corresponding to the IP in CIDR notation.

View File

@ -117,7 +117,8 @@
"network": { "network": {
// "interface": "wlp2*", // (Optional) To force the use of this interface // "interface": "wlp2*", // (Optional) To force the use of this interface
"format-wifi": "{essid} ({signalStrength}%) ", "format-wifi": "{essid} ({signalStrength}%) ",
"format-ethernet": "{ifname}: {ipaddr}/{cidr} ", "format-ethernet": "{ipaddr}/{cidr} ",
"tooltip-format": "{ifname} via {gwaddr} ",
"format-linked": "{ifname} (No IP) ", "format-linked": "{ifname} (No IP) ",
"format-disconnected": "Disconnected ⚠", "format-disconnected": "Disconnected ⚠",
"format-alt": "{ifname}: {ipaddr}/{cidr}" "format-alt": "{ifname}: {ipaddr}/{cidr}"

View File

@ -348,6 +348,7 @@ auto waybar::modules::Network::update() -> void {
fmt::arg("ifname", ifname_), fmt::arg("ifname", ifname_),
fmt::arg("netmask", netmask_), fmt::arg("netmask", netmask_),
fmt::arg("ipaddr", ipaddr_), fmt::arg("ipaddr", ipaddr_),
fmt::arg("gwaddr", gwaddr_),
fmt::arg("cidr", cidr_), fmt::arg("cidr", cidr_),
fmt::arg("frequency", frequency_), fmt::arg("frequency", frequency_),
fmt::arg("icon", getIcon(signal_strength_, state_)), fmt::arg("icon", getIcon(signal_strength_, state_)),
@ -376,6 +377,7 @@ auto waybar::modules::Network::update() -> void {
fmt::arg("ifname", ifname_), fmt::arg("ifname", ifname_),
fmt::arg("netmask", netmask_), fmt::arg("netmask", netmask_),
fmt::arg("ipaddr", ipaddr_), fmt::arg("ipaddr", ipaddr_),
fmt::arg("gwaddr", gwaddr_),
fmt::arg("cidr", cidr_), fmt::arg("cidr", cidr_),
fmt::arg("frequency", frequency_), fmt::arg("frequency", frequency_),
fmt::arg("icon", getIcon(signal_strength_, state_)), fmt::arg("icon", getIcon(signal_strength_, state_)),
@ -409,6 +411,7 @@ void waybar::modules::Network::clearIface() {
ifname_.clear(); ifname_.clear();
essid_.clear(); essid_.clear();
ipaddr_.clear(); ipaddr_.clear();
gwaddr_.clear();
netmask_.clear(); netmask_.clear();
carrier_ = false; carrier_ = false;
cidr_ = 0; cidr_ = 0;
@ -581,6 +584,7 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
break; break;
} }
char temp_gw_addr[INET6_ADDRSTRLEN];
case RTM_DELROUTE: case RTM_DELROUTE:
is_del_event = true; is_del_event = true;
case RTM_NEWROUTE: { case RTM_NEWROUTE: {
@ -595,6 +599,7 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
int temp_idx = -1; int temp_idx = -1;
uint32_t priority = 0; uint32_t priority = 0;
/* Find the message(s) concerting the main routing table, each message /* Find the message(s) concerting the main routing table, each message
* corresponds to a single routing table entry. * corresponds to a single routing table entry.
*/ */
@ -612,9 +617,10 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
case RTA_GATEWAY: case RTA_GATEWAY:
/* The gateway of the route. /* The gateway of the route.
* *
* If someone every needs to figure out the gateway address as well, * If someone ever needs to figure out the gateway address as well,
* it's here as the attribute payload. * it's here as the attribute payload.
*/ */
inet_ntop(net->family_, RTA_DATA(attr), temp_gw_addr, sizeof(temp_gw_addr));
has_gateway = true; has_gateway = true;
break; break;
case RTA_DST: { case RTA_DST: {
@ -655,8 +661,8 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
net->clearIface(); net->clearIface();
net->ifid_ = temp_idx; net->ifid_ = temp_idx;
net->route_priority = priority; net->route_priority = priority;
net->gwaddr_ = temp_gw_addr;
spdlog::debug("network: new default route via if{} metric {}", temp_idx, priority); spdlog::debug("network: new default route via {} on if{} metric {}", temp_gw_addr, temp_idx, priority);
/* Ask ifname associated with temp_idx as well as carrier status */ /* Ask ifname associated with temp_idx as well as carrier status */
struct ifinfomsg ifinfo_hdr = { struct ifinfomsg ifinfo_hdr = {