diff options
| author | Michael Biebl <biebl@debian.org> | 2026-07-03 19:53:18 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2026-07-03 19:53:18 +0200 |
| commit | 537bfce2bda471c92caabd388589230200891509 (patch) | |
| tree | aedeccfaf0ba52c238ecf51fc009c0db5d4b60f0 /src/libnm-platform | |
| parent | 869e9027026cdbb15d4e4a6327ff41d2697858eb (diff) | |
New upstream version 1.58~rc1 upstream/1.58_rc1
Diffstat (limited to 'src/libnm-platform')
| -rw-r--r-- | src/libnm-platform/nm-linux-platform.c | 10 | ||||
| -rw-r--r-- | src/libnm-platform/nm-platform.c | 34 | ||||
| -rw-r--r-- | src/libnm-platform/nm-platform.h | 1 | ||||
| -rw-r--r-- | src/libnm-platform/nmp-ethtool-ioctl.c | 27 | ||||
| -rw-r--r-- | src/libnm-platform/nmp-ethtool-ioctl.h | 2 |
5 files changed, 22 insertions, 52 deletions
diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c index b5df8b17..7d4a6f3d 100644 --- a/src/libnm-platform/nm-linux-platform.c +++ b/src/libnm-platform/nm-linux-platform.c @@ -1766,8 +1766,12 @@ _parse_lnk_bond(const char *kind, struct nlattr *info_data) props->num_grat_arp = nla_get_u8(tb[IFLA_BOND_NUM_PEER_NOTIF]); if (tb[IFLA_BOND_ALL_PORTS_ACTIVE]) props->all_ports_active = nla_get_u8(tb[IFLA_BOND_ALL_PORTS_ACTIVE]); - if (tb[IFLA_BOND_MISSED_MAX]) - props->arp_missed_max = nla_get_u8(tb[IFLA_BOND_MISSED_MAX]); + if (tb[IFLA_BOND_MISSED_MAX]) { + props->arp_missed_max = nla_get_u8(tb[IFLA_BOND_MISSED_MAX]); + props->arp_missed_max_has = TRUE; + } else { + props->arp_missed_max_has = FALSE; + } if (tb[IFLA_BOND_MIN_LINKS]) props->min_links = nla_get_u32(tb[IFLA_BOND_MIN_LINKS]); if (tb[IFLA_BOND_LP_INTERVAL]) @@ -5126,7 +5130,7 @@ _nl_msg_new_link_set_linkinfo(struct nl_msg *msg, NMLinkType link_type, gconstpo &props->ad_actor_system); if (props->ad_select) NLA_PUT_U8(msg, IFLA_BOND_AD_SELECT, props->ad_select); - if (props->arp_missed_max) + if (props->arp_missed_max_has) NLA_PUT_U8(msg, IFLA_BOND_MISSED_MAX, props->arp_missed_max); NLA_PUT_U8(msg, IFLA_BOND_ALL_PORTS_ACTIVE, props->all_ports_active); diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c index 914dcd86..27888d6c 100644 --- a/src/libnm-platform/nm-platform.c +++ b/src/libnm-platform/nm-platform.c @@ -3223,7 +3223,6 @@ gboolean nm_platform_link_veth_get_properties(NMPlatform *self, int ifindex, int *out_peer_ifindex) { const NMPlatformLink *plink; - int peer_ifindex; plink = nm_platform_link_get(self, ifindex); if (!plink) @@ -3232,23 +3231,10 @@ nm_platform_link_veth_get_properties(NMPlatform *self, int ifindex, int *out_pee if (plink->type != NM_LINK_TYPE_VETH) return FALSE; - if (plink->parent != 0) { - NM_SET_OUT(out_peer_ifindex, plink->parent); - return TRUE; - } - - /* Pre-4.1 kernel did not expose the peer_ifindex as IFA_LINK. Lookup via ethtool. */ - if (out_peer_ifindex) { - nm_auto_pop_netns NMPNetns *netns = NULL; - - if (!nm_platform_netns_push(self, &netns)) - return FALSE; - peer_ifindex = nmp_ethtool_ioctl_get_peer_ifindex(plink->ifindex); - if (peer_ifindex <= 0) - return FALSE; + if (plink->parent == 0) + return FALSE; - *out_peer_ifindex = peer_ifindex; - } + NM_SET_OUT(out_peer_ifindex, plink->parent); return TRUE; } @@ -6387,6 +6373,7 @@ nm_platform_lnk_bond_to_string(const NMPlatformLnkBond *lnk, char *buf, gsize le char sbuf_resend_igmp[30]; char sbuf_lp_interval[30]; char sbuf_tlb_dynamic_lb[30]; + char sbuf_arp_missed_max[30]; int i; if (!nm_utils_to_string_buffer_init_null(lnk, &buf, &len)) @@ -6417,7 +6404,7 @@ nm_platform_lnk_bond_to_string(const NMPlatformLnkBond *lnk, char *buf, gsize le " xmit_hash_policy %u" " num_gray_arp %u" " all_ports_active %u" - " arp_missed_max %u" + "%s" /* arp_missed_max %u */ " lacp_rate %u" "%s" /* lacp_active */ " ad_select %u" @@ -6469,7 +6456,12 @@ nm_platform_lnk_bond_to_string(const NMPlatformLnkBond *lnk, char *buf, gsize le lnk->xmit_hash_policy, lnk->num_grat_arp, lnk->all_ports_active, - lnk->arp_missed_max, + lnk->arp_missed_max_has || lnk->arp_missed_max != 0 + ? nm_sprintf_buf(sbuf_arp_missed_max, + " arp_missed_max%s %u", + !lnk->arp_missed_max_has ? "?" : "", + (int) lnk->arp_missed_max) + : "", lnk->lacp_rate, lnk->lacp_active_has || lnk->lacp_active != 0 ? nm_sprintf_buf(sbuf_lacp_active, @@ -8402,7 +8394,8 @@ nm_platform_lnk_bond_hash_update(const NMPlatformLnkBond *obj, NMHashState *h) obj->tlb_dynamic_lb, obj->tlb_dynamic_lb_has, obj->updelay_has, - obj->use_carrier)); + obj->use_carrier, + obj->arp_missed_max_has)); nm_hash_update(h, obj->arp_ip_target, obj->arp_ip_targets_num * sizeof(obj->arp_ip_target[0])); nm_hash_update(h, obj->ns_ip6_target, obj->ns_ip6_targets_num * sizeof(obj->ns_ip6_target[0])); @@ -8480,6 +8473,7 @@ nm_platform_lnk_bond_cmp(const NMPlatformLnkBond *a, const NMPlatformLnkBond *b) NM_CMP_FIELD_BOOL(a, b, tlb_dynamic_lb_has); NM_CMP_FIELD_BOOL(a, b, updelay_has); NM_CMP_FIELD_BOOL(a, b, use_carrier); + NM_CMP_FIELD_BOOL(a, b, arp_missed_max_has); return 0; } diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h index ba37d3a2..4d46807b 100644 --- a/src/libnm-platform/nm-platform.h +++ b/src/libnm-platform/nm-platform.h @@ -840,6 +840,7 @@ typedef struct { bool tlb_dynamic_lb_has : 1; bool updelay_has : 1; bool use_carrier : 1; + bool arp_missed_max_has : 1; } _nm_alignas(NMPlatformObject) NMPlatformLnkBond; typedef struct { diff --git a/src/libnm-platform/nmp-ethtool-ioctl.c b/src/libnm-platform/nmp-ethtool-ioctl.c index 830b02f6..9694eaec 100644 --- a/src/libnm-platform/nmp-ethtool-ioctl.c +++ b/src/libnm-platform/nmp-ethtool-ioctl.c @@ -1190,33 +1190,6 @@ nmp_ethtool_ioctl_supports_vlans(int ifindex) return !(features->features[block].active & (1 << bit)); } -int -nmp_ethtool_ioctl_get_peer_ifindex(int ifindex) -{ - nm_auto_socket_handle SocketHandle shandle = SOCKET_HANDLE_INIT(ifindex); - gsize stats_len; - gs_free struct ethtool_stats *stats_free = NULL; - struct ethtool_stats *stats; - int peer_ifindex_stat; - - g_return_val_if_fail(ifindex > 0, 0); - - peer_ifindex_stat = ethtool_get_stringset_index(&shandle, ETH_SS_STATS, "peer_ifindex"); - if (peer_ifindex_stat < 0) { - nm_log_dbg(LOGD_PLATFORM, "ethtool[%d]: peer_ifindex stat does not exist?", ifindex); - return FALSE; - } - - stats_len = sizeof(*stats) + (peer_ifindex_stat + 1) * sizeof(guint64); - stats = nm_malloc0_maybe_a(300, stats_len, &stats_free); - stats->cmd = ETHTOOL_GSTATS; - stats->n_stats = peer_ifindex_stat + 1; - if (_ethtool_call_handle(&shandle, stats, stats_len) < 0) - return 0; - - return stats->data[peer_ifindex_stat]; -} - gboolean nmp_ethtool_ioctl_get_wake_on_lan(int ifindex) { diff --git a/src/libnm-platform/nmp-ethtool-ioctl.h b/src/libnm-platform/nmp-ethtool-ioctl.h index cb93e9cf..1c973649 100644 --- a/src/libnm-platform/nmp-ethtool-ioctl.h +++ b/src/libnm-platform/nmp-ethtool-ioctl.h @@ -9,8 +9,6 @@ gboolean nmp_ethtool_ioctl_supports_carrier_detect(int ifindex); gboolean nmp_ethtool_ioctl_supports_vlans(int ifindex); -int nmp_ethtool_ioctl_get_peer_ifindex(int ifindex); - gboolean nmp_ethtool_ioctl_get_wake_on_lan(int ifindex); gboolean nmp_ethtool_ioctl_set_wake_on_lan(int ifindex, |