All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Wang, Xiao W" <xiao.w.wang@intel.com>
To: "thomas@monjalon.net" <thomas@monjalon.net>,
	Maxime Coquelin <maxime.coquelin@redhat.com>,
	"yliu@fridaylinux.org" <yliu@fridaylinux.org>
Cc: "Bie, Tiwei" <tiwei.bie@intel.com>, "dev@dpdk.org" <dev@dpdk.org>,
	"stephen@networkplumber.org" <stephen@networkplumber.org>
Subject: Re: [PATCH v7 3/3] net/virtio: support GUEST ANNOUNCE
Date: Tue, 9 Jan 2018 11:03:07 +0000	[thread overview]
Message-ID: <B7F2E978279D1D49A3034B7786DACF406F80A5C2@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <febade73-de32-dcd6-2f52-356689dff3a3@redhat.com>

> From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com]
> On 01/09/2018 03:26 PM, Xiao Wang wrote:
> > When live migration is done, for the backup VM, either the virtio
> > frontend or the vhost backend needs to send out gratuitous RARP packet
> > to announce its new network location.
> >
> > This patch enables VIRTIO_NET_F_GUEST_ANNOUNCE feature to support
> live
> > migration scenario where the vhost backend doesn't have the ability to
> > generate RARP packet.
> >
> > Brief introduction of the work flow:
> > 1. QEMU finishes live migration, pokes the backup VM with an interrupt.
> > 2. Virtio interrupt handler reads out the interrupt status value, and
> >     realizes it needs to send out RARP packet to announce its location.
> > 3. Pause device to stop worker thread touching the queues.
> > 4. Inject a RARP packet into a Tx Queue.
> > 5. Ack the interrupt via control queue.
> > 6. Resume device to continue packet processing.
> >
> > Signed-off-by: Xiao Wang <xiao.w.wang@intel.com>
> > ---
> >   drivers/net/virtio/virtio_ethdev.c | 95
> +++++++++++++++++++++++++++++++++++++-
> >   drivers/net/virtio/virtio_ethdev.h |  1 +
> >   drivers/net/virtio/virtqueue.h     | 11 +++++
> >   3 files changed, 105 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/net/virtio/virtio_ethdev.c
> b/drivers/net/virtio/virtio_ethdev.c
> > index e8ff1e449..9606df514 100644
> > --- a/drivers/net/virtio/virtio_ethdev.c
> > +++ b/drivers/net/virtio/virtio_ethdev.c
> > @@ -19,6 +19,8 @@
> >   #include <rte_pci.h>
> >   #include <rte_bus_pci.h>
> >   #include <rte_ether.h>
> > +#include <rte_ip.h>
> > +#include <rte_arp.h>
> >   #include <rte_common.h>
> >   #include <rte_errno.h>
> >   #include <rte_cpuflags.h>
> > @@ -78,6 +80,11 @@ static int virtio_dev_queue_stats_mapping_set(
> >   	uint8_t stat_idx,
> >   	uint8_t is_rx);
> >
> > +static int make_rarp_packet(struct rte_mbuf *rarp_mbuf,
> > +		const struct ether_addr *mac);
> > +static void virtio_notify_peers(struct rte_eth_dev *dev);
> > +static void virtio_ack_link_announce(struct rte_eth_dev *dev);
> > +
> >   /*
> >    * The set of PCI devices this driver supports
> >    */
> > @@ -1272,9 +1279,89 @@ virtio_inject_pkts(struct rte_eth_dev *dev, struct
> rte_mbuf **tx_pkts,
> >   	return ret;
> >   }
> >
> > +#define RARP_PKT_SIZE	64
> > +static int
> > +make_rarp_packet(struct rte_mbuf *rarp_mbuf, const struct ether_addr
> *mac)
> > +{
> > +	struct ether_hdr *eth_hdr;
> > +	struct arp_hdr *rarp;
> > +
> > +	if (rarp_mbuf->buf_len < RARP_PKT_SIZE) {
> > +		PMD_DRV_LOG(ERR, "mbuf size too small %u (< %d)",
> > +				rarp_mbuf->buf_len, RARP_PKT_SIZE);
> > +		return -1;
> > +	}
> > +
> > +	/* Ethernet header. */
> > +	eth_hdr = rte_pktmbuf_mtod(rarp_mbuf, struct ether_hdr *);
> > +	memset(eth_hdr->d_addr.addr_bytes, 0xff, ETHER_ADDR_LEN);
> > +	ether_addr_copy(mac, &eth_hdr->s_addr);
> > +	eth_hdr->ether_type = htons(ETHER_TYPE_RARP);
> > +
> > +	/* RARP header. */
> > +	rarp = (struct arp_hdr *)(eth_hdr + 1);
> > +	rarp->arp_hrd = htons(ARP_HRD_ETHER);
> > +	rarp->arp_pro = htons(ETHER_TYPE_IPv4);
> > +	rarp->arp_hln = ETHER_ADDR_LEN;
> > +	rarp->arp_pln = 4;
> > +	rarp->arp_op  = htons(ARP_OP_REVREQUEST);
> > +
> > +	ether_addr_copy(mac, &rarp->arp_data.arp_sha);
> > +	ether_addr_copy(mac, &rarp->arp_data.arp_tha);
> > +	memset(&rarp->arp_data.arp_sip, 0x00, 4);
> > +	memset(&rarp->arp_data.arp_tip, 0x00, 4);
> > +
> > +	rarp_mbuf->data_len = RARP_PKT_SIZE;
> > +	rarp_mbuf->pkt_len = RARP_PKT_SIZE;
> > +
> > +	return 0;
> > +}
> 
> Do you think it could make sense to have this function in a lib, as
> vhost user lib does exactly the same?
> 
> I don't know if it could be useful to others than vhost/virtio though.

