Signed-off-by: Lin Ma <lma@suse.com>
---
tools/virsh-util.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
tools/virsh-util.h | 3 +++
2 files changed, 63 insertions(+)
diff --git a/tools/virsh-util.c b/tools/virsh-util.c
index 44be3ad64b..686f9aef98 100644
--- a/tools/virsh-util.c
+++ b/tools/virsh-util.c
@@ -285,3 +285,63 @@ virshDomainGetXML(vshControl *ctl,
return ret;
}
+
+
+const char *
+virshDomainEventGetName(int event)
+{
+ switch ((int)event) {
+ case VIR_DOMAIN_EVENT_ID_LIFECYCLE:
+ return "lifecycle";
+ case VIR_DOMAIN_EVENT_ID_REBOOT:
+ return "reboot";
+ case VIR_DOMAIN_EVENT_ID_RTC_CHANGE:
+ return "rtc-change";
+ case VIR_DOMAIN_EVENT_ID_WATCHDOG:
+ return "watchdog";
+ case VIR_DOMAIN_EVENT_ID_IO_ERROR:
+ return "io-error";
+ case VIR_DOMAIN_EVENT_ID_GRAPHICS:
+ return "graphics";
+ case VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON:
+ return "io-error-reason";
+ case VIR_DOMAIN_EVENT_ID_CONTROL_ERROR:
+ return "control-error";
+ case VIR_DOMAIN_EVENT_ID_BLOCK_JOB:
+ return "block-job";
+ case VIR_DOMAIN_EVENT_ID_DISK_CHANGE:
+ return "disk-change";
+ case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE:
+ return "tray-change";
+ case VIR_DOMAIN_EVENT_ID_PMWAKEUP:
+ return "pm-wakeup";
+ case VIR_DOMAIN_EVENT_ID_PMSUSPEND:
+ return "pm-suspend";
+ case VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE:
+ return "balloon-change";
+ case VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK:
+ return "pm-suspend-disk";
+ case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED:
+ return "device-removed";
+ case VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2:
+ return "block-job-2";
+ case VIR_DOMAIN_EVENT_ID_TUNABLE:
+ return "tunable";
+ case VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE:
+ return "agent-lifecycle";
+ case VIR_DOMAIN_EVENT_ID_DEVICE_ADDED:
+ return "device-added";
+ case VIR_DOMAIN_EVENT_ID_MIGRATION_ITERATION:
+ return "migration-iteration";
+ case VIR_DOMAIN_EVENT_ID_JOB_COMPLETED:
+ return "job-completed";
+ case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVAL_FAILED:
+ return "device-removal-failed";
+ case VIR_DOMAIN_EVENT_ID_METADATA_CHANGE:
+ return "metadata-change";
+ case VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD:
+ return "block-threshold";
+ default:
+ return NULL;
+ }
+}
diff --git a/tools/virsh-util.h b/tools/virsh-util.h
index 9a0af3513d..02c4ace6bf 100644
--- a/tools/virsh-util.h
+++ b/tools/virsh-util.h
@@ -104,4 +104,7 @@ virshDomainGetXML(vshControl *ctl,
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4)
ATTRIBUTE_NONNULL(5) ATTRIBUTE_RETURN_CHECK;
+const char *
+virshDomainEventGetName(int event);
+
#endif /* VIRSH_UTIL_H */
--
2.15.1
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On 05/08/2018 04:20 PM, Lin Ma wrote: > Signed-off-by: Lin Ma <lma@suse.com> > --- > tools/virsh-util.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > tools/virsh-util.h | 3 +++ > 2 files changed, 63 insertions(+) > > diff --git a/tools/virsh-util.c b/tools/virsh-util.c > index 44be3ad64b..686f9aef98 100644 > --- a/tools/virsh-util.c > +++ b/tools/virsh-util.c > @@ -285,3 +285,63 @@ virshDomainGetXML(vshControl *ctl, > > return ret; > } > + > + > +const char * > +virshDomainEventGetName(int event) > +{ > + switch ((int)event) { > + case VIR_DOMAIN_EVENT_ID_LIFECYCLE: > + return "lifecycle"; > + case VIR_DOMAIN_EVENT_ID_REBOOT: > + return "reboot"; > + case VIR_DOMAIN_EVENT_ID_RTC_CHANGE: > + return "rtc-change"; > + case VIR_DOMAIN_EVENT_ID_WATCHDOG: > + return "watchdog"; > + case VIR_DOMAIN_EVENT_ID_IO_ERROR: > + return "io-error"; > + case VIR_DOMAIN_EVENT_ID_GRAPHICS: > + return "graphics"; > + case VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON: > + return "io-error-reason"; > + case VIR_DOMAIN_EVENT_ID_CONTROL_ERROR: > + return "control-error"; > + case VIR_DOMAIN_EVENT_ID_BLOCK_JOB: > + return "block-job"; > + case VIR_DOMAIN_EVENT_ID_DISK_CHANGE: > + return "disk-change"; > + case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE: > + return "tray-change"; > + case VIR_DOMAIN_EVENT_ID_PMWAKEUP: > + return "pm-wakeup"; > + case VIR_DOMAIN_EVENT_ID_PMSUSPEND: > + return "pm-suspend"; > + case VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE: > + return "balloon-change"; > + case VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK: > + return "pm-suspend-disk"; > + case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED: > + return "device-removed"; > + case VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2: > + return "block-job-2"; > + case VIR_DOMAIN_EVENT_ID_TUNABLE: > + return "tunable"; > + case VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE: > + return "agent-lifecycle"; > + case VIR_DOMAIN_EVENT_ID_DEVICE_ADDED: > + return "device-added"; > + case VIR_DOMAIN_EVENT_ID_MIGRATION_ITERATION: > + return "migration-iteration"; > + case VIR_DOMAIN_EVENT_ID_JOB_COMPLETED: > + return "job-completed"; > + case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVAL_FAILED: > + return "device-removal-failed"; > + case VIR_DOMAIN_EVENT_ID_METADATA_CHANGE: > + return "metadata-change"; > + case VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD: > + return "block-threshold"; > + default: > + return NULL; > + } Or simply: const char * virshDomainEventGetName(int event) { if (event < 0 || event >= VIR_DOMAIN_EVENT_ID_LAST) return NULL; return vshEventCallbacks[event].name; } I really want to avoid having two places defining strings (one for command parse code, the other for completions). Michal -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On 05/10/2018 05:17 PM, Michal Privoznik wrote: > On 05/08/2018 04:20 PM, Lin Ma wrote: >> Signed-off-by: Lin Ma <lma@suse.com> >> --- >> tools/virsh-util.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> tools/virsh-util.h | 3 +++ >> 2 files changed, 63 insertions(+) >> >> diff --git a/tools/virsh-util.c b/tools/virsh-util.c >> index 44be3ad64b..686f9aef98 100644 >> --- a/tools/virsh-util.c >> +++ b/tools/virsh-util.c >> @@ -285,3 +285,63 @@ virshDomainGetXML(vshControl *ctl, >> >> return ret; >> } >> + >> + >> +const char * >> +virshDomainEventGetName(int event) >> +{ >> + switch ((int)event) { >> + case VIR_DOMAIN_EVENT_ID_LIFECYCLE: >> + return "lifecycle"; >> + case VIR_DOMAIN_EVENT_ID_REBOOT: >> + return "reboot"; >> + case VIR_DOMAIN_EVENT_ID_RTC_CHANGE: >> + return "rtc-change"; >> + case VIR_DOMAIN_EVENT_ID_WATCHDOG: >> + return "watchdog"; >> + case VIR_DOMAIN_EVENT_ID_IO_ERROR: >> + return "io-error"; >> + case VIR_DOMAIN_EVENT_ID_GRAPHICS: >> + return "graphics"; >> + case VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON: >> + return "io-error-reason"; >> + case VIR_DOMAIN_EVENT_ID_CONTROL_ERROR: >> + return "control-error"; >> + case VIR_DOMAIN_EVENT_ID_BLOCK_JOB: >> + return "block-job"; >> + case VIR_DOMAIN_EVENT_ID_DISK_CHANGE: >> + return "disk-change"; >> + case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE: >> + return "tray-change"; >> + case VIR_DOMAIN_EVENT_ID_PMWAKEUP: >> + return "pm-wakeup"; >> + case VIR_DOMAIN_EVENT_ID_PMSUSPEND: >> + return "pm-suspend"; >> + case VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE: >> + return "balloon-change"; >> + case VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK: >> + return "pm-suspend-disk"; >> + case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED: >> + return "device-removed"; >> + case VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2: >> + return "block-job-2"; >> + case VIR_DOMAIN_EVENT_ID_TUNABLE: >> + return "tunable"; >> + case VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE: >> + return "agent-lifecycle"; >> + case VIR_DOMAIN_EVENT_ID_DEVICE_ADDED: >> + return "device-added"; >> + case VIR_DOMAIN_EVENT_ID_MIGRATION_ITERATION: >> + return "migration-iteration"; >> + case VIR_DOMAIN_EVENT_ID_JOB_COMPLETED: >> + return "job-completed"; >> + case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVAL_FAILED: >> + return "device-removal-failed"; >> + case VIR_DOMAIN_EVENT_ID_METADATA_CHANGE: >> + return "metadata-change"; >> + case VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD: >> + return "block-threshold"; >> + default: >> + return NULL; >> + } > > Or simply: > > const char * > virshDomainEventGetName(int event) > { > if (event < 0 || event >= VIR_DOMAIN_EVENT_ID_LAST) > return NULL; > > return vshEventCallbacks[event].name; > } > > > I really want to avoid having two places defining strings (one for > command parse code, the other for completions). For using vshEventCallbacks in tools/virsh-util.c, It seems that we need to move lots of code which related to vshEventCallbacks to virsh-util.h or somewhere else. Say those event callback functions and corresponding structures and macros. I'm not sure what is the reasonable way to make it happen, May I have your idea? (btw, there are other 'vshEventCallbacks' array which defining in virsh-secret.c, virsh-pool.c and virsh-nodedev.c.we only move the vshEventCallbacks and related data structures from virsh-domain.c?) Thanks, Lin -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On 05/11/2018 10:22 AM, Lin Ma wrote: > > > On 05/10/2018 05:17 PM, Michal Privoznik wrote: >> On 05/08/2018 04:20 PM, Lin Ma wrote: >>> Signed-off-by: Lin Ma <lma@suse.com> >>> --- >>> tools/virsh-util.c | 60 >>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>> tools/virsh-util.h | 3 +++ >>> 2 files changed, 63 insertions(+) >>> >>> diff --git a/tools/virsh-util.c b/tools/virsh-util.c >>> index 44be3ad64b..686f9aef98 100644 >>> --- a/tools/virsh-util.c >>> +++ b/tools/virsh-util.c >>> @@ -285,3 +285,63 @@ virshDomainGetXML(vshControl *ctl, >>> return ret; >>> } >>> + >>> + >>> +const char * >>> +virshDomainEventGetName(int event) >>> +{ >>> + switch ((int)event) { >>> + case VIR_DOMAIN_EVENT_ID_LIFECYCLE: >>> + return "lifecycle"; >>> + case VIR_DOMAIN_EVENT_ID_REBOOT: >>> + return "reboot"; >>> + case VIR_DOMAIN_EVENT_ID_RTC_CHANGE: >>> + return "rtc-change"; >>> + case VIR_DOMAIN_EVENT_ID_WATCHDOG: >>> + return "watchdog"; >>> + case VIR_DOMAIN_EVENT_ID_IO_ERROR: >>> + return "io-error"; >>> + case VIR_DOMAIN_EVENT_ID_GRAPHICS: >>> + return "graphics"; >>> + case VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON: >>> + return "io-error-reason"; >>> + case VIR_DOMAIN_EVENT_ID_CONTROL_ERROR: >>> + return "control-error"; >>> + case VIR_DOMAIN_EVENT_ID_BLOCK_JOB: >>> + return "block-job"; >>> + case VIR_DOMAIN_EVENT_ID_DISK_CHANGE: >>> + return "disk-change"; >>> + case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE: >>> + return "tray-change"; >>> + case VIR_DOMAIN_EVENT_ID_PMWAKEUP: >>> + return "pm-wakeup"; >>> + case VIR_DOMAIN_EVENT_ID_PMSUSPEND: >>> + return "pm-suspend"; >>> + case VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE: >>> + return "balloon-change"; >>> + case VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK: >>> + return "pm-suspend-disk"; >>> + case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED: >>> + return "device-removed"; >>> + case VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2: >>> + return "block-job-2"; >>> + case VIR_DOMAIN_EVENT_ID_TUNABLE: >>> + return "tunable"; >>> + case VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE: >>> + return "agent-lifecycle"; >>> + case VIR_DOMAIN_EVENT_ID_DEVICE_ADDED: >>> + return "device-added"; >>> + case VIR_DOMAIN_EVENT_ID_MIGRATION_ITERATION: >>> + return "migration-iteration"; >>> + case VIR_DOMAIN_EVENT_ID_JOB_COMPLETED: >>> + return "job-completed"; >>> + case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVAL_FAILED: >>> + return "device-removal-failed"; >>> + case VIR_DOMAIN_EVENT_ID_METADATA_CHANGE: >>> + return "metadata-change"; >>> + case VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD: >>> + return "block-threshold"; >>> + default: >>> + return NULL; >>> + } >> >> Or simply: >> >> const char * >> virshDomainEventGetName(int event) >> { >> if (event < 0 || event >= VIR_DOMAIN_EVENT_ID_LAST) >> return NULL; >> >> return vshEventCallbacks[event].name; >> } >> >> >> I really want to avoid having two places defining strings (one for >> command parse code, the other for completions). > For using vshEventCallbacks in tools/virsh-util.c, It seems that we need to > move lots of code which related to vshEventCallbacks to virsh-util.h or > somewhere else. > Say those event callback functions and corresponding structures and macros. > > I'm not sure what is the reasonable way to make it happen, May I have > your idea? Well, the virshDomainEventGetName() function doesn't necessarily have to live in virsh-utils.c. And now that I'm looking into other sources, maybe this function can be renamed to virshDomainEventToString()? To match the other functions like virshSecretEventToString() for instance. > > > (btw, there are other 'vshEventCallbacks' array which defining in > virsh-secret.c, > virsh-pool.c and virsh-nodedev.c.we only move the vshEventCallbacks and > related > data structures from virsh-domain.c?) We can have virshSecretEventToString(), virshPoolEventToString(), ... exposed and used in completers. Michal -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On 05/11/2018 05:03 PM, Michal Privoznik wrote: > On 05/11/2018 10:22 AM, Lin Ma wrote: >> >> On 05/10/2018 05:17 PM, Michal Privoznik wrote: >>> On 05/08/2018 04:20 PM, Lin Ma wrote: >>>> Signed-off-by: Lin Ma <lma@suse.com> >>>> --- >>>> tools/virsh-util.c | 60 >>>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>>> tools/virsh-util.h | 3 +++ >>>> 2 files changed, 63 insertions(+) >>>> >>>> diff --git a/tools/virsh-util.c b/tools/virsh-util.c >>>> index 44be3ad64b..686f9aef98 100644 >>>> --- a/tools/virsh-util.c >>>> +++ b/tools/virsh-util.c >>>> @@ -285,3 +285,63 @@ virshDomainGetXML(vshControl *ctl, >>>> return ret; >>>> } >>>> + >>>> + >>>> +const char * >>>> +virshDomainEventGetName(int event) >>>> +{ >>>> + switch ((int)event) { >>>> + case VIR_DOMAIN_EVENT_ID_LIFECYCLE: >>>> + return "lifecycle"; >>>> + case VIR_DOMAIN_EVENT_ID_REBOOT: >>>> + return "reboot"; >>>> + case VIR_DOMAIN_EVENT_ID_RTC_CHANGE: >>>> + return "rtc-change"; >>>> + case VIR_DOMAIN_EVENT_ID_WATCHDOG: >>>> + return "watchdog"; >>>> + case VIR_DOMAIN_EVENT_ID_IO_ERROR: >>>> + return "io-error"; >>>> + case VIR_DOMAIN_EVENT_ID_GRAPHICS: >>>> + return "graphics"; >>>> + case VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON: >>>> + return "io-error-reason"; >>>> + case VIR_DOMAIN_EVENT_ID_CONTROL_ERROR: >>>> + return "control-error"; >>>> + case VIR_DOMAIN_EVENT_ID_BLOCK_JOB: >>>> + return "block-job"; >>>> + case VIR_DOMAIN_EVENT_ID_DISK_CHANGE: >>>> + return "disk-change"; >>>> + case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE: >>>> + return "tray-change"; >>>> + case VIR_DOMAIN_EVENT_ID_PMWAKEUP: >>>> + return "pm-wakeup"; >>>> + case VIR_DOMAIN_EVENT_ID_PMSUSPEND: >>>> + return "pm-suspend"; >>>> + case VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE: >>>> + return "balloon-change"; >>>> + case VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK: >>>> + return "pm-suspend-disk"; >>>> + case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED: >>>> + return "device-removed"; >>>> + case VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2: >>>> + return "block-job-2"; >>>> + case VIR_DOMAIN_EVENT_ID_TUNABLE: >>>> + return "tunable"; >>>> + case VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE: >>>> + return "agent-lifecycle"; >>>> + case VIR_DOMAIN_EVENT_ID_DEVICE_ADDED: >>>> + return "device-added"; >>>> + case VIR_DOMAIN_EVENT_ID_MIGRATION_ITERATION: >>>> + return "migration-iteration"; >>>> + case VIR_DOMAIN_EVENT_ID_JOB_COMPLETED: >>>> + return "job-completed"; >>>> + case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVAL_FAILED: >>>> + return "device-removal-failed"; >>>> + case VIR_DOMAIN_EVENT_ID_METADATA_CHANGE: >>>> + return "metadata-change"; >>>> + case VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD: >>>> + return "block-threshold"; >>>> + default: >>>> + return NULL; >>>> + } >>> Or simply: >>> >>> const char * >>> virshDomainEventGetName(int event) >>> { >>> if (event < 0 || event >= VIR_DOMAIN_EVENT_ID_LAST) >>> return NULL; >>> >>> return vshEventCallbacks[event].name; >>> } >>> >>> >>> I really want to avoid having two places defining strings (one for >>> command parse code, the other for completions). >> For using vshEventCallbacks in tools/virsh-util.c, It seems that we need to >> move lots of code which related to vshEventCallbacks to virsh-util.h or >> somewhere else. >> Say those event callback functions and corresponding structures and macros. >> >> I'm not sure what is the reasonable way to make it happen, May I have >> your idea? > Well, the virshDomainEventGetName() function doesn't necessarily have to > live in virsh-utils.c. And now that I'm looking into other sources, > maybe this function can be renamed to virshDomainEventToString()? To > match the other functions like virshSecretEventToString() for instance. > > >> >> (btw, there are other 'vshEventCallbacks' array which defining in >> virsh-secret.c, >> virsh-pool.c and virsh-nodedev.c.we only move the vshEventCallbacks and >> related >> data structures from virsh-domain.c?) > We can have virshSecretEventToString(), virshPoolEventToString(), ... > exposed and used in completers. The function names about *EventToString are already occupied, So I'd like to use the original name virshDomainEventGetName for the time being. Because the function virshDomainEventGetName only be used for virsh, I think I don't need to export it. I prefer to put the implmentation of function virshDomainEventGetName into virsh-domain.c and declare it in virsh-domain.h, Then virsh-completer.c includes virsh-domain.h for using virshDomainEventGetName in next patch, What do you think? Thanks, Lin -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On 05/15/2018 11:32 AM, Lin Ma wrote: > > >>> (btw, there are other 'vshEventCallbacks' array which defining in >>> virsh-secret.c, >>> virsh-pool.c and virsh-nodedev.c.we only move the vshEventCallbacks and >>> related >>> data structures from virsh-domain.c?) >> We can have virshSecretEventToString(), virshPoolEventToString(), ... >> exposed and used in completers. > The function names about *EventToString are already occupied, Oh, we can't just export them. Not because of they already exist but because they don't really do what we expect them to do. At least virshSecretEventToString() doesn't. Anyway, I'm including a patch that does what I'm trying to say. Also, virshSecretEventToString() should be renamed to virshSecretLifecycleEventToString(). Michal -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2025 Red Hat, Inc.