On Fri, Sep 10, 2021 at 01:49:18PM +0200, Michal Prívozník wrote:
On 9/9/21 6:13 PM, Pavel Hrdina wrote:
> Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
> ---
> docs/manpages/virsh.rst | 14 +++++++++
> tools/virsh-domain.c | 65 +++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 79 insertions(+)
>
> diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
> index 9561b3f59d..36fc94808d 100644
> --- a/docs/manpages/virsh.rst
> +++ b/docs/manpages/virsh.rst
> @@ -4515,6 +4515,20 @@ Output the IP address and port number for the VNC display. If
the information
> is not available the processes will provide an exit code of 1.
>
>
> +setappid
> +--------
> +
> +**Syntax:**
> +
> +::
> +
> + setappid domain appid
> +
> +Set the Fibre Channel appid string for domain that is used to create VMID to
> +tag the traffic. Accepts only printable characters and maximal length is 128
> +characters. To remove the appid from VM don't pass any appid.
> +
> +
> DEVICE COMMANDS
> ===============
>
> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> index e5bd1fdd75..07d9c7f954 100644
> --- a/tools/virsh-domain.c
> +++ b/tools/virsh-domain.c
> @@ -14070,6 +14070,65 @@ cmdDomDirtyRateCalc(vshControl *ctl, const vshCmd *cmd)
> }
>
>
> +/*
> + * "setappid" command
> + */
> +static const vshCmdInfo info_setappid[] = {
> + {.name = "help",
> + .data = N_("Set domain Fibre Channel appid")
> + },
> + {.name = "desc",
> + .data = N_("Set the Fibre Channel appid string for domain that is "
> + "used to create VMID to tag the traffic. Accepts only "
> + "printable characters and maximal length is 128 characters.
"
> + "To remove the appid from VM don't pass any appid.")
I wonder whether removal semantic with an extra flag, e.g. 'virsh
setappid --clear' wouldn't be better. If we ever add new option to this
function users will be forced to pass current APPID when using the new
option so that the APPID doesn't get cleared. For instance:
setappid --appid APPID --magic
vs
setappid --magic
Good point, thanks, using --clear will be probably better and easier for
users.
Pavel
> + },
> + {.name = NULL}
> +};
> +
> +static const vshCmdOptDef opts_setappid[] = {
> + VIRSH_COMMON_OPT_DOMAIN_FULL(0),
> + VIRSH_COMMON_OPT_DOMAIN_CONFIG,
> + VIRSH_COMMON_OPT_DOMAIN_LIVE,
> + VIRSH_COMMON_OPT_DOMAIN_CURRENT,
> + {.name = "appid",
> + .type = VSH_OT_STRING,
> + .help = N_("User provided appid string"),
> + },
> + {.name = NULL}
> +};
> +
> +static bool
> +cmdSetAppid(vshControl *ctl, const vshCmd *cmd)
> +{
> + g_autoptr(virshDomain) dom = NULL;
> + bool config = vshCommandOptBool(cmd, "config");
> + bool live = vshCommandOptBool(cmd, "live");
> + bool current = vshCommandOptBool(cmd, "current");
> + const char *appid = NULL;
> + unsigned int flags = VIR_DOMAIN_AFFECT_CURRENT;
> +
> + VSH_EXCLUSIVE_OPTIONS_VAR(current, live);
> + VSH_EXCLUSIVE_OPTIONS_VAR(current, config);
> +
> + if (config)
> + flags |= VIR_DOMAIN_AFFECT_CONFIG;
> + if (live)
> + flags |= VIR_DOMAIN_AFFECT_LIVE;
> +
> + if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
> + return false;
> +
> + if (vshCommandOptStringReq(ctl, cmd, "appid", &appid) < 0)
> + return false;
> +
> + if (virDomainSetFibreChannelAppid(dom, (char *)appid, flags) < 0)
Probably a leftover? This typecast shouldn't be needed.
> + return false;
> +
> + return true;
> +}
Michal