From: Jay Vosburgh <jay.vosburgh@canonical.com>
To: Hangbin Liu <liuhangbin@gmail.com>
Cc: netdev@vger.kernel.org, "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
Jonathan Toppins <jtoppins@redhat.com>,
Paolo Abeni <pabeni@redhat.com>,
Eric Dumazet <edumazet@google.com>, Liang Li <liali@redhat.com>
Subject: Re: [PATCH net 1/3] bonding: fix ns validation on backup slaves
Date: Thu, 30 Mar 2023 21:02:41 -0700 [thread overview]
Message-ID: <21417.1680235361@famine> (raw)
In-Reply-To: <20230329101859.3458449-2-liuhangbin@gmail.com>
Hangbin Liu <liuhangbin@gmail.com> wrote:
>When arp_validate is set to 2, 3, or 6, validation is performed for
>backup slaves as well. As stated in the bond documentation, validation
>involves checking the broadcast ARP request sent out via the active
>slave. This helps determine which slaves are more likely to function in
>the event of an active slave failure.
>
>However, when the target is an IPv6 address, the NS message sent from
>the active interface is not checked on backup slaves. Additionally,
>based on the bond_arp_rcv() rule b, we must reverse the saddr and daddr
>when checking the NS message.
>
>Note that when checking the NS message, the destination address is a
>multicast address. Therefore, we must convert the target address to
>solicited multicast in the bond_get_targets_ip6() function.
>
>Prior to the fix, the backup slaves had a mii status of "down", but
>after the fix, all of the slaves' mii status was updated to "UP".
>
>Fixes: 4e24be018eb9 ("bonding: add new parameter ns_targets")
>Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Jay Vosburgh <jay.vosburgh@canonical.com>
>---
> drivers/net/bonding/bond_main.c | 5 +++--
> include/net/bonding.h | 8 ++++++--
> 2 files changed, 9 insertions(+), 4 deletions(-)
>
>diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
>index 236e5219c811..8cc9a74789b7 100644
>--- a/drivers/net/bonding/bond_main.c
>+++ b/drivers/net/bonding/bond_main.c
>@@ -3269,7 +3269,8 @@ static int bond_na_rcv(const struct sk_buff *skb, struct bonding *bond,
>
> combined = skb_header_pointer(skb, 0, sizeof(_combined), &_combined);
> if (!combined || combined->ip6.nexthdr != NEXTHDR_ICMP ||
>- combined->icmp6.icmp6_type != NDISC_NEIGHBOUR_ADVERTISEMENT)
>+ (combined->icmp6.icmp6_type != NDISC_NEIGHBOUR_SOLICITATION &&
>+ combined->icmp6.icmp6_type != NDISC_NEIGHBOUR_ADVERTISEMENT))
> goto out;
>
> saddr = &combined->ip6.saddr;
>@@ -3291,7 +3292,7 @@ static int bond_na_rcv(const struct sk_buff *skb, struct bonding *bond,
> else if (curr_active_slave &&
> time_after(slave_last_rx(bond, curr_active_slave),
> curr_active_slave->last_link_up))
>- bond_validate_na(bond, slave, saddr, daddr);
>+ bond_validate_na(bond, slave, daddr, saddr);
> else if (curr_arp_slave &&
> bond_time_in_interval(bond, slave_last_tx(curr_arp_slave), 1))
> bond_validate_na(bond, slave, saddr, daddr);
>diff --git a/include/net/bonding.h b/include/net/bonding.h
>index ea36ab7f9e72..c3843239517d 100644
>--- a/include/net/bonding.h
>+++ b/include/net/bonding.h
>@@ -761,13 +761,17 @@ static inline int bond_get_targets_ip(__be32 *targets, __be32 ip)
> #if IS_ENABLED(CONFIG_IPV6)
> static inline int bond_get_targets_ip6(struct in6_addr *targets, struct in6_addr *ip)
> {
>+ struct in6_addr mcaddr;
> int i;
>
>- for (i = 0; i < BOND_MAX_NS_TARGETS; i++)
>- if (ipv6_addr_equal(&targets[i], ip))
>+ for (i = 0; i < BOND_MAX_NS_TARGETS; i++) {
>+ addrconf_addr_solict_mult(&targets[i], &mcaddr);
>+ if ((ipv6_addr_equal(&targets[i], ip)) ||
>+ (ipv6_addr_equal(&mcaddr, ip)))
> return i;
> else if (ipv6_addr_any(&targets[i]))
> break;
>+ }
>
> return -1;
> }
>--
>2.38.1
>
next prev parent reply other threads:[~2023-03-31 4:02 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-29 10:18 [PATCH net 0/3] bonding: fix ns validation on backup slaves Hangbin Liu
2023-03-29 10:18 ` [PATCH net 1/3] " Hangbin Liu
2023-03-30 16:46 ` Jonathan Toppins
2023-03-31 4:02 ` Jay Vosburgh [this message]
2023-03-29 10:18 ` [PATCH net 2/3] selftests: bonding: re-format bond option tests Hangbin Liu
2023-03-30 16:45 ` Jonathan Toppins
2023-03-31 2:31 ` Hangbin Liu
2023-04-04 2:28 ` Hangbin Liu
2023-04-04 16:34 ` Jonathan Toppins
2023-04-05 9:57 ` Hangbin Liu
2023-04-06 0:23 ` Jonathan Toppins
2023-03-31 3:55 ` Jay Vosburgh
2023-03-29 10:18 ` [PATCH net 3/3] selftests: bonding: add arp validate test Hangbin Liu
2023-03-30 16:48 ` Jonathan Toppins
2023-03-31 4:00 ` Jay Vosburgh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=21417.1680235361@famine \
--to=jay.vosburgh@canonical.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=jtoppins@redhat.com \
--cc=kuba@kernel.org \
--cc=liali@redhat.com \
--cc=liuhangbin@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.