From: Jason Wang <jasowang@redhat.com>
To: qemu-devel@nongnu.org, peter.maydell@linaro.org
Cc: Jason Wang <jasowang@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>
Subject: [Qemu-devel] [PULL 08/17] net/announce: Allow optional list of interfaces
Date: Tue, 2 Jul 2019 10:31:20 +0800 [thread overview]
Message-ID: <1562034689-6539-9-git-send-email-jasowang@redhat.com> (raw)
In-Reply-To: <1562034689-6539-1-git-send-email-jasowang@redhat.com>
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Allow the caller to restrict the set of interfaces that announces are
sent on. The default is still to send on all interfaces.
e.g.
{ "execute": "announce-self", "arguments": { "initial": 50, "max": 550, "rounds": 5, "step": 50, "interfaces": ["vn2", "vn1"] } }
This doesn't affect the behaviour of migraiton announcments.
Note: There's still only one timer for the qmp command, so that
performing an 'announce-self' on one list of interfaces followed
by another 'announce-self' on another list will stop the announces
on the existing set.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
---
include/net/announce.h | 2 +-
net/announce.c | 39 ++++++++++++++++++++++++++++++++-------
net/trace-events | 2 +-
qapi/net.json | 11 ++++++++---
4 files changed, 42 insertions(+), 12 deletions(-)
diff --git a/include/net/announce.h b/include/net/announce.h
index 04a035f..7734704 100644
--- a/include/net/announce.h
+++ b/include/net/announce.h
@@ -22,7 +22,7 @@ struct AnnounceTimer {
/* Returns: update the timer to the next time point */
int64_t qemu_announce_timer_step(AnnounceTimer *timer);
-/* Delete the underlying timer */
+/* Delete the underlying timer and other data */
void qemu_announce_timer_del(AnnounceTimer *timer);
/*
diff --git a/net/announce.c b/net/announce.c
index 91e9a6e..1ce42b5 100644
--- a/net/announce.c
+++ b/net/announce.c
@@ -38,6 +38,8 @@ void qemu_announce_timer_del(AnnounceTimer *timer)
timer_free(timer->tm);
timer->tm = NULL;
}
+ qapi_free_strList(timer->params.interfaces);
+ timer->params.interfaces = NULL;
}
/*
@@ -96,24 +98,47 @@ static int announce_self_create(uint8_t *buf,
static void qemu_announce_self_iter(NICState *nic, void *opaque)
{
+ AnnounceTimer *timer = opaque;
uint8_t buf[60];
int len;
+ bool skip;
+
+ if (timer->params.has_interfaces) {
+ strList *entry = timer->params.interfaces;
+ /* Skip unless we find our name in the requested list */
+ skip = true;
+
+ while (entry) {
+ if (!strcmp(entry->value, nic->ncs->name)) {
+ /* Found us */
+ skip = false;
+ break;
+ }
+ entry = entry->next;
+ }
+ } else {
+ skip = false;
+ }
+
+ trace_qemu_announce_self_iter(nic->ncs->name,
+ qemu_ether_ntoa(&nic->conf->macaddr), skip);
- trace_qemu_announce_self_iter(qemu_ether_ntoa(&nic->conf->macaddr));
- len = announce_self_create(buf, nic->conf->macaddr.a);
+ if (!skip) {
+ len = announce_self_create(buf, nic->conf->macaddr.a);
- qemu_send_packet_raw(qemu_get_queue(nic), buf, len);
+ qemu_send_packet_raw(qemu_get_queue(nic), buf, len);
- /* if the NIC provides it's own announcement support, use it as well */
- if (nic->ncs->info->announce) {
- nic->ncs->info->announce(nic->ncs);
+ /* if the NIC provides it's own announcement support, use it as well */
+ if (nic->ncs->info->announce) {
+ nic->ncs->info->announce(nic->ncs);
+ }
}
}
static void qemu_announce_self_once(void *opaque)
{
AnnounceTimer *timer = (AnnounceTimer *)opaque;
- qemu_foreach_nic(qemu_announce_self_iter, NULL);
+ qemu_foreach_nic(qemu_announce_self_iter, timer);
if (--timer->round) {
qemu_announce_timer_step(timer);
diff --git a/net/trace-events b/net/trace-events
index a7937f3..875ef2a 100644
--- a/net/trace-events
+++ b/net/trace-events
@@ -1,7 +1,7 @@
# See docs/devel/tracing.txt for syntax documentation.
# announce.c
-qemu_announce_self_iter(const char *mac) "%s"
+qemu_announce_self_iter(const char *name, const char *mac, int skip) "%s:%s skip: %d"
# vhost-user.c
vhost_user_event(const char *chr, int event) "chr: %s got event: %d"
diff --git a/qapi/net.json b/qapi/net.json
index 5f7bff1..6f2cd4f 100644
--- a/qapi/net.json
+++ b/qapi/net.json
@@ -699,6 +699,9 @@
#
# @step: Delay increase (in ms) after each self-announcement attempt
#
+# @interfaces: An optional list of interface names, which restricts the
+# announcement to the listed interfaces. (Since 4.1)
+#
# Since: 4.0
##
@@ -706,7 +709,8 @@
'data': { 'initial': 'int',
'max': 'int',
'rounds': 'int',
- 'step': 'int' } }
+ 'step': 'int',
+ '*interfaces': ['str'] } }
##
# @announce-self:
@@ -718,9 +722,10 @@
#
# Example:
#
-# -> { "execute": "announce-self"
+# -> { "execute": "announce-self",
# "arguments": {
-# "initial": 50, "max": 550, "rounds": 10, "step": 50 } }
+# "initial": 50, "max": 550, "rounds": 10, "step": 50,
+# "interfaces": ["vn2", "vn3"] } }
# <- { "return": {} }
#
# Since: 4.0
--
2.5.0
next prev parent reply other threads:[~2019-07-02 3:48 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-02 2:31 [Qemu-devel] [PULL 00/17] Net patches Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 01/17] MAINTAINERS: Add qemu-bridge-helper.c to "Network device backends" Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 02/17] qemu-bridge-helper: Document known shortcomings Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 03/17] ftgmac100: do not link to netdev Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 04/17] net: fix assertion failure when ipv6-prefixlen is not a number Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 05/17] net: avoid using variable length array in net_client_init() Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 06/17] net: use g_strsplit() for parsing host address and port Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 07/17] net: remove unused get_str_sep() function Jason Wang
2019-07-02 2:31 ` Jason Wang [this message]
2019-07-02 2:31 ` [Qemu-devel] [PULL 09/17] net/announce: Add HMP optional interface list Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 10/17] net/announce: Add optional ID Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 11/17] net/announce: Add HMP " Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 12/17] net/announce: Expand test for stopping self announce Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 13/17] COLO-compare: Add new parameter to communicate with remote colo-frame Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 14/17] COLO-compare: Add remote notification chardev handler frame Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 15/17] COLO-compare: Make the compare_chr_send() can send notification message Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 16/17] COLO-compare: Add colo-compare remote notify support Jason Wang
2019-07-02 18:51 ` Peter Maydell
2019-07-03 1:08 ` Zhang, Chen
2019-07-03 1:20 ` Zhang, Chen
2019-07-02 2:31 ` [Qemu-devel] [PULL 17/17] migration/colo.c: Add missed filter notify for Xen COLO Jason Wang
2019-07-02 16:40 ` [Qemu-devel] [PULL 00/17] Net patches Peter Maydell
2019-07-03 4:03 ` Jason Wang
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=1562034689-6539-9-git-send-email-jasowang@redhat.com \
--to=jasowang@redhat.com \
--cc=dgilbert@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).