net/announce: Add HMP optional ID

Add the optional ID to the HMP command.

e.g.
   # start an announce for a long time on eth1
   migrate_set_parameter announce-rounds 1000
   announce_self "eth1" e1

   # start an announce on eth2
   announce_self "eth2" e2

   # Change e1 to be announcing on eth1 and eth3
   announce_self "eth1,eth3" e1

   # Cancel e1
   migrate_set_parameter announce-rounds 0
   announce_self "" e1

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
Dr. David Alan Gilbert 2019-06-20 19:47:05 +01:00 committed by Jason Wang
parent 944458b659
commit c6644548c7
2 changed files with 7 additions and 3 deletions

View file

@ -955,8 +955,8 @@ ETEXI
{ {
.name = "announce_self", .name = "announce_self",
.args_type = "interfaces:s?", .args_type = "interfaces:s?,id:s?",
.params = "[interfaces]", .params = "[interfaces] [id]",
.help = "Trigger GARP/RARP announcements", .help = "Trigger GARP/RARP announcements",
.cmd = hmp_announce_self, .cmd = hmp_announce_self,
}, },
@ -968,7 +968,8 @@ Trigger a round of GARP/RARP broadcasts; this is useful for explicitly updating
network infrastructure after a reconfiguration or some forms of migration. network infrastructure after a reconfiguration or some forms of migration.
The timings of the round are set by the migration announce parameters. The timings of the round are set by the migration announce parameters.
An optional comma separated @var{interfaces} list restricts the announce to the An optional comma separated @var{interfaces} list restricts the announce to the
named set of interfaces. named set of interfaces. An optional @var{id} can be used to start a separate announce
timer and to change the parameters of it later.
ETEXI ETEXI
{ {

View file

@ -1660,12 +1660,15 @@ void hmp_info_snapshots(Monitor *mon, const QDict *qdict)
void hmp_announce_self(Monitor *mon, const QDict *qdict) void hmp_announce_self(Monitor *mon, const QDict *qdict)
{ {
const char *interfaces_str = qdict_get_try_str(qdict, "interfaces"); const char *interfaces_str = qdict_get_try_str(qdict, "interfaces");
const char *id = qdict_get_try_str(qdict, "id");
AnnounceParameters *params = QAPI_CLONE(AnnounceParameters, AnnounceParameters *params = QAPI_CLONE(AnnounceParameters,
migrate_announce_params()); migrate_announce_params());
qapi_free_strList(params->interfaces); qapi_free_strList(params->interfaces);
params->interfaces = strList_from_comma_list(interfaces_str); params->interfaces = strList_from_comma_list(interfaces_str);
params->has_interfaces = params->interfaces != NULL; params->has_interfaces = params->interfaces != NULL;
params->id = g_strdup(id);
params->has_id = !!params->id;
qmp_announce_self(params, NULL); qmp_announce_self(params, NULL);
qapi_free_AnnounceParameters(params); qapi_free_AnnounceParameters(params);
} }