From: Eric Dumazet <eric.dumazet@gmail.com>
To: Jay Vosburgh <fubar@us.ibm.com>
Cc: netdev@vger.kernel.org, David Miller <davem@davemloft.net>,
Andy Gospodarek <andy@greyhouse.net>
Subject: Re: [PATCH 3/3] bonding: send ARP requests on interfaces other than the primary for tlb/alb
Date: Wed, 30 Sep 2009 07:20:23 +0200 [thread overview]
Message-ID: <4AC2EA97.5010809@gmail.com> (raw)
In-Reply-To: <1254269731-7341-4-git-send-email-fubar@us.ibm.com>
Jay Vosburgh a écrit :
> From: Andy Gospodarek <andy@greyhouse.net>
>
> This patch sends ARP request on the correct destination output interface
> rather than always sending them on the primary interface. I've also
> added some bits to make sure that the source and destination address in
> the ARP header are correct since simply changing the source MAC and
> output interface will not be that helpful.
>
> Signed-off-by: Andy Gospodarek <andy@greyhouse.net>
> Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
>
> ---
> drivers/net/bonding/bond_alb.c | 45 ++++++++++++++++++---------------------
> 1 files changed, 21 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
> index 5cd0400..9148c75 100644
> --- a/drivers/net/bonding/bond_alb.c
> +++ b/drivers/net/bonding/bond_alb.c
> @@ -726,35 +726,32 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)
> struct arp_pkt *arp = arp_pkt(skb);
> struct slave *tx_slave = NULL;
>
> - if (arp->op_code == htons(ARPOP_REPLY)) {
> - /* the arp must be sent on the selected
> - * rx channel
> - */
> - tx_slave = rlb_choose_channel(skb, bond);
> - if (tx_slave) {
> - memcpy(arp->mac_src,tx_slave->dev->dev_addr, ETH_ALEN);
> - }
> - pr_debug("Server sent ARP Reply packet\n");
> - } else if (arp->op_code == htons(ARPOP_REQUEST)) {
> - /* Create an entry in the rx_hashtbl for this client as a
> - * place holder.
> - * When the arp reply is received the entry will be updated
> - * with the correct unicast address of the client.
> - */
> - rlb_choose_channel(skb, bond);
> + /* Choose an output channel for the ARP frame */
> + tx_slave = rlb_choose_channel(skb, bond);
>
> - /* The ARP relpy packets must be delayed so that
> - * they can cancel out the influence of the ARP request.
> - */
COmments should have the following form :
/*
* This is a fine comment
*/
> + /* If a valid interface is returned, make sure the sender and target MAC
> + * addresses are correct based on the interface that will be transmitting
> + * the frame. */
> + if (tx_slave) {
> + /* If sender mac is the bond's address, rewrite */
> + if (!compare_ether_addr_64bits(arp->mac_src,bond->dev->dev_addr))
> + memcpy(arp->mac_src,tx_slave->dev->dev_addr,bond->dev->addr_len);
Hmm, you use compare_ether_addr_64bits(), implying a fix ETH_ALEN (6 bytes) address, then
you memcpy( ..., ..., bond->dev->addr_len);
Why not use ETH_ALEN to help compiler ?
Also add a space after a comma
> +
> + /* If target mac is the bond's address, rewrite */
> + if (!compare_ether_addr_64bits(arp->mac_dst,bond->dev->dev_addr))
> + memcpy(arp->mac_dst,tx_slave->dev->dev_addr,bond->dev->addr_len);
> +
> + } else if (arp->op_code == htons(ARPOP_REQUEST)) {
> + /* if tx_slave is NULL, the periodic ARP replies must
> + * be delayed so they can cancel out the influence of
> + * the ARP request. */
> bond->alb_info.rlb_update_delay_counter = RLB_UPDATE_DELAY;
>
> - /* arp requests are broadcast and are sent on the primary
> - * the arp request will collapse all clients on the subnet to
> + /* ARP requests are broadcast and are sent on the primary
> + * the ARP request will collapse all clients on the subnet to
> * the primary slave. We must register these clients to be
Could you reformulate this comment, it is not readable as is :
/*
* ARP requests are broadcast and are sent on the primary.
* The ARP request will collapse all clients on the subnet to
* the primary slave. We must register these clients to be
* updated with their assigned MAC.
*/
> - * updated with their assigned mac.
> - */
> + * updated with their assigned MAC. */
> rlb_req_update_subnet_clients(bond, arp->ip_src);
> - pr_debug("Server sent ARP Request packet\n");
> }
>
> return tx_slave;
next prev parent reply other threads:[~2009-09-30 5:20 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-30 0:15 [PATCH net-next-2.6 0/3] bonding: TLB / ALB changes Jay Vosburgh
2009-09-30 0:15 ` [PATCH 1/3] bonding: allow previous slave to be used when re-balancing traffic on tlb/alb interfaces Jay Vosburgh
2009-09-30 0:15 ` [PATCH 2/3] bonding: make sure tx and rx hash tables stay in sync when using alb mode Jay Vosburgh
2009-09-30 0:15 ` [PATCH 3/3] bonding: send ARP requests on interfaces other than the primary for tlb/alb Jay Vosburgh
2009-09-30 5:20 ` Eric Dumazet [this message]
2009-09-30 5:40 ` Jarek Poplawski
2009-09-30 5:49 ` Eric Dumazet
2009-09-30 7:27 ` David Miller
2009-09-30 7:49 ` Eric Dumazet
2009-10-03 1:13 ` [PATCH 1/3] bonding: allow previous slave to be used when re-balancing traffic on tlb/alb interfaces Jay Vosburgh
2009-10-05 10:43 ` David Miller
2009-10-06 16:27 ` Andy Gospodarek
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=4AC2EA97.5010809@gmail.com \
--to=eric.dumazet@gmail.com \
--cc=andy@greyhouse.net \
--cc=davem@davemloft.net \
--cc=fubar@us.ibm.com \
--cc=netdev@vger.kernel.org \
/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.