Hi Thomas,

Do you think it's worth adding a new helper for ARP in lib/librte_net/?
Currently we just need a helper to build RARP packet (the above make_rarp_packet)

BRs,
Xiao


> 
> Thanks,
> Maxime

  parent reply	other threads:[~2018-01-09 11:03 UTC|newest]

Thread overview: 112+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-24 11:03 [PATCH 0/2] net/virtio: support GUEST ANNOUNCE Xiao Wang
2017-11-24 11:03 ` [PATCH 1/2] net/virtio: make control queue thread-safe Xiao Wang
2017-11-24  5:38   ` Tiwei Bie
2017-11-30  2:10     ` Wang, Xiao W
2017-11-30  2:59   ` Stephen Hemminger
2017-12-01  1:38     ` Wang, Xiao W
2017-12-04 14:02   ` [PATCH v2 0/2] net/virtio: support GUEST ANNOUNCE Xiao Wang
2017-12-04 14:02     ` [PATCH v2 1/2] net/virtio: make control queue thread-safe Xiao Wang
2017-12-04 14:02     ` [PATCH v2 2/2] net/virtio: support GUEST ANNOUNCE Xiao Wang
2017-12-04  8:46       ` Tiwei Bie
2018-01-03  1:37         ` Wang, Xiao W
2018-01-03  8:42         ` Wang, Xiao W
2017-12-06 11:23       ` Tiwei Bie
2017-12-06 14:22         ` Yuanhan Liu
2018-01-03  1:41         ` Wang, Xiao W
2018-01-04  7:41       ` [PATCH v3 0/2] " Xiao Wang
2018-01-04  7:41         ` [PATCH v3 1/2] net/virtio: make control queue thread-safe Xiao Wang
2018-01-04  7:41         ` [PATCH v3 2/2] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-04  2:51           ` Tiwei Bie
2018-01-04  7:11             ` Wang, Xiao W
2018-01-04 15:59           ` [PATCH v4 0/3] " Xiao Wang
2018-01-04 15:59             ` [PATCH v4 1/3] net/virtio: make control queue thread-safe Xiao Wang
2018-01-04 15:59             ` [PATCH v4 2/3] net/virtio: add packet injection method Xiao Wang
2018-01-04  7:56               ` Tiwei Bie
2018-01-05 16:46               ` [PATCH v5 0/3] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-05 16:46                 ` [PATCH v5 1/3] net/virtio: make control queue thread-safe Xiao Wang
2018-01-05 16:46                 ` [PATCH v5 2/3] net/virtio: add packet injection method Xiao Wang
2018-01-05 18:00                   ` Tiwei Bie
2018-01-07  2:37                     ` Wang, Xiao W
2018-01-05 16:46                 ` [PATCH v5 3/3] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-05 17:56                   ` Tiwei Bie
2018-01-07  2:29                     ` Wang, Xiao W
2018-01-07 12:05                   ` [PATCH v6 0/3] " Xiao Wang
2018-01-07 12:05                     ` [PATCH v6 1/3] net/virtio: make control queue thread-safe Xiao Wang
2018-01-08 13:06                       ` Yuanhan Liu
2018-01-08 15:25                         ` Wang, Xiao W
2018-01-07 12:05                     ` [PATCH v6 2/3] net/virtio: add packet injection method Xiao Wang
2018-01-08 13:03                       ` Yuanhan Liu
2018-01-08 15:11                         ` Wang, Xiao W
2018-01-09  2:55                           ` Wang, Xiao W
2018-01-09 14:26                       ` [PATCH v7 0/3] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09 14:26                         ` [PATCH v7 1/3] net/virtio: make control queue thread-safe Xiao Wang
2018-01-09 14:26                         ` [PATCH v7 2/3] net/virtio: add packet injection method Xiao Wang
2018-01-09 14:26                         ` [PATCH v7 3/3] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09  8:49                           ` Maxime Coquelin
2018-01-09 10:58                             ` Wang, Xiao W
2018-01-09 11:03                             ` Wang, Xiao W [this message]
2018-01-09 11:41                               ` Thomas Monjalon
2018-01-09 13:36                                 ` Yuanhan Liu
2018-01-09 13:26                           ` [PATCH v8 0/5] " Xiao Wang
2018-01-09 13:26                             ` [PATCH v8 1/5] net/virtio: make control queue thread-safe Xiao Wang
2018-01-09 13:26                             ` [PATCH v8 2/5] net/virtio: add packet injection method Xiao Wang
2018-01-09 13:26                             ` [PATCH v8 3/5] net: add a helper for making RARP packet Xiao Wang
2018-01-09 13:48                               ` Thomas Monjalon
2018-01-09 15:52                                 ` Wang, Xiao W
2018-01-09 16:09                               ` [PATCH v9 0/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09 16:09                                 ` [PATCH v9 1/5] net/virtio: make control queue thread-safe Xiao Wang
2018-01-09 16:09                                 ` [PATCH v9 2/5] net/virtio: add packet injection method Xiao Wang
2018-01-09 16:09                                 ` [PATCH v9 3/5] net: add a helper for making RARP packet Xiao Wang
2018-01-09 17:22                                   ` Thomas Monjalon
2018-01-10  1:23                                   ` [PATCH v10 0/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-10  1:23                                     ` [PATCH v10 1/5] net/virtio: make control queue thread-safe Xiao Wang
2018-01-10  1:23                                     ` [PATCH v10 2/5] net/virtio: add packet injection method Xiao Wang
2018-01-10  1:23                                     ` [PATCH v10 3/5] net: add a helper for making RARP packet Xiao Wang
2018-01-10 13:06                                       ` Yuanhan Liu
2018-01-10 14:10                                         ` Thomas Monjalon
2018-01-16  9:01                                       ` Olivier Matz
2018-01-16  9:43                                         ` Wang, Xiao W
2018-01-16 10:42                                           ` Olivier Matz
2018-01-16 11:03                                             ` Wang, Xiao W
2018-01-16 11:42                                             ` Wang, Xiao W
2018-01-16 21:40                                       ` [PATCH v11 0/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-16 21:40                                         ` [PATCH v11 1/5] net/virtio: make control queue thread-safe Xiao Wang
2018-01-16 21:41                                         ` [PATCH v11 2/5] net/virtio: add packet injection method Xiao Wang
2018-01-16 21:41                                         ` [PATCH v11 3/5] net: add a helper for making RARP packet Xiao Wang
2018-01-16 14:29                                           ` Olivier Matz
2018-01-16 21:41                                         ` [PATCH v11 4/5] vhost: use lib API to make " Xiao Wang
2018-01-16 21:41                                         ` [PATCH v11 5/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-19 17:33                                           ` Ferruh Yigit
2018-01-20 14:31                                             ` Ferruh Yigit
2018-01-21  1:31                                               ` Wang, Xiao W
2018-01-18  3:09                                         ` [PATCH v11 0/5] " Yuanhan Liu
2018-01-18  3:14                                           ` [PATCH 1/2] net: fixup RARP generation Yuanhan Liu
2018-01-18  3:14                                             ` [PATCH 2/2] net: fix build error Yuanhan Liu
2018-01-18  7:38                                               ` Thomas Monjalon
2018-01-18  7:45                                                 ` Wang, Xiao W
2018-01-18  8:03                                                   ` Yuanhan Liu
2018-01-18  8:36                                                     ` Thomas Monjalon
2018-01-18  8:48                                                       ` Yuanhan Liu
2018-01-18  8:38                                             ` [PATCH 1/2] net: fixup RARP generation Thomas Monjalon
2018-01-18  8:51                                               ` Yuanhan Liu
2018-01-18  8:53                                                 ` Wang, Xiao W
2018-01-19 16:04                                             ` Ferruh Yigit
2018-01-10  1:23                                     ` [PATCH v10 4/5] vhost: use lib API to make RARP packet Xiao Wang
2018-01-10  1:23                                     ` [PATCH v10 5/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09 16:09                                 ` [PATCH v9 4/5] vhost: use lib API to make RARP packet Xiao Wang
2018-01-09 16:09                                 ` [PATCH v9 5/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09 13:26                             ` [PATCH v8 4/5] vhost: use lib API to make RARP packet Xiao Wang
2018-01-09 13:26                             ` [PATCH v8 5/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09 14:38                             ` [PATCH v8 0/5] " Maxime Coquelin
2018-01-07 12:05                     ` [PATCH v6 3/3] " Xiao Wang
2018-01-05 20:27               ` [PATCH v4 2/3] net/virtio: add packet injection method Stephen Hemminger
2018-01-06  4:41                 ` Tiwei Bie
2018-01-04 15:59             ` [PATCH v4 3/3] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-04 11:13               ` Tiwei Bie
2017-11-24 11:04 ` [PATCH 2/2] " Xiao Wang
2017-11-24  6:04   ` Tiwei Bie
2017-11-30  2:37     ` Wang, Xiao W
2017-11-27 12:48   ` Yuanhan Liu
2017-11-30  2:41     ` Wang, Xiao W
2017-12-05 14:26       ` Yuanhan Liu
2018-01-03  1:43         ` Wang, Xiao W

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=B7F2E978279D1D49A3034B7786DACF406F80A5C2@SHSMSX101.ccr.corp.intel.com \
    --to=xiao.w.wang@intel.com \
    --cc=dev@dpdk.org \
    --cc=maxime.coquelin@redhat.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    --cc=tiwei.bie@intel.com \
    --cc=yliu@fridaylinux.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.