bond: fix arp_all_target option when arp_interval is disabled

The bond option arp_all_target can be set even if arp_interval is
disabled.

https://bugzilla.redhat.com/show_bug.cgi?id=2123311

Fixes: e064eb9d13 ('bond: use netlink to set bond options')
This commit is contained in:
Fernando Fernandez Mancera 2022-09-27 09:06:55 +02:00
parent f54c85ef8c
commit 3871c670ab
4 changed files with 5 additions and 19 deletions

View file

@ -455,7 +455,6 @@ _platform_lnk_bond_init_from_setting(NMSettingBond *s_bond, NMPlatformLnkBond *p
props->updelay_has = props->miimon_has && props->miimon;
props->downdelay_has = props->miimon_has && props->miimon;
props->peer_notif_delay_has = (props->miimon || props->arp_interval) && props->peer_notif_delay;
props->arp_all_targets_has = props->arp_interval && props->arp_all_targets;
props->resend_igmp_has = props->resend_igmp != 1;
props->lp_interval_has = props->lp_interval != 1;
props->tlb_dynamic_lb_has = NM_IN_SET(props->mode, NM_BOND_MODE_TLB, NM_BOND_MODE_ALB);

View file

@ -1628,12 +1628,8 @@ _parse_lnk_bond(const char *kind, struct nlattr *info_data)
}
if (tb[IFLA_BOND_ARP_VALIDATE])
props->arp_validate = nla_get_u32(tb[IFLA_BOND_ARP_VALIDATE]);
if (tb[IFLA_BOND_ARP_ALL_TARGETS]) {
props->arp_all_targets = nla_get_u32(tb[IFLA_BOND_ARP_ALL_TARGETS]);
props->arp_all_targets_has = TRUE;
} else {
props->arp_all_targets_has = FALSE;
}
if (tb[IFLA_BOND_ARP_ALL_TARGETS])
props->arp_all_targets = nla_get_u32(tb[IFLA_BOND_ARP_ALL_TARGETS]);
if (tb[IFLA_BOND_PRIMARY_RESELECT])
props->primary_reselect = nla_get_u8(tb[IFLA_BOND_PRIMARY_RESELECT]);
if (tb[IFLA_BOND_FAIL_OVER_MAC])
@ -4517,7 +4513,7 @@ _nl_msg_new_link_set_linkinfo(struct nl_msg *msg, NMLinkType link_type, gconstpo
nla_nest_end(msg, targets);
}
if (props->arp_all_targets_has)
if (props->arp_all_targets)
NLA_PUT_U32(msg, IFLA_BOND_ARP_ALL_TARGETS, props->arp_all_targets);
if (props->arp_interval)
NLA_PUT_U32(msg, IFLA_BOND_ARP_INTERVAL, props->arp_interval);

View file

@ -5943,7 +5943,6 @@ nm_platform_lnk_bond_to_string(const NMPlatformLnkBond *lnk, char *buf, gsize le
char sbuf_updelay[30];
char sbuf_downdelay[30];
char sbuf_peer_notif_delay[60];
char sbuf_arp_all_targets[30];
char sbuf_resend_igmp[30];
char sbuf_lp_interval[30];
char sbuf_tlb_dynamic_lb[30];
@ -5967,7 +5966,7 @@ nm_platform_lnk_bond_to_string(const NMPlatformLnkBond *lnk, char *buf, gsize le
"%s" /* lp_interval */
" packets_per_port %u"
"%s" /* peer_notif_delay */
"%s" /* arp_all_targets */
" arp_all_targets %u"
" arp_validate %u"
" ad_actor_sys_prio %u"
" ad_user_port_key %u"
@ -6017,12 +6016,7 @@ nm_platform_lnk_bond_to_string(const NMPlatformLnkBond *lnk, char *buf, gsize le
!lnk->peer_notif_delay_has ? "?" : "",
lnk->peer_notif_delay)
: "",
lnk->arp_all_targets_has || lnk->arp_all_targets != 0
? nm_sprintf_buf(sbuf_arp_all_targets,
" arp_all_targets%s %u",
!lnk->arp_all_targets_has ? "?" : "",
lnk->arp_all_targets)
: "",
lnk->arp_all_targets,
lnk->arp_validate,
lnk->ad_actor_sys_prio,
lnk->ad_user_port_key,
@ -7651,7 +7645,6 @@ nm_platform_lnk_bond_hash_update(const NMPlatformLnkBond *obj, NMHashState *h)
obj->primary_reselect,
obj->xmit_hash_policy,
NM_HASH_COMBINE_BOOLS(guint16,
obj->arp_all_targets_has,
obj->downdelay_has,
obj->lp_interval_has,
obj->miimon_has,
@ -7697,7 +7690,6 @@ nm_platform_lnk_bond_cmp(const NMPlatformLnkBond *a, const NMPlatformLnkBond *b)
NM_CMP_FIELD(a, b, mode);
NM_CMP_FIELD(a, b, primary_reselect);
NM_CMP_FIELD(a, b, xmit_hash_policy);
NM_CMP_FIELD_BOOL(a, b, arp_all_targets_has);
NM_CMP_FIELD_BOOL(a, b, downdelay_has);
NM_CMP_FIELD_BOOL(a, b, lp_interval_has);
NM_CMP_FIELD_BOOL(a, b, miimon_has);

View file

@ -714,7 +714,6 @@ typedef struct {
guint8 mode;
guint8 primary_reselect;
guint8 xmit_hash_policy;
bool arp_all_targets_has : 1;
bool downdelay_has : 1;
bool lp_interval_has : 1;
bool miimon_has : 1;