network: detect if link is p2p and use local addr

without this we endup with peer's addr

Signed-off-by: Paymon MARANDI <darwinskernel@gmail.com>
This commit is contained in:
Paymon 2023-04-26 13:49:17 -04:00
parent 757f20fc04
commit 3da3732cc9
2 changed files with 10 additions and 2 deletions

View File

@ -62,6 +62,7 @@ class Network : public ALabel {
bool want_link_dump_;
bool want_addr_dump_;
bool dump_in_progress_;
bool is_p2p_;
unsigned long long bandwidth_down_total_;
unsigned long long bandwidth_up_total_;

View File

@ -87,6 +87,7 @@ waybar::modules::Network::Network(const std::string &id, const Json::Value &conf
want_link_dump_(false),
want_addr_dump_(false),
dump_in_progress_(false),
is_p2p_(false),
cidr_(0),
signal_strength_dbm_(0),
signal_strength_(0),
@ -456,6 +457,8 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
case IFLA_IFNAME:
ifname = static_cast<const char *>(RTA_DATA(ifla));
ifname_len = RTA_PAYLOAD(ifla) - 1; // minus \0
if (ifi->ifi_flags & IFF_POINTOPOINT && net->checkInterface(ifname))
net->is_p2p_ = true;
break;
case IFLA_CARRIER: {
carrier = *(char *)RTA_DATA(ifla) == 1;
@ -494,6 +497,8 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
net->ifname_ = new_ifname;
net->ifid_ = ifi->ifi_index;
if (ifi->ifi_flags & IFF_POINTOPOINT)
net->is_p2p_ = true;
if (carrier.has_value()) {
net->carrier_ = carrier.value();
}
@ -537,7 +542,10 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
for (; RTA_OK(ifa_rta, attrlen); ifa_rta = RTA_NEXT(ifa_rta, attrlen)) {
switch (ifa_rta->rta_type) {
case IFA_ADDRESS: {
case IFA_ADDRESS:
if (net->is_p2p_)
continue;
case IFA_LOCAL:
char ipaddr[INET6_ADDRSTRLEN];
if (!is_del_event) {
net->ipaddr_ = inet_ntop(ifa->ifa_family, RTA_DATA(ifa_rta), ipaddr, sizeof(ipaddr));
@ -570,7 +578,6 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
}
net->dp.emit();
break;
}
}
}
break;